scylla-cdc-java icon indicating copy to clipboard operation
scylla-cdc-java copied to clipboard

com.datastax.driver.core.exceptions.SyntaxError: line 1:94 : syntax error...

Open kbr- opened this issue 4 years ago • 4 comments
trafficstars

Create two clusters. On first do:

cqlsh> create keyspace ks1 with replication = {'class':'SimpleStrategy', 'replication_factor': 1};
cqlsh> create table ks1.table1 (pk int primary key) with cdc = {'enabled': true};

on second do the same but with cdc disabled (actually it doesn't matter).

Start replicator:

java -cp replicator.jar com.scylladb.cdc.replicator.Main -k ks1 -t table1 -s 127.0.0.10 -d 127.0.0.20 -cl one -m delta

(replicator.jar is the fat jar)

Result:

===== Using optimized driver!!! =====
===== Using optimized driver!!! =====
Master thread failed: line 1:94  : syntax error...

com.datastax.driver.core.exceptions.SyntaxError: line 1:94  : syntax error...

        at com.datastax.driver.core.exceptions.SyntaxError.copy(SyntaxError.java:58)
        at com.datastax.driver.core.exceptions.SyntaxError.copy(SyntaxError.java:23)
        at com.datastax.driver.core.DriverThrowables.propagateCause(DriverThrowables.java:35)
        at com.datastax.driver.core.AbstractSession.prepare(AbstractSession.java:97)
        at com.scylladb.cdc.replicator.operations.ExecutingPreparedStatementHandler.<init>(ExecutingPreparedStatementHandler.java:41)
        at com.scylladb.cdc.replicator.operations.update.PreparedUpdateOperationHandler.<init>(PreparedUpdateOperationHandler.java:64)
        at com.scylladb.cdc.replicator.ReplicatorConsumer.<init>(ReplicatorConsumer.java:54)
        at com.scylladb.cdc.replicator.Main.lambda$startReplicator$0(Main.java:55)
        at com.scylladb.cdc.lib.LocalTransport.configureWorkers(LocalTransport.java:79)
        at com.scylladb.cdc.model.master.Master.run(Master.java:88)
        at com.scylladb.cdc.lib.MasterThread.run(MasterThread.java:32)
Caused by: com.datastax.driver.core.exceptions.SyntaxError: line 1:94  : syntax error...

        at com.datastax.driver.core.Responses$Error.asException(Responses.java:177)
        at com.datastax.driver.core.SessionManager$4.apply(SessionManager.java:253)
        at com.datastax.driver.core.SessionManager$4.apply(SessionManager.java:218)
        at com.google.common.util.concurrent.Futures$AsyncChainingFuture.doTransform(Futures.java:1442)
        at com.google.common.util.concurrent.Futures$AsyncChainingFuture.doTransform(Futures.java:1433)
        at com.google.common.util.concurrent.Futures$AbstractChainingFuture.run(Futures.java:1408)
        at com.google.common.util.concurrent.Futures$2$1.run(Futures.java:1177)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
        at java.lang.Thread.run(Thread.java:748)

kbr- avatar Feb 17 '21 12:02 kbr-

Seems like a problem here https://github.com/scylladb/scylla-cdc-java/blob/c0d6e41c30269d681517a57b94e1d681c27e33f6/scylla-cdc-replicator/src/main/java/com/scylladb/cdc/replicator/operations/update/PreparedUpdateOperationHandler.java#L21

haaawk avatar Feb 17 '21 12:02 haaawk

The problem happens when there are no regular columns in the schema (only primary key)

kbr- avatar Feb 17 '21 12:02 kbr-

In such case the statement will look like UPDATE ks.tb SET WHERE pk1 = ? AND pk2 = ? AND ck1 = ? ... This might be illegal.

haaawk avatar Feb 17 '21 12:02 haaawk

Probably we should generate an insert when there are no regular columns.

haaawk avatar Feb 17 '21 12:02 haaawk

If replicator would be interesting to anyone we can reopen.

roydahan avatar Jun 13 '24 14:06 roydahan