Uploaded image for project: 'Debezium'
  1. Debezium
  2. DBZ-360

Can't find a codec for class com.mongodb.DBRef if connector tries to handle DBRef

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Duplicate
    • Icon: Major Major
    • None
    • None
    • mongodb-connector
    • None

      We catch the next problem: if we try to start streaming from mongodb we get infinite loop with "org.bson.codecs.configuration.CodecConfigurationException: Can't find a codec for class com.mongodb.DBRef" when data includes dbrefs.

      2017-09-19 17:33:39.664 ERROR 14264 --- [pool-4-thread-1] i.debezium.connector.mongodb.Replicator  : Error while attempting to sync 'test.test.collect': Can't find a codec for class com.mongodb.DBRef.
      
      org.bson.codecs.configuration.CodecConfigurationException: Can't find a codec for class com.mongodb.DBRef.
      	at org.bson.codecs.configuration.CodecCache.getOrThrow(CodecCache.java:46) ~[bson-3.4.2.jar:na]
      	at org.bson.codecs.configuration.ProvidersCodecRegistry.get(ProvidersCodecRegistry.java:63) ~[bson-3.4.2.jar:na]
      	at org.bson.codecs.configuration.ProvidersCodecRegistry.get(ProvidersCodecRegistry.java:37) ~[bson-3.4.2.jar:na]
      	at org.bson.codecs.DocumentCodec.writeValue(DocumentCodec.java:174) ~[bson-3.4.2.jar:na]
      	at org.bson.codecs.DocumentCodec.writeMap(DocumentCodec.java:189) ~[bson-3.4.2.jar:na]
      	at org.bson.codecs.DocumentCodec.encode(DocumentCodec.java:131) ~[bson-3.4.2.jar:na]
      	at org.bson.codecs.DocumentCodec.encode(DocumentCodec.java:45) ~[bson-3.4.2.jar:na]
      	at org.bson.Document.toJson(Document.java:294) ~[bson-3.4.2.jar:na]
      	at org.bson.Document.toJson(Document.java:268) ~[bson-3.4.2.jar:na]
      	at io.debezium.connector.mongodb.RecordMakers$RecordsForCollection.lambda$new$0(RecordMakers.java:115) ~[debezium-connector-mongodb-0.5.2.jar:0.5.2]
      	at io.debezium.connector.mongodb.RecordMakers$RecordsForCollection.createRecords(RecordMakers.java:176) ~[debezium-connector-mongodb-0.5.2.jar:0.5.2]
      	at io.debezium.connector.mongodb.RecordMakers$RecordsForCollection.recordObject(RecordMakers.java:142) ~[debezium-connector-mongodb-0.5.2.jar:0.5.2]
      	at io.debezium.connector.mongodb.Replicator.copyCollection(Replicator.java:359) ~[debezium-connector-mongodb-0.5.2.jar:0.5.2]
      	at io.debezium.connector.mongodb.Replicator.lambda$copyCollection$5(Replicator.java:336) ~[debezium-connector-mongodb-0.5.2.jar:0.5.2]
      	at io.debezium.connector.mongodb.ConnectionContext$MongoPrimary.executeBlocking(ConnectionContext.java:278) ~[debezium-connector-mongodb-0.5.2.jar:0.5.2]
      	at io.debezium.connector.mongodb.Replicator.copyCollection(Replicator.java:335) ~[debezium-connector-mongodb-0.5.2.jar:0.5.2]
      	at io.debezium.connector.mongodb.Replicator.lambda$performInitialSync$4(Replicator.java:277) ~[debezium-connector-mongodb-0.5.2.jar:0.5.2]
      	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[na:1.8.0_91]
      	at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[na:1.8.0_91]
      	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) ~[na:1.8.0_91]
      	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) ~[na:1.8.0_91]
      	at java.lang.Thread.run(Thread.java:745) ~[na:1.8.0_91]
      

      We think, root cause of our problem is here

      this.valueTransformer = (doc) -> doc.toJson(writerSettings);
      this.recorder = recorder;
      

      So DEFAULT_REGISTRY is used, but DEFAULT_REGISTRY contains ValueCodecProvider, BsonValueCodecProvider and DocumentCodecProvider and doesn't include DBRefCodecProvider.
      We have the possible solve for this: fix

            Unassigned Unassigned
            krasnovnikita Nikita Krasnov (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved: