You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zookeeper.apache.org by iv...@apache.org on 2012/05/17 16:05:03 UTC

svn commit: r1339607 - in /zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto: NIOServerFactory.java PerChannelBookieClient.java

Author: ivank
Date: Thu May 17 14:05:02 2012
New Revision: 1339607

URL: http://svn.apache.org/viewvc?rev=1339607&view=rev
Log:
BOOKKEEPER-224: Fix findbugs in bookkeeper-server component [missing changes] (ivank)

Modified:
    zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/NIOServerFactory.java
    zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/PerChannelBookieClient.java

Modified: zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/NIOServerFactory.java
URL: http://svn.apache.org/viewvc/zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/NIOServerFactory.java?rev=1339607&r1=1339606&r2=1339607&view=diff
==============================================================================
--- zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/NIOServerFactory.java (original)
+++ zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/NIOServerFactory.java Thu May 17 14:05:02 2012
@@ -485,9 +485,8 @@ public class NIOServerFactory extends Th
         }
 
         private class CnxnStats {
-            int packetsSent = 0;
-
-            int packetsReceived = 0;
+            long packetsSent = 0;
+            long packetsReceived = 0;
 
             /**
              * The number of requests that have been submitted but not yet

Modified: zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/PerChannelBookieClient.java
URL: http://svn.apache.org/viewvc/zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/PerChannelBookieClient.java?rev=1339607&r1=1339606&r2=1339607&view=diff
==============================================================================
--- zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/PerChannelBookieClient.java (original)
+++ zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/PerChannelBookieClient.java Thu May 17 14:05:02 2012
@@ -90,13 +90,13 @@ public class PerChannelBookieClient exte
      * because they are always updated under a lock
      */
     Queue<GenericCallback<Void>> pendingOps = new ArrayDeque<GenericCallback<Void>>();
-    Channel channel = null;
+    volatile Channel channel = null;
 
     private enum ConnectionState {
         DISCONNECTED, CONNECTING, CONNECTED
             };
 
-    private ConnectionState state;
+    private volatile ConnectionState state;
     private final ClientConfiguration conf;
 
     public PerChannelBookieClient(OrderedSafeExecutor executor, ClientSocketChannelFactory channelFactory,
@@ -174,29 +174,38 @@ public class PerChannelBookieClient exte
     void connectIfNeededAndDoOp(GenericCallback<Void> op) {
         boolean doOpNow;
 
-        synchronized (this) {
-            if (channel != null && state == ConnectionState.CONNECTED) {
-                doOpNow = true;
-            } else {
-                // if reached here, channel is either null (first connection
-                // attempt),
-                // or the channel is disconnected
-                doOpNow = false;
-
-                // connection attempt is still in progress, queue up this
-                // op. Op will be executed when connection attempt either
-                // fails
-                // or
-                // succeeds
-                pendingOps.add(op);
+        // common case without lock first
+        if (channel != null && state == ConnectionState.CONNECTED) {
+            doOpNow = true;
+        } else {
+
+            synchronized (this) {
+                // check again under lock
+                if (channel != null && state == ConnectionState.CONNECTED) {
+                    doOpNow = true;
+                } else {
 
-                connect();
+                    // if reached here, channel is either null (first connection
+                    // attempt),
+                    // or the channel is disconnected
+                    doOpNow = false;
+
+                    // connection attempt is still in progress, queue up this
+                    // op. Op will be executed when connection attempt either
+                    // fails
+                    // or
+                    // succeeds
+                    pendingOps.add(op);
+
+                    connect();
+                }
             }
         }
 
         if (doOpNow) {
             op.operationComplete(BKException.Code.OK, null);
         }
+
     }
 
     /**