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

andor 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 3ae8e7750 ZOOKEEPER-4966: Decouple `ZKConfig` from 
`QuorumPeerConfig.ConfigException`
3ae8e7750 is described below

commit 3ae8e7750e1a474ae63f2ff06112bc426f9f7acc
Author: Kezhu Wang <[email protected]>
AuthorDate: Fri Dec 19 04:03:31 2025 +0800

    ZOOKEEPER-4966: Decouple `ZKConfig` from `QuorumPeerConfig.ConfigException`
    
    Reviewers: anmolnar, cnauroth
    Author: kezhuw
    Closes #2306 from 
kezhuw/ZOOKEEPER-4966-decouple-ZKConfig-from-QuorumPeerConfig
---
 .../apache/zookeeper/client/ZKClientConfig.java    | 13 ++--
 .../java/org/apache/zookeeper/common/ZKConfig.java | 85 ++++++++++++----------
 .../zookeeper/server/NettyServerCnxnFactory.java   |  3 +-
 .../zookeeper/server/PrepRequestProcessor.java     |  2 +-
 .../org/apache/zookeeper/server/ServerConfig.java  |  2 +-
 .../zookeeper/server/ZooKeeperServerMain.java      |  2 +-
 .../server/controller/ControllerServerConfig.java  |  1 +
 .../server/controller/ControllerService.java       |  5 +-
 .../server/quorum/FastLeaderElection.java          |  2 +-
 .../zookeeper/server/quorum/QuorumCnxManager.java  |  2 +-
 .../apache/zookeeper/server/quorum/QuorumPeer.java |  2 +-
 .../zookeeper/server/quorum/QuorumPeerConfig.java  | 13 +---
 .../zookeeper/server/quorum/QuorumPeerMain.java    |  2 +-
 .../server/quorum/flexible/QuorumHierarchical.java |  2 +-
 .../server/quorum/flexible/QuorumMaj.java          |  2 +-
 .../server/quorum/flexible/QuorumOracleMaj.java    |  4 +-
 .../apache/zookeeper/server/util/ConfigUtils.java  |  2 +-
 .../zookeeper/server/ZooKeeperServerMainTest.java  |  2 +-
 .../server/controller/ControllerConfigTest.java    | 10 +--
 .../server/quorum/QuorumCanonicalizeTest.java      |  2 +-
 .../server/quorum/QuorumPeerConfigTest.java        |  2 +-
 .../zookeeper/server/quorum/QuorumServerTest.java  |  2 +-
 .../server/quorum/auth/QuorumDigestAuthTest.java   |  2 +-
 .../zookeeper/server/util/ConfigUtilsTest.java     |  2 +-
 24 files changed, 82 insertions(+), 84 deletions(-)

diff --git 
a/zookeeper-server/src/main/java/org/apache/zookeeper/client/ZKClientConfig.java
 
b/zookeeper-server/src/main/java/org/apache/zookeeper/client/ZKClientConfig.java
index 5472838bd..91a390dda 100644
--- 
a/zookeeper-server/src/main/java/org/apache/zookeeper/client/ZKClientConfig.java
+++ 
b/zookeeper-server/src/main/java/org/apache/zookeeper/client/ZKClientConfig.java
@@ -23,7 +23,6 @@
 import org.apache.yetus.audience.InterfaceAudience;
 import org.apache.zookeeper.common.ConfigException;
 import org.apache.zookeeper.common.ZKConfig;
-import org.apache.zookeeper.server.quorum.QuorumPeerConfig;
 
 /**
  * Handles client specific properties
@@ -78,22 +77,22 @@ public ZKClientConfig() {
     /**
      * <p><b>Use {@link ZKClientConfig#ZKClientConfig(Path configPath)} 
instead.</b>
      *
-     * <p><b>The signature of this method will be changed to throw {@link 
ConfigException}
-     * instead of {@link QuorumPeerConfig.ConfigException} in future 
release.</b>
+     * <p><b>The signature of this method has been changed to throw {@link 
ConfigException}
+     * instead of {@code QuorumPeerConfig.ConfigException}.</b>
      */
     @Deprecated
