You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zookeeper.apache.org by ma...@apache.org on 2009/02/04 21:00:14 UTC
svn commit: r740848 - in /hadoop/zookeeper/branches/branch-3.1: CHANGES.txt
src/java/main/org/apache/zookeeper/KeeperException.java
src/java/test/org/apache/zookeeper/test/KeeperStateTest.java
Author: mahadev
Date: Wed Feb 4 20:00:14 2009
New Revision: 740848
URL: http://svn.apache.org/viewvc?rev=740848&view=rev
Log:
ZOOKEEPER-291. regression for legacy code using KeeperException.Code constants (due to 246). (pat via mahadev)
Modified:
hadoop/zookeeper/branches/branch-3.1/CHANGES.txt
hadoop/zookeeper/branches/branch-3.1/src/java/main/org/apache/zookeeper/KeeperException.java
hadoop/zookeeper/branches/branch-3.1/src/java/test/org/apache/zookeeper/test/KeeperStateTest.java
Modified: hadoop/zookeeper/branches/branch-3.1/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/branches/branch-3.1/CHANGES.txt?rev=740848&r1=740847&r2=740848&view=diff
==============================================================================
--- hadoop/zookeeper/branches/branch-3.1/CHANGES.txt (original)
+++ hadoop/zookeeper/branches/branch-3.1/CHANGES.txt Wed Feb 4 20:00:14 2009
@@ -7,6 +7,9 @@
ZOOKEEPER-255. zoo_set() api does not return stat datastructure.
(avery ching via mahadev)
+ ZOOKEEPER-246. review error code definition in both source and docs.
+ (pat via mahadev)
+
Backward compatibile changes:
BUGFIXES:
@@ -107,9 +110,6 @@
ZOOKEEPER-222. print C client log message timestamp in human readable
form. (pat via mahadev)
- ZOOKEEPER-246. review error code definition in both source and docs.
- (pat via mahadev)
-
ZOOKEEPER-256. support use of JMX to manage log4j configuration at runtime.
(pat via mahadev)
@@ -154,6 +154,9 @@
ZOOKEEPER-289. add debug messages to nioserver select loop. (mahadev)
+ ZOOKEEPER-291. regression for legacy code using KeeperException.
+ Code constants (due to 246) (pat via mahadev)
+
NEW FEATURES:
ZOOKEEPER-276. Bookkeeper contribution (Flavio and Luca Telloli via mahadev)
Modified: hadoop/zookeeper/branches/branch-3.1/src/java/main/org/apache/zookeeper/KeeperException.java
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/branches/branch-3.1/src/java/main/org/apache/zookeeper/KeeperException.java?rev=740848&r1=740847&r2=740848&view=diff
==============================================================================
--- hadoop/zookeeper/branches/branch-3.1/src/java/main/org/apache/zookeeper/KeeperException.java (original)
+++ hadoop/zookeeper/branches/branch-3.1/src/java/main/org/apache/zookeeper/KeeperException.java Wed Feb 4 20:00:14 2009
@@ -136,198 +136,223 @@
this.code = Code.get(code);
}
- public static enum Code {
- /** Everything is OK */
- OK (0),
-
- /** System and server-side errors.
- * This is never thrown by the server, it shouldn't be used other than
- * to indicate a range. Specifically error codes greater than this
- * value, but lesser than {@link #APIERROR}, are system errors.
- */
- SYSTEMERROR (-1),
-
- /** A runtime inconsistency was found */
- RUNTIMEINCONSISTENCY (-2),
- /** A data inconsistency was found */
- DATAINCONSISTENCY (-3),
- /** Connection to the server has been lost */
- CONNECTIONLOSS (-4),
- /** Error while marshalling or unmarshalling data */
- MARSHALLINGERROR (-5),
- /** Operation is unimplemented */
- UNIMPLEMENTED (-6),
- /** Operation timeout */
- OPERATIONTIMEOUT (-7),
- /** Invalid arguments */
- BADARGUMENTS (-8),
-
- /** API errors.
- * This is never thrown by the server, it shouldn't be used other than
- * to indicate a range. Specifically error codes greater than this
- * value are API errors (while values less than this indicate a
- * {@link #SYSTEMERROR}).
- */
- APIERROR (-100),
-
- /** Node does not exist */
- NONODE (-101),
- /** Not authenticated */
- NOAUTH (-102),
- /** Version conflict */
- BADVERSION (-103),
- /** Ephemeral nodes may not have children */
- NOCHILDRENFOREPHEMERALS (-108),
- /** The node already exists */
- NODEEXISTS (-110),
- /** The node has children */
- NOTEMPTY (-111),
- /** The session has been expired by the server */
- SESSIONEXPIRED (-112),
- /** Invalid callback specified */
- INVALIDCALLBACK (-113),
- /** Invalid ACL specified */
- INVALIDACL (-114),
- /** Client authentication failed */
- AUTHFAILED (-115);
-
- private static final Map<Integer,Code> lookup
- = new HashMap<Integer,Code>();
-
- static {
- for(Code c : EnumSet.allOf(Code.class))
- lookup.put(c.code, c);
- }
-
- private final int code;
- Code(int code) {
- this.code = code;
- }
-
- /**
- * Get the int value for a particular Code.
- * @return error code as integer
- */
- public int intValue() { return code; }
-
- /**
- * Get the Code value for a particular integer error code
- * @param code int error code
- * @return Code value corresponding to specified int code, or null
- */
- public static Code get(int code) {
- return lookup.get(code);
- }
-
+ /** This interface contains the original static final int constants
+ * which have now been replaced with an enumeration in Code. Do not
+ * reference this class directly, if necessary (legacy code) continue
+ * to access the constants through Code.
+ * Note: an interface is used here due to the fact that enums cannot
+ * reference constants defined within the same enum as said constants
+ * are considered initialized _after_ the enum itself. By using an
+ * interface as a super type this allows the deprecated constants to
+ * be initialized first and referenced when constructing the enums. I
+ * didn't want to have constants declared twice. This
+ * interface should be private, but it's declared public to enable
+ * javadoc to include in the user API spec.
+ */
+ @Deprecated
+ public interface CodeDeprecated {
/**
- * @deprecated deprecated in 3.1.0, use {@link #OK} instead
+ * @deprecated deprecated in 3.1.0, use {@link Code#OK} instead
*/
@Deprecated
- public static final int Ok = OK.code;
+ public static final int Ok = 0;
/**
- * @deprecated deprecated in 3.1.0, use {@link #SYSTEMERROR} instead
+ * @deprecated deprecated in 3.1.0, use {@link Code#SYSTEMERROR} instead
*/
@Deprecated
- public static final int SystemError = SYSTEMERROR.code;
+ public static final int SystemError = -1;
/**
- * @deprecated deprecated in 3.1.0, use {@link #RUNTIMEINCONSISTENCY} instead
+ * @deprecated deprecated in 3.1.0, use
+ * {@link Code#RUNTIMEINCONSISTENCY} instead
*/
@Deprecated
- public static final int RuntimeInconsistency = RUNTIMEINCONSISTENCY.code;
+ public static final int RuntimeInconsistency = -2;
/**
- * @deprecated deprecated in 3.1.0, use {@link #DATAINCONSISTENCY}
+ * @deprecated deprecated in 3.1.0, use {@link Code#DATAINCONSISTENCY}
* instead
*/
@Deprecated
- public static final int DataInconsistency = DATAINCONSISTENCY.code;
+ public static final int DataInconsistency = -3;
/**
- * @deprecated deprecated in 3.1.0, use {@link #CONNECTIONLOSS}
+ * @deprecated deprecated in 3.1.0, use {@link Code#CONNECTIONLOSS}
* instead
*/
@Deprecated
- public static final int ConnectionLoss = CONNECTIONLOSS.code;
+ public static final int ConnectionLoss = -4;
/**
- * @deprecated deprecated in 3.1.0, use {@link #MARSHALLINGERROR}
+ * @deprecated deprecated in 3.1.0, use {@link Code#MARSHALLINGERROR}
* instead
*/
@Deprecated
- public static final int MarshallingError = MARSHALLINGERROR.code;
+ public static final int MarshallingError = -5;
/**
- * @deprecated deprecated in 3.1.0, use {@link #UNIMPLEMENTED} instead
+ * @deprecated deprecated in 3.1.0, use {@link Code#UNIMPLEMENTED}
+ * instead
*/
@Deprecated
- public static final int Unimplemented = UNIMPLEMENTED.code;
+ public static final int Unimplemented = -6;
/**
- * @deprecated deprecated in 3.1.0, use {@link #OPERATIONTIMEOUT}
+ * @deprecated deprecated in 3.1.0, use {@link Code#OPERATIONTIMEOUT}
* instead
*/
@Deprecated
- public static final int OperationTimeout = OPERATIONTIMEOUT.code;
+ public static final int OperationTimeout = -7;
/**
- * @deprecated deprecated in 3.1.0, use {@link #BADARGUMENTS} instead
+ * @deprecated deprecated in 3.1.0, use {@link Code#BADARGUMENTS}
+ * instead
*/
@Deprecated
- public static final int BadArguments = BADARGUMENTS.code;
+ public static final int BadArguments = -8;
/**
- * @deprecated deprecated in 3.1.0, use {@link #APIERROR} instead
+ * @deprecated deprecated in 3.1.0, use {@link Code#APIERROR} instead
*/
@Deprecated
- public static final int APIError = APIERROR.code;
+ public static final int APIError = -100;
/**
- * @deprecated deprecated in 3.1.0, use {@link #NONODE} instead
+ * @deprecated deprecated in 3.1.0, use {@link Code#NONODE} instead
*/
@Deprecated
- public static final int NoNode = NONODE.code;
+ public static final int NoNode = -101;
/**
- * @deprecated deprecated in 3.1.0, use {@link #NOAUTH} instead
+ * @deprecated deprecated in 3.1.0, use {@link Code#NOAUTH} instead
*/
@Deprecated
- public static final int NoAuth = NOAUTH.code;
+ public static final int NoAuth = -102;
/**
- * @deprecated deprecated in 3.1.0, use {@link #BADVERSION} instead
+ * @deprecated deprecated in 3.1.0, use {@link Code#BADVERSION} instead
*/
@Deprecated
- public static final int BadVersion = BADVERSION.code;
+ public static final int BadVersion = -103;
/**
- * @deprecated deprecated in 3.1.0, use {@link #NOCHILDRENFOREPHEMERALS}
+ * @deprecated deprecated in 3.1.0, use
+ * {@link Code#NOCHILDRENFOREPHEMERALS}
* instead
*/
@Deprecated
- public static final int
- NoChildrenForEphemerals = NOCHILDRENFOREPHEMERALS.code;
+ public static final int NoChildrenForEphemerals = -108;
/**
- * @deprecated deprecated in 3.1.0, use {@link #NODEEXISTS} instead
+ * @deprecated deprecated in 3.1.0, use {@link Code#NODEEXISTS} instead
*/
@Deprecated
- public static final int NodeExists = NODEEXISTS.code;
+ public static final int NodeExists = -110;
/**
- * @deprecated deprecated in 3.1.0, use {@link #NOTEMPTY} instead
+ * @deprecated deprecated in 3.1.0, use {@link Code#NOTEMPTY} instead
*/
@Deprecated
- public static final int NotEmpty = NOTEMPTY.code;
+ public static final int NotEmpty = -111;
/**
- * @deprecated deprecated in 3.1.0, use {@link #SESSIONEXPIRED} instead
+ * @deprecated deprecated in 3.1.0, use {@link Code#SESSIONEXPIRED} instead
*/
@Deprecated
- public static final int SessionExpired = SESSIONEXPIRED.code;
+ public static final int SessionExpired = -112;
/**
- * @deprecated deprecated in 3.1.0, use {@link #INVALIDCALLBACK} instead
+ * @deprecated deprecated in 3.1.0, use {@link Code#INVALIDCALLBACK}
+ * instead
*/
@Deprecated
- public static final int InvalidCallback = INVALIDCALLBACK.code;
+ public static final int InvalidCallback = -113;
/**
- * @deprecated deprecated in 3.1.0, use {@link #INVALIDACL} instead
+ * @deprecated deprecated in 3.1.0, use {@link Code#INVALIDACL} instead
*/
@Deprecated
- public static final int InvalidACL = INVALIDACL.code;
+ public static final int InvalidACL = -114;
/**
- * @deprecated deprecated in 3.1.0, use {@link #AUTHFAILED} instead
+ * @deprecated deprecated in 3.1.0, use {@link Code#AUTHFAILED} instead
*/
@Deprecated
- public static final int AuthFailed = AUTHFAILED.code;
+ public static final int AuthFailed = -115;
+ }
+
+ /** Codes which represent the various KeeperException
+ * types. This enum replaces the deprecated earlier static final int
+ * constants. The old, deprecated, values are in "camel case" while the new
+ * enum values are in all CAPS.
+ */
+ public static enum Code implements CodeDeprecated {
+ /** Everything is OK */
+ OK (Ok),
+
+ /** System and server-side errors.
+ * This is never thrown by the server, it shouldn't be used other than
+ * to indicate a range. Specifically error codes greater than this
+ * value, but lesser than {@link #APIERROR}, are system errors.
+ */
+ SYSTEMERROR (SystemError),
+
+ /** A runtime inconsistency was found */
+ RUNTIMEINCONSISTENCY (RuntimeInconsistency),
+ /** A data inconsistency was found */
+ DATAINCONSISTENCY (DataInconsistency),
+ /** Connection to the server has been lost */
+ CONNECTIONLOSS (ConnectionLoss),
+ /** Error while marshalling or unmarshalling data */
+ MARSHALLINGERROR (MarshallingError),
+ /** Operation is unimplemented */
+ UNIMPLEMENTED (Unimplemented),
+ /** Operation timeout */
+ OPERATIONTIMEOUT (OperationTimeout),
+ /** Invalid arguments */
+ BADARGUMENTS (BadArguments),
+
+ /** API errors.
+ * This is never thrown by the server, it shouldn't be used other than
+ * to indicate a range. Specifically error codes greater than this
+ * value are API errors (while values less than this indicate a
+ * {@link #SYSTEMERROR}).
+ */
+ APIERROR (APIError),
+
+ /** Node does not exist */
+ NONODE (NoNode),
+ /** Not authenticated */
+ NOAUTH (NoAuth),
+ /** Version conflict */
+ BADVERSION (BadVersion),
+ /** Ephemeral nodes may not have children */
+ NOCHILDRENFOREPHEMERALS (NoChildrenForEphemerals),
+ /** The node already exists */
+ NODEEXISTS (NodeExists),
+ /** The node has children */
+ NOTEMPTY (NotEmpty),
+ /** The session has been expired by the server */
+ SESSIONEXPIRED (SessionExpired),
+ /** Invalid callback specified */
+ INVALIDCALLBACK (InvalidCallback),
+ /** Invalid ACL specified */
+ INVALIDACL (InvalidACL),
+ /** Client authentication failed */
+ AUTHFAILED (AuthFailed);
+
+ private static final Map<Integer,Code> lookup
+ = new HashMap<Integer,Code>();
+
+ static {
+ for(Code c : EnumSet.allOf(Code.class))
+ lookup.put(c.code, c);
+ }
+
+ private final int code;
+ Code(int code) {
+ this.code = code;
+ }
+
+ /**
+ * Get the int value for a particular Code.
+ * @return error code as integer
+ */
+ public int intValue() { return code; }
+
+ /**
+ * Get the Code value for a particular integer error code
+ * @param code int error code
+ * @return Code value corresponding to specified int code, or null
+ */
+ public static Code get(int code) {
+ return lookup.get(code);
+ }
}
static String getCodeMessage(Code code) {
Modified: hadoop/zookeeper/branches/branch-3.1/src/java/test/org/apache/zookeeper/test/KeeperStateTest.java
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/branches/branch-3.1/src/java/test/org/apache/zookeeper/test/KeeperStateTest.java?rev=740848&r1=740847&r2=740848&view=diff
==============================================================================
--- hadoop/zookeeper/branches/branch-3.1/src/java/test/org/apache/zookeeper/test/KeeperStateTest.java (original)
+++ hadoop/zookeeper/branches/branch-3.1/src/java/test/org/apache/zookeeper/test/KeeperStateTest.java Wed Feb 4 20:00:14 2009
@@ -21,9 +21,10 @@
import java.util.EnumSet;
import junit.framework.TestCase;
-import org.junit.Test;
+import org.apache.zookeeper.KeeperException.Code;
import org.apache.zookeeper.Watcher.Event.KeeperState;
+import org.junit.Test;
public class KeeperStateTest extends TestCase {
@@ -47,4 +48,29 @@
}
}
+
+ /** Validate that the deprecated constant still works. There were issues
+ * found with switch statements - which need compile time constants.
+ */
+ @Test
+ @SuppressWarnings("deprecation")
+ public void testDeprecatedCodeOkInSwitch() {
+ int test = 1;
+ switch (test) {
+ case Code.Ok:
+ assertTrue(true);
+ break;
+ }
+ }
+
+ /** Verify the enum works (paranoid) */
+ @Test
+ public void testCodeOKInSwitch() {
+ Code test = Code.OK;
+ switch (test) {
+ case OK:
+ assertTrue(true);
+ break;
+ }
+ }
}