Repository: stackabletech/docker-images
Pull request #1101: chore(hbase): update images for 25.7.0
Author: login: razvan
Created: 2025-05-06T13:21:59Z | Merged: 2025-05-15T14:31:30Z

# Description

Part of https://github.com/stackabletech/docker-images/issues/1076


> [!CAUTION]
> ~~This is blocked until a decision is made on the hadoop dependency upgrade for the existing 2.6.1 image.~~
> Decision: keep Hadoop 3.3.6 for Hbase 2.6.1 image

## Definition of Done Checklist

> [!NOTE]
> Not all of these items are applicable to all PRs, the author should update this template to only leave the boxes in that are relevant.

Please make sure all these things are done and tick the boxes

- [x] Changes are OpenShift compatible
- [x] All added packages (via microdnf or otherwise) have a comment on why they are added
- [x] Things not downloaded from Red Hat repositories should be mirrored in the Stackable repository and downloaded from there
- [x] All packages should have (if available) signatures/hashes verified
- [x] Add an entry to the CHANGELOG.md file
- [x] Integration tests ran successfully

<details>
<summary>TIP: Running integration tests with a new product image</summary>

The image can be built and uploaded to the kind cluster with the following commands:

```shell
bake --product <product> --image-version <stackable-image-version>
kind load docker-image <image-tagged-with-the-major-version> --name=<name-of-your-test-cluster>
```

See the output of `bake` to retrieve the image tag for `<image-tagged-with-the-major-version>`.
</details>



Diff:
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9afed0a4f..b27c58d91 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -39,6 +39,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
 
