This is an automated email from the ASF dual-hosted git repository.

anmolnar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/zookeeper.git


The following commit(s) were added to refs/heads/master by this push:
     new 12d4cb474 ZOOKEEPER-5039: Raise to min JDK 17, also build, test with 
JDK25
12d4cb474 is described below

commit 12d4cb474fb316b6dbc6fed766a1633acd7e9142
Author: Dávid Paksy <[email protected]>
AuthorDate: Wed Jun 24 21:24:08 2026 +0200

    ZOOKEEPER-5039: Raise to min JDK 17, also build, test with JDK25
    
    Reviewers: kgeisz, anmolnar, anmolnar, tamaashu
    Author: PDavid
    Closes #2376 from PDavid/ZOOKEEPER-5039-mockito-upgrade
---
 .github/workflows/ci.yaml                          | 12 +--
 .github/workflows/e2e.yaml                         |  4 +-
 .github/workflows/manual.yaml                      |  4 +-
 .github/workflows/website.yaml                     |  4 +-
 Jenkinsfile                                        |  2 +-
 Jenkinsfile-PreCommit                              |  2 +-
 README.md                                          |  7 +-
 dev/docker/Dockerfile                              |  5 +-
 dev/docker/README.md                               |  3 +
 excludeFindBugsFilter.xml                          | 18 +++++
 pom.xml                                            | 92 ++++++++++++++++------
 .../PrometheusMetricsProviderConfigTest.java       |  7 +-
 zookeeper-server/pom.xml                           |  5 --
 .../zookeeper/server/util/JvmPauseMonitor.java     | 23 +++---
 .../configuration-parameters.mdx                   |  6 +-
 .../admin-ops/administrators-guide/deployment.mdx  |  4 +-
 16 files changed, 127 insertions(+), 71 deletions(-)

diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
index 6f09ab5c9..5d9bb1742 100644
--- a/.github/workflows/ci.yaml
+++ b/.github/workflows/ci.yaml
@@ -32,17 +32,17 @@ jobs:
     strategy:
       matrix:
         profile:
-          - name: 'full-build-jdk8'
-            jdk: 8
+          - name: 'full-build-jdk17'
+            jdk: 17
             args: '-Pfull-build apache-rat:check verify -DskipTests 
spotbugs:check checkstyle:check'
-          - name: 'full-build-jdk11'
-            jdk: 11
+          - name: 'full-build-jdk25'
+            jdk: 25
             args: '-Pfull-build apache-rat:check verify -DskipTests 
spotbugs:check checkstyle:check'
           - name: 'full-build-java-tests'
-            jdk: 11
+            jdk: 25
             args: '-Pfull-build verify -Dsurefire-forkcount=1 -DskipCppUnit 
-Dsurefire.rerunFailingTestsCount=5'
           - name: 'full-build-cppunit-tests'
-            jdk: 11
+            jdk: 25
             args: '-Pfull-build verify -Dtest=_ -DfailIfNoTests=false'
       fail-fast: false
     timeout-minutes: 360
diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml
index d20eba55b..d912c3929 100644
--- a/.github/workflows/e2e.yaml
+++ b/.github/workflows/e2e.yaml
@@ -25,8 +25,8 @@ jobs:
   compatibility:
     strategy:
       matrix:
-        jdk: [8, 11]
-        zk: [3.5.9, 3.6.3, 3.7.0, nightly]
+        jdk: [17, 25]
+        zk: [3.7.2, 3.8.6, 3.9.5, nightly]
       fail-fast: false
     timeout-minutes: 360
     runs-on: ubuntu-latest
diff --git a/.github/workflows/manual.yaml b/.github/workflows/manual.yaml
index 8b50b8be3..0c9d01565 100644
--- a/.github/workflows/manual.yaml
+++ b/.github/workflows/manual.yaml
@@ -46,10 +46,10 @@ jobs:
     - uses: actions/checkout@v6
       with:
         ref: ${{ github.event.inputs.buildRef }}
-    - name: Set up JDK 11
+    - name: Set up JDK 17
       uses: actions/setup-java@v5
       with:
-        java-version: 11
+        java-version: 17
         distribution: temurin
         cache: 'maven'
     - name: Show the first log message
