Author: mahadev
Date: Fri Aug  7 21:00:05 2009
New Revision: 802188

URL: http://svn.apache.org/viewvc?rev=802188&view=rev
Log:
ZOOKEEPER-501. CnxManagerTest failed on hudson. (flavio via mahadev)

Modified:
    hadoop/zookeeper/trunk/CHANGES.txt
    
hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/QuorumCnxManager.java
    
hadoop/zookeeper/trunk/src/java/test/org/apache/zookeeper/test/CnxManagerTest.java

Modified: hadoop/zookeeper/trunk/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/hadoop/zookeeper/trunk/CHANGES.txt?rev=802188&r1=802187&r2=802188&view=diff
==============================================================================
--- hadoop/zookeeper/trunk/CHANGES.txt (original)
+++ hadoop/zookeeper/trunk/CHANGES.txt Fri Aug  7 21:00:05 2009
@@ -55,6 +55,8 @@
   ZOOKEEPER-490. the java docs for session creation are misleading/incomplete
   (phunt)
 
+  ZOOKEEPER-501. CnxManagerTest failed on hudson. (flavio via mahadev) 
+
 IMPROVEMENTS:
   ZOOKEEPER-473. cleanup junit tests to eliminate false positives due to
   "socket reuse" and failure to close client (phunt via mahadev)

Modified: 
hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/QuorumCnxManager.java
URL: 
http://svn.apache.org/viewvc/hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/QuorumCnxManager.java?rev=802188&r1=802187&r2=802188&view=diff
==============================================================================
--- 
hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/QuorumCnxManager.java
 (original)
+++ 
hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/QuorumCnxManager.java
 Fri Aug  7 21:00:05 2009
@@ -96,7 +96,7 @@
      */
     public Listener listener;
 
-    static class Message {
+    static public class Message {
         Message(ByteBuffer buffer, long sid) {
             this.buffer = buffer;
             this.sid = sid;
@@ -339,7 +339,7 @@
      * doesn't exist.
      */
     
-    void connectAll(){
+    public void connectAll(){
         long sid;
         for(Enumeration<Long> en = queueSendMap.keys();
             en.hasMoreElements();){

Modified: 
hadoop/zookeeper/trunk/src/java/test/org/apache/zookeeper/test/CnxManagerTest.java
URL: 
http://svn.apache.org/viewvc/hadoop/zookeeper/trunk/src/java/test/org/apache/zookeeper/test/CnxManagerTest.java?rev=802188&r1=802187&r2=802188&view=diff
==============================================================================
--- 
hadoop/zookeeper/trunk/src/java/test/org/apache/zookeeper/test/CnxManagerTest.java
 (original)
+++ 
hadoop/zookeeper/trunk/src/java/test/org/apache/zookeeper/test/CnxManagerTest.java
 Fri Aug  7 21:00:05 2009
@@ -26,6 +26,7 @@
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.concurrent.Semaphore;
+import java.util.concurrent.TimeUnit;
 
 import junit.framework.TestCase;
 
@@ -33,6 +34,7 @@
 import org.apache.zookeeper.PortAssignment;
 import org.apache.zookeeper.server.quorum.FastLeaderElection;
 import org.apache.zookeeper.server.quorum.QuorumCnxManager;
+import org.apache.zookeeper.server.quorum.QuorumCnxManager.Message;
 import org.apache.zookeeper.server.quorum.QuorumPeer;
 import org.apache.zookeeper.server.quorum.Vote;
 import org.apache.zookeeper.server.quorum.QuorumPeer.QuorumServer;
@@ -53,6 +55,7 @@
  */
 public class CnxManagerTest extends TestCase {
     protected static final Logger LOG = 
Logger.getLogger(FLENewEpochTest.class);
+    protected static final int THRESHOLD = 4;
     
     int count;
     HashMap<Long,QuorumServer> peers;
@@ -101,7 +104,10 @@
     
     class CnxManagerThread extends Thread {
         
-        CnxManagerThread(){}
+        boolean failed;
+        CnxManagerThread(){
+            failed = false;
+        }
         
         public void run(){
             try {
@@ -116,10 +122,26 @@
                 
                 long sid = 1;
                 cnxManager.toSend(sid, 
createMsg(ServerState.LOOKING.ordinal(), 0, -1, 1));
-                cnxManager.recvQueue.take();
+                
+                Message m = null;
+                int numRetries = 1;
+                while((m == null) && (numRetries++ <= THRESHOLD)){
+                    m = cnxManager.recvQueue.poll(3000, TimeUnit.MILLISECONDS);
+                    if(m == null) cnxManager.connectAll();
+                }
+                
+                if(numRetries > THRESHOLD){
+                    failed = true;
+                    return;
+                }
+                
                 cnxManager.testInitiateConnection(sid);
             
-                cnxManager.recvQueue.take();
+                m = cnxManager.recvQueue.poll(3000, TimeUnit.MILLISECONDS);
+                if(m == null){
+                    failed = true;
+                    return;
+                }
             } catch (Exception e) {
                 LOG.error("Exception while running mock thread", e);
                 fail("Unexpected exception");
@@ -129,7 +151,7 @@
     
     @Test
     public void testCnxManager() throws Exception {
-        Thread thread = new CnxManagerThread();
+        CnxManagerThread thread = new CnxManagerThread();
         
         thread.start();
         
@@ -143,11 +165,22 @@
         }
             
         cnxManager.toSend(new Long(0), 
createMsg(ServerState.LOOKING.ordinal(), 1, -1, 1));
-        cnxManager.recvQueue.take();
         
+        Message m = null;
+        int numRetries = 1;
+        while((m == null) && (numRetries++ <= THRESHOLD)){
+            m = cnxManager.recvQueue.poll(3000, TimeUnit.MILLISECONDS);
+            if(m == null) cnxManager.connectAll();
+        }
+        
+        assertTrue("Exceeded number of retries", numRetries <= THRESHOLD);
+
         thread.join(5000);
         if (thread.isAlive()) {
-            fail("Threads didn't join");
+            fail("Thread didn't join");
+        } else {
+            if(thread.failed)
+                fail("Did not receive expected message");
         }
     }
     


Reply via email to