diff --git a/CHANGELOG.md b/CHANGELOG.md index fdf539a40..65d775c37 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -54,6 +54,7 @@ All notable changes to this project will be documented in this file. - superset: Fix the 4.1.2 build when building from source ([#1309]) - 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]) ### Fixed @@ -117,6 +118,7 @@ All notable changes to this project will be documented in this file. [#1316]: https://github.com/stackabletech/docker-images/pull/1316 [#1318]: https://github.com/stackabletech/docker-images/pull/1318 [#1319]: https://github.com/stackabletech/docker-images/pull/1319 +[#1320]: https://github.com/stackabletech/docker-images/pull/1320 ## [25.7.0] - 2025-07-23 diff --git a/shared/logback/boil-config.toml b/shared/logback/boil-config.toml index 206d0206e..ab980a5ec 100644 --- a/shared/logback/boil-config.toml +++ b/shared/logback/boil-config.toml @@ -1,5 +1,11 @@ +[versions."1.2.13".local-images] +java-devel = "8" + [versions."1.3.14".local-images] java-devel = "21" +[versions."1.3.15".local-images] +java-devel = "21" + [versions."1.5.18".local-images] java-devel = "21" diff --git a/shared/logback/stackable/patches/1.2.13/0001-fix-move-StringBuilder-into-function-to-prevent-race.patch b/shared/logback/stackable/patches/1.2.13/0001-fix-move-StringBuilder-into-function-to-prevent-race.patch new file mode 100644 index 000000000..8233d3cfa --- /dev/null +++ b/shared/logback/stackable/patches/1.2.13/0001-fix-move-StringBuilder-into-function-to-prevent-race.patch @@ -0,0 +1,38 @@ +From 2f94a71b44275028e99fcf4f7540ae694a1d68c7 Mon Sep 17 00:00:00 2001 +From: Andrew Kenworthy +Date: Mon, 27 Oct 2025 15:58:12 +0100 +Subject: fix: move StringBuilder into function to prevent race + +--- + .../java/ch/qos/logback/classic/log4j/XMLLayout.java | 10 +--------- + 1 file changed, 1 insertion(+), 9 deletions(-) + +diff --git a/logback-classic/src/main/java/ch/qos/logback/classic/log4j/XMLLayout.java b/logback-classic/src/main/java/ch/qos/logback/classic/log4j/XMLLayout.java +index ee640eeb6..edda3e9fb 100644 +--- a/logback-classic/src/main/java/ch/qos/logback/classic/log4j/XMLLayout.java ++++ b/logback-classic/src/main/java/ch/qos/logback/classic/log4j/XMLLayout.java +@@ -38,9 +38,7 @@ import ch.qos.logback.core.helpers.Transform; + public class XMLLayout extends LayoutBase { + + private final int DEFAULT_SIZE = 256; +- private final int UPPER_LIMIT = 2048; + +- private StringBuilder buf = new StringBuilder(DEFAULT_SIZE); + private boolean locationInfo = false; + private boolean properties = false; + +@@ -96,13 +94,7 @@ public class XMLLayout extends LayoutBase { + */ + public String doLayout(ILoggingEvent 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 StringBuilder(DEFAULT_SIZE); +- } else { +- buf.setLength(0); +- } ++ StringBuilder buf = new StringBuilder(DEFAULT_SIZE); + + // We yield to the \r\n heresy. + diff --git a/shared/logback/stackable/patches/1.2.13/patchable.toml b/shared/logback/stackable/patches/1.2.13/patchable.toml new file mode 100644 index 000000000..83e1aa572 --- /dev/null +++ b/shared/logback/stackable/patches/1.2.13/patchable.toml @@ -0,0 +1,2 @@ +mirror = "https://github.com/stackabletech/logback.git" +base = "2648b9e7fbb47426c89b9c93b411c07484e8f277" diff --git a/shared/logback/stackable/patches/1.3.15/0001-fix-move-StringBuilder-into-function-to-prevent-race.patch b/shared/logback/stackable/patches/1.3.15/0001-fix-move-StringBuilder-into-function-to-prevent-race.patch new file mode 100644 index 000000000..b25533564 --- /dev/null +++ b/shared/logback/stackable/patches/1.3.15/0001-fix-move-StringBuilder-into-function-to-prevent-race.patch @@ -0,0 +1,38 @@ +From afa8af8c6574806e2482063a301130562a8f2b0d Mon Sep 17 00:00:00 2001 +From: Andrew Kenworthy +Date: Mon, 27 Oct 2025 16:00:59 +0100 +Subject: fix: move StringBuilder into function to prevent race + +--- + .../java/ch/qos/logback/classic/log4j/XMLLayout.java | 10 +--------- + 1 file changed, 1 insertion(+), 9 deletions(-) + +diff --git a/logback-classic/src/main/java/ch/qos/logback/classic/log4j/XMLLayout.java b/logback-classic/src/main/java/ch/qos/logback/classic/log4j/XMLLayout.java +index 4bc04388a..405f4ef26 100644 +--- a/logback-classic/src/main/java/ch/qos/logback/classic/log4j/XMLLayout.java ++++ b/logback-classic/src/main/java/ch/qos/logback/classic/log4j/XMLLayout.java +@@ -38,9 +38,7 @@ import ch.qos.logback.core.helpers.Transform; + public class XMLLayout extends LayoutBase { + + private final int DEFAULT_SIZE = 256; +- private final int UPPER_LIMIT = 2048; + +- private StringBuilder buf = new StringBuilder(DEFAULT_SIZE); + private boolean locationInfo = false; + private boolean properties = false; + +@@ -96,13 +94,7 @@ public class XMLLayout extends LayoutBase { + */ + public String doLayout(ILoggingEvent 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 StringBuilder(DEFAULT_SIZE); +- } else { +- buf.setLength(0); +- } ++ StringBuilder buf = new StringBuilder(DEFAULT_SIZE); + + // We yield to the \r\n heresy. + diff --git a/shared/logback/stackable/patches/1.3.15/patchable.toml b/shared/logback/stackable/patches/1.3.15/patchable.toml new file mode 100644 index 000000000..293726399 --- /dev/null +++ b/shared/logback/stackable/patches/1.3.15/patchable.toml @@ -0,0 +1,2 @@ +mirror = "https://github.com/stackabletech/logback.git" +base = "81f8c25e2a2fae99f45029c27dc793bdaa8cb079" diff --git a/zookeeper/Dockerfile b/zookeeper/Dockerfile index 1093684ef..baf4ee76f 100644 --- a/zookeeper/Dockerfile +++ b/zookeeper/Dockerfile @@ -4,6 +4,8 @@ # ============================================================================== # START ZOOKEEPER BUILDER +FROM local-image/shared/logback AS patched-logback + FROM local-image/java-devel AS builder ARG PRODUCT_VERSION @@ -16,12 +18,16 @@ COPY --chown=${STACKABLE_USER_UID}:0 zookeeper/stackable/patches/patchable.toml COPY --chown=${STACKABLE_USER_UID}:0 zookeeper/stackable/patches/${PRODUCT_VERSION} /stackable/src/zookeeper/stackable/patches/${PRODUCT_VERSION} # Copy JMX config into the builder COPY --chown=${STACKABLE_USER_UID}:0 zookeeper/stackable/jmx /stackable/jmx +COPY --chown=${STACKABLE_USER_UID}:0 --from=patched-logback /stackable/.m2/repository /stackable/patched-logback-libs USER ${STACKABLE_USER_UID} WORKDIR /stackable # Download ZooKeeper sources from our own repo RUN <