-
Bug
-
Resolution: Done
-
Major
-
0.8.3.Final
-
None
We are using Debezium 0.8.3.Final and we are running into an UnsupportedOperationException.
Our latest database migration changes the primary key of a table.
Before
COLUMN_A, COLUMN_B, COLUMN_C
Primary key: (COLUMN_A, COLUMN_C)
After
COLUMN_A, COLUMN_B, COLUMN_D
Primary key: (COLUMN_A, COLUMN_D)
Exception
2018-11-19 19:43:39,455 ERROR || WorkerSourceTask{id=amfori-connector-0} Task threw an uncaught and unrecoverable exception [org.apache.kafka.connect.runtime.WorkerTask]
org.apache.kafka.connect.errors.ConnectException: An exception ocurred in the change event producer. This connector will be stopped.
at io.debezium.connector.base.ChangeEventQueue.throwProducerFailureIfPresent(ChangeEventQueue.java:168)
at io.debezium.connector.base.ChangeEventQueue.poll(ChangeEventQueue.java:149)
at io.debezium.connector.postgresql.PostgresConnectorTask.poll(PostgresConnectorTask.java:146)
at org.apache.kafka.connect.runtime.WorkerSourceTask.execute(WorkerSourceTask.java:186)
at org.apache.kafka.connect.runtime.WorkerTask.doRun(WorkerTask.java:170)
at org.apache.kafka.connect.runtime.WorkerTask.run(WorkerTask.java:214)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.UnsupportedOperationException
at java.util.Collections$UnmodifiableCollection$1.remove(Collections.java:1044)
at io.debezium.relational.TableEditorImpl.updatePrimaryKeys(TableEditorImpl.java:103)
at io.debezium.relational.TableEditorImpl.setColumns(TableEditorImpl.java:94)
at io.debezium.connector.postgresql.RecordsStreamProducer.tableFromFromMessage(RecordsStreamProducer.java:528)
at io.debezium.connector.postgresql.RecordsStreamProducer.columnValues(RecordsStreamProducer.java:425)
at io.debezium.connector.postgresql.RecordsStreamProducer.process(RecordsStreamProducer.java:246)
at io.debezium.connector.postgresql.RecordsStreamProducer.lambda$streamChanges$2(RecordsStreamProducer.java:128)
at io.debezium.connector.postgresql.connection.wal2json.NonStreamingWal2JsonMessageDecoder.processMessage(NonStreamingWal2JsonMessageDecoder.java:62)
at io.debezium.connector.postgresql.connection.PostgresReplicationConnection$1.deserializeMessages(PostgresReplicationConnection.java:218)
at io.debezium.connector.postgresql.connection.PostgresReplicationConnection$1.read(PostgresReplicationConnection.java:203)
at io.debezium.connector.postgresql.RecordsStreamProducer.streamChanges(RecordsStreamProducer.java:128)
at io.debezium.connector.postgresql.RecordsStreamProducer.lambda$start$1(RecordsStreamProducer.java:114)
... 5 more
Cause
The TableEditorImpl::updatePrimaryKeys method seems to be calling List::remove on the unmodifiable list provided by TableEditorImpl::primaryKeyColumnNames