-    public ZKClientConfig(File configFile) throws 
QuorumPeerConfig.ConfigException {
+    public ZKClientConfig(File configFile) throws ConfigException {
         super(configFile);
     }
 
     /**
      * <p><b>Use {@link ZKClientConfig#ZKClientConfig(Path configPath)} 
instead.</b>
      *
-     * <p><b>The signature of this method will be changed to throw {@link 
ConfigException}
-     * instead of {@link QuorumPeerConfig.ConfigException} in future 
release.</b>
+     * <p><b>The signature of this method has been changed to throw {@link 
ConfigException}
+     * instead of {@code QuorumPeerConfig.ConfigException}.</b>
      */
     @Deprecated
-    public ZKClientConfig(String configPath) throws 
QuorumPeerConfig.ConfigException {
+    public ZKClientConfig(String configPath) throws ConfigException {
         super(configPath);
     }
 
diff --git 
a/zookeeper-server/src/main/java/org/apache/zookeeper/common/ZKConfig.java 
b/zookeeper-server/src/main/java/org/apache/zookeeper/common/ZKConfig.java
index f6221eeb7..22d5f59be 100644
--- a/zookeeper-server/src/main/java/org/apache/zookeeper/common/ZKConfig.java
+++ b/zookeeper-server/src/main/java/org/apache/zookeeper/common/ZKConfig.java
@@ -21,13 +21,14 @@
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
+import java.lang.reflect.Constructor;
 import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Properties;
 import org.apache.zookeeper.Environment;
-import org.apache.zookeeper.server.quorum.QuorumPeerConfig;
 import org.apache.zookeeper.server.util.VerifyingFileFactory;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -65,8 +66,8 @@ public ZKConfig() {
     /**
      * <p><b>Use {@link ZKConfig#ZKConfig(Path configPath)} instead.</b>
      *
-     * <p><b>The signature of this method will be changed to throw {@link 
ConfigException}
-     * instead of {@link QuorumPeerConfig.ConfigException} in future 
release.</b>
+     * <p><b>The signature of this method has been changed to throw {@link 
ConfigException}
+     * instead of {@code QuorumPeerConfig.ConfigException}.</b>
      *
      * @param configPath
      *            Configuration file path
@@ -74,15 +75,15 @@ public ZKConfig() {
      *             if failed to load configuration properties
      */
     @Deprecated
-    public ZKConfig(String configPath) throws QuorumPeerConfig.ConfigException 
{
-        this(new File(configPath));
+    public ZKConfig(String configPath) throws ConfigException {
+        this(Paths.get(configPath));
     }
 
     /**
      * <p><b>Use {@link ZKConfig#ZKConfig(Path configPath)} instead.</b>
      *
-     * <p><b>The signature of this method will be changed to throw {@link 
ConfigException}
-     * instead of {@link QuorumPeerConfig.ConfigException} in future 
release.</b>
+     * <p><b>The signature of this method has been changed to throw {@link 
ConfigException}
+     * instead of {@code QuorumPeerConfig.ConfigException}.</b>
      *
      * @param configFile
      *            Configuration file
@@ -90,10 +91,8 @@ public ZKConfig(String configPath) throws 
QuorumPeerConfig.ConfigException {
      *             if failed to load configuration properties
      */
     @Deprecated
-    public ZKConfig(File configFile) throws QuorumPeerConfig.ConfigException {
-        this();
-        addConfiguration(configFile);
-        LOG.info("ZK Config {}", this.properties);
+    public ZKConfig(File configFile) throws ConfigException {
+        this(configFile.toPath());
     }
 
     /**
@@ -102,9 +101,10 @@ public ZKConfig(File configFile) throws 
QuorumPeerConfig.ConfigException {
      * @param configPath path to configuration file
      * @throws ConfigException
      */
-    @SuppressWarnings("deprecation")
     public ZKConfig(Path configPath) throws ConfigException {
-        this(configPath.toFile());
+        this();
+        addConfiguration(configPath);
+        LOG.info("ZK Config {}", this.properties);
     }
 
     private void init() {
@@ -216,16 +216,39 @@ public void setProperty(String key, String value) {
      *
      * @param configPath path to Configuration file.
      */
-    @SuppressWarnings("deprecation")
     public void addConfiguration(Path configPath) throws ConfigException {
-        addConfiguration(configPath.toFile());
+        Path absoluteConfigPath = configPath.toAbsolutePath();
+        LOG.info("Reading configuration from: {}", absoluteConfigPath);
+        try {
+            File configFile = (new 
VerifyingFileFactory.Builder(LOG).warnForRelativePath()
+                                                               
.failForNonExistingPath()
+                                                               
.build()).validate(configPath.toFile());
+            Properties cfg = new Properties();
+            try (FileInputStream in = new FileInputStream(configFile)) {
+                cfg.load(in);
+            }
+            parseProperties(cfg);
+        } catch (IOException | IllegalArgumentException e) {
+            LOG.error("Error while configuration from: {}", 
absoluteConfigPath, e);
+            String msg = "Error while processing " + absoluteConfigPath;
+            try {
+                Class<?> clazz = 
Class.forName("org.apache.zookeeper.server.quorum.QuorumPeerConfig.ConfigException");
+                Class<? extends ConfigException> exceptionClass = 
clazz.asSubclass(ConfigException.class);
+                Constructor<? extends ConfigException> constructor = 
exceptionClass.getDeclaredConstructor(String.class, Exception.class);
+                throw constructor.newInstance(msg, e);
+            } catch (ClassNotFoundException ignored) {
+            } catch (Exception ignored) {
+                LOG.warn("Fail to construct QuorumPeerConfig.ConfigException", 
e);
+            }
+            throw new ConfigException(msg, e);
+        }
     }
 
     /**
      * <p><b>Use {@link #addConfiguration(Path)} instead.</b></p>
      *
-     * <p><b>The signature of this method will be changed to throw {@link 
ConfigException}
-     * instead of {@link QuorumPeerConfig.ConfigException} in future 
release.</b>
+     * <p><b>The signature of this method has been changed to throw {@link 
ConfigException}
+     * instead of {@code QuorumPeerConfig.ConfigException}.</b>
      *
      * <p>Add a configuration resource. The properties form this configuration 
will
      * overwrite corresponding already loaded property and system property
@@ -234,31 +257,15 @@ public void addConfiguration(Path configPath) throws 
ConfigException {
      *            Configuration file.
      */
     @Deprecated
-    public void addConfiguration(File configFile) throws 
QuorumPeerConfig.ConfigException {
-        LOG.info("Reading configuration from: {}", 
configFile.getAbsolutePath());
-        try {
-            configFile = (new 
VerifyingFileFactory.Builder(LOG).warnForRelativePath()
-                                                               
.failForNonExistingPath()
-                                                               
.build()).validate(configFile);
-            Properties cfg = new Properties();
-            FileInputStream in = new FileInputStream(configFile);
-            try {
-                cfg.load(in);
-            } finally {
-                in.close();
-            }
-            parseProperties(cfg);
-        } catch (IOException | IllegalArgumentException e) {
-            LOG.error("Error while configuration from: {}", 
configFile.getAbsolutePath(), e);
-            throw new QuorumPeerConfig.ConfigException("Error while processing 
" + configFile.getAbsolutePath(), e);
-        }
+    public void addConfiguration(File configFile) throws ConfigException {
+        addConfiguration(configFile.toPath());
     }
 
     /**
      * <p><b>Use {@link #addConfiguration(Path)} instead.</b></p>
      *
-     * <p><b>The signature of this method will be changed to throw {@link 
ConfigException}
-     * instead of {@link QuorumPeerConfig.ConfigException} in future 
release.</b>
+     * <p><b>The signature of this method has been changed to throw {@link 
ConfigException}
+     * instead of {@code QuorumPeerConfig.ConfigException}.</b>
      *
      * <p>Add a configuration resource. The properties form this configuration 
will
      * overwrite corresponding already loaded property and system property
@@ -267,8 +274,8 @@ public void addConfiguration(File configFile) throws 
QuorumPeerConfig.ConfigExce
      *            Configuration file path.
      */
     @Deprecated
-    public void addConfiguration(String configPath) throws 
QuorumPeerConfig.ConfigException {
-        addConfiguration(new File(configPath));
+    public void addConfiguration(String configPath) throws ConfigException {
+        addConfiguration(Paths.get(configPath));
     }
 
     private void parseProperties(Properties cfg) {
diff --git 
a/zookeeper-server/src/main/java/org/apache/zookeeper/server/NettyServerCnxnFactory.java
 
b/zookeeper-server/src/main/java/org/apache/zookeeper/server/NettyServerCnxnFactory.java
index e6b0fac2a..6f6578744 100644
--- 
a/zookeeper-server/src/main/java/org/apache/zookeeper/server/NettyServerCnxnFactory.java
+++ 
b/zookeeper-server/src/main/java/org/apache/zookeeper/server/NettyServerCnxnFactory.java
@@ -62,6 +62,7 @@
 import javax.net.ssl.SSLSession;
 import org.apache.zookeeper.KeeperException;
 import org.apache.zookeeper.common.ClientX509Util;
+import org.apache.zookeeper.common.ConfigException;
 import org.apache.zookeeper.common.NettyUtils;
 import org.apache.zookeeper.common.X509Exception;
 import org.apache.zookeeper.common.X509Exception.SSLContextException;
@@ -529,7 +530,7 @@ private ServerBootstrap 
configureBootstrapAllocator(ServerBootstrap bootstrap) {
         if (usePortUnification) {
             try {
                 QuorumPeerConfig.configureSSLAuth();
-            } catch (QuorumPeerConfig.ConfigException e) {
+            } catch (ConfigException e) {
                 LOG.error("unable to set up SslAuthProvider, turning off 
client port unification", e);
                 usePortUnification = false;
             }
diff --git 
a/zookeeper-server/src/main/java/org/apache/zookeeper/server/PrepRequestProcessor.java
 
b/zookeeper-server/src/main/java/org/apache/zookeeper/server/PrepRequestProcessor.java
index 961948a9c..d263fd75c 100644
--- 
a/zookeeper-server/src/main/java/org/apache/zookeeper/server/PrepRequestProcessor.java
+++ 
b/zookeeper-server/src/main/java/org/apache/zookeeper/server/PrepRequestProcessor.java
@@ -40,6 +40,7 @@
 import org.apache.zookeeper.Op;
 import org.apache.zookeeper.ZooDefs;
 import org.apache.zookeeper.ZooDefs.OpCode;
+import org.apache.zookeeper.common.ConfigException;
 import org.apache.zookeeper.common.PathUtils;
 import org.apache.zookeeper.common.StringUtils;
 import org.apache.zookeeper.common.Time;
@@ -60,7 +61,6 @@
 import org.apache.zookeeper.server.quorum.LeaderZooKeeperServer;
 import org.apache.zookeeper.server.quorum.QuorumPeer.QuorumServer;
 import org.apache.zookeeper.server.quorum.QuorumPeerConfig;
-import org.apache.zookeeper.server.quorum.QuorumPeerConfig.ConfigException;
 import org.apache.zookeeper.server.quorum.flexible.QuorumMaj;
 import org.apache.zookeeper.server.quorum.flexible.QuorumOracleMaj;
 import org.apache.zookeeper.server.quorum.flexible.QuorumVerifier;
diff --git 
a/zookeeper-server/src/main/java/org/apache/zookeeper/server/ServerConfig.java 
b/zookeeper-server/src/main/java/org/apache/zookeeper/server/ServerConfig.java
index 9da0e53a4..91cfe7c97 100644
--- 
a/zookeeper-server/src/main/java/org/apache/zookeeper/server/ServerConfig.java
+++ 
b/zookeeper-server/src/main/java/org/apache/zookeeper/server/ServerConfig.java
@@ -23,9 +23,9 @@
 import java.util.Arrays;
 import java.util.Properties;
 import org.apache.yetus.audience.InterfaceAudience;
+import org.apache.zookeeper.common.ConfigException;
 import org.apache.zookeeper.metrics.impl.DefaultMetricsProvider;
 import org.apache.zookeeper.server.quorum.QuorumPeerConfig;
-import org.apache.zookeeper.server.quorum.QuorumPeerConfig.ConfigException;
 
 /**
  * Server configuration storage.
diff --git 
a/zookeeper-server/src/main/java/org/apache/zookeeper/server/ZooKeeperServerMain.java
 
b/zookeeper-server/src/main/java/org/apache/zookeeper/server/ZooKeeperServerMain.java
index 6f15e9e62..c721e685b 100644
--- 
a/zookeeper-server/src/main/java/org/apache/zookeeper/server/ZooKeeperServerMain.java
+++ 
b/zookeeper-server/src/main/java/org/apache/zookeeper/server/ZooKeeperServerMain.java
@@ -23,6 +23,7 @@
 import javax.management.JMException;
 import org.apache.yetus.audience.InterfaceAudience;
 import org.apache.zookeeper.audit.ZKAuditProvider;
+import org.apache.zookeeper.common.ConfigException;
 import org.apache.zookeeper.jmx.ManagedUtil;
 import org.apache.zookeeper.metrics.MetricsProvider;
 import org.apache.zookeeper.metrics.MetricsProviderLifeCycleException;
@@ -33,7 +34,6 @@
 import org.apache.zookeeper.server.auth.ProviderRegistry;
 import org.apache.zookeeper.server.persistence.FileTxnSnapLog;
 import org.apache.zookeeper.server.persistence.FileTxnSnapLog.DatadirException;
-import org.apache.zookeeper.server.quorum.QuorumPeerConfig.ConfigException;
 import org.apache.zookeeper.server.util.JvmPauseMonitor;
 import org.apache.zookeeper.util.ServiceUtils;
 import org.slf4j.Logger;
diff --git 
a/zookeeper-server/src/main/java/org/apache/zookeeper/server/controller/ControllerServerConfig.java
 
b/zookeeper-server/src/main/java/org/apache/zookeeper/server/controller/ControllerServerConfig.java
index bbdc14f9a..ff9963123 100644
--- 
a/zookeeper-server/src/main/java/org/apache/zookeeper/server/controller/ControllerServerConfig.java
+++ 
b/zookeeper-server/src/main/java/org/apache/zookeeper/server/controller/ControllerServerConfig.java
@@ -25,6 +25,7 @@
 import java.net.ServerSocket;
 import java.util.HashMap;
 import java.util.Map;
+import org.apache.zookeeper.common.ConfigException;
 import org.apache.zookeeper.server.ServerConfig;
 import org.apache.zookeeper.server.quorum.QuorumPeer;
 import org.apache.zookeeper.server.quorum.QuorumPeerConfig;
diff --git 
a/zookeeper-server/src/main/java/org/apache/zookeeper/server/controller/ControllerService.java
 
b/zookeeper-server/src/main/java/org/apache/zookeeper/server/controller/ControllerService.java
index 8d71984f5..a762bc1ba 100644
--- 
a/zookeeper-server/src/main/java/org/apache/zookeeper/server/controller/ControllerService.java
+++ 
b/zookeeper-server/src/main/java/org/apache/zookeeper/server/controller/ControllerService.java
@@ -19,6 +19,7 @@
 package org.apache.zookeeper.server.controller;
 
 import java.io.IOException;
+import org.apache.zookeeper.common.ConfigException;
 import org.apache.zookeeper.server.ExitCode;
 import org.apache.zookeeper.server.ServerCnxnFactory;
 import org.apache.zookeeper.server.quorum.QuorumPeer;
@@ -119,7 +120,7 @@ protected void cleanup() {
     /**
      * Runs the main loop for this application but does not exit the process.
      */
-    public void initializeAndRun(String[] args) throws 
QuorumPeerConfig.ConfigException {
+    public void initializeAndRun(String[] args) throws ConfigException {
         initConfig(args);
         run();
     }
@@ -127,7 +128,7 @@ public void initializeAndRun(String[] args) throws 
QuorumPeerConfig.ConfigExcept
     /**
      * Derived classes may override to do custom initialization of command 
line args.
      */
-    protected void initConfig(String[] args) throws 
QuorumPeerConfig.ConfigException {
+    protected void initConfig(String[] args) throws ConfigException {
         if (args.length == 1) {
             config.parse(args[0]);
         }
diff --git 
a/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/FastLeaderElection.java
 
b/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/FastLeaderElection.java
index 8bc963a38..61c0eb601 100644
--- 
a/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/FastLeaderElection.java
+++ 
b/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/FastLeaderElection.java
@@ -27,13 +27,13 @@
 import java.util.concurrent.LinkedBlockingQueue;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicLong;
+import org.apache.zookeeper.common.ConfigException;
 import org.apache.zookeeper.common.Time;
 import org.apache.zookeeper.jmx.MBeanRegistry;
 import org.apache.zookeeper.server.ZooKeeperThread;
 import org.apache.zookeeper.server.quorum.QuorumCnxManager.Message;
 import org.apache.zookeeper.server.quorum.QuorumPeer.LearnerType;
 import org.apache.zookeeper.server.quorum.QuorumPeer.ServerState;
-import org.apache.zookeeper.server.quorum.QuorumPeerConfig.ConfigException;
 import org.apache.zookeeper.server.quorum.flexible.QuorumOracleMaj;
 import org.apache.zookeeper.server.quorum.flexible.QuorumVerifier;
 import org.apache.zookeeper.server.util.ZxidUtils;
diff --git 
a/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/QuorumCnxManager.java
 
b/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/QuorumCnxManager.java
index 764b962ac..7a1601484 100644
--- 
a/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/QuorumCnxManager.java
+++ 
b/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/QuorumCnxManager.java
@@ -61,11 +61,11 @@
 import java.util.function.Supplier;
 import java.util.stream.Collectors;
 import javax.net.ssl.SSLSocket;
+import org.apache.zookeeper.common.ConfigException;
 import org.apache.zookeeper.common.NetUtils;
 import org.apache.zookeeper.common.X509Exception;
 import org.apache.zookeeper.server.ExitCode;
 import org.apache.zookeeper.server.ZooKeeperThread;
-import org.apache.zookeeper.server.quorum.QuorumPeerConfig.ConfigException;
 import org.apache.zookeeper.server.quorum.auth.QuorumAuthLearner;
 import org.apache.zookeeper.server.quorum.auth.QuorumAuthServer;
 import org.apache.zookeeper.server.quorum.flexible.QuorumVerifier;
diff --git 
a/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/QuorumPeer.java
 
b/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/QuorumPeer.java
index 286d2d320..cf6f2f26c 100644
--- 
a/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/QuorumPeer.java
+++ 
b/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/QuorumPeer.java
@@ -57,6 +57,7 @@
 import org.apache.zookeeper.common.AtomicFileOutputStream;
 import org.apache.zookeeper.common.AtomicFileWritingIdiom;
 import org.apache.zookeeper.common.AtomicFileWritingIdiom.WriterStatement;
+import org.apache.zookeeper.common.ConfigException;
 import org.apache.zookeeper.common.QuorumX509Util;
 import org.apache.zookeeper.common.Time;
 import org.apache.zookeeper.common.X509Exception;
@@ -72,7 +73,6 @@
 import org.apache.zookeeper.server.admin.AdminServer.AdminServerException;
 import org.apache.zookeeper.server.admin.AdminServerFactory;
 import org.apache.zookeeper.server.persistence.FileTxnSnapLog;
-import org.apache.zookeeper.server.quorum.QuorumPeerConfig.ConfigException;
 import org.apache.zookeeper.server.quorum.auth.NullQuorumAuthLearner;
 import org.apache.zookeeper.server.quorum.auth.NullQuorumAuthServer;
 import org.apache.zookeeper.server.quorum.auth.QuorumAuth;
diff --git 
a/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/QuorumPeerConfig.java
 
b/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/QuorumPeerConfig.java
index 29083be07..eb034527c 100644
--- 
a/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/QuorumPeerConfig.java
+++ 
b/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/QuorumPeerConfig.java
@@ -42,6 +42,7 @@
 import 
org.apache.zookeeper.common.AtomicFileWritingIdiom.OutputStreamStatement;
 import org.apache.zookeeper.common.AtomicFileWritingIdiom.WriterStatement;
 import org.apache.zookeeper.common.ClientX509Util;
+import org.apache.zookeeper.common.ConfigException;
 import org.apache.zookeeper.common.PathUtils;
 import org.apache.zookeeper.common.StringUtils;
 import org.apache.zookeeper.common.Time;
@@ -157,18 +158,6 @@ public class QuorumPeerConfig {
      */
     protected long jvmPauseSleepTimeMs = JvmPauseMonitor.SLEEP_TIME_MS_DEFAULT;
 
-    @SuppressWarnings("serial")
-    public static class ConfigException extends 
org.apache.zookeeper.common.ConfigException {
-
-        public ConfigException(String msg) {
-            super(msg);
-        }
-        public ConfigException(String msg, Exception e) {
-            super(msg, e);
-        }
-
-    }
-
     /**
      * Parse a ZooKeeper configuration file
      * @param path the patch of the configuration file
diff --git 
a/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/QuorumPeerMain.java
 
b/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/QuorumPeerMain.java
index 59b7481ad..c126ea2e2 100644
--- 
a/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/QuorumPeerMain.java
+++ 
b/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/QuorumPeerMain.java
@@ -23,6 +23,7 @@
 import javax.security.sasl.SaslException;
 import org.apache.yetus.audience.InterfaceAudience;
 import org.apache.zookeeper.audit.ZKAuditProvider;
+import org.apache.zookeeper.common.ConfigException;
 import org.apache.zookeeper.jmx.ManagedUtil;
 import org.apache.zookeeper.metrics.MetricsProvider;
 import org.apache.zookeeper.metrics.MetricsProviderLifeCycleException;
@@ -37,7 +38,6 @@
 import org.apache.zookeeper.server.auth.ProviderRegistry;
 import org.apache.zookeeper.server.persistence.FileTxnSnapLog;
 import org.apache.zookeeper.server.persistence.FileTxnSnapLog.DatadirException;
-import org.apache.zookeeper.server.quorum.QuorumPeerConfig.ConfigException;
 import org.apache.zookeeper.server.util.JvmPauseMonitor;
 import org.apache.zookeeper.util.ServiceUtils;
 import org.slf4j.Logger;
diff --git 
a/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/flexible/QuorumHierarchical.java
 
b/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/flexible/QuorumHierarchical.java
index d4c7b2160..2b7c97463 100644
--- 
a/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/flexible/QuorumHierarchical.java
+++ 
b/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/flexible/QuorumHierarchical.java
@@ -27,9 +27,9 @@
 import java.util.Map.Entry;
 import java.util.Properties;
 import java.util.Set;
+import org.apache.zookeeper.common.ConfigException;
 import org.apache.zookeeper.server.quorum.QuorumPeer.LearnerType;
 import org.apache.zookeeper.server.quorum.QuorumPeer.QuorumServer;
-import org.apache.zookeeper.server.quorum.QuorumPeerConfig.ConfigException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git 
a/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/flexible/QuorumMaj.java
 
b/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/flexible/QuorumMaj.java
index cc1723cf3..ab111f7f1 100644
--- 
a/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/flexible/QuorumMaj.java
+++ 
b/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/flexible/QuorumMaj.java
@@ -23,9 +23,9 @@
 import java.util.Map.Entry;
 import java.util.Properties;
 import java.util.Set;
+import org.apache.zookeeper.common.ConfigException;
 import org.apache.zookeeper.server.quorum.QuorumPeer.LearnerType;
 import org.apache.zookeeper.server.quorum.QuorumPeer.QuorumServer;
-import org.apache.zookeeper.server.quorum.QuorumPeerConfig.ConfigException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git 
a/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/flexible/QuorumOracleMaj.java
 
b/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/flexible/QuorumOracleMaj.java
index b3e7fa249..2622db4a0 100644
--- 
a/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/flexible/QuorumOracleMaj.java
+++ 
b/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/flexible/QuorumOracleMaj.java
@@ -27,10 +27,10 @@
 import java.util.Set;
 import java.util.concurrent.atomic.AtomicBoolean;
 import org.apache.commons.io.FilenameUtils;
+import org.apache.zookeeper.common.ConfigException;
 import org.apache.zookeeper.server.quorum.Leader;
 import org.apache.zookeeper.server.quorum.LearnerHandler;
 import org.apache.zookeeper.server.quorum.QuorumPeer;
-import org.apache.zookeeper.server.quorum.QuorumPeerConfig;
 import org.apache.zookeeper.server.quorum.SyncedLearnerTracker;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -55,7 +55,7 @@ public QuorumOracleMaj(Map<Long, QuorumPeer.QuorumServer> 
allMembers, String ora
         setOracle(oraclePath);
     }
 
-    public QuorumOracleMaj(Properties props, String oraclePath) throws 
QuorumPeerConfig.ConfigException {
+    public QuorumOracleMaj(Properties props, String oraclePath) throws 
ConfigException {
         super(props);
         setOracle(oraclePath);
     }
diff --git 
a/zookeeper-server/src/main/java/org/apache/zookeeper/server/util/ConfigUtils.java
 
b/zookeeper-server/src/main/java/org/apache/zookeeper/server/util/ConfigUtils.java
index d6f757297..850d432af 100644
--- 
a/zookeeper-server/src/main/java/org/apache/zookeeper/server/util/ConfigUtils.java
+++ 
b/zookeeper-server/src/main/java/org/apache/zookeeper/server/util/ConfigUtils.java
@@ -22,8 +22,8 @@
 import java.io.StringReader;
 import java.util.Map.Entry;
 import java.util.Properties;
+import org.apache.zookeeper.common.ConfigException;
 import org.apache.zookeeper.server.quorum.QuorumPeer;
-import org.apache.zookeeper.server.quorum.QuorumPeerConfig.ConfigException;
 
 public class ConfigUtils {
 
diff --git 
a/zookeeper-server/src/test/java/org/apache/zookeeper/server/ZooKeeperServerMainTest.java
 
b/zookeeper-server/src/test/java/org/apache/zookeeper/server/ZooKeeperServerMainTest.java
index 5655e8b67..e32c43b5c 100644
--- 
a/zookeeper-server/src/test/java/org/apache/zookeeper/server/ZooKeeperServerMainTest.java
+++ 
b/zookeeper-server/src/test/java/org/apache/zookeeper/server/ZooKeeperServerMainTest.java
@@ -38,6 +38,7 @@
 import org.apache.zookeeper.ZKTestCase;
 import org.apache.zookeeper.ZooDefs.Ids;
 import org.apache.zookeeper.ZooKeeper;
+import org.apache.zookeeper.common.ConfigException;
 import org.apache.zookeeper.common.PathUtils;
 import org.apache.zookeeper.metrics.BaseTestMetricsProvider;
 import 
org.apache.zookeeper.metrics.BaseTestMetricsProvider.MetricsProviderCapturingLifecycle;
@@ -46,7 +47,6 @@
 import 
org.apache.zookeeper.metrics.BaseTestMetricsProvider.MetricsProviderWithErrorInStart;
 import 
org.apache.zookeeper.metrics.BaseTestMetricsProvider.MetricsProviderWithErrorInStop;
 import org.apache.zookeeper.server.persistence.FileTxnSnapLog;
-import org.apache.zookeeper.server.quorum.QuorumPeerConfig.ConfigException;
 import org.apache.zookeeper.test.ClientBase;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.Timeout;
diff --git 
a/zookeeper-server/src/test/java/org/apache/zookeeper/server/controller/ControllerConfigTest.java
 
b/zookeeper-server/src/test/java/org/apache/zookeeper/server/controller/ControllerConfigTest.java
index 5d2c47e9d..3a0bda686 100644
--- 
a/zookeeper-server/src/test/java/org/apache/zookeeper/server/controller/ControllerConfigTest.java
+++ 
b/zookeeper-server/src/test/java/org/apache/zookeeper/server/controller/ControllerConfigTest.java
@@ -25,7 +25,7 @@
 import java.net.ServerSocket;
 import java.util.ArrayList;
 import java.util.List;
-import org.apache.zookeeper.server.quorum.QuorumPeerConfig;
+import org.apache.zookeeper.common.ConfigException;
 import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
@@ -113,7 +113,7 @@ public void parseFileFailsWithMissingPort() throws 
Exception {
         try {
             ControllerServerConfig config = new 
ControllerServerConfig(configFile.getAbsolutePath());
             Assert.fail("Should have thrown with missing server config");
-        } catch (QuorumPeerConfig.ConfigException ex) {
+        } catch (ConfigException ex) {
         }
     }
 
@@ -121,16 +121,16 @@ public void parseFileFailsWithMissingPort() throws 
Exception {
         try {
             ControllerServerConfig config = new 
ControllerServerConfig("DontLookHere.missing");
             Assert.fail("should have thrown");
-        } catch (QuorumPeerConfig.ConfigException ex) {
+        } catch (ConfigException ex) {
         }
     }
 
     @Test
-    public void parseInvalidPortThrows()throws 
QuorumPeerConfig.ConfigException {
+    public void parseInvalidPortThrows()throws ConfigException {
         try {
             ControllerServerConfig config = new 
ControllerServerConfig(configFile.getAbsolutePath());
             Assert.fail("should have thrown");
-        } catch (QuorumPeerConfig.ConfigException ex) {
+        } catch (ConfigException ex) {
         }
     }
 
diff --git 
a/zookeeper-server/src/test/java/org/apache/zookeeper/server/quorum/QuorumCanonicalizeTest.java
 
b/zookeeper-server/src/test/java/org/apache/zookeeper/server/quorum/QuorumCanonicalizeTest.java
index aec017a08..346a2baed 100644
--- 
a/zookeeper-server/src/test/java/org/apache/zookeeper/server/quorum/QuorumCanonicalizeTest.java
+++ 
b/zookeeper-server/src/test/java/org/apache/zookeeper/server/quorum/QuorumCanonicalizeTest.java
@@ -24,7 +24,7 @@
 import java.util.LinkedHashMap;
 import java.util.Map;
 import org.apache.zookeeper.ZKTestCase;
-import org.apache.zookeeper.server.quorum.QuorumPeerConfig.ConfigException;
+import org.apache.zookeeper.common.ConfigException;
 import org.burningwave.tools.net.DefaultHostResolver;
 import org.burningwave.tools.net.HostResolutionRequestInterceptor;
 import org.burningwave.tools.net.MappedHostResolver;
diff --git 
a/zookeeper-server/src/test/java/org/apache/zookeeper/server/quorum/QuorumPeerConfigTest.java
 
b/zookeeper-server/src/test/java/org/apache/zookeeper/server/quorum/QuorumPeerConfigTest.java
index 6ad5a4b93..0f752e022 100644
--- 
a/zookeeper-server/src/test/java/org/apache/zookeeper/server/quorum/QuorumPeerConfigTest.java
+++ 
b/zookeeper-server/src/test/java/org/apache/zookeeper/server/quorum/QuorumPeerConfigTest.java
@@ -28,8 +28,8 @@
 import java.net.InetSocketAddress;
 import java.util.Properties;
 import org.apache.zookeeper.common.ClientX509Util;
+import org.apache.zookeeper.common.ConfigException;
 import org.apache.zookeeper.server.quorum.QuorumPeer.QuorumServer;
-import org.apache.zookeeper.server.quorum.QuorumPeerConfig.ConfigException;
 import org.junit.jupiter.api.Test;
 
 public class QuorumPeerConfigTest {
diff --git 
a/zookeeper-server/src/test/java/org/apache/zookeeper/server/quorum/QuorumServerTest.java
 
b/zookeeper-server/src/test/java/org/apache/zookeeper/server/quorum/QuorumServerTest.java
index f8831fc84..df4744543 100644
--- 
a/zookeeper-server/src/test/java/org/apache/zookeeper/server/quorum/QuorumServerTest.java
+++ 
b/zookeeper-server/src/test/java/org/apache/zookeeper/server/quorum/QuorumServerTest.java
@@ -24,8 +24,8 @@
 import java.net.InetSocketAddress;
 import org.apache.zookeeper.KeeperException;
 import org.apache.zookeeper.ZKTestCase;
+import org.apache.zookeeper.common.ConfigException;
 import org.apache.zookeeper.server.quorum.QuorumPeer.QuorumServer;
-import org.apache.zookeeper.server.quorum.QuorumPeerConfig.ConfigException;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Test;
 
diff --git 
a/zookeeper-server/src/test/java/org/apache/zookeeper/server/quorum/auth/QuorumDigestAuthTest.java
 
b/zookeeper-server/src/test/java/org/apache/zookeeper/server/quorum/auth/QuorumDigestAuthTest.java
index ecc27772e..8630c69d6 100644
--- 
a/zookeeper-server/src/test/java/org/apache/zookeeper/server/quorum/auth/QuorumDigestAuthTest.java
+++ 
b/zookeeper-server/src/test/java/org/apache/zookeeper/server/quorum/auth/QuorumDigestAuthTest.java
@@ -27,8 +27,8 @@
 import org.apache.zookeeper.PortAssignment;
 import org.apache.zookeeper.ZooDefs.Ids;
 import org.apache.zookeeper.ZooKeeper;
+import org.apache.zookeeper.common.ConfigException;
 import org.apache.zookeeper.server.admin.AdminServer;
-import org.apache.zookeeper.server.quorum.QuorumPeerConfig.ConfigException;
 import org.apache.zookeeper.server.quorum.QuorumPeerMain;
 import org.apache.zookeeper.server.quorum.QuorumPeerTestBase;
 import org.apache.zookeeper.server.quorum.QuorumPeerTestBase.MainThread;
diff --git 
a/zookeeper-server/src/test/java/org/apache/zookeeper/server/util/ConfigUtilsTest.java
 
b/zookeeper-server/src/test/java/org/apache/zookeeper/server/util/ConfigUtilsTest.java
index 937d812fe..ecce3eaee 100644
--- 
a/zookeeper-server/src/test/java/org/apache/zookeeper/server/util/ConfigUtilsTest.java
+++ 
b/zookeeper-server/src/test/java/org/apache/zookeeper/server/util/ConfigUtilsTest.java
@@ -21,7 +21,7 @@
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertThrows;
-import org.apache.zookeeper.server.quorum.QuorumPeerConfig.ConfigException;
+import org.apache.zookeeper.common.ConfigException;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.ValueSource;


Reply via email to