From b33909fad6632ac1d8eeb94e013dcce215d31ef0 Mon Sep 17 00:00:00 2001 From: Razvan-Daniel Mihai <84674+razvan@users.noreply.github.com> Date: Tue, 6 May 2025 11:52:39 +0200 Subject: [PATCH 01/14] remove hbase 2.4.18 --- ...ASE-27103-Fixes-HBase-build-on-arm64.patch | 34 -- ...28242-Updates-async-profiler-support.patch | 384 ------------------ ...-HBASE-28379-Upgrade-thirdparty-deps.patch | 71 ---- ...511-Update-hbase-thirdparty-to-4.1.7.patch | 135 ------ ...able-dependencies-to-new-patch-versi.patch | 129 ------ ...aven-plugin-to-version-2.8.0-and-twe.patch | 27 -- hbase/stackable/patches/2.4.18/patchable.toml | 2 - ...28242-Updates-async-profiler-support.patch | 384 ------------------ ...-condition-causes-MetaRegionLocation.patch | 26 -- ...dencies-which-have-a-new-patch-updat.patch | 115 ------ .../0004-Include-jackson-dataformat-xml.patch | 59 --- ...aven-plugin-to-version-2.8.0-and-twe.patch | 27 -- .../2.6.0/0006-Fix-CVE-2024-36114.patch | 40 -- hbase/stackable/patches/2.6.0/patchable.toml | 2 - hbase/versions.py | 14 - 15 files changed, 1449 deletions(-) delete mode 100644 hbase/stackable/patches/2.4.18/0001-HBASE-27103-Fixes-HBase-build-on-arm64.patch delete mode 100644 hbase/stackable/patches/2.4.18/0002-HBASE-28242-Updates-async-profiler-support.patch delete mode 100644 hbase/stackable/patches/2.4.18/0003-HBASE-28379-Upgrade-thirdparty-deps.patch delete mode 100644 hbase/stackable/patches/2.4.18/0004-HBASE-28511-Update-hbase-thirdparty-to-4.1.7.patch delete mode 100644 hbase/stackable/patches/2.4.18/0005-Update-all-available-dependencies-to-new-patch-versi.patch delete mode 100644 hbase/stackable/patches/2.4.18/0006-Bump-cyclonedx-maven-plugin-to-version-2.8.0-and-twe.patch delete mode 100644 hbase/stackable/patches/2.4.18/patchable.toml delete mode 100644 hbase/stackable/patches/2.6.0/0001-HBASE-28242-Updates-async-profiler-support.patch delete mode 100644 hbase/stackable/patches/2.6.0/0002-HBASE-28567-Race-condition-causes-MetaRegionLocation.patch delete mode 100644 hbase/stackable/patches/2.6.0/0003-Update-all-dependencies-which-have-a-new-patch-updat.patch delete mode 100644 hbase/stackable/patches/2.6.0/0004-Include-jackson-dataformat-xml.patch delete mode 100644 hbase/stackable/patches/2.6.0/0005-Bump-cyclonedx-maven-plugin-to-version-2.8.0-and-twe.patch delete mode 100644 hbase/stackable/patches/2.6.0/0006-Fix-CVE-2024-36114.patch delete mode 100644 hbase/stackable/patches/2.6.0/patchable.toml diff --git a/hbase/stackable/patches/2.4.18/0001-HBASE-27103-Fixes-HBase-build-on-arm64.patch b/hbase/stackable/patches/2.4.18/0001-HBASE-27103-Fixes-HBase-build-on-arm64.patch deleted file mode 100644 index 06a625ee3..000000000 --- a/hbase/stackable/patches/2.4.18/0001-HBASE-27103-Fixes-HBase-build-on-arm64.patch +++ /dev/null @@ -1,34 +0,0 @@ -From 393df760d7beb6735e6b788501ddeb5f60615a4a Mon Sep 17 00:00:00 2001 -From: Maximilian Wittich -Date: Fri, 15 Dec 2023 13:14:28 +0100 -Subject: HBASE-27103: Fixes HBase build on arm64 - ---- - .../src/main/resources/supplemental-models.xml | 14 ++++++++++++++ - 1 file changed, 14 insertions(+) - -diff --git a/hbase-resource-bundle/src/main/resources/supplemental-models.xml b/hbase-resource-bundle/src/main/resources/supplemental-models.xml -index 6a36b86dbc..cfcd8e201f 100644 ---- a/hbase-resource-bundle/src/main/resources/supplemental-models.xml -+++ b/hbase-resource-bundle/src/main/resources/supplemental-models.xml -@@ -2316,6 +2316,20 @@ Copyright (c) 2011 FuseSource Corp. All rights reserved. - - - -+ -+ -+ org.openlabtesting.leveldbjni -+ leveldbjni-all -+ -+ -+ -+ BSD 3-Clause License -+ http://www.opensource.org/licenses/BSD-3-Clause -+ repo -+ -+ -+ -+ - - - diff --git a/hbase/stackable/patches/2.4.18/0002-HBASE-28242-Updates-async-profiler-support.patch b/hbase/stackable/patches/2.4.18/0002-HBASE-28242-Updates-async-profiler-support.patch deleted file mode 100644 index e1a0b89ed..000000000 --- a/hbase/stackable/patches/2.4.18/0002-HBASE-28242-Updates-async-profiler-support.patch +++ /dev/null @@ -1,384 +0,0 @@ -From 5e26329f7b75e2ee2aa797f7bdcf3524bd45e491 Mon Sep 17 00:00:00 2001 -From: Siegfried Weber -Date: Tue, 6 Feb 2024 16:10:54 +0100 -Subject: HBASE-28242: Updates async-profiler support - ---- - .../hadoop/hbase/http/ProfileServlet.java | 205 +++++++++++------- - 1 file changed, 121 insertions(+), 84 deletions(-) - -diff --git a/hbase-http/src/main/java/org/apache/hadoop/hbase/http/ProfileServlet.java b/hbase-http/src/main/java/org/apache/hadoop/hbase/http/ProfileServlet.java -index df8d009282..6139114717 100644 ---- a/hbase-http/src/main/java/org/apache/hadoop/hbase/http/ProfileServlet.java -+++ b/hbase-http/src/main/java/org/apache/hadoop/hbase/http/ProfileServlet.java -@@ -25,9 +25,11 @@ import java.util.concurrent.TimeUnit; - import java.util.concurrent.atomic.AtomicInteger; - import java.util.concurrent.locks.Lock; - import java.util.concurrent.locks.ReentrantLock; -+ - import javax.servlet.http.HttpServlet; - import javax.servlet.http.HttpServletRequest; - import javax.servlet.http.HttpServletResponse; -+ - import org.apache.hadoop.hbase.util.ProcessUtils; - import org.apache.yetus.audience.InterfaceAudience; - import org.slf4j.Logger; -@@ -37,23 +39,60 @@ import org.apache.hbase.thirdparty.com.google.common.base.Joiner; - - /** - * Servlet that runs async-profiler as web-endpoint. Following options from async-profiler can be -- * specified as query paramater. // -e event profiling event: cpu|alloc|lock|cache-misses etc. // -d -- * duration run profiling for 'duration' seconds (integer) // -i interval sampling interval in -- * nanoseconds (long) // -j jstackdepth maximum Java stack depth (integer) // -b bufsize frame -- * buffer size (long) // -t profile different threads separately // -s simple class names instead of -- * FQN // -o fmt[,fmt...] output format: summary|traces|flat|collapsed|svg|tree|jfr|html // --width -- * px SVG width pixels (integer) // --height px SVG frame height pixels (integer) // --minwidth px -- * skip frames smaller than px (double) // --reverse generate stack-reversed FlameGraph / Call tree -- * Example: - To collect 30 second CPU profile of current process (returns FlameGraph svg) curl -- * "http://localhost:10002/prof" - To collect 1 minute CPU profile of current process and output in -- * tree format (html) curl "http://localhost:10002/prof?output=tree&duration=60" - To collect 30 -- * second heap allocation profile of current process (returns FlameGraph svg) curl -- * "http://localhost:10002/prof?event=alloc" - To collect lock contention profile of current process -- * (returns FlameGraph svg) curl "http://localhost:10002/prof?event=lock" Following event types are -- * supported (default is 'cpu') (NOTE: not all OS'es support all events) // Perf events: // cpu // -- * page-faults // context-switches // cycles // instructions // cache-references // cache-misses // -- * branches // branch-misses // bus-cycles // L1-dcache-load-misses // LLC-load-misses // -- * dTLB-load-misses // mem:breakpoint // trace:tracepoint // Java events: // alloc // lock -+ * specified as query parameter. -+ *
    -+ *
  • -e event profiling event: cpu|alloc|lock|cache-misses etc.
  • -+ *
  • -d duration run profiling for 'duration' seconds (integer), default 10s
  • -+ *
  • -i interval sampling interval in nanoseconds (long), default 10ms
  • -+ *
  • -j jstackdepth maximum Java stack depth (integer), default 2048
  • -+ *
  • -t profile different threads separately
  • -+ *
  • -s simple class names instead of FQN
  • -+ *
  • -g print method signatures
  • -+ *
  • -a annotate Java methods
  • -+ *
  • -l prepend library names
  • -+ *
  • -o fmt output format: flat|traces|collapsed|flamegraph|tree|jfr
  • -+ *
  • --minwidth pct skip frames smaller than pct% (double)
  • -+ *
  • --reverse generate stack-reversed FlameGraph / Call tree
  • -+ *
