From af401a0d71f6400bf1676ba9110765f2ee8b0e84 Mon Sep 17 00:00:00 2001 From: Jiri Pechanec Date: Mon, 6 Dec 2021 06:51:39 +0100 Subject: [PATCH] DBZ-4205 Handle new transaction id format --- .../mongodb/MongoDbEventMetadataProvider.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/debezium-connector-mongodb/src/main/java/io/debezium/connector/mongodb/MongoDbEventMetadataProvider.java b/debezium-connector-mongodb/src/main/java/io/debezium/connector/mongodb/MongoDbEventMetadataProvider.java index 52b114ae9..5375b417e 100644 --- a/debezium-connector-mongodb/src/main/java/io/debezium/connector/mongodb/MongoDbEventMetadataProvider.java +++ b/debezium-connector-mongodb/src/main/java/io/debezium/connector/mongodb/MongoDbEventMetadataProvider.java @@ -69,6 +69,20 @@ public String getTransactionId(DataCollectionId source, OffsetContext offset, Ob return sessionTxnId; } } + // Both components were always present in the testing but the documentation claims they are optional + // so it is better to code this defensively + if (sourceInfo.schema().field(SourceInfo.LSID) != null && (sourceInfo.getString(SourceInfo.LSID) != null + || sourceInfo.getInt64(SourceInfo.TXN_NUMBER) != null)) { + final String lsid = sourceInfo.getString(SourceInfo.LSID); + final Long txnNumber = sourceInfo.getInt64(SourceInfo.TXN_NUMBER); + if (lsid == null) { + return txnNumber.toString(); + } + if (txnNumber == null) { + return lsid; + } + return lsid + ":" + txnNumber; + } final Long operationId = sourceInfo.getInt64(SourceInfo.OPERATION_ID); if (operationId == null) { return null;