diff --git a/.github/workflows/website.yaml b/.github/workflows/website.yaml
index c4a4a4566..a51101308 100644
--- a/.github/workflows/website.yaml
+++ b/.github/workflows/website.yaml
@@ -33,10 +33,10 @@ jobs:
     runs-on: ubuntu-latest
     steps:
     - uses: actions/checkout@v6
-    - name: Set up JDK 11
+    - name: Set up JDK 25
       uses: actions/setup-java@v5
       with:
-        java-version: 11
+        java-version: 25
         distribution: temurin
         cache: 'maven'
     - name: Set up Node.js 22
diff --git a/Jenkinsfile b/Jenkinsfile
index 40fcdd5bb..5d2353364 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -39,7 +39,7 @@ pipeline {
                 axes {
                     axis {
                         name 'JAVA_VERSION'
-                        values 'jdk_1.8_latest', 'jdk_11_latest'
+                        values 'jdk_17_latest', 'jdk_25_latest'
                     }
                 }
 
diff --git a/Jenkinsfile-PreCommit b/Jenkinsfile-PreCommit
index 8390e05b9..8c1143049 100644
--- a/Jenkinsfile-PreCommit
+++ b/Jenkinsfile-PreCommit
@@ -30,7 +30,7 @@ pipeline {
 
     tools {
         maven "maven_latest"
-        jdk "jdk_1.8_latest"
+        jdk "jdk_17_latest"
     }
 
     stages {
diff --git a/README.md b/README.md
index cd9db2b46..6bc86742e 100644
--- a/README.md
+++ b/README.md
@@ -2,7 +2,7 @@
 
 <p align="left">
   <a href="https://zookeeper.apache.org/";>
-    <img src="https://zookeeper.apache.org/images/zookeeper_small.gif""; 
alt="https://zookeeper.apache.org/";><br/>
+    <img src="https://zookeeper.apache.org/images/zookeeper_small.gif"; 
alt="https://zookeeper.apache.org/";><br/>
   </a>
 </p>
 
@@ -39,11 +39,6 @@ is voted on and approved by the Apache ZooKeeper PMC:
 
   https://repo1.maven.org/maven2/org/apache/zookeeper/zookeeper
 
-## Java 8
-
-If you are going to compile with Java 1.8, you should use a
-recent release at u211 or above.
-
 # Contributing
 We always welcome new contributors to the project! See [How to 
Contribute](https://cwiki.apache.org/confluence/display/ZOOKEEPER/HowToContribute)
 for details on how to submit patches as pull requests and other aspects of our 
contribution workflow.
 
diff --git a/dev/docker/Dockerfile b/dev/docker/Dockerfile
index 4d8a5d08d..8bccb05e8 100644
--- a/dev/docker/Dockerfile
+++ b/dev/docker/Dockerfile
@@ -17,7 +17,7 @@
 # under the License.
 #
 
-FROM maven:3.8.4-jdk-11
+FROM maven:3.8.8-eclipse-temurin-17
 
 RUN apt-get update
 RUN apt-get install -y \
@@ -31,4 +31,5 @@ RUN apt-get install -y \
   libssl-dev \
   libsasl2-modules-gssapi-mit \
   libsasl2-modules \
-  libsasl2-dev
+  libsasl2-dev \
+  gnupg
diff --git a/dev/docker/README.md b/dev/docker/README.md
new file mode 100644
index 000000000..02338da61
--- /dev/null
+++ b/dev/docker/README.md
@@ -0,0 +1,3 @@
+# About
+
+Just run `dev/docker/run.sh` and you will have a Linux environment with all 
that is needed to build ZooKeeper, even on MacOs.
diff --git a/excludeFindBugsFilter.xml b/excludeFindBugsFilter.xml
index a29659448..573c76b2b 100644
--- a/excludeFindBugsFilter.xml
+++ b/excludeFindBugsFilter.xml
@@ -7,5 +7,23 @@
     <!-- this problem is to be addressed in ZOOKEEPER-3227 -->
     <Bug pattern="DM_DEFAULT_ENCODING"/>
 
+    <!-- newly detected by SpotBugs 4.9.3; pre-existing code, not regressions 
-->
+    <Bug pattern="EI_EXPOSE_REP"/>
+    <Bug pattern="EI_EXPOSE_REP2"/>
+    <Bug pattern="CT_CONSTRUCTOR_THROW"/>
+    <Bug pattern="AT_STALE_THREAD_WRITE_OF_PRIMITIVE"/>
+    <Bug pattern="AT_NONATOMIC_64BIT_PRIMITIVE"/>
+    <Bug pattern="AT_NONATOMIC_OPERATIONS_ON_SHARED_VARIABLE"/>
+    <Bug pattern="PA_PUBLIC_PRIMITIVE_ATTRIBUTE"/>
+    <Bug pattern="DCN_NULLPOINTER_EXCEPTION"/>
+    <Bug pattern="US_USELESS_SUPPRESSION_ON_METHOD"/>
+    <Bug pattern="US_USELESS_SUPPRESSION_ON_CLASS"/>
+    <Bug pattern="US_USELESS_SUPPRESSION_ON_FIELD"/>
+    <Bug pattern="DMI_RANDOM_USED_ONLY_ONCE"/>
+    <Bug pattern="SS_SHOULD_BE_STATIC"/>
+    <Bug pattern="NP_UNWRITTEN_FIELD"/>
+    <Bug pattern="SING_SINGLETON_HAS_NONPRIVATE_CONSTRUCTOR"/>
+    <Bug pattern="MS_EXPOSE_REP"/>
+
 </FindBugsFilter>
 
diff --git a/pom.xml b/pom.xml
index 2e14fe6ab..1aacd272b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -350,9 +350,6 @@
           <name>m2e.version</name>
         </property>
       </activation>
-      <properties>
-        <maven.compiler.release>8</maven.compiler.release>
-      </properties>
       <build>
         <pluginManagement>
           <plugins>
@@ -436,15 +433,6 @@
         </pluginManagement>
       </build>
     </profile>
-    <profile>
-      <id>jdk-release-flag</id>
-      <activation>
-        <jdk>[9,)</jdk>
-      </activation>
-      <properties>
-        <maven.compiler.release>8</maven.compiler.release>
-      </properties>
-    </profile>
     <profile>
       <id>clover</id>
       <activation>
@@ -540,8 +528,7 @@
 
   <properties>
     <!-- maven properties -->
-    <maven.compiler.source>1.8</maven.compiler.source>
-    <maven.compiler.target>1.8</maven.compiler.target>
+    <maven.compiler.release>17</maven.compiler.release>
     <project.build.outputTimestamp>1691130453</project.build.outputTimestamp>
     <dependency.locations.enabled>false</dependency.locations.enabled>
     <surefire.version>2.22.1</surefire.version>
@@ -556,7 +543,7 @@
     <jmockit.version>1.48</jmockit.version>
     <junit.version>5.6.2</junit.version>
     <junit-platform.version>1.6.2</junit-platform.version>
-    <mockito.version>4.9.0</mockito.version>
+    <mockito.version>5.23.0</mockito.version>
     <hamcrest.version>2.2</hamcrest.version>
     <commons-cli.version>1.5.0</commons-cli.version>
     <netty.version>4.1.130.Final</netty.version>
@@ -568,14 +555,16 @@
     <bouncycastle.version>1.78</bouncycastle.version>
     <commons-collections.version>4.4</commons-collections.version>
     <dropwizard.version>4.1.12.1</dropwizard.version>
-    <spotbugsannotations.version>4.0.2</spotbugsannotations.version>
+    <spotbugsannotations.version>4.9.3</spotbugsannotations.version>
     <checkstyle.version>8.39</checkstyle.version>
     <enforcer.version>3.0.0-M3</enforcer.version>
     <commons-io.version>2.17.0</commons-io.version>
-    <burningwave.mockdns.version>0.25.4</burningwave.mockdns.version>
+    <burningwave.mockdns.version>0.27.2</burningwave.mockdns.version>
     <dnsjava.version>3.5.1</dnsjava.version>
     <clover-maven-plugin.version>4.4.1</clover-maven-plugin.version>
     <sonar-maven-plugin.version>3.7.0.1746</sonar-maven-plugin.version>
+    <maven.min.version>3.5.0</maven.min.version>
+    <java.min.version>${maven.compiler.release}</java.min.version>
 
     <!-- parameters to pass to C client build -->
     <c-client-openssl>yes</c-client-openssl>
@@ -704,12 +693,6 @@
         <artifactId>mockito-core</artifactId>
         <version>${mockito.version}</version>
       </dependency>
-      <dependency>
-        <groupId>org.mockito</groupId>
-        <artifactId>mockito-inline</artifactId>
-        <version>${mockito.version}</version>
-        <scope>test</scope>
-      </dependency>
       <dependency>
         <groupId>io.netty</groupId>
         <artifactId>netty-bom</artifactId>
@@ -887,10 +870,39 @@
         <plugin>
           <groupId>com.github.spotbugs</groupId>
           <artifactId>spotbugs-maven-plugin</artifactId>
-          <version>4.0.0</version>
+          <version>4.9.3.0</version>
           <configuration>
             <excludeFilterFile>excludeFindBugsFilter.xml</excludeFilterFile>
           </configuration>
+          <dependencies>
+            <!-- Override ASM version to support JDK 25 (class file version 69)
+             TODO: Remove this override when future SpotBugs version bundles 
ASM 9.9+ -->
+            <dependency>
+              <groupId>org.ow2.asm</groupId>
+              <artifactId>asm</artifactId>
+              <version>9.9.1</version>
+            </dependency>
+            <dependency>
+              <groupId>org.ow2.asm</groupId>
+              <artifactId>asm-analysis</artifactId>
+              <version>9.9.1</version>
+            </dependency>
+            <dependency>
+              <groupId>org.ow2.asm</groupId>
+              <artifactId>asm-commons</artifactId>
+              <version>9.9.1</version>
+            </dependency>
+            <dependency>
+              <groupId>org.ow2.asm</groupId>
+              <artifactId>asm-tree</artifactId>
+              <version>9.9.1</version>
+            </dependency>
+            <dependency>
+              <groupId>org.ow2.asm</groupId>
+              <artifactId>asm-util</artifactId>
+              <version>9.9.1</version>
+            </dependency>
+          </dependencies>
         </plugin>
         <plugin>
           <groupId>org.owasp</groupId>
@@ -1157,6 +1169,38 @@
         <artifactId>maven-enforcer-plugin</artifactId>
         <version>${enforcer.version}</version>
         <executions>
+          <execution>
+            <id>display-info</id>
+            <goals>
+              <goal>display-info</goal>
+            </goals>
+            <phase>initialize</phase>
+            <inherited>false</inherited>
+          </execution>
+          <execution>
+            <id>zookeeper-min-maven-min-java</id>
+            <goals>
+              <goal>enforce</goal>
+            </goals>
+            <configuration>
+              <rules>
+                <requireMavenVersion>
+                  <version>[${maven.min.version},)</version>
+                  <message>Maven is out of date.
+                    ZooKeeper requires at least version ${maven.min.version} 
of Maven to properly build from source.
+                    You appear to be using an older version. You can use 
either "mvn -version" or
+                    "mvn enforcer:display-info" to verify what version is 
active.</message>
+                </requireMavenVersion>
+                <requireJavaVersion>
+                  <version>[${java.min.version},)</version>
+                  <message>Java is out of date.
+                    ZooKeeper requires at least version ${java.min.version} of 
the JDK to properly build from source.
+                    You appear to be using an older version. You can use 
either "mvn -version" or
+                    "mvn enforcer:display-info" to verify what version is 
active.</message>
+                </requireJavaVersion>
+              </rules>
+            </configuration>
+          </execution>
           <execution>
             <id>banned-commons-lang</id>
             <goals>
diff --git 
a/zookeeper-metrics-providers/zookeeper-prometheus-metrics/src/test/java/org/apache/zookeeper/metrics/prometheus/PrometheusMetricsProviderConfigTest.java
 
b/zookeeper-metrics-providers/zookeeper-prometheus-metrics/src/test/java/org/apache/zookeeper/metrics/prometheus/PrometheusMetricsProviderConfigTest.java
index 66a01fb95..68cc26abd 100644
--- 
a/zookeeper-metrics-providers/zookeeper-prometheus-metrics/src/test/java/org/apache/zookeeper/metrics/prometheus/PrometheusMetricsProviderConfigTest.java
+++ 
b/zookeeper-metrics-providers/zookeeper-prometheus-metrics/src/test/java/org/apache/zookeeper/metrics/prometheus/PrometheusMetricsProviderConfigTest.java
@@ -21,6 +21,7 @@
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.security.KeyStore;
@@ -107,8 +108,10 @@ public void testInvalidAddr() throws 
MetricsProviderLifeCycleException {
                 assertThrows(MetricsProviderLifeCycleException.class, 
provider::start);
 
         assertEquals("Failed to start Prometheus Jetty server", 
exception.getMessage());
-        assertNotNull(exception.getCause());
-        assertEquals("Failed to bind to master:0", 
exception.getCause().getMessage());
+        Throwable cause = exception.getCause();
+        assertNotNull(cause);
+        assertTrue(cause.getMessage().contains("Failed to bind to master"));
+        assertTrue(cause.getMessage().contains(":0"));
     }
 
     @Test
diff --git a/zookeeper-server/pom.xml b/zookeeper-server/pom.xml
index f4b76095d..1ad5afd34 100644
--- a/zookeeper-server/pom.xml
+++ b/zookeeper-server/pom.xml
@@ -145,11 +145,6 @@
       <artifactId>mockito-core</artifactId>
       <scope>test</scope>
     </dependency>
-    <dependency>
-      <groupId>org.mockito</groupId>
-      <artifactId>mockito-inline</artifactId>
-      <scope>test</scope>
-    </dependency>
     <dependency>
       <groupId>org.jmockit</groupId>
       <artifactId>jmockit</artifactId>
diff --git 
a/zookeeper-server/src/main/java/org/apache/zookeeper/server/util/JvmPauseMonitor.java
 
b/zookeeper-server/src/main/java/org/apache/zookeeper/server/util/JvmPauseMonitor.java
index 4a06f3db9..7e2fa9c3e 100644
--- 
a/zookeeper-server/src/main/java/org/apache/zookeeper/server/util/JvmPauseMonitor.java
+++ 
b/zookeeper-server/src/main/java/org/apache/zookeeper/server/util/JvmPauseMonitor.java
@@ -27,6 +27,7 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.concurrent.atomic.AtomicLong;
 import org.apache.zookeeper.server.ServerConfig;
 import org.apache.zookeeper.server.ServerMetrics;
 import org.apache.zookeeper.server.quorum.QuorumPeerConfig;
@@ -64,9 +65,9 @@ public class JvmPauseMonitor {
     public static final String INFO_THRESHOLD_KEY = 
"jvm.pause.info-threshold.ms";
     public static final long INFO_THRESHOLD_DEFAULT = 1000;
 
-    private volatile long numGcWarnThresholdExceeded = 0;
-    private volatile long numGcInfoThresholdExceeded = 0;
-    private volatile long totalGcExtraSleepTime = 0;
+    private final AtomicLong numGcWarnThresholdExceeded = new AtomicLong(0);
+    private final AtomicLong numGcInfoThresholdExceeded = new AtomicLong(0);
+    private final AtomicLong totalGcExtraSleepTime = new AtomicLong(0);
 
     private Thread monitorThread;
     private volatile boolean shouldRun = true;
@@ -106,15 +107,15 @@ public boolean isStarted() {
     }
 
     public long getNumGcWarnThresholdExceeded() {
-        return numGcWarnThresholdExceeded;
+        return numGcWarnThresholdExceeded.get();
     }
 
     public long getNumGcInfoThresholdExceeded() {
-        return numGcInfoThresholdExceeded;
+        return numGcInfoThresholdExceeded.get();
     }
 
     public long getTotalGcExtraSleepTime() {
-        return totalGcExtraSleepTime;
+        return totalGcExtraSleepTime.get();
     }
 
     private String formatMessage(long extraSleepTime, Map<String, GcTimes> 
gcTimesAfterSleep, Map<String, GcTimes> gcTimesBeforeSleep) {
@@ -133,8 +134,8 @@ private String formatMessage(long extraSleepTime, 
Map<String, GcTimes> gcTimesAf
         String ret = String.format("Detected pause in JVM or host machine (eg 
GC): pause of approximately %d ms, "
                                    + "total pause: info level: %d, warn level: 
%d %n",
                                    extraSleepTime,
-                                   numGcInfoThresholdExceeded,
-                                   numGcWarnThresholdExceeded);
+                                   numGcInfoThresholdExceeded.get(),
+                                   numGcWarnThresholdExceeded.get());
         if (gcDiffs.isEmpty()) {
             ret += ("No GCs detected");
         } else {
@@ -197,13 +198,13 @@ public void run() {
                 }
                 Map<String, GcTimes> gcTimesAfterSleep = getGcTimes();
                 if (extraSleepTime > warnThresholdMs) {
-                    ++numGcWarnThresholdExceeded;
+                    numGcWarnThresholdExceeded.incrementAndGet();
                     LOG.warn(formatMessage(extraSleepTime, gcTimesAfterSleep, 
gcTimesBeforeSleep));
                 } else if (extraSleepTime > infoThresholdMs) {
-                    ++numGcInfoThresholdExceeded;
+                    numGcInfoThresholdExceeded.incrementAndGet();
                     LOG.info(formatMessage(extraSleepTime, gcTimesAfterSleep, 
gcTimesBeforeSleep));
                 }
-                totalGcExtraSleepTime += extraSleepTime;
+                totalGcExtraSleepTime.addAndGet(extraSleepTime);
                 gcTimesBeforeSleep = gcTimesAfterSleep;
             }
         }
diff --git 
a/zookeeper-website/app/pages/_docs/docs/_mdx/admin-ops/administrators-guide/configuration-parameters.mdx
 
b/zookeeper-website/app/pages/_docs/docs/_mdx/admin-ops/administrators-guide/configuration-parameters.mdx
index 93fcfdf8e..c493dc02a 100644
--- 
a/zookeeper-website/app/pages/_docs/docs/_mdx/admin-ops/administrators-guide/configuration-parameters.mdx
+++ 
b/zookeeper-website/app/pages/_docs/docs/_mdx/admin-ops/administrators-guide/configuration-parameters.mdx
@@ -1390,11 +1390,7 @@ server if this feature is enabled with sasl as 
authentication scheme.
 ## TLS Cipher Suites
 
 From 3.5.5 to 3.9 a hard coded default cipher list was used, with the ordering
-dependent on whether it is run Java 8 or a later version.
-
-The list on Java 8 includes TLSv1.2 CBC, GCM and TLSv1.3 ciphers in ordering: 
_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, 
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, 
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384, 
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, 
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, 
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_WITH_AES_ [...]
-
-The list on Java 9+ includes TLSv1.2 GCM, CBC and TLSv1.3 ciphers in ordering: 
_TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, 
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, 
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, 
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, 
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384, 
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, TLS_ECDHE_ECDSA_WI [...]
+dependent on whether it was run Java 8 or a later version.
 
 Since 3.10 there is no hardcoded list, and the JDK defaults are used.
 
diff --git 
a/zookeeper-website/app/pages/_docs/docs/_mdx/admin-ops/administrators-guide/deployment.mdx
 
b/zookeeper-website/app/pages/_docs/docs/_mdx/admin-ops/administrators-guide/deployment.mdx
index 7bd2e9ea0..a37e895dc 100644
--- 
a/zookeeper-website/app/pages/_docs/docs/_mdx/admin-ops/administrators-guide/deployment.mdx
+++ 
b/zookeeper-website/app/pages/_docs/docs/_mdx/admin-ops/administrators-guide/deployment.mdx
@@ -54,8 +54,8 @@ is no full support.
 
 ### Required Software
 
-ZooKeeper runs in Java, release 1.8 or greater
-(JDK 8 LTS, JDK 11 LTS, JDK 12 - Java 9 and 10 are not supported).
+ZooKeeper runs in Java, release 17 or greater
+(JDK 17 LTS, JDK 21 LTS, JDK 25 LTS - other Java versions are not supported).
 It runs as an _ensemble_ of ZooKeeper servers. Three
 ZooKeeper servers is the minimum recommended size for an
 ensemble, and we also recommend that they run on separate

Reply via email to