From c52a82fb4634402fde31ebeafe207f3e9decb5fc Mon Sep 17 00:00:00 2001 From: Razvan-Daniel Mihai <84674+razvan@users.noreply.github.com> Date: Wed, 5 Nov 2025 12:54:56 +0100 Subject: [PATCH 1/4] fix: patch reload4j for Kafka 3.9.x --- kafka/Dockerfile | 7 +++- kafka/boil-config.toml | 2 + shared/reload4j/Dockerfile | 23 +++++++++++ shared/reload4j/boil-config.toml | 2 + ...Buffer-into-function-to-prevent-race.patch | 38 +++++++++++++++++++ .../stackable/patches/1.2.25/patchable.toml | 2 + .../reload4j/stackable/patches/patchable.toml | 2 + 7 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 shared/reload4j/Dockerfile create mode 100644 shared/reload4j/boil-config.toml create mode 100644 shared/reload4j/stackable/patches/1.2.25/0001-fix-move-StringBuffer-into-function-to-prevent-race.patch create mode 100644 shared/reload4j/stackable/patches/1.2.25/patchable.toml create mode 100644 shared/reload4j/stackable/patches/patchable.toml diff --git a/kafka/Dockerfile b/kafka/Dockerfile index f9dffb9dd..29f49ed92 100644 --- a/kafka/Dockerfile +++ b/kafka/Dockerfile @@ -3,7 +3,7 @@ FROM local-image/kafka/kcat AS kcat FROM local-image/kafka/kafka-opa-plugin AS kafka-opa-plugin - +FROM local-image/shared/reload4j AS patched-reload4j FROM local-image/java-devel AS kafka-builder ARG PRODUCT_VERSION @@ -18,8 +18,12 @@ WORKDIR /stackable COPY --chown=${STACKABLE_USER_UID}:0 kafka/stackable/jmx/ /stackable/jmx/ COPY --chown=${STACKABLE_USER_UID}:0 kafka/stackable/patches/patchable.toml /stackable/src/kafka/stackable/patches/patchable.toml COPY --chown=${STACKABLE_USER_UID}:0 kafka/stackable/patches/${PRODUCT_VERSION} /stackable/src/kafka/stackable/patches/${PRODUCT_VERSION} +COPY --chown=${STACKABLE_USER_UID}:0 --from=patched-reload4j /stackable/.m2/repository /stackable/patched-reload4j-libs RUN < +Date: Wed, 5 Nov 2025 12:27:34 +0100 +Subject: fix: move StringBuffer into function to prevent race + +--- + src/main/java/org/apache/log4j/xml/XMLLayout.java | 10 +--------- + 1 file changed, 1 insertion(+), 9 deletions(-) + +diff --git a/src/main/java/org/apache/log4j/xml/XMLLayout.java b/src/main/java/org/apache/log4j/xml/XMLLayout.java +index 4f0d99f3..157ecdc6 100644 +--- a/src/main/java/org/apache/log4j/xml/XMLLayout.java ++++ b/src/main/java/org/apache/log4j/xml/XMLLayout.java +@@ -64,9 +64,7 @@ import java.util.Arrays; + public class XMLLayout extends Layout { + + private final int DEFAULT_SIZE = 256; +- private final int UPPER_LIMIT = 2048; + +- private StringBuffer buf = new StringBuffer(DEFAULT_SIZE); + private boolean locationInfo = false; + private boolean properties = false; + +@@ -121,13 +119,7 @@ public class XMLLayout extends Layout { + */ + public String format(final LoggingEvent event) { + +- // Reset working buffer. If the buffer is too large, then we need a new +- // one in order to avoid the penalty of creating a large array. +- if (buf.capacity() > UPPER_LIMIT) { +- buf = new StringBuffer(DEFAULT_SIZE); +- } else { +- buf.setLength(0); +- } ++ StringBuffer buf = new StringBuffer(DEFAULT_SIZE); + + // We yield to the \r\n heresy. + diff --git a/shared/reload4j/stackable/patches/1.2.25/patchable.toml b/shared/reload4j/stackable/patches/1.2.25/patchable.toml new file mode 100644 index 000000000..6e432c699 --- /dev/null +++ b/shared/reload4j/stackable/patches/1.2.25/patchable.toml @@ -0,0 +1,2 @@ +mirror = "https://github.com/stackabletech/reload4j.git" +base = "2dfce6aac8e9881f60b6c9fda3fdc1e79e2c14b3" diff --git a/shared/reload4j/stackable/patches/patchable.toml b/shared/reload4j/stackable/patches/patchable.toml new file mode 100644 index 000000000..ae6d696e5 --- /dev/null +++ b/shared/reload4j/stackable/patches/patchable.toml @@ -0,0 +1,2 @@ +upstream = "https://github.com/qos-ch/reload4j.git" +default-mirror = "https://github.com/stackabletech/reload4j.git" From c10b251b277e725361e3a8529d3457af6a5cf479 Mon Sep 17 00:00:00 2001 From: Razvan-Daniel Mihai <84674+razvan@users.noreply.github.com> Date: Wed, 5 Nov 2025 13:03:44 +0100 Subject: [PATCH 2/4] update changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 80381997f..e619fe4be 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -57,6 +57,7 @@ All notable changes to this project will be documented in this file. - superset: Pin `luxon` to version 3.6.1 to fix build ([#1315], [#1316]) - nifi: Use a patched version of logback to fix corrupted logs ([#1314]) - zookeeper: Use a patched version of logback to fix corrupted logs ([#1320]) +- kafka: Use patched version of reload4j to fix corrupted logs ([#1330]) ### Fixed @@ -124,6 +125,7 @@ All notable changes to this project will be documented in this file. [#1322]: https://github.com/stackabletech/docker-images/pull/1322 [#1323]: https://github.com/stackabletech/docker-images/pull/1323 [#1326]: https://github.com/stackabletech/docker-images/pull/1326 +[#1330]: https://github.com/stackabletech/docker-images/pull/1330 ## [25.7.0] - 2025-07-23 From 34c9da49ca663896a3ca1d4feee4f287e9aceb66 Mon Sep 17 00:00:00 2001 From: Razvan-Daniel Mihai <84674+razvan@users.noreply.github.com> Date: Wed, 5 Nov 2025 14:35:18 +0100 Subject: [PATCH 3/4] use StringBuilder instead of StringBuffer --- ...1-fix-move-buffer-into-function-to-prevent-race.patch} | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) rename shared/reload4j/stackable/patches/1.2.25/{0001-fix-move-StringBuffer-into-function-to-prevent-race.patch => 0001-fix-move-buffer-into-function-to-prevent-race.patch} (85%) diff --git a/shared/reload4j/stackable/patches/1.2.25/0001-fix-move-StringBuffer-into-function-to-prevent-race.patch b/shared/reload4j/stackable/patches/1.2.25/0001-fix-move-buffer-into-function-to-prevent-race.patch similarity index 85% rename from shared/reload4j/stackable/patches/1.2.25/0001-fix-move-StringBuffer-into-function-to-prevent-race.patch rename to shared/reload4j/stackable/patches/1.2.25/0001-fix-move-buffer-into-function-to-prevent-race.patch index 52fae1173..3e6d5d7ae 100644 --- a/shared/reload4j/stackable/patches/1.2.25/0001-fix-move-StringBuffer-into-function-to-prevent-race.patch +++ b/shared/reload4j/stackable/patches/1.2.25/0001-fix-move-buffer-into-function-to-prevent-race.patch @@ -1,14 +1,14 @@ -From 3c1ce68a548f435b63a104537b8653e5f14347a7 Mon Sep 17 00:00:00 2001 +From ea035412d25a54e387e748c07a6c4f58b06ff10d Mon Sep 17 00:00:00 2001 From: Razvan-Daniel Mihai <84674+razvan@users.noreply.github.com> Date: Wed, 5 Nov 2025 12:27:34 +0100 -Subject: fix: move StringBuffer into function to prevent race +Subject: fix: move buffer into function to prevent race --- src/main/java/org/apache/log4j/xml/XMLLayout.java | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/src/main/java/org/apache/log4j/xml/XMLLayout.java b/src/main/java/org/apache/log4j/xml/XMLLayout.java -index 4f0d99f3..157ecdc6 100644 +index 4f0d99f3..35ef30d8 100644 --- a/src/main/java/org/apache/log4j/xml/XMLLayout.java +++ b/src/main/java/org/apache/log4j/xml/XMLLayout.java @@ -64,9 +64,7 @@ import java.util.Arrays; @@ -32,7 +32,7 @@ index 4f0d99f3..157ecdc6 100644 - } else { - buf.setLength(0); - } -+ StringBuffer buf = new StringBuffer(DEFAULT_SIZE); ++ StringBuilder buf = new StringBuilder(DEFAULT_SIZE); // We yield to the \r\n heresy. From 367eed15a66d7bca0eabdec89ece9259a0682e3d Mon Sep 17 00:00:00 2001 From: Razvan-Daniel Mihai <84674+razvan@users.noreply.github.com> Date: Wed, 5 Nov 2025 14:46:59 +0100 Subject: [PATCH 4/4] fix compile error --- ...buffer-into-function-to-prevent-race.patch | 25 ++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/shared/reload4j/stackable/patches/1.2.25/0001-fix-move-buffer-into-function-to-prevent-race.patch b/shared/reload4j/stackable/patches/1.2.25/0001-fix-move-buffer-into-function-to-prevent-race.patch index 3e6d5d7ae..413c8ed12 100644 --- a/shared/reload4j/stackable/patches/1.2.25/0001-fix-move-buffer-into-function-to-prevent-race.patch +++ b/shared/reload4j/stackable/patches/1.2.25/0001-fix-move-buffer-into-function-to-prevent-race.patch @@ -1,12 +1,31 @@ -From ea035412d25a54e387e748c07a6c4f58b06ff10d Mon Sep 17 00:00:00 2001 +From 124575963f02242904d655cfde7d05375c2c2d26 Mon Sep 17 00:00:00 2001 From: Razvan-Daniel Mihai <84674+razvan@users.noreply.github.com> Date: Wed, 5 Nov 2025 12:27:34 +0100 Subject: fix: move buffer into function to prevent race --- - src/main/java/org/apache/log4j/xml/XMLLayout.java | 10 +--------- - 1 file changed, 1 insertion(+), 9 deletions(-) + src/main/java/org/apache/log4j/helpers/Transform.java | 4 ++-- + src/main/java/org/apache/log4j/xml/XMLLayout.java | 10 +--------- + 2 files changed, 3 insertions(+), 11 deletions(-) +diff --git a/src/main/java/org/apache/log4j/helpers/Transform.java b/src/main/java/org/apache/log4j/helpers/Transform.java +index ad77e165..5f0aba25 100644 +--- a/src/main/java/org/apache/log4j/helpers/Transform.java ++++ b/src/main/java/org/apache/log4j/helpers/Transform.java +@@ -76,11 +76,11 @@ public class Transform { + /** + * Ensures that embeded CDEnd strings (]]>) are handled properly within message, NDC and throwable tag text. + * +- * @param buf StringBuffer holding the XML data to this point. The initial CDStart (<![CDATA[) and final CDEnd ++ * @param buf StringBuilder holding the XML data to this point. The initial CDStart (<![CDATA[) and final CDEnd + * (]]>) of the CDATA section are the responsibility of the calling method. + * @param str The String that is inserted into an existing CDATA Section within buf. + */ +- static public void appendEscapingCDATA(final StringBuffer buf, final String str) { ++ static public void appendEscapingCDATA(final StringBuilder buf, final String str) { + if (str != null) { + int end = str.indexOf(CDATA_END); + if (end < 0) { diff --git a/src/main/java/org/apache/log4j/xml/XMLLayout.java b/src/main/java/org/apache/log4j/xml/XMLLayout.java index 4f0d99f3..35ef30d8 100644 --- a/src/main/java/org/apache/log4j/xml/XMLLayout.java