From 09e1bf1df041fb28560a66761c3a78a6881ba9c3 Mon Sep 17 00:00:00 2001 From: Chris Cranford Date: Thu, 15 Feb 2024 16:04:34 -0500 Subject: [PATCH] DBZ-7488 Skip re-selection on `r` (read) events --- .../processors/reselect/ReselectColumnsPostProcessor.java | 7 +++++++ .../debezium/processors/AbstractReselectProcessorTest.java | 5 ----- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/debezium-core/src/main/java/io/debezium/processors/reselect/ReselectColumnsPostProcessor.java b/debezium-core/src/main/java/io/debezium/processors/reselect/ReselectColumnsPostProcessor.java index df38cf6ca..17b4ca2db 100644 --- a/debezium-core/src/main/java/io/debezium/processors/reselect/ReselectColumnsPostProcessor.java +++ b/debezium-core/src/main/java/io/debezium/processors/reselect/ReselectColumnsPostProcessor.java @@ -105,6 +105,13 @@ public void apply(Object messageKey, Struct value) { return; } + // Skip read events as these are generated from raw JDBC selects which should have the current + // state of the row and there is no reason to logically re-select the column state. + final String operation = value.getString(Envelope.FieldName.OPERATION); + if (Envelope.Operation.READ.code().equals(operation)) { + return; + } + final Struct source = value.getStruct(Envelope.FieldName.SOURCE); if (source == null) { LOGGER.debug("Value has no source field, no re-selection possible."); diff --git a/debezium-embedded/src/test/java/io/debezium/processors/AbstractReselectProcessorTest.java b/debezium-embedded/src/test/java/io/debezium/processors/AbstractReselectProcessorTest.java index b59a7b88d..ec9d18ef4 100644 --- a/debezium-embedded/src/test/java/io/debezium/processors/AbstractReselectProcessorTest.java +++ b/debezium-embedded/src/test/java/io/debezium/processors/AbstractReselectProcessorTest.java @@ -106,9 +106,6 @@ public void testNoColumnsReselectedWhenNullAndUnavailableColumnsAreDisabled() th @FixFor("DBZ-4321") @SuppressWarnings("resource") public void testNoColumnsReselectedWhenNotNullSnapshot() throws Exception { - LogInterceptor interceptor = new LogInterceptor(ReselectColumnsPostProcessor.class); - interceptor.setLoggerLevel(ReselectColumnsPostProcessor.class, Level.DEBUG); - databaseConnection().execute(getInsertWithValue()); Configuration config = getConfigurationBuilder() @@ -130,8 +127,6 @@ public void testNoColumnsReselectedWhenNotNullSnapshot() throws Exception { assertThat(after.get(fieldName("id"))).isEqualTo(1); assertThat(after.get(fieldName("data"))).isEqualTo("one"); assertThat(after.get(fieldName("data2"))).isEqualTo(1); - - assertThat(interceptor.containsMessage("No columns require re-selection.")).isTrue(); } @Test