scylla-cdc-java
scylla-cdc-java copied to clipboard
com.datastax.driver.core.exceptions.SyntaxError: line 1:94 : syntax error...
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)
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
The problem happens when there are no regular columns in the schema (only primary key)
In such case the statement will look like UPDATE ks.tb SET WHERE pk1 = ? AND pk2 = ? AND ck1 = ? ...
This might be illegal.
Probably we should generate an insert when there are no regular columns.
If replicator would be interesting to anyone we can reopen.