diff --git a/src/docs/src/documentation/content/xdocs/zookeeperReconfig.xml b/src/docs/src/documentation/content/xdocs/zookeeperReconfig.xml
index c1c9ad7173c..5dd6c9e1a7c 100644
--- a/src/docs/src/documentation/content/xdocs/zookeeperReconfig.xml
+++ b/src/docs/src/documentation/content/xdocs/zookeeperReconfig.xml
@@ -300,6 +300,11 @@ server.3=125.23.63.25:2782:2785:participant
from ZooKeeper class, and use of this API requires ACL setup and user
authentication (see for more information.).
+
+ Note: for temporary backward compatibility, the reconfig() APIs will remain in ZooKeeper.java
+ where they were for a few alpha versions of 3.5.x. However, these APIs are deprecated and users
+ should move to the reconfigure() APIs in ZooKeeperAdmin.java.
+
diff --git a/src/java/main/org/apache/zookeeper/ZooKeeper.java b/src/java/main/org/apache/zookeeper/ZooKeeper.java
index d00b0be2b4c..fd3323dfb3f 100644
--- a/src/java/main/org/apache/zookeeper/ZooKeeper.java
+++ b/src/java/main/org/apache/zookeeper/ZooKeeper.java
@@ -39,6 +39,7 @@
import org.apache.zookeeper.client.ZKClientConfig;
import org.apache.zookeeper.client.ZooKeeperSaslClient;
import org.apache.zookeeper.common.PathUtils;
+import org.apache.zookeeper.common.StringUtils;
import org.apache.zookeeper.data.ACL;
import org.apache.zookeeper.data.Stat;
import org.apache.zookeeper.proto.CheckWatchesRequest;
@@ -56,6 +57,7 @@
import org.apache.zookeeper.proto.GetChildrenResponse;
import org.apache.zookeeper.proto.GetDataRequest;
import org.apache.zookeeper.proto.GetDataResponse;
+import org.apache.zookeeper.proto.ReconfigRequest;
import org.apache.zookeeper.proto.RemoveWatchesRequest;
import org.apache.zookeeper.proto.ReplyHeader;
import org.apache.zookeeper.proto.RequestHeader;
@@ -2186,7 +2188,42 @@ public byte[] getConfig(boolean watch, Stat stat)
public void getConfig(boolean watch, DataCallback cb, Object ctx) {
getConfig(watch ? watchManager.defaultWatcher : null, cb, ctx);
}
-
+
+ /**
+ * @deprecated instead use the reconfigure() methods instead in {@link org.apache.zookeeper.admin.ZooKeeperAdmin}
+ */
+ @Deprecated
+ public byte[] reconfig(String joiningServers, String leavingServers, String newMembers, long fromConfig, Stat stat) throws KeeperException, InterruptedException {
+ return internalReconfig(joiningServers, leavingServers, newMembers, fromConfig, stat);
+ }
+
+ /**
+ * @deprecated instead use the reconfigure() methods instead in {@link org.apache.zookeeper.admin.ZooKeeperAdmin}
+ */
+ @Deprecated
+ public byte[] reconfig(List joiningServers, List leavingServers, List newMembers, long fromConfig, Stat stat) throws KeeperException, InterruptedException {
+ return internalReconfig(joiningServers, leavingServers, newMembers, fromConfig, stat);
+ }
+
+ /**
+ * @deprecated instead use the reconfigure() methods instead in {@link org.apache.zookeeper.admin.ZooKeeperAdmin}
+ */
+ @Deprecated
+ public void reconfig(String joiningServers, String leavingServers,
+ String newMembers, long fromConfig, DataCallback cb, Object ctx) {
+ internalReconfig(joiningServers, leavingServers, newMembers, fromConfig, cb, ctx);
+ }
+
+ /**
+ * @deprecated instead use the reconfigure() methods instead in {@link org.apache.zookeeper.admin.ZooKeeperAdmin}
+ */
+ @Deprecated
+ public void reconfig(List joiningServers,
+ List leavingServers, List newMembers, long fromConfig,
+ DataCallback cb, Object ctx) {
+ internalReconfig(joiningServers, leavingServers, newMembers, fromConfig, cb, ctx);
+ }
+
/**
* Set the data for the node of the given path if such a node exists and the
* given version matches the version of the node (if the given version is
@@ -2921,4 +2958,45 @@ private ClientCnxnSocket getClientCnxnSocket() throws IOException {
throw ioe;
}
}
+
+ protected byte[] internalReconfig(String joiningServers, String leavingServers, String newMembers, long fromConfig, Stat stat) throws KeeperException, InterruptedException {
+ RequestHeader h = new RequestHeader();
+ h.setType(ZooDefs.OpCode.reconfig);
+ ReconfigRequest request = new ReconfigRequest(joiningServers, leavingServers, newMembers, fromConfig);
+ GetDataResponse response = new GetDataResponse();
+ ReplyHeader r = cnxn.submitRequest(h, request, response, null);
+ if (r.getErr() != 0) {
+ throw KeeperException.create(KeeperException.Code.get(r.getErr()), "");
+ }
+ if (stat != null) {
+ DataTree.copyStat(response.getStat(), stat);
+ }
+ return response.getData();
+ }
+
+ protected byte[] internalReconfig(List joiningServers, List leavingServers, List newMembers, long fromConfig, Stat stat) throws KeeperException, InterruptedException {
+ return internalReconfig(StringUtils.joinStrings(joiningServers, ","),
+ StringUtils.joinStrings(leavingServers, ","),
+ StringUtils.joinStrings(newMembers, ","),
+ fromConfig, stat);
+ }
+
+ protected void internalReconfig(String joiningServers, String leavingServers,
+ String newMembers, long fromConfig, DataCallback cb, Object ctx) {
+ RequestHeader h = new RequestHeader();
+ h.setType(ZooDefs.OpCode.reconfig);
+ ReconfigRequest request = new ReconfigRequest(joiningServers, leavingServers, newMembers, fromConfig);
+ GetDataResponse response = new GetDataResponse();
+ cnxn.queuePacket(h, new ReplyHeader(), request, response, cb,
+ ZooDefs.CONFIG_NODE, ZooDefs.CONFIG_NODE, ctx, null);
+ }
+
+ protected void internalReconfig(List joiningServers,
+ List leavingServers, List newMembers, long fromConfig,
+ DataCallback cb, Object ctx) {
+ internalReconfig(StringUtils.joinStrings(joiningServers, ","),
+ StringUtils.joinStrings(leavingServers, ","),
+ StringUtils.joinStrings(newMembers, ","),
+ fromConfig, cb, ctx);
+ }
}
diff --git a/src/java/main/org/apache/zookeeper/admin/ZooKeeperAdmin.java b/src/java/main/org/apache/zookeeper/admin/ZooKeeperAdmin.java
index f60e8d55842..a5841329d48 100644
--- a/src/java/main/org/apache/zookeeper/admin/ZooKeeperAdmin.java
+++ b/src/java/main/org/apache/zookeeper/admin/ZooKeeperAdmin.java
@@ -22,18 +22,11 @@
import java.util.List;
import org.apache.zookeeper.ZooKeeper;
-import org.apache.zookeeper.ZooDefs;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.AsyncCallback.DataCallback;
import org.apache.zookeeper.client.ZKClientConfig;
-import org.apache.zookeeper.common.StringUtils;
import org.apache.zookeeper.data.Stat;
-import org.apache.zookeeper.proto.GetDataResponse;
-import org.apache.zookeeper.proto.ReconfigRequest;
-import org.apache.zookeeper.proto.ReplyHeader;
-import org.apache.zookeeper.proto.RequestHeader;
-import org.apache.zookeeper.server.DataTree;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -172,66 +165,44 @@ public ZooKeeperAdmin(String connectString, int sessionTimeout, Watcher watcher,
* @throws InterruptedException If the server transaction is interrupted.
* @throws KeeperException If the server signals an error with a non-zero error code.
*/
- public byte[] reconfig(String joiningServers, String leavingServers,
- String newMembers, long fromConfig, Stat stat) throws KeeperException, InterruptedException {
- RequestHeader h = new RequestHeader();
- h.setType(ZooDefs.OpCode.reconfig);
- ReconfigRequest request = new ReconfigRequest(joiningServers, leavingServers, newMembers, fromConfig);
- GetDataResponse response = new GetDataResponse();
- ReplyHeader r = cnxn.submitRequest(h, request, response, null);
- if (r.getErr() != 0) {
- throw KeeperException.create(KeeperException.Code.get(r.getErr()), "");
- }
- if (stat != null) {
- DataTree.copyStat(response.getStat(), stat);
- }
- return response.getData();
+ public byte[] reconfigure(String joiningServers, String leavingServers,
+ String newMembers, long fromConfig, Stat stat) throws KeeperException, InterruptedException {
+ return internalReconfig(joiningServers, leavingServers, newMembers, fromConfig, stat);
}
/**
* Convenience wrapper around reconfig that takes Lists of strings instead of comma-separated servers.
*
- * @see #reconfig
+ * @see #reconfigure
*
*/
- public byte[] reconfig(List joiningServers, List leavingServers,
- List newMembers, long fromConfig,
- Stat stat) throws KeeperException, InterruptedException {
- return reconfig(StringUtils.joinStrings(joiningServers, ","),
- StringUtils.joinStrings(leavingServers, ","),
- StringUtils.joinStrings(newMembers, ","),
- fromConfig, stat);
+ public byte[] reconfigure(List joiningServers, List leavingServers,
+ List newMembers, long fromConfig,
+ Stat stat) throws KeeperException, InterruptedException {
+ return internalReconfig(joiningServers, leavingServers, newMembers, fromConfig, stat);
}
/**
* The Asynchronous version of reconfig.
*
- * @see #reconfig
+ * @see #reconfigure
*
**/
- public void reconfig(String joiningServers, String leavingServers,
- String newMembers, long fromConfig, DataCallback cb, Object ctx) {
- RequestHeader h = new RequestHeader();
- h.setType(ZooDefs.OpCode.reconfig);
- ReconfigRequest request = new ReconfigRequest(joiningServers, leavingServers, newMembers, fromConfig);
- GetDataResponse response = new GetDataResponse();
- cnxn.queuePacket(h, new ReplyHeader(), request, response, cb,
- ZooDefs.CONFIG_NODE, ZooDefs.CONFIG_NODE, ctx, null);
+ public void reconfigure(String joiningServers, String leavingServers,
+ String newMembers, long fromConfig, DataCallback cb, Object ctx) {
+ internalReconfig(joiningServers, leavingServers, newMembers, fromConfig, cb, ctx);
}
/**
* Convenience wrapper around asynchronous reconfig that takes Lists of strings instead of comma-separated servers.
*
- * @see #reconfig
+ * @see #reconfigure
*
*/
- public void reconfig(List joiningServers,
- List leavingServers, List newMembers, long fromConfig,
- DataCallback cb, Object ctx) {
- reconfig(StringUtils.joinStrings(joiningServers, ","),
- StringUtils.joinStrings(leavingServers, ","),
- StringUtils.joinStrings(newMembers, ","),
- fromConfig, cb, ctx);
+ public void reconfigure(List joiningServers,
+ List leavingServers, List newMembers, long fromConfig,
+ DataCallback cb, Object ctx) {
+ internalReconfig(joiningServers, leavingServers, newMembers, fromConfig, cb, ctx);
}
/**
diff --git a/src/java/main/org/apache/zookeeper/cli/ReconfigCommand.java b/src/java/main/org/apache/zookeeper/cli/ReconfigCommand.java
index a0709f3c1ab..342f5d2e3c5 100644
--- a/src/java/main/org/apache/zookeeper/cli/ReconfigCommand.java
+++ b/src/java/main/org/apache/zookeeper/cli/ReconfigCommand.java
@@ -154,7 +154,7 @@ public boolean exec() throws CliException {
return false;
}
- byte[] curConfig = ((ZooKeeperAdmin)zk).reconfig(joining,
+ byte[] curConfig = ((ZooKeeperAdmin)zk).reconfigure(joining,
leaving, members, version, stat);
out.println("Committed new configuration:\n" + new String(curConfig));
diff --git a/src/java/test/org/apache/zookeeper/server/quorum/ReconfigDuringLeaderSyncTest.java b/src/java/test/org/apache/zookeeper/server/quorum/ReconfigDuringLeaderSyncTest.java
index 6da51819aa2..f7f0c7ce90a 100644
--- a/src/java/test/org/apache/zookeeper/server/quorum/ReconfigDuringLeaderSyncTest.java
+++ b/src/java/test/org/apache/zookeeper/server/quorum/ReconfigDuringLeaderSyncTest.java
@@ -149,7 +149,7 @@ public TestQPMain getTestQPMain() {
// Leader.NEWLEADER
while (true) {
if (qp.isNewLeaderMessage()) {
- preReconfigClient.reconfig(serverConfig[joinerId], null, null, -1, null, null);
+ preReconfigClient.reconfigure(serverConfig[joinerId], null, null, -1, null, null);
break;
} else {
// sleep for 10 millisecond and then again check
diff --git a/src/java/test/org/apache/zookeeper/server/quorum/ReconfigFailureCasesTest.java b/src/java/test/org/apache/zookeeper/server/quorum/ReconfigFailureCasesTest.java
index e9263bcce2c..8120d0fa28a 100644
--- a/src/java/test/org/apache/zookeeper/server/quorum/ReconfigFailureCasesTest.java
+++ b/src/java/test/org/apache/zookeeper/server/quorum/ReconfigFailureCasesTest.java
@@ -91,7 +91,7 @@ public void testIncrementalReconfigInvokedOnHiearchicalQS() throws Exception {
List leavingServers = new ArrayList();
leavingServers.add("3");
try {
- zkAdminArr[1].reconfig(null, leavingServers, null, -1, null);
+ zkAdminArr[1].reconfigure(null, leavingServers, null, -1, null);
Assert.fail("Reconfig should have failed since the current config isn't Majority QS");
} catch (KeeperException.BadArgumentsException e) {
// We expect this to happen.
@@ -121,7 +121,7 @@ public void testTooFewRemainingPariticipants() throws Exception {
leavingServers.add("2");
leavingServers.add("3");
try {
- zkAdminArr[1].reconfig(null, leavingServers, null, -1, null);
+ zkAdminArr[1].reconfigure(null, leavingServers, null, -1, null);
Assert.fail("Reconfig should have failed since the current config version is not 8");
} catch (KeeperException.BadArgumentsException e) {
// We expect this to happen.
@@ -147,7 +147,7 @@ public void testReconfigVersionConditionFails() throws Exception {
List leavingServers = new ArrayList();
leavingServers.add("3");
try {
- zkAdminArr[1].reconfig(null, leavingServers, null, 8, null);
+ zkAdminArr[1].reconfigure(null, leavingServers, null, 8, null);
Assert.fail("Reconfig should have failed since the current config version is not 8");
} catch (KeeperException.BadVersionException e) {
// We expect this to happen.
@@ -182,7 +182,7 @@ public void testLeaderTimesoutOnNewQuorum() throws Exception {
// We try to remove server 3, which requires a quorum of {1,2,3}
// (we have that) and of {1,2}, but 2 is down so we won't get a
// quorum of new config ACKs.
- zkAdminArr[1].reconfig(null, leavingServers, null, -1, null);
+ zkAdminArr[1].reconfigure(null, leavingServers, null, -1, null);
Assert.fail("Reconfig should have failed since we don't have quorum of new config");
} catch (KeeperException.ConnectionLossException e) {
// We expect leader to lose quorum of proposed config and time out
@@ -255,7 +255,7 @@ public void testObserverToParticipantConversionFails() throws Exception {
}
try {
- zkAdmin[1].reconfig("", "", nextQuorumCfgSection, -1, new Stat());
+ zkAdmin[1].reconfigure("", "", nextQuorumCfgSection, -1, new Stat());
Assert.fail("Reconfig should have failed with NewConfigNoQuorum");
} catch (NewConfigNoQuorum e) {
// This is expected case since server 0 is down and 3 can't vote
diff --git a/src/java/test/org/apache/zookeeper/server/quorum/StandaloneDisabledTest.java b/src/java/test/org/apache/zookeeper/server/quorum/StandaloneDisabledTest.java
index 9a85d77e2e7..34206cda610 100644
--- a/src/java/test/org/apache/zookeeper/server/quorum/StandaloneDisabledTest.java
+++ b/src/java/test/org/apache/zookeeper/server/quorum/StandaloneDisabledTest.java
@@ -94,7 +94,7 @@ public void startSingleServerTest() throws Exception {
reconfigServers.clear();
reconfigServers.add(Integer.toString(follower2));
try {
- zkAdminHandles[follower2].reconfig(null, reconfigServers, null, -1, new Stat());
+ zkAdminHandles[follower2].reconfigure(null, reconfigServers, null, -1, new Stat());
Assert.fail("reconfig completed successfully even though there is no quorum up in new config!");
} catch (KeeperException.BadArgumentsException e) {
// This is expected.
diff --git a/src/java/test/org/apache/zookeeper/test/ReconfigExceptionTest.java b/src/java/test/org/apache/zookeeper/test/ReconfigExceptionTest.java
index e56ae6f0489..c5b936d9503 100644
--- a/src/java/test/org/apache/zookeeper/test/ReconfigExceptionTest.java
+++ b/src/java/test/org/apache/zookeeper/test/ReconfigExceptionTest.java
@@ -214,7 +214,7 @@ private boolean reconfigPort() throws KeeperException, InterruptedException {
+ qu.getPeer(followerId).peer.getQuorumAddress().getPort() /*quorum port*/
+ ":" + qu.getPeer(followerId).peer.getElectionAddress().getPort() /*election port*/
+ ":participant;localhost:" + PortAssignment.unique()/* new client port */);
- zkAdmin.reconfig(joiningServers, null, null, -1, new Stat());
+ zkAdmin.reconfigure(joiningServers, null, null, -1, new Stat());
return true;
}
}
diff --git a/src/java/test/org/apache/zookeeper/test/ReconfigMisconfigTest.java b/src/java/test/org/apache/zookeeper/test/ReconfigMisconfigTest.java
index 7aaa41914dd..f5cf47633ab 100644
--- a/src/java/test/org/apache/zookeeper/test/ReconfigMisconfigTest.java
+++ b/src/java/test/org/apache/zookeeper/test/ReconfigMisconfigTest.java
@@ -123,7 +123,7 @@ private boolean reconfigPort() throws KeeperException, InterruptedException {
+ qu.getPeer(followerId).peer.getQuorumAddress().getPort() /*quorum port*/
+ ":" + qu.getPeer(followerId).peer.getElectionAddress().getPort() /*election port*/
+ ":participant;localhost:" + PortAssignment.unique()/* new client port */);
- zkAdmin.reconfig(joiningServers, null, null, -1, new Stat());
+ zkAdmin.reconfigure(joiningServers, null, null, -1, new Stat());
return true;
}
}
diff --git a/src/java/test/org/apache/zookeeper/test/ReconfigTest.java b/src/java/test/org/apache/zookeeper/test/ReconfigTest.java
index 6ca415ca38c..c4658ca0530 100644
--- a/src/java/test/org/apache/zookeeper/test/ReconfigTest.java
+++ b/src/java/test/org/apache/zookeeper/test/ReconfigTest.java
@@ -81,7 +81,7 @@ public static String reconfig(ZooKeeperAdmin zkAdmin, List joiningServer
byte[] config = null;
for (int j = 0; j < 30; j++) {
try {
- config = zkAdmin.reconfig(joiningServers, leavingServers,
+ config = zkAdmin.reconfigure(joiningServers, leavingServers,
newMembers, fromConfig, new Stat());
break;
} catch (KeeperException.ConnectionLossException e) {
@@ -481,7 +481,7 @@ public void testRemoveOneAsynchronous() throws Exception {
LinkedList results = new LinkedList();
- zkAdminArr[1].reconfig(null, leavingServers, null, -1, this, results);
+ zkAdminArr[1].reconfigure(null, leavingServers, null, -1, this, results);
synchronized (results) {
while (results.size() < 1) {
diff --git a/src/java/test/org/apache/zookeeper/test/StandaloneTest.java b/src/java/test/org/apache/zookeeper/test/StandaloneTest.java
index db1a362d8da..3d57b6c5c10 100644
--- a/src/java/test/org/apache/zookeeper/test/StandaloneTest.java
+++ b/src/java/test/org/apache/zookeeper/test/StandaloneTest.java
@@ -151,7 +151,7 @@ public void testStandaloneReconfigFails() throws Exception {
// generate some transactions that will get logged
try {
zkAdmin.addAuthInfo("digest", "super:test".getBytes());
- zkAdmin.reconfig(joiners, null, null, -1, new Stat());
+ zkAdmin.reconfigure(joiners, null, null, -1, new Stat());
Assert.fail("Reconfiguration in standalone should trigger " +
"UnimplementedException");
} catch (KeeperException.UnimplementedException ex) {