-+ * Example: -+ *
    -+ *
  • To collect 30 second CPU profile of current process (returns FlameGraph svg): -+ * {@code curl http://localhost:10002/prof"}
  • -+ *
  • To collect 1 minute CPU profile of current process and output in tree format (html) -+ * {@code curl "http://localhost:10002/prof?output=tree&duration=60"}
  • -+ *
  • To collect 30 second heap allocation profile of current process (returns FlameGraph): -+ * {@code curl "http://localhost:10002/prof?event=alloc"}
  • -+ *
  • To collect lock contention profile of current process (returns FlameGraph): -+ * {@code curl "http://localhost:10002/prof?event=lock"}
  • -+ *
-+ * Following event types are supported (default is 'cpu') (NOTE: not all OS'es support all -+ * events).
-+ * Basic events: -+ *
    -+ *
  • cpu
  • -+ *
  • alloc
  • -+ *
  • lock
  • -+ *
  • wall
  • -+ *
  • itimer
  • -+ *
-+ * Perf events: -+ *
    -+ *
  • L1-dcache-load-misses
  • -+ *
  • LLC-load-misses
  • -+ *
  • branch-instructions
  • -+ *
  • branch-misses
  • -+ *
  • bus-cycles
  • -+ *
  • cache-misses
  • -+ *
  • cache-references
  • -+ *
  • context-switches
  • -+ *
  • cpu
  • -+ *
  • cycles
  • -+ *
  • dTLB-load-misses
  • -+ *
  • instructions
  • -+ *
  • mem:breakpoint
  • -+ *
  • page-faults
  • -+ *
  • trace:tracepoint
  • -+ *
- */ - @InterfaceAudience.Private - public class ProfileServlet extends HttpServlet { -@@ -77,19 +116,20 @@ public class ProfileServlet extends HttpServlet { - WALL("wall"), - ALLOC("alloc"), - LOCK("lock"), -- PAGE_FAULTS("page-faults"), -+ ITIMER("itimer"), -+ BRANCH_INSTRUCTIONS("branch-instructions"), -+ BRANCH_MISSES("branch-misses"), -+ BUS_CYCLES("bus-cycles"), -+ CACHE_MISSES("cache-misses"), -+ CACHE_REFERENCES("cache-references"), - CONTEXT_SWITCHES("context-switches"), - CYCLES("cycles"), -+ DTLB_LOAD_MISSES("dTLB-load-misses"), - INSTRUCTIONS("instructions"), -- CACHE_REFERENCES("cache-references"), -- CACHE_MISSES("cache-misses"), -- BRANCHES("branches"), -- BRANCH_MISSES("branch-misses"), -- BUS_CYCLES("bus-cycles"), - L1_DCACHE_LOAD_MISSES("L1-dcache-load-misses"), - LLC_LOAD_MISSES("LLC-load-misses"), -- DTLB_LOAD_MISSES("dTLB-load-misses"), - MEM_BREAKPOINT("mem:breakpoint"), -+ PAGE_FAULTS("page-faults"), - TRACE_TRACEPOINT("trace:tracepoint"),; - - private final String internalName; -@@ -98,11 +138,11 @@ public class ProfileServlet extends HttpServlet { - this.internalName = internalName; - } - -- public String getInternalName() { -+ String getInternalName() { - return internalName; - } - -- public static Event fromInternalName(final String name) { -+ static Event fromInternalName(final String name) { - for (Event event : values()) { - if (event.getInternalName().equalsIgnoreCase(name)) { - return event; -@@ -113,30 +153,26 @@ public class ProfileServlet extends HttpServlet { - } - } - -- enum Output { -- SUMMARY, -- TRACES, -- FLAT, -+ private enum Output { - COLLAPSED, -- // No SVG in 2.x asyncprofiler. -- SVG, -- TREE, -+ FLAMEGRAPH, -+ FLAT, - JFR, -- // In 2.x asyncprofiler, this is how you get flamegraphs. -- HTML -+ TRACES, -+ TREE - } - - @edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "SE_TRANSIENT_FIELD_NOT_RESTORED", - justification = "This class is never serialized nor restored.") -- private transient Lock profilerLock = new ReentrantLock(); -+ private final transient Lock profilerLock = new ReentrantLock(); - private transient volatile Process process; -- private String asyncProfilerHome; -+ private final String asyncProfilerHome; - private Integer pid; - - public ProfileServlet() { - this.asyncProfilerHome = getAsyncProfilerHome(); - this.pid = ProcessUtils.getPid(); -- LOG.info("Servlet process PID: " + pid + " asyncProfilerHome: " + asyncProfilerHome); -+ LOG.info("Servlet process PID: {} asyncProfilerHome: {}", pid, asyncProfilerHome); - } - - @Override -@@ -155,9 +191,9 @@ public class ProfileServlet extends HttpServlet { - setResponseHeader(resp); - resp.getWriter() - .write("ASYNC_PROFILER_HOME env is not set.\n\n" -- + "Please ensure the prerequsites for the Profiler Servlet have been installed and the\n" -+ + "Please ensure the prerequisites for the Profiler Servlet have been installed and the\n" - + "environment is properly configured. For more information please see\n" -- + "http://hbase.apache.org/book.html#profiler\n"); -+ + "https://hbase.apache.org/book.html#profiler\n"); - return; - } - -@@ -173,18 +209,18 @@ public class ProfileServlet extends HttpServlet { - return; - } - -- final int duration = getInteger(req, "duration", DEFAULT_DURATION_SECONDS); -- final Output output = getOutput(req); -- final Event event = getEvent(req); -- final Long interval = getLong(req, "interval"); -- final Integer jstackDepth = getInteger(req, "jstackdepth", null); -- final Long bufsize = getLong(req, "bufsize"); -- final boolean thread = req.getParameterMap().containsKey("thread"); -- final boolean simple = req.getParameterMap().containsKey("simple"); -- final Integer width = getInteger(req, "width", null); -- final Integer height = getInteger(req, "height", null); -- final Double minwidth = getMinWidth(req); -- final boolean reverse = req.getParameterMap().containsKey("reverse"); -+ Event event = getEvent(req); -+ int duration = getInteger(req, "duration", DEFAULT_DURATION_SECONDS); -+ Long interval = getLong(req, "interval"); -+ Integer jstackDepth = getInteger(req, "jstackdepth", null); -+ boolean thread = req.getParameterMap().containsKey("thread"); -+ boolean simple = req.getParameterMap().containsKey("simple"); -+ boolean signature = req.getParameterMap().containsKey("signature"); -+ boolean annotate = req.getParameterMap().containsKey("annotate"); -+ boolean prependLib = req.getParameterMap().containsKey("prependlib"); -+ Output output = getOutput(req); -+ Double minwidth = getMinWidth(req); -+ boolean reverse = req.getParameterMap().containsKey("reverse"); - - if (process == null || !process.isAlive()) { - try { -@@ -199,11 +235,7 @@ public class ProfileServlet extends HttpServlet { - cmd.add("-e"); - cmd.add(event.getInternalName()); - cmd.add("-d"); -- cmd.add("" + duration); -- cmd.add("-o"); -- cmd.add(output.name().toLowerCase()); -- cmd.add("-f"); -- cmd.add(outputFile.getAbsolutePath()); -+ cmd.add(String.valueOf(duration)); - if (interval != null) { - cmd.add("-i"); - cmd.add(interval.toString()); -@@ -212,24 +244,25 @@ public class ProfileServlet extends HttpServlet { - cmd.add("-j"); - cmd.add(jstackDepth.toString()); - } -- if (bufsize != null) { -- cmd.add("-b"); -- cmd.add(bufsize.toString()); -- } - if (thread) { - cmd.add("-t"); - } - if (simple) { - cmd.add("-s"); - } -- if (width != null) { -- cmd.add("--width"); -- cmd.add(width.toString()); -+ if (signature) { -+ cmd.add("-g"); - } -- if (height != null) { -- cmd.add("--height"); -- cmd.add(height.toString()); -+ if (annotate) { -+ cmd.add("-a"); - } -+ if (prependLib) { -+ cmd.add("-l"); -+ } -+ cmd.add("-o"); -+ cmd.add(output.name().toLowerCase()); -+ cmd.add("-f"); -+ cmd.add(outputFile.getAbsolutePath()); - if (minwidth != null) { - cmd.add("--minwidth"); - cmd.add(minwidth.toString()); -@@ -237,6 +270,7 @@ public class ProfileServlet extends HttpServlet { - if (reverse) { - cmd.add("--reverse"); - } -+ - cmd.add(pid.toString()); - process = ProcessUtils.runCmdAsync(cmd); - -@@ -247,7 +281,10 @@ public class ProfileServlet extends HttpServlet { - resp.getWriter() - .write("Started [" + event.getInternalName() - + "] profiling. This page will automatically redirect to " + relativeUrl + " after " -- + duration + " seconds.\n\nCommand:\n" + Joiner.on(" ").join(cmd)); -+ + duration + " seconds. " -+ + "If empty diagram and Linux 4.6+, see 'Basic Usage' section on the Async " -+ + "Profiler Home Page, https://github.com/jvm-profiling-tools/async-profiler." -+ + "\n\nCommand:\n" + Joiner.on(" ").join(cmd)); - - // to avoid auto-refresh by ProfileOutputServlet, refreshDelay can be specified - // via url param -@@ -265,8 +302,9 @@ public class ProfileServlet extends HttpServlet { - resp.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); - resp.getWriter() - .write("Unable to acquire lock. Another instance of profiler might be running."); -- LOG.warn("Unable to acquire lock in " + lockTimeoutSecs -- + " seconds. Another instance of profiler might be running."); -+ LOG.warn( -+ "Unable to acquire lock in {} seconds. Another instance of profiler might be running.", -+ lockTimeoutSecs); - } - } catch (InterruptedException e) { - LOG.warn("Interrupted while acquiring profile lock.", e); -@@ -279,9 +317,9 @@ public class ProfileServlet extends HttpServlet { - } - } - -- private Integer getInteger(final HttpServletRequest req, final String param, -+ private static Integer getInteger(final HttpServletRequest req, final String param, - final Integer defaultValue) { -- final String value = req.getParameter(param); -+ String value = req.getParameter(param); - if (value != null) { - try { - return Integer.valueOf(value); -@@ -292,8 +330,8 @@ public class ProfileServlet extends HttpServlet { - return defaultValue; - } - -- private Long getLong(final HttpServletRequest req, final String param) { -- final String value = req.getParameter(param); -+ private static Long getLong(final HttpServletRequest req, final String param) { -+ String value = req.getParameter(param); - if (value != null) { - try { - return Long.valueOf(value); -@@ -304,8 +342,8 @@ public class ProfileServlet extends HttpServlet { - return null; - } - -- private Double getMinWidth(final HttpServletRequest req) { -- final String value = req.getParameter("minwidth"); -+ private static Double getMinWidth(final HttpServletRequest req) { -+ String value = req.getParameter("minwidth"); - if (value != null) { - try { - return Double.valueOf(value); -@@ -316,8 +354,8 @@ public class ProfileServlet extends HttpServlet { - return null; - } - -- private Event getEvent(final HttpServletRequest req) { -- final String eventArg = req.getParameter("event"); -+ private static Event getEvent(final HttpServletRequest req) { -+ String eventArg = req.getParameter("event"); - if (eventArg != null) { - Event event = Event.fromInternalName(eventArg); - return event == null ? Event.CPU : event; -@@ -325,16 +363,16 @@ public class ProfileServlet extends HttpServlet { - return Event.CPU; - } - -- private Output getOutput(final HttpServletRequest req) { -- final String outputArg = req.getParameter("output"); -+ private static Output getOutput(final HttpServletRequest req) { -+ String outputArg = req.getParameter("output"); - if (req.getParameter("output") != null) { - try { - return Output.valueOf(outputArg.trim().toUpperCase()); - } catch (IllegalArgumentException e) { -- return Output.SVG; -+ return Output.FLAMEGRAPH; - } - } -- return Output.SVG; -+ return Output.FLAMEGRAPH; - } - - static void setResponseHeader(final HttpServletResponse response) { -@@ -366,8 +404,7 @@ public class ProfileServlet extends HttpServlet { - .write("The profiler servlet was disabled at startup.\n\n" - + "Please ensure the prerequisites for the Profiler Servlet have been installed and the\n" - + "environment is properly configured. For more information please see\n" -- + "http://hbase.apache.org/book.html#profiler\n"); -- return; -+ + "https://hbase.apache.org/book.html#profiler\n"); - } - - } diff --git a/hbase/stackable/patches/2.4.18/0003-HBASE-28379-Upgrade-thirdparty-deps.patch b/hbase/stackable/patches/2.4.18/0003-HBASE-28379-Upgrade-thirdparty-deps.patch deleted file mode 100644 index c96659868..000000000 --- a/hbase/stackable/patches/2.4.18/0003-HBASE-28379-Upgrade-thirdparty-deps.patch +++ /dev/null @@ -1,71 +0,0 @@ -From 8720a56fe1727d3de52e937e9df1631ed7b3c476 Mon Sep 17 00:00:00 2001 -From: Lars Francke -Date: Thu, 11 Jul 2024 10:12:51 +0200 -Subject: HBASE-28379: Upgrade thirdparty deps - ---- - hbase-protocol-shaded/pom.xml | 2 +- - hbase-shaded/pom.xml | 2 +- - pom.xml | 16 +++++++++++++--- - 3 files changed, 15 insertions(+), 5 deletions(-) - -diff --git a/hbase-protocol-shaded/pom.xml b/hbase-protocol-shaded/pom.xml -index c77dc74f8c..b73c0cfa68 100644 ---- a/hbase-protocol-shaded/pom.xml -+++ b/hbase-protocol-shaded/pom.xml -@@ -34,7 +34,7 @@ - -- 3.24.3 -+ 3.25.2 - - - -+ 2.16.1 -+ 2.16.1 - 2.3.1 - 3.1.0 - 2.1.1 -@@ -641,7 +645,13 @@ - 2.12 - 1.0.1 - 2.27.2 -- 4.1.5 -+ -+ 4.1.6 - 3.12.0 - 1.1.10.4 - diff --git a/hbase/stackable/patches/2.4.18/0004-HBASE-28511-Update-hbase-thirdparty-to-4.1.7.patch b/hbase/stackable/patches/2.4.18/0004-HBASE-28511-Update-hbase-thirdparty-to-4.1.7.patch deleted file mode 100644 index 190fe6cfc..000000000 --- a/hbase/stackable/patches/2.4.18/0004-HBASE-28511-Update-hbase-thirdparty-to-4.1.7.patch +++ /dev/null @@ -1,135 +0,0 @@ -From 92521e5f2798dbb21af9af56f48eb649f97e48ac Mon Sep 17 00:00:00 2001 -From: Lars Francke -Date: Thu, 11 Jul 2024 10:12:51 +0200 -Subject: HBASE-28511: Update hbase-thirdparty to 4.1.7 - ---- - .../org/apache/hadoop/hbase/security/EncryptionUtil.java | 4 ++-- - .../apache/hadoop/hbase/shaded/protobuf/ProtobufUtil.java | 2 +- - .../hbase/mapreduce/TableSnapshotInputFormatImpl.java | 2 +- - hbase-protocol-shaded/pom.xml | 2 +- - .../apache/hadoop/hbase/io/hfile/FixedFileTrailer.java | 2 +- - .../hadoop/hbase/zookeeper/MasterAddressTracker.java | 2 +- - pom.xml | 8 ++++---- - 7 files changed, 11 insertions(+), 11 deletions(-) - -diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/security/EncryptionUtil.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/security/EncryptionUtil.java -index 6c755f9a94..04fc5201cc 100644 ---- a/hbase-client/src/main/java/org/apache/hadoop/hbase/security/EncryptionUtil.java -+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/security/EncryptionUtil.java -@@ -120,7 +120,7 @@ public final class EncryptionUtil { - public static Key unwrapKey(Configuration conf, String subject, byte[] value) - throws IOException, KeyException { - EncryptionProtos.WrappedKey wrappedKey = -- EncryptionProtos.WrappedKey.PARSER.parseDelimitedFrom(new ByteArrayInputStream(value)); -+ EncryptionProtos.WrappedKey.parser().parseDelimitedFrom(new ByteArrayInputStream(value)); - String algorithm = conf.get(HConstants.CRYPTO_KEY_ALGORITHM_CONF_KEY, HConstants.CIPHER_AES); - Cipher cipher = Encryption.getCipher(conf, algorithm); - if (cipher == null) { -@@ -170,7 +170,7 @@ public final class EncryptionUtil { - public static Key unwrapWALKey(Configuration conf, String subject, byte[] value) - throws IOException, KeyException { - EncryptionProtos.WrappedKey wrappedKey = -- EncryptionProtos.WrappedKey.PARSER.parseDelimitedFrom(new ByteArrayInputStream(value)); -+ EncryptionProtos.WrappedKey.parser().parseDelimitedFrom(new ByteArrayInputStream(value)); - String algorithm = conf.get(HConstants.CRYPTO_WAL_ALGORITHM_CONF_KEY, HConstants.CIPHER_AES); - Cipher cipher = Encryption.getCipher(conf, algorithm); - if (cipher == null) { -diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/ProtobufUtil.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/ProtobufUtil.java -index 6e4396b5c6..b8079ffd3a 100644 ---- a/hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/ProtobufUtil.java -+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/ProtobufUtil.java -@@ -3034,7 +3034,7 @@ public final class ProtobufUtil { - int prefixLen = ProtobufMagic.lengthOfPBMagic(); - try { - ZooKeeperProtos.Master rss = -- ZooKeeperProtos.Master.PARSER.parseFrom(data, prefixLen, data.length - prefixLen); -+ ZooKeeperProtos.Master.parser().parseFrom(data, prefixLen, data.length - prefixLen); - org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.ServerName sn = - rss.getMaster(); - return ServerName.valueOf(sn.getHostName(), sn.getPort(), sn.getStartCode()); -diff --git a/hbase-mapreduce/src/main/java/org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatImpl.java b/hbase-mapreduce/src/main/java/org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatImpl.java -index 43cb69bd8c..f8fa1f6294 100644 ---- a/hbase-mapreduce/src/main/java/org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatImpl.java -+++ b/hbase-mapreduce/src/main/java/org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatImpl.java -@@ -227,7 +227,7 @@ public class TableSnapshotInputFormatImpl { - int len = in.readInt(); - byte[] buf = new byte[len]; - in.readFully(buf); -- TableSnapshotRegionSplit split = TableSnapshotRegionSplit.PARSER.parseFrom(buf); -+ TableSnapshotRegionSplit split = TableSnapshotRegionSplit.parser().parseFrom(buf); - this.htd = ProtobufUtil.toTableDescriptor(split.getTable()); - this.regionInfo = HRegionInfo.convert(split.getRegion()); - List locationsList = split.getLocationsList(); -diff --git a/hbase-protocol-shaded/pom.xml b/hbase-protocol-shaded/pom.xml -index b73c0cfa68..244e7dc764 100644 ---- a/hbase-protocol-shaded/pom.xml -+++ b/hbase-protocol-shaded/pom.xml -@@ -34,7 +34,7 @@ - -- 3.25.2 -+ 4.26.1 - - - - 3.10.6.Final -- 4.1.100.Final -+ 4.1.108.Final - - 0.13.0 - -- 2.16.1 -- 2.16.1 -+ 2.17.0 -+ 2.17.0 - 2.3.1 - 3.1.0 - 2.1.1 -@@ -651,7 +651,7 @@ - databind] must be kept in sync with the version of jackson-jaxrs-json-provider shipped in - hbase-thirdparty. - --> -- 4.1.6 -+ 4.1.7 - 3.12.0 - 1.1.10.4 - diff --git a/hbase/stackable/patches/2.4.18/0005-Update-all-available-dependencies-to-new-patch-versi.patch b/hbase/stackable/patches/2.4.18/0005-Update-all-available-dependencies-to-new-patch-versi.patch deleted file mode 100644 index dc0199d0c..000000000 --- a/hbase/stackable/patches/2.4.18/0005-Update-all-available-dependencies-to-new-patch-versi.patch +++ /dev/null @@ -1,129 +0,0 @@ -From 6acfff9441d96c18c2a1ec7c0d0c40aec8e94b2f Mon Sep 17 00:00:00 2001 -From: Lars Francke -Date: Thu, 11 Jul 2024 10:12:51 +0200 -Subject: Update all available dependencies to new patch versions - ---- - pom.xml | 46 +++++++++++++++++++++++----------------------- - 1 file changed, 23 insertions(+), 23 deletions(-) - -diff --git a/pom.xml b/pom.xml -index c4beb5aaeb..8bd80e81e2 100755 ---- a/pom.xml -+++ b/pom.xml -@@ -540,7 +540,7 @@ - 3.0.4 - ${compileSource} - -- 2.10.0 -+ 2.10.2 - 3.1.2 - - 3.10.6.Final -- 4.1.108.Final -+ 4.1.111.Final - - 0.13.0 - - 0.13.0 - 1.7.7 -- 2.8.1 -+ 2.8.8 - 1.15 - 2.11.0 - 3.9 - 3.6.1 - 1.5.0 - 3.4.4 -- 4.5.13 -- 4.4.13 -+ 4.5.14 -+ 4.4.16 - 3.2.6 - - com.google.protobuf -@@ -602,19 +602,19 @@ - ${external.protobuf.version} - 0.6.1 - thrift -- 0.14.1 -+ 0.14.2 - 3.8.4 - 2.11 -- 1.7.33 -+ 1.7.36 - 4.0.3 - 2.4.1 - 1.5.4 - -- 2.1.31 -- 1.0.55 -- 2.12.2 -- 1.78 -- 1.5.1 -+ 2.1.48 -+ 1.0.58 -+ 2.12.3 -+ 1.78.1 -+ 1.5.3 - 1.0.1 - 1.0.0 - 4.2.0 -@@ -631,17 +631,17 @@ - 1.0.0 - 1.8 - 3.3.0 -- 3.1.0 -+ 3.1.2 - 2.10 - 3.0.1 -- 3.4.0 -- 1.1.0 -+ 3.4.1 -+ 1.1.2 - 3.1.2 - 1.5.0.Final - 1.3.9-1 - 4.7.3 -- 4.7.2.1 -- 3.1.0 -+ 4.7.3.6 -+ 3.1.2 - 2.12 - 1.0.1 - 2.27.2 -@@ -652,8 +652,8 @@ - hbase-thirdparty. - --> - 4.1.7 -- 3.12.0 -- 1.1.10.4 -+ 3.12.1 -+ 1.1.10.5 - - 0.8.8 - diff --git a/hbase/stackable/patches/2.4.18/0006-Bump-cyclonedx-maven-plugin-to-version-2.8.0-and-twe.patch b/hbase/stackable/patches/2.4.18/0006-Bump-cyclonedx-maven-plugin-to-version-2.8.0-and-twe.patch deleted file mode 100644 index 78a5e3ee1..000000000 --- a/hbase/stackable/patches/2.4.18/0006-Bump-cyclonedx-maven-plugin-to-version-2.8.0-and-twe.patch +++ /dev/null @@ -1,27 +0,0 @@ -From 2aa0caa6a2c918f9f3bf21e9974f10fff1e1acc1 Mon Sep 17 00:00:00 2001 -From: Lukas Voetmand -Date: Fri, 6 Sep 2024 17:53:52 +0200 -Subject: Bump cyclonedx-maven-plugin to version 2.8.0 and tweak its - configuration - ---- - pom.xml | 6 +++++- - 1 file changed, 5 insertions(+), 1 deletion(-) - -diff --git a/pom.xml b/pom.xml -index 8bd80e81e2..58c29a9d90 100755 ---- a/pom.xml -+++ b/pom.xml -@@ -3011,7 +3011,11 @@ - - org.cyclonedx - cyclonedx-maven-plugin -- 2.7.10 -+ 2.8.0 -+ -+ application -+ 1.5 -+ - - - diff --git a/hbase/stackable/patches/2.4.18/patchable.toml b/hbase/stackable/patches/2.4.18/patchable.toml deleted file mode 100644 index e8de3270a..000000000 --- a/hbase/stackable/patches/2.4.18/patchable.toml +++ /dev/null @@ -1,2 +0,0 @@ -upstream = "https://github.com/apache/hbase.git" -base = "a1767f4d76859c0068720a6c1e5cb78282ebfe1e" diff --git a/hbase/stackable/patches/2.6.0/0001-HBASE-28242-Updates-async-profiler-support.patch b/hbase/stackable/patches/2.6.0/0001-HBASE-28242-Updates-async-profiler-support.patch deleted file mode 100644 index fc7be53c9..000000000 --- a/hbase/stackable/patches/2.6.0/0001-HBASE-28242-Updates-async-profiler-support.patch +++ /dev/null @@ -1,384 +0,0 @@ -From 5dedf99076578ec2d1a00f87b153ec7c04a40903 Mon Sep 17 00:00:00 2001 -From: Siegfried Weber -Date: Tue, 6 Feb 2024 16:10:54 +0100 -Subject: HBASE-28242: Updates async-profiler support - ---- - .../hadoop/hbase/http/ProfileServlet.java | 205 +++++++++++------- - 1 file changed, 121 insertions(+), 84 deletions(-) - -diff --git a/hbase-http/src/main/java/org/apache/hadoop/hbase/http/ProfileServlet.java b/hbase-http/src/main/java/org/apache/hadoop/hbase/http/ProfileServlet.java -index 83087dbed3..6139114717 100644 ---- a/hbase-http/src/main/java/org/apache/hadoop/hbase/http/ProfileServlet.java -+++ b/hbase-http/src/main/java/org/apache/hadoop/hbase/http/ProfileServlet.java -@@ -25,9 +25,11 @@ import java.util.concurrent.TimeUnit; - import java.util.concurrent.atomic.AtomicInteger; - import java.util.concurrent.locks.Lock; - import java.util.concurrent.locks.ReentrantLock; -+ - import javax.servlet.http.HttpServlet; - import javax.servlet.http.HttpServletRequest; - import javax.servlet.http.HttpServletResponse; -+ - import org.apache.hadoop.hbase.util.ProcessUtils; - import org.apache.yetus.audience.InterfaceAudience; - import org.slf4j.Logger; -@@ -37,23 +39,60 @@ import org.apache.hbase.thirdparty.com.google.common.base.Joiner; - - /** - * Servlet that runs async-profiler as web-endpoint. Following options from async-profiler can be -- * specified as query paramater. // -e event profiling event: cpu|alloc|lock|cache-misses etc. // -d -- * duration run profiling for 'duration' seconds (integer) // -i interval sampling interval in -- * nanoseconds (long) // -j jstackdepth maximum Java stack depth (integer) // -b bufsize frame -- * buffer size (long) // -t profile different threads separately // -s simple class names instead of -- * FQN // -o fmt[,fmt...] output format: summary|traces|flat|collapsed|svg|tree|jfr|html // --width -- * px SVG width pixels (integer) // --height px SVG frame height pixels (integer) // --minwidth px -- * skip frames smaller than px (double) // --reverse generate stack-reversed FlameGraph / Call tree -- * Example: - To collect 30 second CPU profile of current process (returns FlameGraph svg) curl -- * "http://localhost:10002/prof" - To collect 1 minute CPU profile of current process and output in -- * tree format (html) curl "http://localhost:10002/prof?output=tree&duration=60" - To collect 30 -- * second heap allocation profile of current process (returns FlameGraph svg) curl -- * "http://localhost:10002/prof?event=alloc" - To collect lock contention profile of current process -- * (returns FlameGraph svg) curl "http://localhost:10002/prof?event=lock" Following event types are -- * supported (default is 'cpu') (NOTE: not all OS'es support all events) // Perf events: // cpu // -- * page-faults // context-switches // cycles // instructions // cache-references // cache-misses // -- * branches // branch-misses // bus-cycles // L1-dcache-load-misses // LLC-load-misses // -- * dTLB-load-misses // mem:breakpoint // trace:tracepoint // Java events: // alloc // lock -+ * specified as query parameter. -+ *
    -+ *
  • -e event profiling event: cpu|alloc|lock|cache-misses etc.
  • -+ *
  • -d duration run profiling for 'duration' seconds (integer), default 10s
  • -+ *
  • -i interval sampling interval in nanoseconds (long), default 10ms
  • -+ *
  • -j jstackdepth maximum Java stack depth (integer), default 2048
  • -+ *
  • -t profile different threads separately
  • -+ *
  • -s simple class names instead of FQN
  • -+ *
  • -g print method signatures
  • -+ *
  • -a annotate Java methods
  • -+ *
  • -l prepend library names
  • -+ *
  • -o fmt output format: flat|traces|collapsed|flamegraph|tree|jfr
  • -+ *
  • --minwidth pct skip frames smaller than pct% (double)
  • -+ *
  • --reverse generate stack-reversed FlameGraph / Call tree
  • -+ *
-+ * Example: -+ *
    -+ *
  • To collect 30 second CPU profile of current process (returns FlameGraph svg): -+ * {@code curl http://localhost:10002/prof"}
  • -+ *
  • To collect 1 minute CPU profile of current process and output in tree format (html) -+ * {@code curl "http://localhost:10002/prof?output=tree&duration=60"}
  • -+ *
  • To collect 30 second heap allocation profile of current process (returns FlameGraph): -+ * {@code curl "http://localhost:10002/prof?event=alloc"}
  • -+ *
  • To collect lock contention profile of current process (returns FlameGraph): -+ * {@code curl "http://localhost:10002/prof?event=lock"}
  • -+ *
-+ * Following event types are supported (default is 'cpu') (NOTE: not all OS'es support all -+ * events).
-+ * Basic events: -+ *
    -+ *
  • cpu
  • -+ *
  • alloc
  • -+ *
  • lock
  • -+ *
  • wall
  • -+ *
  • itimer
  • -+ *
-+ * Perf events: -+ *
    -+ *
  • L1-dcache-load-misses
  • -+ *
  • LLC-load-misses
  • -+ *
  • branch-instructions
  • -+ *
  • branch-misses
  • -+ *
  • bus-cycles
  • -+ *
  • cache-misses
  • -+ *
  • cache-references
  • -+ *
  • context-switches
  • -+ *
  • cpu
  • -+ *
  • cycles
  • -+ *
  • dTLB-load-misses
  • -+ *
  • instructions
  • -+ *
  • mem:breakpoint
  • -+ *
  • page-faults
  • -+ *
  • trace:tracepoint
  • -+ *
- */ - @InterfaceAudience.Private - public class ProfileServlet extends HttpServlet { -@@ -77,19 +116,20 @@ public class ProfileServlet extends HttpServlet { - WALL("wall"), - ALLOC("alloc"), - LOCK("lock"), -- PAGE_FAULTS("page-faults"), -+ ITIMER("itimer"), -+ BRANCH_INSTRUCTIONS("branch-instructions"), -+ BRANCH_MISSES("branch-misses"), -+ BUS_CYCLES("bus-cycles"), -+ CACHE_MISSES("cache-misses"), -+ CACHE_REFERENCES("cache-references"), - CONTEXT_SWITCHES("context-switches"), - CYCLES("cycles"), -+ DTLB_LOAD_MISSES("dTLB-load-misses"), - INSTRUCTIONS("instructions"), -- CACHE_REFERENCES("cache-references"), -- CACHE_MISSES("cache-misses"), -- BRANCHES("branches"), -- BRANCH_MISSES("branch-misses"), -- BUS_CYCLES("bus-cycles"), - L1_DCACHE_LOAD_MISSES("L1-dcache-load-misses"), - LLC_LOAD_MISSES("LLC-load-misses"), -- DTLB_LOAD_MISSES("dTLB-load-misses"), - MEM_BREAKPOINT("mem:breakpoint"), -+ PAGE_FAULTS("page-faults"), - TRACE_TRACEPOINT("trace:tracepoint"),; - - private final String internalName; -@@ -98,11 +138,11 @@ public class ProfileServlet extends HttpServlet { - this.internalName = internalName; - } - -- public String getInternalName() { -+ String getInternalName() { - return internalName; - } - -- public static Event fromInternalName(final String name) { -+ static Event fromInternalName(final String name) { - for (Event event : values()) { - if (event.getInternalName().equalsIgnoreCase(name)) { - return event; -@@ -113,30 +153,26 @@ public class ProfileServlet extends HttpServlet { - } - } - -- enum Output { -- SUMMARY, -- TRACES, -- FLAT, -+ private enum Output { - COLLAPSED, -- // No SVG in 2.x asyncprofiler. -- SVG, -- TREE, -+ FLAMEGRAPH, -+ FLAT, - JFR, -- // In 2.x asyncprofiler, this is how you get flamegraphs. -- HTML -+ TRACES, -+ TREE - } - - @edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "SE_TRANSIENT_FIELD_NOT_RESTORED", - justification = "This class is never serialized nor restored.") -- private transient Lock profilerLock = new ReentrantLock(); -+ private final transient Lock profilerLock = new ReentrantLock(); - private transient volatile Process process; -- private String asyncProfilerHome; -+ private final String asyncProfilerHome; - private Integer pid; - - public ProfileServlet() { - this.asyncProfilerHome = getAsyncProfilerHome(); - this.pid = ProcessUtils.getPid(); -- LOG.info("Servlet process PID: " + pid + " asyncProfilerHome: " + asyncProfilerHome); -+ LOG.info("Servlet process PID: {} asyncProfilerHome: {}", pid, asyncProfilerHome); - } - - @Override -@@ -155,9 +191,9 @@ public class ProfileServlet extends HttpServlet { - setResponseHeader(resp); - resp.getWriter() - .write("ASYNC_PROFILER_HOME env is not set.\n\n" -- + "Please ensure the prerequsites for the Profiler Servlet have been installed and the\n" -+ + "Please ensure the prerequisites for the Profiler Servlet have been installed and the\n" - + "environment is properly configured. For more information please see\n" -- + "http://hbase.apache.org/book.html#profiler\n"); -+ + "https://hbase.apache.org/book.html#profiler\n"); - return; - } - -@@ -173,18 +209,18 @@ public class ProfileServlet extends HttpServlet { - return; - } - -- final int duration = getInteger(req, "duration", DEFAULT_DURATION_SECONDS); -- final Output output = getOutput(req); -- final Event event = getEvent(req); -- final Long interval = getLong(req, "interval"); -- final Integer jstackDepth = getInteger(req, "jstackdepth", null); -- final Long bufsize = getLong(req, "bufsize"); -- final boolean thread = req.getParameterMap().containsKey("thread"); -- final boolean simple = req.getParameterMap().containsKey("simple"); -- final Integer width = getInteger(req, "width", null); -- final Integer height = getInteger(req, "height", null); -- final Double minwidth = getMinWidth(req); -- final boolean reverse = req.getParameterMap().containsKey("reverse"); -+ Event event = getEvent(req); -+ int duration = getInteger(req, "duration", DEFAULT_DURATION_SECONDS); -+ Long interval = getLong(req, "interval"); -+ Integer jstackDepth = getInteger(req, "jstackdepth", null); -+ boolean thread = req.getParameterMap().containsKey("thread"); -+ boolean simple = req.getParameterMap().containsKey("simple"); -+ boolean signature = req.getParameterMap().containsKey("signature"); -+ boolean annotate = req.getParameterMap().containsKey("annotate"); -+ boolean prependLib = req.getParameterMap().containsKey("prependlib"); -+ Output output = getOutput(req); -+ Double minwidth = getMinWidth(req); -+ boolean reverse = req.getParameterMap().containsKey("reverse"); - - if (process == null || !process.isAlive()) { - try { -@@ -199,11 +235,7 @@ public class ProfileServlet extends HttpServlet { - cmd.add("-e"); - cmd.add(event.getInternalName()); - cmd.add("-d"); -- cmd.add("" + duration); -- cmd.add("-o"); -- cmd.add(output.name().toLowerCase()); -- cmd.add("-f"); -- cmd.add(outputFile.getAbsolutePath()); -+ cmd.add(String.valueOf(duration)); - if (interval != null) { - cmd.add("-i"); - cmd.add(interval.toString()); -@@ -212,24 +244,25 @@ public class ProfileServlet extends HttpServlet { - cmd.add("-j"); - cmd.add(jstackDepth.toString()); - } -- if (bufsize != null) { -- cmd.add("-b"); -- cmd.add(bufsize.toString()); -- } - if (thread) { - cmd.add("-t"); - } - if (simple) { - cmd.add("-s"); - } -- if (width != null) { -- cmd.add("--width"); -- cmd.add(width.toString()); -+ if (signature) { -+ cmd.add("-g"); - } -- if (height != null) { -- cmd.add("--height"); -- cmd.add(height.toString()); -+ if (annotate) { -+ cmd.add("-a"); - } -+ if (prependLib) { -+ cmd.add("-l"); -+ } -+ cmd.add("-o"); -+ cmd.add(output.name().toLowerCase()); -+ cmd.add("-f"); -+ cmd.add(outputFile.getAbsolutePath()); - if (minwidth != null) { - cmd.add("--minwidth"); - cmd.add(minwidth.toString()); -@@ -237,6 +270,7 @@ public class ProfileServlet extends HttpServlet { - if (reverse) { - cmd.add("--reverse"); - } -+ - cmd.add(pid.toString()); - process = ProcessUtils.runCmdAsync(cmd); - -@@ -247,7 +281,10 @@ public class ProfileServlet extends HttpServlet { - resp.getWriter() - .write("Started [" + event.getInternalName() - + "] profiling. This page will automatically redirect to " + relativeUrl + " after " -- + duration + " seconds.\n\nCommand:\n" + Joiner.on(" ").join(cmd)); -+ + duration + " seconds. " -+ + "If empty diagram and Linux 4.6+, see 'Basic Usage' section on the Async " -+ + "Profiler Home Page, https://github.com/jvm-profiling-tools/async-profiler." -+ + "\n\nCommand:\n" + Joiner.on(" ").join(cmd)); - - // to avoid auto-refresh by ProfileOutputServlet, refreshDelay can be specified - // via url param -@@ -265,8 +302,9 @@ public class ProfileServlet extends HttpServlet { - resp.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); - resp.getWriter() - .write("Unable to acquire lock. Another instance of profiler might be running."); -- LOG.warn("Unable to acquire lock in " + lockTimeoutSecs -- + " seconds. Another instance of profiler might be running."); -+ LOG.warn( -+ "Unable to acquire lock in {} seconds. Another instance of profiler might be running.", -+ lockTimeoutSecs); - } - } catch (InterruptedException e) { - LOG.warn("Interrupted while acquiring profile lock.", e); -@@ -279,9 +317,9 @@ public class ProfileServlet extends HttpServlet { - } - } - -- private Integer getInteger(final HttpServletRequest req, final String param, -+ private static Integer getInteger(final HttpServletRequest req, final String param, - final Integer defaultValue) { -- final String value = req.getParameter(param); -+ String value = req.getParameter(param); - if (value != null) { - try { - return Integer.valueOf(value); -@@ -292,8 +330,8 @@ public class ProfileServlet extends HttpServlet { - return defaultValue; - } - -- private Long getLong(final HttpServletRequest req, final String param) { -- final String value = req.getParameter(param); -+ private static Long getLong(final HttpServletRequest req, final String param) { -+ String value = req.getParameter(param); - if (value != null) { - try { - return Long.valueOf(value); -@@ -304,8 +342,8 @@ public class ProfileServlet extends HttpServlet { - return null; - } - -- private Double getMinWidth(final HttpServletRequest req) { -- final String value = req.getParameter("minwidth"); -+ private static Double getMinWidth(final HttpServletRequest req) { -+ String value = req.getParameter("minwidth"); - if (value != null) { - try { - return Double.valueOf(value); -@@ -316,8 +354,8 @@ public class ProfileServlet extends HttpServlet { - return null; - } - -- private Event getEvent(final HttpServletRequest req) { -- final String eventArg = req.getParameter("event"); -+ private static Event getEvent(final HttpServletRequest req) { -+ String eventArg = req.getParameter("event"); - if (eventArg != null) { - Event event = Event.fromInternalName(eventArg); - return event == null ? Event.CPU : event; -@@ -325,16 +363,16 @@ public class ProfileServlet extends HttpServlet { - return Event.CPU; - } - -- private Output getOutput(final HttpServletRequest req) { -- final String outputArg = req.getParameter("output"); -+ private static Output getOutput(final HttpServletRequest req) { -+ String outputArg = req.getParameter("output"); - if (req.getParameter("output") != null) { - try { - return Output.valueOf(outputArg.trim().toUpperCase()); - } catch (IllegalArgumentException e) { -- return Output.HTML; -+ return Output.FLAMEGRAPH; - } - } -- return Output.HTML; -+ return Output.FLAMEGRAPH; - } - - static void setResponseHeader(final HttpServletResponse response) { -@@ -366,8 +404,7 @@ public class ProfileServlet extends HttpServlet { - .write("The profiler servlet was disabled at startup.\n\n" - + "Please ensure the prerequisites for the Profiler Servlet have been installed and the\n" - + "environment is properly configured. For more information please see\n" -- + "http://hbase.apache.org/book.html#profiler\n"); -- return; -+ + "https://hbase.apache.org/book.html#profiler\n"); - } - - } diff --git a/hbase/stackable/patches/2.6.0/0002-HBASE-28567-Race-condition-causes-MetaRegionLocation.patch b/hbase/stackable/patches/2.6.0/0002-HBASE-28567-Race-condition-causes-MetaRegionLocation.patch deleted file mode 100644 index 5769e7c25..000000000 --- a/hbase/stackable/patches/2.6.0/0002-HBASE-28567-Race-condition-causes-MetaRegionLocation.patch +++ /dev/null @@ -1,26 +0,0 @@ -From d0b4d835981de37250ad076298ef236c411b7ce0 Mon Sep 17 00:00:00 2001 -From: Razvan-Daniel Mihai <84674+razvan@users.noreply.github.com> -Date: Fri, 12 Jul 2024 17:30:12 -0400 -Subject: HBASE-28567: Race condition causes MetaRegionLocationCache to never - set watcher to populate meta location - ---- - .../java/org/apache/hadoop/hbase/zookeeper/ZKWatcher.java | 5 +++++ - 1 file changed, 5 insertions(+) - -diff --git a/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKWatcher.java b/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKWatcher.java -index 3879cb7ba9..5af7de5678 100644 ---- a/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKWatcher.java -+++ b/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKWatcher.java -@@ -460,6 +460,11 @@ public class ZKWatcher implements Watcher, Abortable, Closeable { - public List getMetaReplicaNodesAndWatchChildren() throws KeeperException { - List childrenOfBaseNode = - ZKUtil.listChildrenAndWatchForNewChildren(this, znodePaths.baseZNode); -+ // Need to throw here instead of returning an empty list if the base znode hasn't been created -+ // Caller should retry in that case, versus thinking the base znode has a watcher set -+ if (childrenOfBaseNode == null) { -+ keeperException(new KeeperException.NoNodeException(znodePaths.baseZNode)); -+ } - return filterMetaReplicaNodes(childrenOfBaseNode); - } - diff --git a/hbase/stackable/patches/2.6.0/0003-Update-all-dependencies-which-have-a-new-patch-updat.patch b/hbase/stackable/patches/2.6.0/0003-Update-all-dependencies-which-have-a-new-patch-updat.patch deleted file mode 100644 index a8799977e..000000000 --- a/hbase/stackable/patches/2.6.0/0003-Update-all-dependencies-which-have-a-new-patch-updat.patch +++ /dev/null @@ -1,115 +0,0 @@ -From fea1d27160dc1e8f53509ae0f57518404d16dae0 Mon Sep 17 00:00:00 2001 -From: Lars Francke -Date: Thu, 11 Jul 2024 10:12:51 +0200 -Subject: Update all dependencies which have a new patch update available. - ---- - pom.xml | 40 ++++++++++++++++++++-------------------- - 1 file changed, 20 insertions(+), 20 deletions(-) - -diff --git a/pom.xml b/pom.xml -index 918cdaa675..b420025c6c 100644 ---- a/pom.xml -+++ b/pom.xml -@@ -567,7 +567,7 @@ - modules and cause trouble if we only rely on transitive dependencies. - --> - 3.10.6.Final -- 4.1.108.Final -+ 4.1.111.Final - - 0.13.0 - - 0.13.0 - 1.11.3 -- 2.8.1 -+ 2.8.8 - 1.15 - 2.11.0 - 3.9 - 3.6.1 - 1.5.0 - 3.4.4 -- 4.5.13 -- 4.4.13 -+ 4.5.14 -+ 4.4.16 - 3.2.6 - - 2.2.1 - 1.0.58 -- 2.12.2 -- 1.78 -- 1.5.1 -+ 2.12.3 -+ 1.78.1 -+ 1.5.3 - 1.0.1 - 1.1.0 - 4.2.0 -@@ -639,27 +639,27 @@ - 1.0.0 - 1.8 - 3.3.0 -- 3.1.0 -+ 3.1.2 - 2.10 - 3.0.1 -- 3.4.0 -- 1.1.0 -+ 3.4.1 -+ 1.1.2 - 3.1.2 - 1.5.0.Final - 1.3.9-1 - 4.7.3 -- 4.7.2.1 -- 3.1.0 -+ 4.7.3.6 -+ 3.1.2 - 2.12 - 1.0.1 - 2.27.2 -- 3.12.0 -+ 3.12.1 - - 0.24 - 1.11.0 - 1.8.0 -- 1.1.10.4 -- 1.5.5-2 -+ 1.1.10.5 -+ 1.5.6-3 - -+ com.fasterxml.jackson.dataformat -+ jackson-dataformat-xml -+ - - org.apache.logging.log4j - log4j-slf4j-impl -diff --git a/pom.xml b/pom.xml -index b420025c6c..819e021d86 100644 ---- a/pom.xml -+++ b/pom.xml -@@ -1149,6 +1149,11 @@ - log4j-core - ${log4j2.version} - -+ -+ org.apache.logging.log4j -+ log4j-core -+ ${log4j2.version} -+ - - org.apache.logging.log4j - log4j-slf4j-impl -@@ -1159,6 +1164,13 @@ - log4j-1.2-api - ${log4j2.version} - -+ -+ -+ com.fasterxml.jackson.dataformat -+ jackson-dataformat-xml -+ ${jackson.databind.version} -+ -+ - - - org.apache.avro diff --git a/hbase/stackable/patches/2.6.0/0005-Bump-cyclonedx-maven-plugin-to-version-2.8.0-and-twe.patch b/hbase/stackable/patches/2.6.0/0005-Bump-cyclonedx-maven-plugin-to-version-2.8.0-and-twe.patch deleted file mode 100644 index 65abd8c09..000000000 --- a/hbase/stackable/patches/2.6.0/0005-Bump-cyclonedx-maven-plugin-to-version-2.8.0-and-twe.patch +++ /dev/null @@ -1,27 +0,0 @@ -From bcbdb378846206c42a602107e380c29af1ac9163 Mon Sep 17 00:00:00 2001 -From: Lukas Voetmand -Date: Fri, 6 Sep 2024 17:53:52 +0200 -Subject: Bump cyclonedx-maven-plugin to version 2.8.0 and tweak its - configuration - ---- - pom.xml | 6 +++++- - 1 file changed, 5 insertions(+), 1 deletion(-) - -diff --git a/pom.xml b/pom.xml -index 819e021d86..0bd6a69703 100644 ---- a/pom.xml -+++ b/pom.xml -@@ -3230,7 +3230,11 @@ - - org.cyclonedx - cyclonedx-maven-plugin -- 2.7.10 -+ 2.8.0 -+ -+ application -+ 1.5 -+ - - - diff --git a/hbase/stackable/patches/2.6.0/0006-Fix-CVE-2024-36114.patch b/hbase/stackable/patches/2.6.0/0006-Fix-CVE-2024-36114.patch deleted file mode 100644 index c0c080f27..000000000 --- a/hbase/stackable/patches/2.6.0/0006-Fix-CVE-2024-36114.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 02affcbe2f4aa7a22493c9aaa72602c5520bf2a9 Mon Sep 17 00:00:00 2001 -From: Siegfried Weber -Date: Mon, 11 Nov 2024 10:00:15 +0100 -Subject: Fix CVE-2024-36114 - -see https://github.com/stackabletech/vulnerabilities/issues/834 - -Aircompressor is a library with ports of the Snappy, LZO, LZ4, and -Zstandard compression algorithms to Java. All decompressor -implementations of Aircompressor (LZ4, LZO, Snappy, Zstandard) can crash -the JVM for certain input, and in some cases also leak the content of -other memory of the Java process (which could contain sensitive -information). When decompressing certain data, the decompressors try to -access memory outside the bounds of the given byte arrays or byte -buffers. Because Aircompressor uses the JDK class sun.misc.Unsafe to -speed up memory access, no additional bounds checks are performed and -this has similar security consequences as out-of-bounds access in C or -C++, namely it can lead to non-deterministic behavior or crash the JVM. -Users should update to Aircompressor 0.27 or newer where these issues -have been fixed. When decompressing data from untrusted users, this can -be exploited for a denial-of-service attack by crashing the JVM, or to -leak other sensitive information from the Java process. There are no -known workarounds for this issue. ---- - pom.xml | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/pom.xml b/pom.xml -index 0bd6a69703..50948c2746 100644 ---- a/pom.xml -+++ b/pom.xml -@@ -655,7 +655,7 @@ - 2.27.2 - 3.12.1 - -- 0.24 -+ 0.27 - 1.11.0 - 1.8.0 - 1.1.10.5 diff --git a/hbase/stackable/patches/2.6.0/patchable.toml b/hbase/stackable/patches/2.6.0/patchable.toml deleted file mode 100644 index 0e7f1956f..000000000 --- a/hbase/stackable/patches/2.6.0/patchable.toml +++ /dev/null @@ -1,2 +0,0 @@ -upstream = "https://github.com/apache/hbase.git" -base = "de99f8754135ea69adc39da48d2bc2b2710a5366" diff --git a/hbase/versions.py b/hbase/versions.py index 326b83c4d..043c373bd 100644 --- a/hbase/versions.py +++ b/hbase/versions.py @@ -1,20 +1,6 @@ versions = [ # Also do not merge java-base with java below as "JAVA-BASE is not a valid identifier" in Dockerfiles, it's unfortunate but to fix this would require a bigger refactoring of names or the image tools # hbase-thirdparty is used to build the hbase-operator-tools and should be set to the version defined in the POM of HBase. - { - "product": "2.4.18", - "hbase_thirdparty": "4.1.5", - "hbase_operator_tools": "1.2.0", - "java-base": "11", - "java-devel": "11", - "async_profiler": "2.9", - "phoenix": "5.2.1", - "hbase_profile": "2.4", - "hadoop": "3.3.6", - "jmx_exporter": "1.2.0", # update the stackable/jmx/config folder too - "opa_authorizer": "", # only for HBase 2.6.1 - "delete_caches": "true", - }, { "product": "2.6.1", "hbase_thirdparty": "4.1.9", From bdccb25905768203a60c08a40058e064233bb514 Mon Sep 17 00:00:00 2001 From: Razvan-Daniel Mihai <84674+razvan@users.noreply.github.com> Date: Tue, 6 May 2025 12:36:21 +0200 Subject: [PATCH 02/14] hbase 2.6.1 update hadoop dependency to 3.4.1 The wildcard cop --- hbase/Dockerfile | 5 ++++- hbase/versions.py | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/hbase/Dockerfile b/hbase/Dockerfile index ae10f8054..0b1d74e9a 100644 --- a/hbase/Dockerfile +++ b/hbase/Dockerfile @@ -206,7 +206,10 @@ USER ${STACKABLE_USER_UID} WORKDIR /stackable COPY --from=hadoop-builder --chown=${STACKABLE_USER_UID}:0 \ - /stackable/hadoop/share/hadoop/tools/lib/aws-java-sdk-bundle-*.jar \ + # The artifact name of the AWS bundle has changed between Haddop 3.3.6 and 3.4.1 + # from aws-java-sdk-bundle-*.jar to bundle-*.jar. + # See: https://hadoop.apache.org/docs/stable/hadoop-aws/tools/hadoop-aws/aws_sdk_upgrade.html + /stackable/hadoop/share/hadoop/tools/lib/bundle-*.jar \ /stackable/hadoop/share/hadoop/tools/lib/hadoop-aws-${HADOOP}.jar \ /stackable/hadoop/share/hadoop/tools/lib/ diff --git a/hbase/versions.py b/hbase/versions.py index 043c373bd..9cac9ebe6 100644 --- a/hbase/versions.py +++ b/hbase/versions.py @@ -10,7 +10,7 @@ "async_profiler": "2.9", "phoenix": "5.2.1", "hbase_profile": "2.6", - "hadoop": "3.3.6", + "hadoop": "3.4.1", "jmx_exporter": "", # 2.6 exports jmx and prometheus metrics by default "opa_authorizer": "0.1.0", # only for HBase 2.6.1 "delete_caches": "true", From 4eb7df453334a8f92bc1f5f6648e737f4b24d59a Mon Sep 17 00:00:00 2001 From: Razvan-Daniel Mihai <84674+razvan@users.noreply.github.com> Date: Tue, 6 May 2025 13:14:45 +0200 Subject: [PATCH 03/14] add hbase 2.6.2 --- ...28242-Updates-async-profiler-support.patch | 384 ++++++++++++++++++ ...dencies-which-have-a-new-patch-updat.patch | 118 ++++++ .../0003-Include-jackson-dataformat-xml.patch | 59 +++ ...aven-plugin-to-version-2.9.1-and-twe.patch | 27 ++ hbase/stackable/patches/2.6.2/patchable.toml | 2 + hbase/versions.py | 14 + 6 files changed, 604 insertions(+) create mode 100644 hbase/stackable/patches/2.6.2/0001-HBASE-28242-Updates-async-profiler-support.patch create mode 100644 hbase/stackable/patches/2.6.2/0002-Update-all-dependencies-which-have-a-new-patch-updat.patch create mode 100644 hbase/stackable/patches/2.6.2/0003-Include-jackson-dataformat-xml.patch create mode 100644 hbase/stackable/patches/2.6.2/0004-Bump-cyclonedx-maven-plugin-to-version-2.9.1-and-twe.patch create mode 100644 hbase/stackable/patches/2.6.2/patchable.toml diff --git a/hbase/stackable/patches/2.6.2/0001-HBASE-28242-Updates-async-profiler-support.patch b/hbase/stackable/patches/2.6.2/0001-HBASE-28242-Updates-async-profiler-support.patch new file mode 100644 index 000000000..df2efe1e1 --- /dev/null +++ b/hbase/stackable/patches/2.6.2/0001-HBASE-28242-Updates-async-profiler-support.patch @@ -0,0 +1,384 @@ +From 3f32872b0c49ed7125803fd599e7f1318ce8c00a Mon Sep 17 00:00:00 2001 +From: Siegfried Weber +Date: Tue, 6 Feb 2024 16:10:54 +0100 +Subject: HBASE-28242: Updates async-profiler support + +--- + .../hadoop/hbase/http/ProfileServlet.java | 205 +++++++++++------- + 1 file changed, 121 insertions(+), 84 deletions(-) + +diff --git a/hbase-http/src/main/java/org/apache/hadoop/hbase/http/ProfileServlet.java b/hbase-http/src/main/java/org/apache/hadoop/hbase/http/ProfileServlet.java +index e92b4f9ae0..521ad7c380 100644 +--- a/hbase-http/src/main/java/org/apache/hadoop/hbase/http/ProfileServlet.java ++++ b/hbase-http/src/main/java/org/apache/hadoop/hbase/http/ProfileServlet.java +@@ -28,9 +28,11 @@ import java.util.concurrent.TimeUnit; + import java.util.concurrent.atomic.AtomicInteger; + import java.util.concurrent.locks.Lock; + import java.util.concurrent.locks.ReentrantLock; ++ + import javax.servlet.http.HttpServlet; + import javax.servlet.http.HttpServletRequest; + import javax.servlet.http.HttpServletResponse; ++ + import org.apache.hadoop.hbase.util.ProcessUtils; + import org.apache.yetus.audience.InterfaceAudience; + import org.slf4j.Logger; +@@ -40,23 +42,60 @@ import org.apache.hbase.thirdparty.com.google.common.base.Joiner; + + /** + * Servlet that runs async-profiler as web-endpoint. Following options from async-profiler can be +- * specified as query paramater. // -e event profiling event: cpu|alloc|lock|cache-misses etc. // -d +- * duration run profiling for 'duration' seconds (integer) // -i interval sampling interval in +- * nanoseconds (long) // -j jstackdepth maximum Java stack depth (integer) // -b bufsize frame +- * buffer size (long) // -t profile different threads separately // -s simple class names instead of +- * FQN // -o fmt[,fmt...] output format: summary|traces|flat|collapsed|svg|tree|jfr|html // --width +- * px SVG width pixels (integer) // --height px SVG frame height pixels (integer) // --minwidth px +- * skip frames smaller than px (double) // --reverse generate stack-reversed FlameGraph / Call tree +- * Example: - To collect 30 second CPU profile of current process (returns FlameGraph svg) curl +- * "http://localhost:10002/prof" - To collect 1 minute CPU profile of current process and output in +- * tree format (html) curl "http://localhost:10002/prof?output=tree&duration=60" - To collect 30 +- * second heap allocation profile of current process (returns FlameGraph svg) curl +- * "http://localhost:10002/prof?event=alloc" - To collect lock contention profile of current process +- * (returns FlameGraph svg) curl "http://localhost:10002/prof?event=lock" Following event types are +- * supported (default is 'cpu') (NOTE: not all OS'es support all events) // Perf events: // cpu // +- * page-faults // context-switches // cycles // instructions // cache-references // cache-misses // +- * branches // branch-misses // bus-cycles // L1-dcache-load-misses // LLC-load-misses // +- * dTLB-load-misses // mem:breakpoint // trace:tracepoint // Java events: // alloc // lock ++ * specified as query parameter. ++ *
    ++ *
  • -e event profiling event: cpu|alloc|lock|cache-misses etc.
  • ++ *
  • -d duration run profiling for 'duration' seconds (integer), default 10s
  • ++ *
  • -i interval sampling interval in nanoseconds (long), default 10ms
  • ++ *
  • -j jstackdepth maximum Java stack depth (integer), default 2048
  • ++ *
  • -t profile different threads separately
  • ++ *
  • -s simple class names instead of FQN
  • ++ *
  • -g print method signatures
  • ++ *
  • -a annotate Java methods
  • ++ *
  • -l prepend library names
  • ++ *
  • -o fmt output format: flat|traces|collapsed|flamegraph|tree|jfr
  • ++ *
  • --minwidth pct skip frames smaller than pct% (double)
  • ++ *
  • --reverse generate stack-reversed FlameGraph / Call tree
  • ++ *
++ * Example: ++ *
    ++ *
  • To collect 30 second CPU profile of current process (returns FlameGraph svg): ++ * {@code curl http://localhost:10002/prof"}
  • ++ *
  • To collect 1 minute CPU profile of current process and output in tree format (html) ++ * {@code curl "http://localhost:10002/prof?output=tree&duration=60"}
  • ++ *
  • To collect 30 second heap allocation profile of current process (returns FlameGraph): ++ * {@code curl "http://localhost:10002/prof?event=alloc"}
  • ++ *
  • To collect lock contention profile of current process (returns FlameGraph): ++ * {@code curl "http://localhost:10002/prof?event=lock"}
  • ++ *
++ * Following event types are supported (default is 'cpu') (NOTE: not all OS'es support all ++ * events).
++ * Basic events: ++ *
    ++ *
  • cpu
  • ++ *
  • alloc
  • ++ *
  • lock
  • ++ *
  • wall
  • ++ *
  • itimer
  • ++ *
++ * Perf events: ++ *
    ++ *
  • L1-dcache-load-misses
  • ++ *
  • LLC-load-misses
  • ++ *
  • branch-instructions
  • ++ *
  • branch-misses
  • ++ *
  • bus-cycles
  • ++ *
  • cache-misses
  • ++ *
  • cache-references
  • ++ *
  • context-switches
  • ++ *
  • cpu
  • ++ *
  • cycles
  • ++ *
  • dTLB-load-misses
  • ++ *
  • instructions
  • ++ *
  • mem:breakpoint
  • ++ *
  • page-faults
  • ++ *
  • trace:tracepoint
  • ++ *
+ */ + @InterfaceAudience.Private + public class ProfileServlet extends HttpServlet { +@@ -81,19 +120,20 @@ public class ProfileServlet extends HttpServlet { + WALL("wall"), + ALLOC("alloc"), + LOCK("lock"), +- PAGE_FAULTS("page-faults"), ++ ITIMER("itimer"), ++ BRANCH_INSTRUCTIONS("branch-instructions"), ++ BRANCH_MISSES("branch-misses"), ++ BUS_CYCLES("bus-cycles"), ++ CACHE_MISSES("cache-misses"), ++ CACHE_REFERENCES("cache-references"), + CONTEXT_SWITCHES("context-switches"), + CYCLES("cycles"), ++ DTLB_LOAD_MISSES("dTLB-load-misses"), + INSTRUCTIONS("instructions"), +- CACHE_REFERENCES("cache-references"), +- CACHE_MISSES("cache-misses"), +- BRANCHES("branches"), +- BRANCH_MISSES("branch-misses"), +- BUS_CYCLES("bus-cycles"), + L1_DCACHE_LOAD_MISSES("L1-dcache-load-misses"), + LLC_LOAD_MISSES("LLC-load-misses"), +- DTLB_LOAD_MISSES("dTLB-load-misses"), + MEM_BREAKPOINT("mem:breakpoint"), ++ PAGE_FAULTS("page-faults"), + TRACE_TRACEPOINT("trace:tracepoint"),; + + private final String internalName; +@@ -102,11 +142,11 @@ public class ProfileServlet extends HttpServlet { + this.internalName = internalName; + } + +- public String getInternalName() { ++ String getInternalName() { + return internalName; + } + +- public static Event fromInternalName(final String name) { ++ static Event fromInternalName(final String name) { + for (Event event : values()) { + if (event.getInternalName().equalsIgnoreCase(name)) { + return event; +@@ -117,30 +157,26 @@ public class ProfileServlet extends HttpServlet { + } + } + +- enum Output { +- SUMMARY, +- TRACES, +- FLAT, ++ private enum Output { + COLLAPSED, +- // No SVG in 2.x asyncprofiler. +- SVG, +- TREE, ++ FLAMEGRAPH, ++ FLAT, + JFR, +- // In 2.x asyncprofiler, this is how you get flamegraphs. +- HTML ++ TRACES, ++ TREE + } + + @edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "SE_TRANSIENT_FIELD_NOT_RESTORED", + justification = "This class is never serialized nor restored.") +- private transient Lock profilerLock = new ReentrantLock(); ++ private final transient Lock profilerLock = new ReentrantLock(); + private transient volatile Process process; +- private String asyncProfilerHome; ++ private final String asyncProfilerHome; + private Integer pid; + + public ProfileServlet() { + this.asyncProfilerHome = getAsyncProfilerHome(); + this.pid = ProcessUtils.getPid(); +- LOG.info("Servlet process PID: " + pid + " asyncProfilerHome: " + asyncProfilerHome); ++ LOG.info("Servlet process PID: {} asyncProfilerHome: {}", pid, asyncProfilerHome); + } + + @Override +@@ -159,9 +195,9 @@ public class ProfileServlet extends HttpServlet { + setResponseHeader(resp); + resp.getWriter() + .write("ASYNC_PROFILER_HOME env is not set.\n\n" +- + "Please ensure the prerequsites for the Profiler Servlet have been installed and the\n" ++ + "Please ensure the prerequisites for the Profiler Servlet have been installed and the\n" + + "environment is properly configured. For more information please see\n" +- + "http://hbase.apache.org/book.html#profiler\n"); ++ + "https://hbase.apache.org/book.html#profiler\n"); + return; + } + +@@ -177,18 +213,18 @@ public class ProfileServlet extends HttpServlet { + return; + } + +- final int duration = getInteger(req, "duration", DEFAULT_DURATION_SECONDS); +- final Output output = getOutput(req); +- final Event event = getEvent(req); +- final Long interval = getLong(req, "interval"); +- final Integer jstackDepth = getInteger(req, "jstackdepth", null); +- final Long bufsize = getLong(req, "bufsize"); +- final boolean thread = req.getParameterMap().containsKey("thread"); +- final boolean simple = req.getParameterMap().containsKey("simple"); +- final Integer width = getInteger(req, "width", null); +- final Integer height = getInteger(req, "height", null); +- final Double minwidth = getMinWidth(req); +- final boolean reverse = req.getParameterMap().containsKey("reverse"); ++ Event event = getEvent(req); ++ int duration = getInteger(req, "duration", DEFAULT_DURATION_SECONDS); ++ Long interval = getLong(req, "interval"); ++ Integer jstackDepth = getInteger(req, "jstackdepth", null); ++ boolean thread = req.getParameterMap().containsKey("thread"); ++ boolean simple = req.getParameterMap().containsKey("simple"); ++ boolean signature = req.getParameterMap().containsKey("signature"); ++ boolean annotate = req.getParameterMap().containsKey("annotate"); ++ boolean prependLib = req.getParameterMap().containsKey("prependlib"); ++ Output output = getOutput(req); ++ Double minwidth = getMinWidth(req); ++ boolean reverse = req.getParameterMap().containsKey("reverse"); + + if (process == null || !process.isAlive()) { + try { +@@ -208,11 +244,7 @@ public class ProfileServlet extends HttpServlet { + cmd.add("-e"); + cmd.add(event.getInternalName()); + cmd.add("-d"); +- cmd.add("" + duration); +- cmd.add("-o"); +- cmd.add(output.name().toLowerCase()); +- cmd.add("-f"); +- cmd.add(outputFile.getAbsolutePath()); ++ cmd.add(String.valueOf(duration)); + if (interval != null) { + cmd.add("-i"); + cmd.add(interval.toString()); +@@ -221,24 +253,25 @@ public class ProfileServlet extends HttpServlet { + cmd.add("-j"); + cmd.add(jstackDepth.toString()); + } +- if (bufsize != null) { +- cmd.add("-b"); +- cmd.add(bufsize.toString()); +- } + if (thread) { + cmd.add("-t"); + } + if (simple) { + cmd.add("-s"); + } +- if (width != null) { +- cmd.add("--width"); +- cmd.add(width.toString()); ++ if (signature) { ++ cmd.add("-g"); + } +- if (height != null) { +- cmd.add("--height"); +- cmd.add(height.toString()); ++ if (annotate) { ++ cmd.add("-a"); + } ++ if (prependLib) { ++ cmd.add("-l"); ++ } ++ cmd.add("-o"); ++ cmd.add(output.name().toLowerCase()); ++ cmd.add("-f"); ++ cmd.add(outputFile.getAbsolutePath()); + if (minwidth != null) { + cmd.add("--minwidth"); + cmd.add(minwidth.toString()); +@@ -246,6 +279,7 @@ public class ProfileServlet extends HttpServlet { + if (reverse) { + cmd.add("--reverse"); + } ++ + cmd.add(pid.toString()); + process = ProcessUtils.runCmdAsync(cmd); + +@@ -256,7 +290,10 @@ public class ProfileServlet extends HttpServlet { + resp.getWriter() + .write("Started [" + event.getInternalName() + + "] profiling. This page will automatically redirect to " + relativeUrl + " after " +- + duration + " seconds.\n\nCommand:\n" + Joiner.on(" ").join(cmd)); ++ + duration + " seconds. " ++ + "If empty diagram and Linux 4.6+, see 'Basic Usage' section on the Async " ++ + "Profiler Home Page, https://github.com/jvm-profiling-tools/async-profiler." ++ + "\n\nCommand:\n" + Joiner.on(" ").join(cmd)); + + // to avoid auto-refresh by ProfileOutputServlet, refreshDelay can be specified + // via url param +@@ -274,8 +311,9 @@ public class ProfileServlet extends HttpServlet { + resp.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); + resp.getWriter() + .write("Unable to acquire lock. Another instance of profiler might be running."); +- LOG.warn("Unable to acquire lock in " + lockTimeoutSecs +- + " seconds. Another instance of profiler might be running."); ++ LOG.warn( ++ "Unable to acquire lock in {} seconds. Another instance of profiler might be running.", ++ lockTimeoutSecs); + } + } catch (InterruptedException e) { + LOG.warn("Interrupted while acquiring profile lock.", e); +@@ -288,9 +326,9 @@ public class ProfileServlet extends HttpServlet { + } + } + +- private Integer getInteger(final HttpServletRequest req, final String param, ++ private static Integer getInteger(final HttpServletRequest req, final String param, + final Integer defaultValue) { +- final String value = req.getParameter(param); ++ String value = req.getParameter(param); + if (value != null) { + try { + return Integer.valueOf(value); +@@ -301,8 +339,8 @@ public class ProfileServlet extends HttpServlet { + return defaultValue; + } + +- private Long getLong(final HttpServletRequest req, final String param) { +- final String value = req.getParameter(param); ++ private static Long getLong(final HttpServletRequest req, final String param) { ++ String value = req.getParameter(param); + if (value != null) { + try { + return Long.valueOf(value); +@@ -313,8 +351,8 @@ public class ProfileServlet extends HttpServlet { + return null; + } + +- private Double getMinWidth(final HttpServletRequest req) { +- final String value = req.getParameter("minwidth"); ++ private static Double getMinWidth(final HttpServletRequest req) { ++ String value = req.getParameter("minwidth"); + if (value != null) { + try { + return Double.valueOf(value); +@@ -325,8 +363,8 @@ public class ProfileServlet extends HttpServlet { + return null; + } + +- private Event getEvent(final HttpServletRequest req) { +- final String eventArg = req.getParameter("event"); ++ private static Event getEvent(final HttpServletRequest req) { ++ String eventArg = req.getParameter("event"); + if (eventArg != null) { + Event event = Event.fromInternalName(eventArg); + return event == null ? Event.CPU : event; +@@ -334,16 +372,16 @@ public class ProfileServlet extends HttpServlet { + return Event.CPU; + } + +- private Output getOutput(final HttpServletRequest req) { +- final String outputArg = req.getParameter("output"); ++ private static Output getOutput(final HttpServletRequest req) { ++ String outputArg = req.getParameter("output"); + if (req.getParameter("output") != null) { + try { + return Output.valueOf(outputArg.trim().toUpperCase()); + } catch (IllegalArgumentException e) { +- return Output.HTML; ++ return Output.FLAMEGRAPH; + } + } +- return Output.HTML; ++ return Output.FLAMEGRAPH; + } + + static void setResponseHeader(final HttpServletResponse response) { +@@ -375,8 +413,7 @@ public class ProfileServlet extends HttpServlet { + .write("The profiler servlet was disabled at startup.\n\n" + + "Please ensure the prerequisites for the Profiler Servlet have been installed and the\n" + + "environment is properly configured. For more information please see\n" +- + "http://hbase.apache.org/book.html#profiler\n"); +- return; ++ + "https://hbase.apache.org/book.html#profiler\n"); + } + + } diff --git a/hbase/stackable/patches/2.6.2/0002-Update-all-dependencies-which-have-a-new-patch-updat.patch b/hbase/stackable/patches/2.6.2/0002-Update-all-dependencies-which-have-a-new-patch-updat.patch new file mode 100644 index 000000000..7de26ad89 --- /dev/null +++ b/hbase/stackable/patches/2.6.2/0002-Update-all-dependencies-which-have-a-new-patch-updat.patch @@ -0,0 +1,118 @@ +From fc26f5691405aac908f4ecfa4682d53b1916bc07 Mon Sep 17 00:00:00 2001 +From: Razvan-Daniel Mihai <84674+razvan@users.noreply.github.com> +Date: Tue, 6 May 2025 13:11:25 +0200 +Subject: Update all dependencies which have a new patch update available + +--- + pom.xml | 42 +++++++++++++++++++++--------------------- + 1 file changed, 21 insertions(+), 21 deletions(-) + +diff --git a/pom.xml b/pom.xml +index e4be54a0ad..6202b48156 100644 +--- a/pom.xml ++++ b/pom.xml +@@ -566,7 +566,7 @@ + in the dependencyManagement section as it could still lead to different versions of netty + modules and cause trouble if we only rely on transitive dependencies. + --> +- 4.1.116.Final ++ 4.1.117.Final + + 0.13.0 + + 0.13.0 + 1.11.4 +- 2.8.1 ++ 2.8.8 + 1.15 + 2.18.0 + 3.9 + 3.6.1 + 1.5.0 + 3.4.4 +- 4.5.13 +- 4.4.13 ++ 4.5.14 ++ 4.4.16 + 3.2.6 + +- 2.17.2 +- 2.17.2 ++ 2.17.3 ++ 2.17.3 + 2.3.1 + 3.1.0 + 2.1.1 + 9.0.93 +- 9.3.13.0 ++ 9.3.15.0 + 4.13.2 + 1.3 + 1.15.0 +@@ -613,19 +613,19 @@ + 4.28.2 + 0.6.1 + thrift +- 0.14.1 ++ 0.14.2 + 3.8.4 + 2.11 +- 1.7.33 ++ 1.7.36 + 4.0.3 + 2.4.1 + 1.5.4 + +- 2.2.1 +- 1.0.58 ++ 2.2.3 ++ 1.0.61 + 2.12.3 +- 1.78 +- 1.5.1 ++ 1.78.1 ++ 1.5.3 + 1.0.1 + 1.1.0 + 4.2.0 +@@ -642,27 +642,27 @@ + 1.0.0 + 1.8 + 3.3.0 +- 3.1.0 ++ 3.1.2 + 2.10 + 3.0.1 +- 3.4.0 +- 1.1.0 ++ 3.4.1 ++ 1.1.2 + 3.1.2 + 1.5.0.Final + 1.3.9-1 + 4.7.3 +- 4.7.2.1 +- 3.1.0 ++ 4.7.3.6 ++ 3.1.2 + 2.12 + 1.0.1 + 2.27.2 +- 3.12.0 ++ 3.12.1 + + 0.27 + 1.11.0 + 1.8.0 +- 1.1.10.4 +- 1.5.5-2 ++ 1.1.10.7 ++ 1.5.6-9 + ++ com.fasterxml.jackson.dataformat ++ jackson-dataformat-xml ++
+ + org.apache.logging.log4j + log4j-slf4j-impl +diff --git a/pom.xml b/pom.xml +index 6202b48156..c1619999a5 100644 +--- a/pom.xml ++++ b/pom.xml +@@ -1157,6 +1157,11 @@ + log4j-core + ${log4j2.version} + ++ ++ org.apache.logging.log4j ++ log4j-core ++ ${log4j2.version} ++ + + org.apache.logging.log4j + log4j-slf4j-impl +@@ -1167,6 +1172,13 @@ + log4j-1.2-api + ${log4j2.version} + ++ ++ ++ com.fasterxml.jackson.dataformat ++ jackson-dataformat-xml ++ ${jackson.databind.version} ++ ++ + + + org.apache.avro diff --git a/hbase/stackable/patches/2.6.2/0004-Bump-cyclonedx-maven-plugin-to-version-2.9.1-and-twe.patch b/hbase/stackable/patches/2.6.2/0004-Bump-cyclonedx-maven-plugin-to-version-2.9.1-and-twe.patch new file mode 100644 index 000000000..f83063984 --- /dev/null +++ b/hbase/stackable/patches/2.6.2/0004-Bump-cyclonedx-maven-plugin-to-version-2.9.1-and-twe.patch @@ -0,0 +1,27 @@ +From c6ddaa5ab1a75d001941276fbd715b1b8ab9d8e0 Mon Sep 17 00:00:00 2001 +From: Lukas Voetmand +Date: Fri, 6 Sep 2024 17:53:52 +0200 +Subject: Bump cyclonedx-maven-plugin to version 2.9.1 and tweak its + configuration + +--- + pom.xml | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/pom.xml b/pom.xml +index c1619999a5..808a768937 100644 +--- a/pom.xml ++++ b/pom.xml +@@ -3275,7 +3275,11 @@ + + org.cyclonedx + cyclonedx-maven-plugin +- 2.7.10 ++ 2.9.1 ++ ++ application ++ 1.5 ++ + + + diff --git a/hbase/stackable/patches/2.6.2/patchable.toml b/hbase/stackable/patches/2.6.2/patchable.toml new file mode 100644 index 000000000..7a636d02b --- /dev/null +++ b/hbase/stackable/patches/2.6.2/patchable.toml @@ -0,0 +1,2 @@ +upstream = "https://github.com/apache/hbase.git" +base = "6b3b36b429cf9a9d74110de79eb3b327b29ebf17" diff --git a/hbase/versions.py b/hbase/versions.py index 9cac9ebe6..0cfb28d29 100644 --- a/hbase/versions.py +++ b/hbase/versions.py @@ -15,4 +15,18 @@ "opa_authorizer": "0.1.0", # only for HBase 2.6.1 "delete_caches": "true", }, + { + "product": "2.6.2", + "hbase_thirdparty": "4.1.10", + "hbase_operator_tools": "1.3.0-fd5a5fb", + "java-base": "11", + "java-devel": "11", + "async_profiler": "2.9", + "phoenix": "5.2.1", + "hbase_profile": "2.6", + "hadoop": "3.4.1", + "jmx_exporter": "", # 2.6 exports jmx and prometheus metrics by default + "opa_authorizer": "0.1.0", # only for HBase 2.6.1 + "delete_caches": "true", + }, ] From 3b91a29d002a54804990cca847316dc14cc9d2e1 Mon Sep 17 00:00:00 2001 From: Razvan-Daniel Mihai <84674+razvan@users.noreply.github.com> Date: Tue, 6 May 2025 15:04:14 +0200 Subject: [PATCH 04/14] remove unused argument --- hbase/Dockerfile | 1 - 1 file changed, 1 deletion(-) diff --git a/hbase/Dockerfile b/hbase/Dockerfile index 0b1d74e9a..e871f9582 100644 --- a/hbase/Dockerfile +++ b/hbase/Dockerfile @@ -6,7 +6,6 @@ FROM stackable/image/hadoop AS hadoop-builder FROM stackable/image/java-devel AS hbase-builder ARG PRODUCT -ARG HBASE_THIRDPARTY ARG HBASE_OPERATOR_TOOLS ARG ASYNC_PROFILER ARG PHOENIX From 8fce0495502076842dee85219f0397f6781c7dce Mon Sep 17 00:00:00 2001 From: Razvan-Daniel Mihai <84674+razvan@users.noreply.github.com> Date: Tue, 6 May 2025 15:13:48 +0200 Subject: [PATCH 05/14] downgrade to hbase_thirdparty 4.1.9 again --- hbase/versions.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/hbase/versions.py b/hbase/versions.py index 0cfb28d29..77c4fd1dc 100644 --- a/hbase/versions.py +++ b/hbase/versions.py @@ -3,6 +3,12 @@ # hbase-thirdparty is used to build the hbase-operator-tools and should be set to the version defined in the POM of HBase. { "product": "2.6.1", + # TODO: what is this argument for exactly? The current version of hbase_thirdparty is 4.1.10 + # See: https://central.sonatype.com/artifact/org.apache.hbase.thirdparty/hbase-shaded-miscellaneous + # + # But that breaks the build of hbase-operator-tools with: + # + # Could not find artifact org.apache.directory.jdbm:apacheds-jdbm1:bundle:2.0.0-M2 "hbase_thirdparty": "4.1.9", "hbase_operator_tools": "1.3.0-fd5a5fb", "java-base": "11", @@ -17,7 +23,7 @@ }, { "product": "2.6.2", - "hbase_thirdparty": "4.1.10", + "hbase_thirdparty": "4.1.9", "hbase_operator_tools": "1.3.0-fd5a5fb", "java-base": "11", "java-devel": "11", From 557759e71293614f49bf15710d5b295e7b545ad7 Mon Sep 17 00:00:00 2001 From: Razvan-Daniel Mihai <84674+razvan@users.noreply.github.com> Date: Tue, 6 May 2025 18:00:35 +0200 Subject: [PATCH 06/14] fix hbase-operator-tools build --- hbase/Dockerfile | 2 +- ...sting-utils-dependency-from-the-buil.patch | 56 +++++++++++++++++++ hbase/versions.py | 2 +- 3 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 hbase/hbase-operator-tools/stackable/patches/1.3.0-fd5a5fb/0002-Exclude-hbase-testing-utils-dependency-from-the-buil.patch diff --git a/hbase/Dockerfile b/hbase/Dockerfile index e871f9582..d2e9ec2b7 100644 --- a/hbase/Dockerfile +++ b/hbase/Dockerfile @@ -161,7 +161,7 @@ mvn \ --no-transfer-progress \ -Dhbase.version=${PRODUCT} \ -Dhbase-thirdparty.version=${HBASE_THIRDPARTY} \ - -DskipTests \ + -Dmaven.tests.skip=true \ package assembly:single # We need the "*" here as the directory won't be the same as the final tar file for SNAPSHOTs which we currently have to use for 2.6 diff --git a/hbase/hbase-operator-tools/stackable/patches/1.3.0-fd5a5fb/0002-Exclude-hbase-testing-utils-dependency-from-the-buil.patch b/hbase/hbase-operator-tools/stackable/patches/1.3.0-fd5a5fb/0002-Exclude-hbase-testing-utils-dependency-from-the-buil.patch new file mode 100644 index 000000000..4a986fe26 --- /dev/null +++ b/hbase/hbase-operator-tools/stackable/patches/1.3.0-fd5a5fb/0002-Exclude-hbase-testing-utils-dependency-from-the-buil.patch @@ -0,0 +1,56 @@ +From f9e952767faf3032c0d4e729e51b5901fcf1a0e1 Mon Sep 17 00:00:00 2001 +From: Razvan-Daniel Mihai <84674+razvan@users.noreply.github.com> +Date: Tue, 6 May 2025 17:58:34 +0200 +Subject: Exclude hbase-testing-utils dependency from the build. + +--- + hbase-hbck2/pom.xml | 11 +++++++++-- + hbase-tools/pom.xml | 5 +++-- + 2 files changed, 12 insertions(+), 4 deletions(-) + +diff --git a/hbase-hbck2/pom.xml b/hbase-hbck2/pom.xml +index 1d57225..fd0018c 100644 +--- a/hbase-hbck2/pom.xml ++++ b/hbase-hbck2/pom.xml +@@ -114,12 +114,19 @@ + + + +- ++ ++ + + org.mockito + mockito-core +diff --git a/hbase-tools/pom.xml b/hbase-tools/pom.xml +index 55ef075..eeebe14 100644 +--- a/hbase-tools/pom.xml ++++ b/hbase-tools/pom.xml +@@ -103,12 +103,13 @@ + + + +- ++ ++ + + org.mockito + mockito-core diff --git a/hbase/versions.py b/hbase/versions.py index 77c4fd1dc..97edf508b 100644 --- a/hbase/versions.py +++ b/hbase/versions.py @@ -23,7 +23,7 @@ }, { "product": "2.6.2", - "hbase_thirdparty": "4.1.9", + "hbase_thirdparty": "4.1.10", "hbase_operator_tools": "1.3.0-fd5a5fb", "java-base": "11", "java-devel": "11", From 0c7e1cb020d601cdf42fef5f712c15f61f824de3 Mon Sep 17 00:00:00 2001 From: Razvan-Daniel Mihai <84674+razvan@users.noreply.github.com> Date: Wed, 7 May 2025 12:48:42 +0200 Subject: [PATCH 07/14] patch the maven git plugin for better developer experience --- hbase/Dockerfile | 7 ++--- ...t-commit-id-plugin-to-use-native-git.patch | 29 +++++++++++++++++++ 2 files changed, 31 insertions(+), 5 deletions(-) create mode 100644 hbase/hbase-operator-tools/stackable/patches/1.3.0-fd5a5fb/0003-Configure-git-commit-id-plugin-to-use-native-git.patch diff --git a/hbase/Dockerfile b/hbase/Dockerfile index d2e9ec2b7..3efec0c91 100644 --- a/hbase/Dockerfile +++ b/hbase/Dockerfile @@ -152,16 +152,13 @@ WORKDIR /stackable RUN --mount=type=cache,id=maven-hbase-operator-tools-${HBASE_OPERATOR_TOOLS},uid=${STACKABLE_USER_UID},target=/stackable/.m2/repository < +Date: Wed, 7 May 2025 10:26:37 +0200 +Subject: Configure git-commit-id-plugin to use native git + +This fixes the problem that jgit cannot handle worktrees and the build +fails. + +See +https://github.com/git-commit-id/git-commit-id-maven-plugin/issues/215 +--- + hbase-hbck2/pom.xml | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/hbase-hbck2/pom.xml b/hbase-hbck2/pom.xml +index fd0018c..f00bd18 100644 +--- a/hbase-hbck2/pom.xml ++++ b/hbase-hbck2/pom.xml +@@ -215,8 +215,9 @@ + + pl.project13.maven + git-commit-id-plugin +- 2.2.5 ++ 4.9.10 + ++ true + ${project.basedir}/.git + flat + false From 73857ff354d8e4187d3aeb7a7bc8a413db4f9705 Mon Sep 17 00:00:00 2001 From: Razvan-Daniel Mihai <84674+razvan@users.noreply.github.com> Date: Wed, 7 May 2025 12:51:13 +0200 Subject: [PATCH 08/14] remove comment --- hbase/versions.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/hbase/versions.py b/hbase/versions.py index 97edf508b..0cfb28d29 100644 --- a/hbase/versions.py +++ b/hbase/versions.py @@ -3,12 +3,6 @@ # hbase-thirdparty is used to build the hbase-operator-tools and should be set to the version defined in the POM of HBase. { "product": "2.6.1", - # TODO: what is this argument for exactly? The current version of hbase_thirdparty is 4.1.10 - # See: https://central.sonatype.com/artifact/org.apache.hbase.thirdparty/hbase-shaded-miscellaneous - # - # But that breaks the build of hbase-operator-tools with: - # - # Could not find artifact org.apache.directory.jdbm:apacheds-jdbm1:bundle:2.0.0-M2 "hbase_thirdparty": "4.1.9", "hbase_operator_tools": "1.3.0-fd5a5fb", "java-base": "11", From 80384951045f5e0e6f2446f54d90b71fc6b85f1a Mon Sep 17 00:00:00 2001 From: Razvan-Daniel Mihai <84674+razvan@users.noreply.github.com> Date: Wed, 7 May 2025 12:55:19 +0200 Subject: [PATCH 09/14] update changelog --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c047b6a05..1dd7299ec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -34,6 +34,7 @@ All notable changes to this project will be documented in this file. `check-permissions-ownership.sh` provided in stackable-base image ([#1043]). - java: Add JDK 24 ([#1097]). - ci: Add golang image to mirror workflow ([#1103]). +- hbase: add 2.6.2 and upgrade dependencies ([#1101]) ### Changed @@ -72,6 +73,7 @@ All notable changes to this project will be documented in this file. - Remove ubi8-rust-builder image ([#1091]). - opa: Remove `0.67.1` ([#1103]). - opa: Remove legacy bundle-builder from container build ([#1103]). +- hbase: Remove 2.4.18 ([#1101]) [#1025]: https://github.com/stackabletech/docker-images/pull/1025 [#1027]: https://github.com/stackabletech/docker-images/pull/1027 @@ -96,6 +98,7 @@ All notable changes to this project will be documented in this file. [#1093]: https://github.com/stackabletech/docker-images/pull/1093 [#1097]: https://github.com/stackabletech/docker-images/pull/1097 [#1098]: https://github.com/stackabletech/docker-images/pull/1098 +[#1101]: https://github.com/stackabletech/docker-images/pull/1101 [#1103]: https://github.com/stackabletech/docker-images/pull/1103 ## [25.3.0] - 2025-03-21 From ecb8b1e42604db049ba94dd8fc2b9c680d33b764 Mon Sep 17 00:00:00 2001 From: Razvan-Daniel Mihai <84674+razvan@users.noreply.github.com> Date: Mon, 12 May 2025 11:24:41 +0200 Subject: [PATCH 10/14] remove all traces of jmx exporter --- hbase/Dockerfile | 13 ------------- hbase/stackable/jmx/config/README.md | 5 ----- hbase/stackable/jmx/config1.2.0/master.yaml | 3 --- hbase/stackable/jmx/config1.2.0/regionserver.yaml | 3 --- hbase/stackable/jmx/config1.2.0/restserver.yaml | 3 --- hbase/versions.py | 2 -- 6 files changed, 29 deletions(-) delete mode 100644 hbase/stackable/jmx/config/README.md delete mode 100644 hbase/stackable/jmx/config1.2.0/master.yaml delete mode 100644 hbase/stackable/jmx/config1.2.0/regionserver.yaml delete mode 100644 hbase/stackable/jmx/config1.2.0/restserver.yaml diff --git a/hbase/Dockerfile b/hbase/Dockerfile index 2718dc48d..37dc5ca5d 100644 --- a/hbase/Dockerfile +++ b/hbase/Dockerfile @@ -10,7 +10,6 @@ ARG HBASE_OPERATOR_TOOLS ARG ASYNC_PROFILER ARG PHOENIX ARG HBASE_PROFILE -ARG JMX_EXPORTER ARG HADOOP ARG TARGETARCH ARG TARGETOS @@ -27,7 +26,6 @@ WORKDIR /stackable COPY --chown=${STACKABLE_USER_UID}:0 hbase/stackable/patches/patchable.toml /stackable/src/hbase/stackable/patches/patchable.toml COPY --chown=${STACKABLE_USER_UID}:0 hbase/stackable/patches/${PRODUCT} /stackable/src/hbase/stackable/patches/${PRODUCT} -COPY --chown=${STACKABLE_USER_UID}:0 hbase/stackable/jmx/config${JMX_EXPORTER} /stackable/jmx # Cache mounts are owned by root by default # We need to explicitly give the uid to use @@ -58,15 +56,6 @@ mv hbase-assembly/target/bom.json /stackable/hbase-${PRODUCT}/hbase-${PRODUCT}.c ln -s "/stackable/hbase-${PRODUCT}" /stackable/hbase -### -### JMX Prometheus Exporter/Agent -### -if [[ -n "${JMX_EXPORTER}" ]] ; then - curl --fail "https://repo.stackable.tech/repository/packages/jmx-exporter/jmx_prometheus_javaagent-${JMX_EXPORTER}.jar" -o "/stackable/jmx/jmx_prometheus_javaagent-${JMX_EXPORTER}.jar" - chmod +x "/stackable/jmx/jmx_prometheus_javaagent-${JMX_EXPORTER}.jar" - ln -s "/stackable/jmx/jmx_prometheus_javaagent-${JMX_EXPORTER}.jar" /stackable/jmx/jmx_prometheus_javaagent.jar -fi - ### ### Async Profiler ### @@ -323,7 +312,6 @@ LABEL io.k8s.display-name="${NAME}" COPY --chown=${STACKABLE_USER_UID}:0 --from=hbase-builder /stackable/hbase-${PRODUCT} /stackable/hbase-${PRODUCT}/ COPY --chown=${STACKABLE_USER_UID}:0 --from=hbase-builder /stackable/async-profiler /stackable/async-profiler/ -COPY --chown=${STACKABLE_USER_UID}:0 --from=hbase-builder /stackable/jmx /stackable/jmx/ COPY --chown=${STACKABLE_USER_UID}:0 --from=hbase-operator-tools-builder /stackable/hbase-operator-tools-${HBASE_OPERATOR_TOOLS} /stackable/hbase-operator-tools-${HBASE_OPERATOR_TOOLS}/ COPY --chown=${STACKABLE_USER_UID}:0 --from=hbase-operator-tools-builder /stackable/bin/hbck2 /stackable/bin/hbck2 @@ -377,7 +365,6 @@ chmod g=u "/stackable/hbase/lib/phoenix-server-hbase-${HBASE_PROFILE}.jar" # fix missing permissions chmod g=u /stackable/async-profiler chmod g=u /stackable/bin -chmod g=u /stackable/jmx chmod g=u /stackable/phoenix # the whole directory tree /stackable/hadoop/share/hadoop/tools/lib/ must be adapted find /stackable/hadoop -type d -exec chmod g=u {} + diff --git a/hbase/stackable/jmx/config/README.md b/hbase/stackable/jmx/config/README.md deleted file mode 100644 index 55aae7952..000000000 --- a/hbase/stackable/jmx/config/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Description - -This is a placeholder file for docker to be able to build images when there is no jmx config provided. - -This is the case for HBase 2.6.0 (and above) where a JMX exporter is included in the HBase distribution. diff --git a/hbase/stackable/jmx/config1.2.0/master.yaml b/hbase/stackable/jmx/config1.2.0/master.yaml deleted file mode 100644 index da385453c..000000000 --- a/hbase/stackable/jmx/config1.2.0/master.yaml +++ /dev/null @@ -1,3 +0,0 @@ ---- -rules: - - pattern: ".*" diff --git a/hbase/stackable/jmx/config1.2.0/regionserver.yaml b/hbase/stackable/jmx/config1.2.0/regionserver.yaml deleted file mode 100644 index da385453c..000000000 --- a/hbase/stackable/jmx/config1.2.0/regionserver.yaml +++ /dev/null @@ -1,3 +0,0 @@ ---- -rules: - - pattern: ".*" diff --git a/hbase/stackable/jmx/config1.2.0/restserver.yaml b/hbase/stackable/jmx/config1.2.0/restserver.yaml deleted file mode 100644 index da385453c..000000000 --- a/hbase/stackable/jmx/config1.2.0/restserver.yaml +++ /dev/null @@ -1,3 +0,0 @@ ---- -rules: - - pattern: ".*" diff --git a/hbase/versions.py b/hbase/versions.py index 0cfb28d29..3f7fec51c 100644 --- a/hbase/versions.py +++ b/hbase/versions.py @@ -11,7 +11,6 @@ "phoenix": "5.2.1", "hbase_profile": "2.6", "hadoop": "3.4.1", - "jmx_exporter": "", # 2.6 exports jmx and prometheus metrics by default "opa_authorizer": "0.1.0", # only for HBase 2.6.1 "delete_caches": "true", }, @@ -25,7 +24,6 @@ "phoenix": "5.2.1", "hbase_profile": "2.6", "hadoop": "3.4.1", - "jmx_exporter": "", # 2.6 exports jmx and prometheus metrics by default "opa_authorizer": "0.1.0", # only for HBase 2.6.1 "delete_caches": "true", }, From 26641e460bd01b15ba778be0a061f3d6080752ef Mon Sep 17 00:00:00 2001 From: Razvan-Daniel Mihai <84674+razvan@users.noreply.github.com> Date: Mon, 12 May 2025 11:26:39 +0200 Subject: [PATCH 11/14] revert 2.6.1 to hadoop 3.3.6 --- hbase/versions.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hbase/versions.py b/hbase/versions.py index 3f7fec51c..2731c0328 100644 --- a/hbase/versions.py +++ b/hbase/versions.py @@ -10,7 +10,7 @@ "async_profiler": "2.9", "phoenix": "5.2.1", "hbase_profile": "2.6", - "hadoop": "3.4.1", + "hadoop": "3.3.6", "opa_authorizer": "0.1.0", # only for HBase 2.6.1 "delete_caches": "true", }, From 3156f96dde789fc19803d9481992b614a9a05ba0 Mon Sep 17 00:00:00 2001 From: Razvan-Daniel Mihai <84674+razvan@users.noreply.github.com> Date: Mon, 12 May 2025 14:29:35 +0200 Subject: [PATCH 12/14] copy both aws bundle artifacts --- hbase/Dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/hbase/Dockerfile b/hbase/Dockerfile index 37dc5ca5d..d74c4c5cc 100644 --- a/hbase/Dockerfile +++ b/hbase/Dockerfile @@ -196,7 +196,9 @@ COPY --from=hadoop-builder --chown=${STACKABLE_USER_UID}:0 \ # The artifact name of the AWS bundle has changed between Haddop 3.3.6 and 3.4.1 # from aws-java-sdk-bundle-*.jar to bundle-*.jar. # See: https://hadoop.apache.org/docs/stable/hadoop-aws/tools/hadoop-aws/aws_sdk_upgrade.html + # So we try to copy both and if one of them doesn't exist buildx will just ignore it :) /stackable/hadoop/share/hadoop/tools/lib/bundle-*.jar \ + /stackable/hadoop/share/hadoop/tools/lib/aws-java-sdk-bundle-*.jar \ /stackable/hadoop/share/hadoop/tools/lib/hadoop-aws-${HADOOP}.jar \ /stackable/hadoop/share/hadoop/tools/lib/ From e1e88ec628549bf3495f0022893a300137660c7d Mon Sep 17 00:00:00 2001 From: Razvan-Daniel Mihai <84674+razvan@users.noreply.github.com> Date: Wed, 14 May 2025 09:22:38 +0200 Subject: [PATCH 13/14] skip building tests --- hbase/Dockerfile | 34 ++++++++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/hbase/Dockerfile b/hbase/Dockerfile index d74c4c5cc..1b59478c2 100644 --- a/hbase/Dockerfile +++ b/hbase/Dockerfile @@ -46,8 +46,25 @@ cd "$(/stackable/patchable --images-repo-root=src checkout hbase ${PRODUCT})" # The release scripts of HBase also run the build twice (three times in fact, once again to build the site which we skip here). # I chose to replicate that exact behavior for consistency so please don't merge the two mvn runs into one unless you really know what you're doing! -mvn --batch-mode --no-transfer-progress -Dhadoop.profile=3.0 -Dhadoop-three.version=${HADOOP} clean install -DskipTests -mvn --batch-mode --no-transfer-progress -Dhadoop.profile=3.0 -Dhadoop-three.version=${HADOOP} install assembly:single -DskipTests -Dcheckstyle.skip=true -Prelease +# Cannot skip building tests here because the assembly plugin needs a shell script from the test directory. +mvn \ + --batch-mode \ + --no-transfer-progress \ + -Dhadoop.profile=3.0 \ + -Dhadoop-three.version=${HADOOP} \ + -DskipTests \ + clean install + +mvn \ + --batch-mode \ + --no-transfer-progress \ + -Dhadoop.profile=3.0 \ + -Dhadoop-three.version=${HADOOP} \ + -DskipTests \ + -Dcheckstyle.skip=true \ + -Prelease \ + install assembly:single + tar -xzf hbase-assembly/target/hbase-${PRODUCT}-bin.tar.gz -C /stackable/ mv hbase-assembly/target/bom.json /stackable/hbase-${PRODUCT}/hbase-${PRODUCT}.cdx.json @@ -81,6 +98,7 @@ EOF FROM stackable/image/java-devel AS opa-authorizer-builder +ARG PRODUCT ARG OPA_AUTHORIZER ARG DELETE_CACHES ARG STACKABLE_USER_UID @@ -88,7 +106,9 @@ ARG STACKABLE_USER_UID USER ${STACKABLE_USER_UID} WORKDIR /stackable -RUN --mount=type=cache,id=maven-opa,uid=${STACKABLE_USER_UID},target=/stackable/.m2/repository < Date: Thu, 15 May 2025 09:23:34 +0200 Subject: [PATCH 14/14] fix patchable.toml after merge --- hbase/stackable/patches/2.6.2/patchable.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hbase/stackable/patches/2.6.2/patchable.toml b/hbase/stackable/patches/2.6.2/patchable.toml index 7a636d02b..a46f266be 100644 --- a/hbase/stackable/patches/2.6.2/patchable.toml +++ b/hbase/stackable/patches/2.6.2/patchable.toml @@ -1,2 +1,2 @@ -upstream = "https://github.com/apache/hbase.git" base = "6b3b36b429cf9a9d74110de79eb3b327b29ebf17" +mirror = "https://github.com/stackabletech/hbase.git"