@@ -81,6 +82,7 @@ All notable changes to this project will be documented in this file.
 - hadoop: Remove `3.3.4` and `3.4.0` ([#1099]).
 - opa: Remove `0.67.1` ([#1103]).
 - opa: Remove legacy bundle-builder from container build ([#1103]).
+- hbase: Remove 2.4.18 ([#1101])
 - druid: Remove `30.0.0` ([#1110]).
 - nifi: Remove `2.2.0` ([#1114]).
 
@@ -110,6 +112,7 @@ All notable changes to this project will be documented in this file.
 [#1097]: https://github.com/stackabletech/docker-images/pull/1097
 [#1098]: https://github.com/stackabletech/docker-images/pull/1098
 [#1099]: https://github.com/stackabletech/docker-images/pull/1099
+[#1101]: https://github.com/stackabletech/docker-images/pull/1101
 [#1102]: https://github.com/stackabletech/docker-images/pull/1102
 [#1103]: https://github.com/stackabletech/docker-images/pull/1103
 [#1106]: https://github.com/stackabletech/docker-images/pull/1106
diff --git a/hbase/Dockerfile b/hbase/Dockerfile
index 4a0ba9dd5..1b59478c2 100644
--- a/hbase/Dockerfile
+++ b/hbase/Dockerfile
@@ -6,12 +6,10 @@ 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
 ARG HBASE_PROFILE
-ARG JMX_EXPORTER
 ARG HADOOP
 ARG TARGETARCH
 ARG TARGETOS
@@ -28,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
@@ -49,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
 
@@ -59,15 +73,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
 ###
@@ -93,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
@@ -100,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 <<EOF
+# Use the product version as cache id "maven-opa-${PRODUCT}" to avoid the "rm -rf" problem described above.
+# Using the OPA_AUTHORIZER arg is not unique if the same version is used for multiple products.
+RUN --mount=type=cache,id=maven-opa-${PRODUCT},uid=${STACKABLE_USER_UID},target=/stackable/.m2/repository <<EOF
 ###
 ### OPA Authorizer (only for 2.6 upwards)
 ###
@@ -109,9 +117,10 @@ if [[ -n "$OPA_AUTHORIZER" ]]; then
     mvn \
       --batch-mode \
       --no-transfer-progress \
-      package \
       -DskipTests \
-      -fhbase-opa-authorizer
+      -Dmaven.test.skip=true \
+      -fhbase-opa-authorizer \
+      package
 else
   # Create a dummy jar to avoid errors when copying it the final image
   mkdir -p hbase-opa-authorizer/target
@@ -155,16 +164,13 @@ WORKDIR /stackable
 RUN --mount=type=cache,id=maven-hbase-operator-tools-${HBASE_OPERATOR_TOOLS},uid=${STACKABLE_USER_UID},target=/stackable/.m2/repository <<EOF
 cd "$(/stackable/patchable --images-repo-root=src checkout hbase-operator-tools ${HBASE_OPERATOR_TOOLS})"
 
-# Remove the Git repo because `git-commit-id-maven-plugin` tries to get the latest commit if a Git repo is present,
-# which fails due to a problem with worktrees, see https://github.com/git-commit-id/git-commit-id-maven-plugin/issues/215
-rm .git
-
 mvn \
   --batch-mode \
   --no-transfer-progress \
   -Dhbase.version=${PRODUCT} \
   -Dhbase-thirdparty.version=${HBASE_THIRDPARTY} \
   -DskipTests \
+  -Dmaven.test.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
@@ -208,6 +214,11 @@ USER ${STACKABLE_USER_UID}
 WORKDIR /stackable
 
 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/
@@ -248,7 +259,7 @@ COPY --chown=${STACKABLE_USER_UID}:0 hbase/phoenix/stackable/patches/${PHOENIX}
 USER ${STACKABLE_USER_UID}
 WORKDIR /stackable
 
-RUN --mount=type=cache,id=maven-phoenix-${PHOENIX},uid=${STACKABLE_USER_UID},target=/stackable/.m2/repository <<EOF
+RUN --mount=type=cache,id=maven-phoenix-${PHOENIX}-${PRODUCT},uid=${STACKABLE_USER_UID},target=/stackable/.m2/repository <<EOF
 cd "$(/stackable/patchable --images-repo-root=src checkout phoenix ${PHOENIX})"
 
 # The Maven command can be found inside of the scripts in the create-release folder (release-util.sh as of Phoenix 5.2.0)
@@ -260,6 +271,7 @@ mvn \
   -Dhbase.profile=${HBASE_PROFILE} \
   -Dhadoop.version=${HADOOP} \
   -DskipTests \
+  -Dmaven.test.skip=true \
   -Dcheckstyle.skip=true \
   clean \
   package
@@ -324,7 +336,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
@@ -378,7 +389,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/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 @@
+         </exclusion>
+       </exclusions>
+     </dependency>
+-    <dependency>
++    <!-- Starting with Hbase 2.6.2, this brings in a dependency that is not publicly available:
++        org.apache.directory.jdbm:apacheds-jdbm1:bundle:2.0.0-M2
++
++      Since we do not run the tests, we exclude this dependency.
++
++      To build successfully we also need to use -Dmaven.test.skip=true to skip building the tests.
++    -->
++    <!-- dependency>
+       <groupId>org.apache.hbase</groupId>
+       <artifactId>hbase-testing-util</artifactId>
+       <version>${hbase.version}</version>
+       <scope>test</scope>
+-    </dependency>
++    </dependency -->
+     <dependency>
+       <groupId>org.mockito</groupId>
+       <artifactId>mockito-core</artifactId>
+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 @@
+         </exclusion>
+       </exclusions>
+     </dependency>
+-    <dependency>
++    <!-- See the hbase-hbck2/pom.xml for an explanation of why this is commented out -->
++    <!-- dependency>
+       <groupId>org.apache.hbase</groupId>
+       <artifactId>hbase-testing-util</artifactId>
+       <version>${hbase.version}</version>
+       <scope>test</scope>
+-    </dependency>
++    </dependency -->
+     <dependency>
+       <groupId>org.mockito</groupId>
+       <artifactId>mockito-core</artifactId>
diff --git a/hbase/hbase-operator-tools/stackable/patches/1.3.0-fd5a5fb/0003-Configure-git-commit-id-plugin-to-use-native-git.patch b/hbase/hbase-operator-tools/stackable/patches/1.3.0-fd5a5fb/0003-Configure-git-commit-id-plugin-to-use-native-git.patch
new file mode 100644
index 000000000..729432461
--- /dev/null
+++ b/hbase/hbase-operator-tools/stackable/patches/1.3.0-fd5a5fb/0003-Configure-git-commit-id-plugin-to-use-native-git.patch
@@ -0,0 +1,29 @@
+From 187db522edc569def2aea3f9453ecb1a674592fe Mon Sep 17 00:00:00 2001
+From: Razvan-Daniel Mihai <84674+razvan@users.noreply.github.com>
+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 @@
+       <plugin>
+         <groupId>pl.project13.maven</groupId>
+         <artifactId>git-commit-id-plugin</artifactId>
+-        <version>2.2.5</version>
++        <version>4.9.10</version>
+         <configuration>
++          <useNativeGit>true</useNativeGit>
+           <dotGitDirectory>${project.basedir}/.git</dotGitDirectory>
+           <commitIdGenerationMode>flat</commitIdGenerationMode>
+           <failOnNoGitDirectory>false</failOnNoGitDirectory>
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/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 <maximilian.wittich@stackable.tech>
-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.
-       </licenses>
-     </project>
-   </supplement>
-+  <supplement>
-+    <project>
-+      <groupId>org.openlabtesting.leveldbjni</groupId>
-+      <artifactId>leveldbjni-all</artifactId>
-+
-+      <licenses>
-+        <license>
-+          <name>BSD 3-Clause License</name>
-+          <url>http://www.opensource.org/licenses/BSD-3-Clause</url>
-+          <distribution>repo</distribution>
-+        </license>
-+      </licenses>
-+    </project>
-+  </supplement>
- <!-- Category B licenses that need text in LICENSE and a NOTICE -->
-   <supplement>
-     <project>
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 <mail@siegfriedweber.net>
-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&amp;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.
-+ * <ul>
-+ * <li>-e event profiling event: cpu|alloc|lock|cache-misses etc.</li>
-+ * <li>-d duration run profiling for 'duration' seconds (integer), default 10s</li>
-+ * <li>-i interval sampling interval in nanoseconds (long), default 10ms</li>
-+ * <li>-j jstackdepth maximum Java stack depth (integer), default 2048</li>
-+ * <li>-t profile different threads separately</li>
-+ * <li>-s simple class names instead of FQN</li>
-+ * <li>-g print method signatures</li>
-+ * <li>-a annotate Java methods</li>
-+ * <li>-l prepend library names</li>
-+ * <li>-o fmt output format: flat|traces|collapsed|flamegraph|tree|jfr</li>
-+ * <li>--minwidth pct skip frames smaller than pct% (double)</li>
-+ * <li>--reverse generate stack-reversed FlameGraph / Call tree</li>
-+ * </ul>
-+ * Example:
-+ * <ul>
-+ * <li>To collect 30 second CPU profile of current process (returns FlameGraph svg):
-+ * {@code curl http://localhost:10002/prof"}</li>
-+ * <li>To collect 1 minute CPU profile of current process and output in tree format (html)
-+ * {@code curl "http://localhost:10002/prof?output=tree&amp;duration=60"}</li>
-+ * <li>To collect 30 second heap allocation profile of current process (returns FlameGraph):
-+ * {@code curl "http://localhost:10002/prof?event=alloc"}</li>
-+ * <li>To collect lock contention profile of current process (returns FlameGraph):
-+ * {@code curl "http://localhost:10002/prof?event=lock"}</li>
-+ * </ul>
-+ * Following event types are supported (default is 'cpu') (NOTE: not all OS'es support all
-+ * events).<br/>
-+ * Basic events:
-+ * <ul>
-+ * <li>cpu</li>
-+ * <li>alloc</li>
-+ * <li>lock</li>
-+ * <li>wall</li>
-+ * <li>itimer</li>
-+ * </ul>
-+ * Perf events:
-+ * <ul>
-+ * <li>L1-dcache-load-misses</li>
-+ * <li>LLC-load-misses</li>
-+ * <li>branch-instructions</li>
-+ * <li>branch-misses</li>
-+ * <li>bus-cycles</li>
-+ * <li>cache-misses</li>
-+ * <li>cache-references</li>
-+ * <li>context-switches</li>
-+ * <li>cpu</li>
-+ * <li>cycles</li>
-+ * <li>dTLB-load-misses</li>
-+ * <li>instructions</li>
-+ * <li>mem:breakpoint</li>
-+ * <li>page-faults</li>
-+ * <li>trace:tracepoint</li>
-+ * </ul>
-  */
- @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 <lars.francke@stackable.tech>
-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 @@
-     <!--Version of protobuf that hbase uses internally (we shade our pb)
-          Must match what is out in hbase-thirdparty include.
-     -->
--    <internal.protobuf.version>3.24.3</internal.protobuf.version>
-+    <internal.protobuf.version>3.25.2</internal.protobuf.version>
-   </properties>
-   <dependencies>
-     <!--BE CAREFUL! Any dependency added here needs to be
-diff --git a/hbase-shaded/pom.xml b/hbase-shaded/pom.xml
-index 43449b9b92..5f4f620b71 100644
---- a/hbase-shaded/pom.xml
-+++ b/hbase-shaded/pom.xml
-@@ -85,7 +85,7 @@
-         <plugin>
-           <groupId>org.apache.maven.plugins</groupId>
-           <artifactId>maven-shade-plugin</artifactId>
--          <version>3.4.1</version>
-+          <version>3.5.1</version>
-           <executions>
-             <execution>
-               <id>aggregate-into-a-jar-with-relocated-third-parties</id>
-diff --git a/pom.xml b/pom.xml
-index 80b9bef71e..5e7aa033da 100755
---- a/pom.xml
-+++ b/pom.xml
-@@ -579,8 +579,12 @@
-     <httpclient.version>4.5.13</httpclient.version>
-     <httpcore.version>4.4.13</httpcore.version>
-     <metrics-core.version>3.2.6</metrics-core.version>
--    <jackson.version>2.15.2</jackson.version>
--    <jackson.databind.version>2.15.2</jackson.databind.version>
-+    <!--
-+      Note that the version of jackson-[annotations,core,databind] must be kept in sync with the
-+      version of jackson-jaxrs-json-provider shipped in hbase-thirdparty.
-+    -->
-+    <jackson.version>2.16.1</jackson.version>
-+    <jackson.databind.version>2.16.1</jackson.databind.version>
-     <jaxb-api.version>2.3.1</jaxb-api.version>
-     <servlet.api.version>3.1.0</servlet.api.version>
-     <wx.rs.api.version>2.1.1</wx.rs.api.version>
-@@ -641,7 +645,13 @@
-     <wagon.ssh.version>2.12</wagon.ssh.version>
-     <xml.maven.version>1.0.1</xml.maven.version>
-     <spotless.version>2.27.2</spotless.version>
--    <hbase-thirdparty.version>4.1.5</hbase-thirdparty.version>
-+    <!--
-+        Note that the version of protobuf shipped in hbase-thirdparty must match the version used
-+        in hbase-protocol-shaded and hbase-examples. The version of jackson-[annotations,core,
-+        databind] must be kept in sync with the version of jackson-jaxrs-json-provider shipped in
-+        hbase-thirdparty.
-+    -->
-+    <hbase-thirdparty.version>4.1.6</hbase-thirdparty.version>
-     <maven-site.version>3.12.0</maven-site.version>
-     <snappy.version>1.1.10.4</snappy.version>
-     <!-- Coverage properties -->
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 <lars.francke@stackable.tech>
-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<String> 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 @@
-     <!--Version of protobuf that hbase uses internally (we shade our pb)
-          Must match what is out in hbase-thirdparty include.
-     -->
--    <internal.protobuf.version>3.25.2</internal.protobuf.version>
-+    <internal.protobuf.version>4.26.1</internal.protobuf.version>
-   </properties>
-   <dependencies>
-     <!--BE CAREFUL! Any dependency added here needs to be
-diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/FixedFileTrailer.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/FixedFileTrailer.java
-index 02171f9bf6..883a70e721 100644
---- a/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/FixedFileTrailer.java
-+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/FixedFileTrailer.java
-@@ -267,7 +267,7 @@ public class FixedFileTrailer {
-     // read PB and skip padding
-     int start = inputStream.available();
-     HFileProtos.FileTrailerProto trailerProto =
--      HFileProtos.FileTrailerProto.PARSER.parseDelimitedFrom(inputStream);
-+      HFileProtos.FileTrailerProto.parser().parseDelimitedFrom(inputStream);
-     int size = start - inputStream.available();
-     inputStream.skip(getTrailerSize() - NOT_PB_SIZE - size);
- 
-diff --git a/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/MasterAddressTracker.java b/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/MasterAddressTracker.java
-index 645c664dab..165f652d2c 100644
---- a/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/MasterAddressTracker.java
-+++ b/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/MasterAddressTracker.java
-@@ -238,7 +238,7 @@ public class MasterAddressTracker extends ZKNodeTracker {
-     }
-     int prefixLen = ProtobufUtil.lengthOfPBMagic();
-     try {
--      return ZooKeeperProtos.Master.PARSER.parseFrom(data, prefixLen, data.length - prefixLen);
-+      return ZooKeeperProtos.Master.parser().parseFrom(data, prefixLen, data.length - prefixLen);
-     } catch (InvalidProtocolBufferException e) {
-       throw new DeserializationException(e);
-     }
-diff --git a/pom.xml b/pom.xml
-index 5e7aa033da..c4beb5aaeb 100755
---- a/pom.xml
-+++ b/pom.xml
-@@ -560,7 +560,7 @@
-       modules and cause trouble if we only rely on transitive dependencies.
-     -->
-     <netty3.version>3.10.6.Final</netty3.version>
--    <netty4.version>4.1.100.Final</netty4.version>
-+    <netty4.version>4.1.108.Final</netty4.version>
-     <!-- end HBASE-15925 default hadoop compatibility values -->
-     <audience-annotations.version>0.13.0</audience-annotations.version>
-     <!--
-@@ -583,8 +583,8 @@
-       Note that the version of jackson-[annotations,core,databind] must be kept in sync with the
-       version of jackson-jaxrs-json-provider shipped in hbase-thirdparty.
-     -->
--    <jackson.version>2.16.1</jackson.version>
--    <jackson.databind.version>2.16.1</jackson.databind.version>
-+    <jackson.version>2.17.0</jackson.version>
-+    <jackson.databind.version>2.17.0</jackson.databind.version>
-     <jaxb-api.version>2.3.1</jaxb-api.version>
-     <servlet.api.version>3.1.0</servlet.api.version>
-     <wx.rs.api.version>2.1.1</wx.rs.api.version>
-@@ -651,7 +651,7 @@
-         databind] must be kept in sync with the version of jackson-jaxrs-json-provider shipped in
-         hbase-thirdparty.
-     -->
--    <hbase-thirdparty.version>4.1.6</hbase-thirdparty.version>
-+    <hbase-thirdparty.version>4.1.7</hbase-thirdparty.version>
-     <maven-site.version>3.12.0</maven-site.version>
-     <snappy.version>1.1.10.4</snappy.version>
-     <!-- Coverage properties -->
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 <lars.francke@stackable.tech>
-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 @@
-     <maven.min.version>3.0.4</maven.min.version>
-     <java.min.version>${compileSource}</java.min.version>
-     <!-- Dependencies -->
--    <hadoop-two.version>2.10.0</hadoop-two.version>
-+    <hadoop-two.version>2.10.2</hadoop-two.version>
-     <hadoop-three.version>3.1.2</hadoop-three.version>
-     <!-- These must be defined here for downstream build tools that don't look at profiles.
-          They ought to match the values found in our default hadoop profile, which is
-@@ -560,7 +560,7 @@
-       modules and cause trouble if we only rely on transitive dependencies.
-     -->
-     <netty3.version>3.10.6.Final</netty3.version>
--    <netty4.version>4.1.108.Final</netty4.version>
-+    <netty4.version>4.1.111.Final</netty4.version>
-     <!-- end HBASE-15925 default hadoop compatibility values -->
-     <audience-annotations.version>0.13.0</audience-annotations.version>
-     <!--
-@@ -569,15 +569,15 @@
-     -->
-     <javadoc.audience-annotations.version>0.13.0</javadoc.audience-annotations.version>
-     <avro.version>1.7.7</avro.version>
--    <caffeine.version>2.8.1</caffeine.version>
-+    <caffeine.version>2.8.8</caffeine.version>
-     <commons-codec.version>1.15</commons-codec.version>
-     <commons-io.version>2.11.0</commons-io.version>
-     <commons-lang3.version>3.9</commons-lang3.version>
-     <commons-math.version>3.6.1</commons-math.version>
-     <commons-cli.version>1.5.0</commons-cli.version>
-     <disruptor.version>3.4.4</disruptor.version>
--    <httpclient.version>4.5.13</httpclient.version>
--    <httpcore.version>4.4.13</httpcore.version>
-+    <httpclient.version>4.5.14</httpclient.version>
-+    <httpcore.version>4.4.16</httpcore.version>
-     <metrics-core.version>3.2.6</metrics-core.version>
-     <!--
-       Note that the version of jackson-[annotations,core,databind] must be kept in sync with the
-@@ -588,13 +588,13 @@
-     <jaxb-api.version>2.3.1</jaxb-api.version>
-     <servlet.api.version>3.1.0</servlet.api.version>
-     <wx.rs.api.version>2.1.1</wx.rs.api.version>
--    <glassfish.jsp.version>2.3.2</glassfish.jsp.version>
--    <glassfish.el.version>3.0.1-b08</glassfish.el.version>
--    <jruby.version>9.2.13.0</jruby.version>
-+    <glassfish.jsp.version>2.3.4</glassfish.jsp.version>
-+    <glassfish.el.version>3.0.1-b12</glassfish.el.version>
-+    <jruby.version>9.2.21.0</jruby.version>
-     <junit.version>4.13.2</junit.version>
-     <hamcrest.version>1.3</hamcrest.version>
-     <htrace.version>4.2.0-incubating</htrace.version>
--    <reload4j.version>1.2.22</reload4j.version>
-+    <reload4j.version>1.2.25</reload4j.version>
-     <mockito-core.version>2.28.2</mockito-core.version>
-     <!--Internally we use a different version of protobuf. See hbase-protocol-shaded-->
-     <external.protobuf.groupid>com.google.protobuf</external.protobuf.groupid>
-@@ -602,19 +602,19 @@
-     <external.protoc.version>${external.protobuf.version}</external.protoc.version>
-     <protobuf.plugin.version>0.6.1</protobuf.plugin.version>
-     <thrift.path>thrift</thrift.path>
--    <thrift.version>0.14.1</thrift.version>
-+    <thrift.version>0.14.2</thrift.version>
-     <zookeeper.version>3.8.4</zookeeper.version>
-     <jline.version>2.11</jline.version>
--    <slf4j.version>1.7.33</slf4j.version>
-+    <slf4j.version>1.7.36</slf4j.version>
-     <clover.version>4.0.3</clover.version>
-     <jamon-runtime.version>2.4.1</jamon-runtime.version>
-     <jettison.version>1.5.4</jettison.version>
-     <!--Make sure these joni/jcodings are compatible with the versions used by jruby-->
--    <joni.version>2.1.31</joni.version>
--    <jcodings.version>1.0.55</jcodings.version>
--    <spy.version>2.12.2</spy.version>
--    <bouncycastle.version>1.78</bouncycastle.version>
--    <skyscreamer.version>1.5.1</skyscreamer.version>
-+    <joni.version>2.1.48</joni.version>
-+    <jcodings.version>1.0.58</jcodings.version>
-+    <spy.version>2.12.3</spy.version>
-+    <bouncycastle.version>1.78.1</bouncycastle.version>
-+    <skyscreamer.version>1.5.3</skyscreamer.version>
-     <kerby.version>1.0.1</kerby.version>
-     <commons-crypto.version>1.0.0</commons-crypto.version>
-     <curator.version>4.2.0</curator.version>
-@@ -631,17 +631,17 @@
-     <lifecycle.mapping.version>1.0.0</lifecycle.mapping.version>
-     <maven.antrun.version>1.8</maven.antrun.version>
-     <maven.bundle.version>3.3.0</maven.bundle.version>
--    <maven.checkstyle.version>3.1.0</maven.checkstyle.version>
-+    <maven.checkstyle.version>3.1.2</maven.checkstyle.version>
-     <maven.eclipse.version>2.10</maven.eclipse.version>
-     <maven.gpg.version>3.0.1</maven.gpg.version>
--    <maven.javadoc.version>3.4.0</maven.javadoc.version>
--    <maven.warbucks.version>1.1.0</maven.warbucks.version>
-+    <maven.javadoc.version>3.4.1</maven.javadoc.version>
-+    <maven.warbucks.version>1.1.2</maven.warbucks.version>
-     <maven.project.info.report.version>3.1.2</maven.project.info.report.version>
-     <os.maven.version>1.5.0.Final</os.maven.version>
-     <findbugs-annotations.version>1.3.9-1</findbugs-annotations.version>
-     <spotbugs.version>4.7.3</spotbugs.version>
--    <spotbugs.maven.version>4.7.2.1</spotbugs.maven.version>
--    <surefire.version>3.1.0</surefire.version>
-+    <spotbugs.maven.version>4.7.3.6</spotbugs.maven.version>
-+    <surefire.version>3.1.2</surefire.version>
-     <wagon.ssh.version>2.12</wagon.ssh.version>
-     <xml.maven.version>1.0.1</xml.maven.version>
-     <spotless.version>2.27.2</spotless.version>
-@@ -652,8 +652,8 @@
-         hbase-thirdparty.
-     -->
-     <hbase-thirdparty.version>4.1.7</hbase-thirdparty.version>
--    <maven-site.version>3.12.0</maven-site.version>
--    <snappy.version>1.1.10.4</snappy.version>
-+    <maven-site.version>3.12.1</maven-site.version>
-+    <snappy.version>1.1.10.5</snappy.version>
-     <!-- Coverage properties -->
-     <jacoco.version>0.8.8</jacoco.version>
-     <jacocoArgLine/>
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<String> getMetaReplicaNodesAndWatchChildren() throws KeeperException {
-     List<String> 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/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 <lukas.voetmand@stackable.tech>
-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 @@
-           <plugin>
-             <groupId>org.cyclonedx</groupId>
-             <artifactId>cyclonedx-maven-plugin</artifactId>
--            <version>2.7.10</version>
-+            <version>2.8.0</version>
-+            <configuration>
-+                <projectType>application</projectType>
-+                <schemaVersion>1.5</schemaVersion>
-+            </configuration>
-             <executions>
-               <execution>
-                 <goals>
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 <mail@siegfriedweber.net>
-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 @@
-     <spotless.version>2.27.2</spotless.version>
-     <maven-site.version>3.12.1</maven-site.version>
-     <!-- compression -->
--    <aircompressor.version>0.24</aircompressor.version>
-+    <aircompressor.version>0.27</aircompressor.version>
-     <brotli4j.version>1.11.0</brotli4j.version>
-     <lz4.version>1.8.0</lz4.version>
-     <snappy.version>1.1.10.5</snappy.version>
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 c914eb82b..000000000
--- a/hbase/stackable/patches/2.6.0/patchable.toml
+++ /dev/null
@@ -1,2 +0,0 @@
-base = "de99f8754135ea69adc39da48d2bc2b2710a5366"
-mirror = "https://github.com/stackabletech/hbase.git"
diff --git a/hbase/stackable/patches/2.6.0/0001-HBASE-28242-Updates-async-profiler-support.patch b/hbase/stackable/patches/2.6.2/0001-HBASE-28242-Updates-async-profiler-support.patch
similarity index 92%
rename from hbase/stackable/patches/2.6.0/0001-HBASE-28242-Updates-async-profiler-support.patch
rename to hbase/stackable/patches/2.6.2/0001-HBASE-28242-Updates-async-profiler-support.patch
index fc7be53c9..df2efe1e1 100644
--- a/hbase/stackable/patches/2.6.0/0001-HBASE-28242-Updates-async-profiler-support.patch
+++ b/hbase/stackable/patches/2.6.2/0001-HBASE-28242-Updates-async-profiler-support.patch
@@ -1,4 +1,4 @@
-From 5dedf99076578ec2d1a00f87b153ec7c04a40903 Mon Sep 17 00:00:00 2001
+From 3f32872b0c49ed7125803fd599e7f1318ce8c00a Mon Sep 17 00:00:00 2001
 From: Siegfried Weber <mail@siegfriedweber.net>
 Date: Tue, 6 Feb 2024 16:10:54 +0100
 Subject: HBASE-28242: Updates async-profiler support
@@ -8,10 +8,10 @@ Subject: HBASE-28242: Updates async-profiler support
  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
+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
-@@ -25,9 +25,11 @@ import java.util.concurrent.TimeUnit;
+@@ -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;
@@ -23,7 +23,7 @@ index 83087dbed3..6139114717 100644
  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;
+@@ -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
@@ -101,7 +101,7 @@ index 83087dbed3..6139114717 100644
   */
  @InterfaceAudience.Private
  public class ProfileServlet extends HttpServlet {
-@@ -77,19 +116,20 @@ public class ProfileServlet extends HttpServlet {
+@@ -81,19 +120,20 @@ public class ProfileServlet extends HttpServlet {
      WALL("wall"),
      ALLOC("alloc"),
      LOCK("lock"),
@@ -129,7 +129,7 @@ index 83087dbed3..6139114717 100644
      TRACE_TRACEPOINT("trace:tracepoint"),;
  
      private final String internalName;
-@@ -98,11 +138,11 @@ public class ProfileServlet extends HttpServlet {
+@@ -102,11 +142,11 @@ public class ProfileServlet extends HttpServlet {
        this.internalName = internalName;
      }
  
@@ -143,7 +143,7 @@ index 83087dbed3..6139114717 100644
        for (Event event : values()) {
          if (event.getInternalName().equalsIgnoreCase(name)) {
            return event;
-@@ -113,30 +153,26 @@ public class ProfileServlet extends HttpServlet {
+@@ -117,30 +157,26 @@ public class ProfileServlet extends HttpServlet {
      }
    }
  
@@ -182,7 +182,7 @@ index 83087dbed3..6139114717 100644
    }
  
    @Override
-@@ -155,9 +191,9 @@ public class ProfileServlet extends HttpServlet {
+@@ -159,9 +195,9 @@ public class ProfileServlet extends HttpServlet {
        setResponseHeader(resp);
        resp.getWriter()
          .write("ASYNC_PROFILER_HOME env is not set.\n\n"
@@ -194,7 +194,7 @@ index 83087dbed3..6139114717 100644
        return;
      }
  
-@@ -173,18 +209,18 @@ public class ProfileServlet extends HttpServlet {
+@@ -177,18 +213,18 @@ public class ProfileServlet extends HttpServlet {
        return;
      }
  
@@ -225,7 +225,7 @@ index 83087dbed3..6139114717 100644
  
      if (process == null || !process.isAlive()) {
        try {
-@@ -199,11 +235,7 @@ public class ProfileServlet extends HttpServlet {
+@@ -208,11 +244,7 @@ public class ProfileServlet extends HttpServlet {
              cmd.add("-e");
              cmd.add(event.getInternalName());
              cmd.add("-d");
@@ -238,7 +238,7 @@ index 83087dbed3..6139114717 100644
              if (interval != null) {
                cmd.add("-i");
                cmd.add(interval.toString());
-@@ -212,24 +244,25 @@ public class ProfileServlet extends HttpServlet {
+@@ -221,24 +253,25 @@ public class ProfileServlet extends HttpServlet {
                cmd.add("-j");
                cmd.add(jstackDepth.toString());
              }
@@ -274,7 +274,7 @@ index 83087dbed3..6139114717 100644
              if (minwidth != null) {
                cmd.add("--minwidth");
                cmd.add(minwidth.toString());
-@@ -237,6 +270,7 @@ public class ProfileServlet extends HttpServlet {
+@@ -246,6 +279,7 @@ public class ProfileServlet extends HttpServlet {
              if (reverse) {
                cmd.add("--reverse");
              }
@@ -282,7 +282,7 @@ index 83087dbed3..6139114717 100644
              cmd.add(pid.toString());
              process = ProcessUtils.runCmdAsync(cmd);
  
-@@ -247,7 +281,10 @@ public class ProfileServlet extends HttpServlet {
+@@ -256,7 +290,10 @@ public class ProfileServlet extends HttpServlet {
              resp.getWriter()
                .write("Started [" + event.getInternalName()
                  + "] profiling. This page will automatically redirect to " + relativeUrl + " after "
@@ -294,7 +294,7 @@ index 83087dbed3..6139114717 100644
  
              // to avoid auto-refresh by ProfileOutputServlet, refreshDelay can be specified
              // via url param
-@@ -265,8 +302,9 @@ public class ProfileServlet extends HttpServlet {
+@@ -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.");
@@ -306,7 +306,7 @@ index 83087dbed3..6139114717 100644
          }
        } catch (InterruptedException e) {
          LOG.warn("Interrupted while acquiring profile lock.", e);
-@@ -279,9 +317,9 @@ public class ProfileServlet extends HttpServlet {
+@@ -288,9 +326,9 @@ public class ProfileServlet extends HttpServlet {
      }
    }
  
@@ -318,7 +318,7 @@ index 83087dbed3..6139114717 100644
      if (value != null) {
        try {
          return Integer.valueOf(value);
-@@ -292,8 +330,8 @@ public class ProfileServlet extends HttpServlet {
+@@ -301,8 +339,8 @@ public class ProfileServlet extends HttpServlet {
      return defaultValue;
    }
  
@@ -329,7 +329,7 @@ index 83087dbed3..6139114717 100644
      if (value != null) {
        try {
          return Long.valueOf(value);
-@@ -304,8 +342,8 @@ public class ProfileServlet extends HttpServlet {
+@@ -313,8 +351,8 @@ public class ProfileServlet extends HttpServlet {
      return null;
    }
  
@@ -340,7 +340,7 @@ index 83087dbed3..6139114717 100644
      if (value != null) {
        try {
          return Double.valueOf(value);
-@@ -316,8 +354,8 @@ public class ProfileServlet extends HttpServlet {
+@@ -325,8 +363,8 @@ public class ProfileServlet extends HttpServlet {
      return null;
    }
  
@@ -351,7 +351,7 @@ index 83087dbed3..6139114717 100644
      if (eventArg != null) {
        Event event = Event.fromInternalName(eventArg);
        return event == null ? Event.CPU : event;
-@@ -325,16 +363,16 @@ public class ProfileServlet extends HttpServlet {
+@@ -334,16 +372,16 @@ public class ProfileServlet extends HttpServlet {
      return Event.CPU;
    }
  
@@ -372,7 +372,7 @@ index 83087dbed3..6139114717 100644
    }
  
    static void setResponseHeader(final HttpServletResponse response) {
-@@ -366,8 +404,7 @@ public class ProfileServlet extends HttpServlet {
+@@ -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"
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.2/0002-Update-all-dependencies-which-have-a-new-patch-updat.patch
similarity index 74%
rename from hbase/stackable/patches/2.6.0/0003-Update-all-dependencies-which-have-a-new-patch-updat.patch
rename to hbase/stackable/patches/2.6.2/0002-Update-all-dependencies-which-have-a-new-patch-updat.patch
index a8799977e..7de26ad89 100644
--- a/hbase/stackable/patches/2.6.0/0003-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
@@ -1,33 +1,33 @@
-From fea1d27160dc1e8f53509ae0f57518404d16dae0 Mon Sep 17 00:00:00 2001
-From: Lars Francke <lars.francke@stackable.tech>
-Date: Thu, 11 Jul 2024 10:12:51 +0200
-Subject: Update all dependencies which have a new patch update available.
+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 | 40 ++++++++++++++++++++--------------------
- 1 file changed, 20 insertions(+), 20 deletions(-)
+ pom.xml | 42 +++++++++++++++++++++---------------------
+ 1 file changed, 21 insertions(+), 21 deletions(-)
 
 diff --git a/pom.xml b/pom.xml
-index 918cdaa675..b420025c6c 100644
+index e4be54a0ad..6202b48156 100644
 --- a/pom.xml
 +++ b/pom.xml
-@@ -567,7 +567,7 @@
+@@ -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.
      -->
-     <netty3.version>3.10.6.Final</netty3.version>
--    <netty4.version>4.1.108.Final</netty4.version>
-+    <netty4.version>4.1.111.Final</netty4.version>
+-    <netty4.version>4.1.116.Final</netty4.version>
++    <netty4.version>4.1.117.Final</netty4.version>
      <!-- end HBASE-15925 default hadoop compatibility values -->
      <audience-annotations.version>0.13.0</audience-annotations.version>
      <!--
-@@ -576,15 +576,15 @@
+@@ -575,27 +575,27 @@
      -->
      <javadoc.audience-annotations.version>0.13.0</javadoc.audience-annotations.version>
-     <avro.version>1.11.3</avro.version>
+     <avro.version>1.11.4</avro.version>
 -    <caffeine.version>2.8.1</caffeine.version>
 +    <caffeine.version>2.8.8</caffeine.version>
      <commons-codec.version>1.15</commons-codec.version>
-     <commons-io.version>2.11.0</commons-io.version>
+     <commons-io.version>2.18.0</commons-io.version>
      <commons-lang3.version>3.9</commons-lang3.version>
      <commons-math.version>3.6.1</commons-math.version>
      <commons-cli.version>1.5.0</commons-cli.version>
@@ -39,21 +39,23 @@ index 918cdaa675..b420025c6c 100644
      <metrics-core.version>3.2.6</metrics-core.version>
      <!--
        Note that the version of jackson-[annotations,core,databind] must be kept in sync with the
-@@ -595,9 +595,9 @@
+       version of jackson-jaxrs-json-provider shipped in hbase-thirdparty.
+     -->
+-    <jackson.version>2.17.2</jackson.version>
+-    <jackson.databind.version>2.17.2</jackson.databind.version>
++    <jackson.version>2.17.3</jackson.version>
++    <jackson.databind.version>2.17.3</jackson.databind.version>
      <jaxb-api.version>2.3.1</jaxb-api.version>
      <servlet.api.version>3.1.0</servlet.api.version>
      <wx.rs.api.version>2.1.1</wx.rs.api.version>
--    <glassfish.jsp.version>2.3.2</glassfish.jsp.version>
--    <glassfish.el.version>3.0.1-b08</glassfish.el.version>
+     <tomcat.jasper.version>9.0.93</tomcat.jasper.version>
 -    <jruby.version>9.3.13.0</jruby.version>
-+    <glassfish.jsp.version>2.3.4</glassfish.jsp.version>
-+    <glassfish.el.version>3.0.1-b12</glassfish.el.version>
 +    <jruby.version>9.3.15.0</jruby.version>
      <junit.version>4.13.2</junit.version>
      <hamcrest.version>1.3</hamcrest.version>
      <opentelemetry.version>1.15.0</opentelemetry.version>
-@@ -610,19 +610,19 @@
-     <external.protoc.version>${external.protobuf.version}</external.protoc.version>
+@@ -613,19 +613,19 @@
+     <internal.protobuf.version>4.28.2</internal.protobuf.version>
      <protobuf.plugin.version>0.6.1</protobuf.plugin.version>
      <thrift.path>thrift</thrift.path>
 -    <thrift.version>0.14.1</thrift.version>
@@ -66,18 +68,19 @@ index 918cdaa675..b420025c6c 100644
      <jamon-runtime.version>2.4.1</jamon-runtime.version>
      <jettison.version>1.5.4</jettison.version>
      <!--Make sure these joni/jcodings are compatible with the versions used by jruby-->
-     <joni.version>2.2.1</joni.version>
-     <jcodings.version>1.0.58</jcodings.version>
--    <spy.version>2.12.2</spy.version>
+-    <joni.version>2.2.1</joni.version>
+-    <jcodings.version>1.0.58</jcodings.version>
++    <joni.version>2.2.3</joni.version>
++    <jcodings.version>1.0.61</jcodings.version>
+     <spy.version>2.12.3</spy.version>
 -    <bouncycastle.version>1.78</bouncycastle.version>
 -    <skyscreamer.version>1.5.1</skyscreamer.version>
-+    <spy.version>2.12.3</spy.version>
 +    <bouncycastle.version>1.78.1</bouncycastle.version>
 +    <skyscreamer.version>1.5.3</skyscreamer.version>
      <kerby.version>1.0.1</kerby.version>
      <commons-crypto.version>1.1.0</commons-crypto.version>
      <curator.version>4.2.0</curator.version>
-@@ -639,27 +639,27 @@
+@@ -642,27 +642,27 @@
      <lifecycle.mapping.version>1.0.0</lifecycle.mapping.version>
      <maven.antrun.version>1.8</maven.antrun.version>
      <maven.bundle.version>3.3.0</maven.bundle.version>
@@ -103,13 +106,13 @@ index 918cdaa675..b420025c6c 100644
 -    <maven-site.version>3.12.0</maven-site.version>
 +    <maven-site.version>3.12.1</maven-site.version>
      <!-- compression -->
-     <aircompressor.version>0.24</aircompressor.version>
+     <aircompressor.version>0.27</aircompressor.version>
      <brotli4j.version>1.11.0</brotli4j.version>
      <lz4.version>1.8.0</lz4.version>
 -    <snappy.version>1.1.10.4</snappy.version>
 -    <zstd-jni.version>1.5.5-2</zstd-jni.version>
-+    <snappy.version>1.1.10.5</snappy.version>
-+    <zstd-jni.version>1.5.6-3</zstd-jni.version>
++    <snappy.version>1.1.10.7</snappy.version>
++    <zstd-jni.version>1.5.6-9</zstd-jni.version>
      <!--
          Note that the version of protobuf shipped in hbase-thirdparty must match the version used
          in hbase-protocol-shaded and hbase-examples. The version of jackson-[annotations,core,
diff --git a/hbase/stackable/patches/2.6.0/0004-Include-jackson-dataformat-xml.patch b/hbase/stackable/patches/2.6.2/0003-Include-jackson-dataformat-xml.patch
similarity index 91%
rename from hbase/stackable/patches/2.6.0/0004-Include-jackson-dataformat-xml.patch
rename to hbase/stackable/patches/2.6.2/0003-Include-jackson-dataformat-xml.patch
index 6fe1ede4d..95234a5b2 100644
--- a/hbase/stackable/patches/2.6.0/0004-Include-jackson-dataformat-xml.patch
+++ b/hbase/stackable/patches/2.6.2/0003-Include-jackson-dataformat-xml.patch
@@ -1,4 +1,4 @@
-From 5aaae3665b8e50268810c5b3f443a204231b5d6a Mon Sep 17 00:00:00 2001
+From 5bb92637f453cca489eacda30aac781b60105430 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: Include jackson-dataformat-xml.
@@ -12,10 +12,10 @@ it.
  2 files changed, 17 insertions(+)
 
 diff --git a/hbase-assembly/pom.xml b/hbase-assembly/pom.xml
-index 1564851b85..0786288a84 100644
+index 459d3d2cb9..a5ae653d02 100644
 --- a/hbase-assembly/pom.xml
 +++ b/hbase-assembly/pom.xml
-@@ -222,6 +222,11 @@
+@@ -221,6 +221,11 @@
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
      </dependency>
@@ -28,10 +28,10 @@ index 1564851b85..0786288a84 100644
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-slf4j-impl</artifactId>
 diff --git a/pom.xml b/pom.xml
-index b420025c6c..819e021d86 100644
+index 6202b48156..c1619999a5 100644
 --- a/pom.xml
 +++ b/pom.xml
-@@ -1149,6 +1149,11 @@
+@@ -1157,6 +1157,11 @@
          <artifactId>log4j-core</artifactId>
          <version>${log4j2.version}</version>
        </dependency>
@@ -43,7 +43,7 @@ index b420025c6c..819e021d86 100644
        <dependency>
          <groupId>org.apache.logging.log4j</groupId>
          <artifactId>log4j-slf4j-impl</artifactId>
-@@ -1159,6 +1164,13 @@
+@@ -1167,6 +1172,13 @@
          <artifactId>log4j-1.2-api</artifactId>
          <version>${log4j2.version}</version>
        </dependency>
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.6.2/0004-Bump-cyclonedx-maven-plugin-to-version-2.9.1-and-twe.patch
similarity index 74%
rename from hbase/stackable/patches/2.4.18/0006-Bump-cyclonedx-maven-plugin-to-version-2.8.0-and-twe.patch
rename to hbase/stackable/patches/2.6.2/0004-Bump-cyclonedx-maven-plugin-to-version-2.9.1-and-twe.patch
index 78a5e3ee1..f83063984 100644
--- 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.6.2/0004-Bump-cyclonedx-maven-plugin-to-version-2.9.1-and-twe.patch
@@ -1,7 +1,7 @@
-From 2aa0caa6a2c918f9f3bf21e9974f10fff1e1acc1 Mon Sep 17 00:00:00 2001
+From c6ddaa5ab1a75d001941276fbd715b1b8ab9d8e0 Mon Sep 17 00:00:00 2001
 From: Lukas Voetmand <lukas.voetmand@stackable.tech>
 Date: Fri, 6 Sep 2024 17:53:52 +0200
-Subject: Bump cyclonedx-maven-plugin to version 2.8.0 and tweak its
+Subject: Bump cyclonedx-maven-plugin to version 2.9.1 and tweak its
  configuration
 
 ---
@@ -9,15 +9,15 @@ Subject: Bump cyclonedx-maven-plugin to version 2.8.0 and tweak its
  1 file changed, 5 insertions(+), 1 deletion(-)
 
 diff --git a/pom.xml b/pom.xml
-index 8bd80e81e2..58c29a9d90 100755
+index c1619999a5..808a768937 100644
 --- a/pom.xml
 +++ b/pom.xml
-@@ -3011,7 +3011,11 @@
+@@ -3275,7 +3275,11 @@
            <plugin>
              <groupId>org.cyclonedx</groupId>
              <artifactId>cyclonedx-maven-plugin</artifactId>
 -            <version>2.7.10</version>
-+            <version>2.8.0</version>
++            <version>2.9.1</version>
 +            <configuration>
 +                <projectType>application</projectType>
 +                <schemaVersion>1.5</schemaVersion>
diff --git a/hbase/stackable/patches/2.4.18/patchable.toml b/hbase/stackable/patches/2.6.2/patchable.toml
similarity index 51%
rename from hbase/stackable/patches/2.4.18/patchable.toml
rename to hbase/stackable/patches/2.6.2/patchable.toml
index 20dfd9e95..a46f266be 100644
--- a/hbase/stackable/patches/2.4.18/patchable.toml
+++ b/hbase/stackable/patches/2.6.2/patchable.toml
@@ -1,2 +1,2 @@
-base = "a1767f4d76859c0068720a6c1e5cb78282ebfe1e"
+base = "6b3b36b429cf9a9d74110de79eb3b327b29ebf17"
 mirror = "https://github.com/stackabletech/hbase.git"
diff --git a/hbase/versions.py b/hbase/versions.py
index 326b83c4d..2731c0328 100644
--- a/hbase/versions.py
+++ b/hbase/versions.py
@@ -2,30 +2,28 @@
     # 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",
+        "product": "2.6.1",
+        "hbase_thirdparty": "4.1.9",
+        "hbase_operator_tools": "1.3.0-fd5a5fb",
         "java-base": "11",
         "java-devel": "11",
         "async_profiler": "2.9",
         "phoenix": "5.2.1",
-        "hbase_profile": "2.4",
+        "hbase_profile": "2.6",
         "hadoop": "3.3.6",
-        "jmx_exporter": "1.2.0",  # update the stackable/jmx/config<version> folder too
-        "opa_authorizer": "",  # only for HBase 2.6.1
+        "opa_authorizer": "0.1.0",  # only for HBase 2.6.1
         "delete_caches": "true",
     },
     {
-        "product": "2.6.1",
-        "hbase_thirdparty": "4.1.9",
+        "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.3.6",
-        "jmx_exporter": "",  # 2.6 exports jmx and prometheus metrics by default
+        "hadoop": "3.4.1",
         "opa_authorizer": "0.1.0",  # only for HBase 2.6.1
         "delete_caches": "true",
     },


Reviews:
user: login: NickLarsenNZ
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-05-12T10:27:39Z
user: login: razvan
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-05-12T15:11:19Z
user: login: NickLarsenNZ
body: LGTM
state: APPROVED
author_association: MEMBER
submitted_at: 2025-05-15T14:29:40Z

Review comments:
diff_hunk: @@ -208,7 +193,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 \
path: hbase/Dockerfile
user: login: NickLarsenNZ
body: Just double checking this, since we've decided to stick to the same Hadoop version.
created_at: 2025-05-12T10:27:39Z
author_association: MEMBER
diff_hunk: @@ -208,7 +193,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 \
path: hbase/Dockerfile
user: login: razvan
body: yeah, sorry for the omission https://github.com/stackabletech/docker-images/pull/1101/commits/3156f96dde789fc19803d9481992b614a9a05ba0
created_at: 2025-05-12T15:11:19Z
author_association: MEMBER

PR comments:
user: login: razvan
created_at: 2025-05-12T09:29:30Z
body: Image build flow https://github.com/stackabletech/docker-images/actions/runs/14968712626
author_association: MEMBER
user: login: razvan
created_at: 2025-05-15T14:30:37Z
body: thanks!
author_association: MEMBER