-
Task
-
Resolution: Done
-
Major
-
None
-
None
-
False
-
-
False
-
-
The Oracle test shouldHandleParentChildIndexOrganizedTables sometimes randomly fails due to the following error:
java.util.concurrent.ExecutionException: org.apache.kafka.connect.errors.ConnectException: Snapshotting of table ORCLPDB1.DEBEZIUM.TEST_IOT failed at java.base/java.util.concurrent.FutureTask.report(FutureTask.java:122) at java.base/java.util.concurrent.FutureTask.get(FutureTask.java:191) at io.debezium.relational.RelationalSnapshotChangeEventSource.createDataEvents(RelationalSnapshotChangeEventSource.java:539) at io.debezium.relational.RelationalSnapshotChangeEventSource.doExecute(RelationalSnapshotChangeEventSource.java:187) at io.debezium.pipeline.source.AbstractSnapshotChangeEventSource.execute(AbstractSnapshotChangeEventSource.java:102) at io.debezium.pipeline.ChangeEventSourceCoordinator.doSnapshot(ChangeEventSourceCoordinator.java:301) at io.debezium.pipeline.ChangeEventSourceCoordinator.doSnapshot(ChangeEventSourceCoordinator.java:285) at io.debezium.pipeline.ChangeEventSourceCoordinator.executeChangeEventSources(ChangeEventSourceCoordinator.java:196) at io.debezium.pipeline.ChangeEventSourceCoordinator.lambda$start$0(ChangeEventSourceCoordinator.java:147) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) at io.debezium.util.Threads$3.lambda$newThread$0(Threads.java:314) at java.base/java.lang.Thread.run(Thread.java:1583) Caused by: org.apache.kafka.connect.errors.ConnectException: Snapshotting of table ORCLPDB1.DEBEZIUM.TEST_IOT failed at io.debezium.connector.oracle.OracleSnapshotChangeEventSource.lambda$createDataEventsForTableCallable$1(OracleSnapshotChangeEventSource.java:310) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) ... 1 common frames omitted
While the Oracle snapshot is designed to retry ORA-01466 errors, there are a few outstanding issues:
- The retry does not impose any sleep between attempts. If the issue is because of timing in the Oracle database, this quick retry mechanism without a small wait could be unhelpful. So we should add a small wait between attempts.
- The test itself should impose a small wait before starting the connector, allowing Oracle to fully synchronize the overflow index with the table.
- The test should be marked with Flaky so its retried should it fail.