You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ma...@apache.org on 2012/01/16 18:37:24 UTC

svn commit: r1232073 - in /lucene/dev/branches/solrcloud/solr/core/src: java/org/apache/solr/cloud/ElectionContext.java test/org/apache/solr/cloud/ChaosMonkeyNothingIsSafeTest.java test/org/apache/solr/cloud/LeaderElectionTest.java

Author: markrmiller
Date: Mon Jan 16 17:37:24 2012
New Revision: 1232073

URL: http://svn.apache.org/viewvc?rev=1232073&view=rev
Log:
fix this test

Modified:
    lucene/dev/branches/solrcloud/solr/core/src/java/org/apache/solr/cloud/ElectionContext.java
    lucene/dev/branches/solrcloud/solr/core/src/test/org/apache/solr/cloud/ChaosMonkeyNothingIsSafeTest.java
    lucene/dev/branches/solrcloud/solr/core/src/test/org/apache/solr/cloud/LeaderElectionTest.java

Modified: lucene/dev/branches/solrcloud/solr/core/src/java/org/apache/solr/cloud/ElectionContext.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/solr/core/src/java/org/apache/solr/cloud/ElectionContext.java?rev=1232073&r1=1232072&r2=1232073&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/solr/core/src/java/org/apache/solr/cloud/ElectionContext.java (original)
+++ lucene/dev/branches/solrcloud/solr/core/src/java/org/apache/solr/cloud/ElectionContext.java Mon Jan 16 17:37:24 2012
@@ -86,7 +86,7 @@ final class ShardLeaderElectionContext e
           leaderProps == null ? null : ZkStateReader.toJSON(leaderProps),
           CreateMode.EPHEMERAL, true);
     } catch (NodeExistsException e) {
-      // if a previous leader ephemeral exists for some reason, try and remove it
+      // if a previous leader ephemeral still exists for some reason, try and remove it
       zkClient.delete(leaderPath, -1, true);
       zkClient.makePath(leaderPath,
           leaderProps == null ? null : ZkStateReader.toJSON(leaderProps),

Modified: lucene/dev/branches/solrcloud/solr/core/src/test/org/apache/solr/cloud/ChaosMonkeyNothingIsSafeTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/solr/core/src/test/org/apache/solr/cloud/ChaosMonkeyNothingIsSafeTest.java?rev=1232073&r1=1232072&r2=1232073&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/solr/core/src/test/org/apache/solr/cloud/ChaosMonkeyNothingIsSafeTest.java (original)
+++ lucene/dev/branches/solrcloud/solr/core/src/test/org/apache/solr/cloud/ChaosMonkeyNothingIsSafeTest.java Mon Jan 16 17:37:24 2012
@@ -35,7 +35,6 @@ import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.BeforeClass;
-import org.junit.Ignore;
 
 public class ChaosMonkeyNothingIsSafeTest extends FullSolrCloudTest {
   
@@ -53,18 +52,7 @@ public class ChaosMonkeyNothingIsSafeTes
   @Override
   public void setUp() throws Exception {
     super.setUp();
-    // we expect this time of exception as shards go up and down...
-    ignoreException("shard update error ");
-    ignoreException("Connection refused");
-    ignoreException("interrupted waiting for shard update response");
-    ignoreException("org\\.mortbay\\.jetty\\.EofException");
-    ignoreException("java\\.lang\\.InterruptedException");
-    ignoreException("java\\.nio\\.channels\\.ClosedByInterruptException");
-    ignoreException("Failure to open existing log file \\(non fatal\\)");
-    
-    
-    // sometimes we cannot get the same port
-    ignoreException("java\\.net\\.BindException: Address already in use");
+    // TODO use @Noisy annotation as we expect lots of exceptions
     
     System.setProperty("numShards", Integer.toString(sliceCount));
   }
@@ -79,7 +67,7 @@ public class ChaosMonkeyNothingIsSafeTes
   
   public ChaosMonkeyNothingIsSafeTest() {
     super();
-    shardCount = atLeast(2);
+    shardCount = atLeast(3);
     sliceCount = 2;
   }
   
@@ -95,7 +83,7 @@ public class ChaosMonkeyNothingIsSafeTes
     //del("*:*");
     
     List<StopableIndexingThread> threads = new ArrayList<StopableIndexingThread>();
-    int threadCount = atLeast(1);
+    int threadCount = 1;
     int i = 0;
     for (i = 0; i < threadCount; i++) {
       StopableIndexingThread indexThread = new StopableIndexingThread(i * 50000, true);
@@ -110,7 +98,7 @@ public class ChaosMonkeyNothingIsSafeTes
     
     chaosMonkey.startTheMonkey(true);
     
-    Thread.sleep(atLeast(15000));
+    Thread.sleep(atLeast(10000));
     
     chaosMonkey.stopTheMonkey();
     
@@ -259,6 +247,7 @@ public class ChaosMonkeyNothingIsSafeTes
           clientIndex = 0;
         }
         try {
+          suss.shutdown();
           suss = new StreamingUpdateSolrServer(((CommonsHttpSolrServer) clients.get(clientIndex)).getBaseURL(), 30, 3);
         } catch (MalformedURLException e1) {
           e1.printStackTrace();
@@ -268,7 +257,7 @@ public class ChaosMonkeyNothingIsSafeTes
     
     public void safeStop() {
       stop = true;
-      suss.blockUntilFinished();
+      suss.shutdownNow();
     }
 
     public int getFails() {

Modified: lucene/dev/branches/solrcloud/solr/core/src/test/org/apache/solr/cloud/LeaderElectionTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/solr/core/src/test/org/apache/solr/cloud/LeaderElectionTest.java?rev=1232073&r1=1232072&r2=1232073&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/solr/core/src/test/org/apache/solr/cloud/LeaderElectionTest.java (original)
+++ lucene/dev/branches/solrcloud/solr/core/src/test/org/apache/solr/cloud/LeaderElectionTest.java Mon Jan 16 17:37:24 2012
@@ -44,7 +44,7 @@ public class LeaderElectionTest extends 
   static final int TIMEOUT = 30000;
   private ZkTestServer server;
   private SolrZkClient zkClient;
-  ZkStateReader zkStateReader;
+  private ZkStateReader zkStateReader;
   private Map<Integer,Thread> seqToThread;
   
   private volatile boolean stopStress = false;
@@ -83,12 +83,13 @@ public class LeaderElectionTest extends 
     private volatile boolean stop;
     private volatile boolean electionDone = false;
     private final ZkNodeProps props;
+    private ZkStateReader zkStateReader;
 
     
     public ClientThread(int nodeNumber) throws Exception {
       super("Thread-" + nodeNumber);
-      zkClient = new SolrZkClient(server.getZkAddress(), TIMEOUT);
-    
+      this.zkClient = new SolrZkClient(server.getZkAddress(), TIMEOUT);
+      this.zkStateReader = new ZkStateReader(zkClient);
       this.nodeNumber = nodeNumber;
       props = new ZkNodeProps(ZkStateReader.BASE_URL_PROP, Integer.toString(nodeNumber), ZkStateReader.CORE_PROP, "");
     }
@@ -96,10 +97,10 @@ public class LeaderElectionTest extends 
     @Override
     public void run() {
       
-        LeaderElector elector = new LeaderElector(zkClient);
+        LeaderElector elector = new LeaderElector(ClientThread.this.zkClient);
         
         ElectionContext context = new ShardLeaderElectionContext("shard1",
-            "collection1", Integer.toString(nodeNumber), props, zkStateReader);
+            "collection1", Integer.toString(nodeNumber), props, this.zkStateReader);
         
         try {
           elector.setup(context);
@@ -109,7 +110,7 @@ public class LeaderElectionTest extends 
         } catch (InterruptedException e) {
           return;
         } catch (Throwable e) {
-          e.printStackTrace();
+          //e.printStackTrace();
         }
         
       while (!stop) {
@@ -148,16 +149,20 @@ public class LeaderElectionTest extends 
     assertEquals("http://127.0.0.1/solr/", getLeaderUrl("collection1", "shard2"));
   }
   
-  private String getLeaderUrl(final String collection, final String slice) throws KeeperException, InterruptedException {
-    int iterCount=30;
+  private String getLeaderUrl(final String collection, final String slice)
+      throws KeeperException, InterruptedException {
+    int iterCount = 30;
     while (iterCount-- > 0)
       try {
-      byte[] data = zkClient.getData(ZkStateReader.getShardLeadersPath(collection, slice), null, null, true);
-      ZkCoreNodeProps leaderProps = new ZkCoreNodeProps(ZkNodeProps.load(data));
-      return leaderProps.getCoreUrl();
-    } catch (NoNodeException e) {
-      Thread.sleep(100);
-    }
+        byte[] data = zkClient.getData(
+            ZkStateReader.getShardLeadersPath(collection, slice), null, null,
+            true);
+        ZkCoreNodeProps leaderProps = new ZkCoreNodeProps(
+            ZkNodeProps.load(data));
+        return leaderProps.getCoreUrl();
+      } catch (NoNodeException e) {
+        Thread.sleep(100);
+      }
     throw new RuntimeException("Could not get leader props");
   }
 
@@ -197,14 +202,22 @@ public class LeaderElectionTest extends 
     
     // kill n_0, 1, 3 and 4
     ((ClientThread) seqToThread.get(0)).close();
+    
+    waitForLeader(threads, 1);
+    
+    leaderThread = getLeaderThread();
+    
+    // whoever the leader is, should be the n_1 seq
+    
+    assertEquals(1, threads.get(leaderThread).seq);
+    
     ((ClientThread) seqToThread.get(4)).close();
     ((ClientThread) seqToThread.get(1)).close();
     ((ClientThread) seqToThread.get(3)).close();
     
     // whoever the leader is, should be the n_2 seq
     
-    // nocommit
-    Thread.sleep(1000);
+    waitForLeader(threads, 2);
     
     leaderThread = getLeaderThread();
     assertEquals(2, threads.get(leaderThread).seq);
@@ -216,8 +229,7 @@ public class LeaderElectionTest extends 
     ((ClientThread) seqToThread.get(7)).close();
     ((ClientThread) seqToThread.get(8)).close();
     
-    // nocommit
-    Thread.sleep(1000);
+    waitForLeader(threads, 9);
     leaderThread = getLeaderThread();
     
     // whoever the leader is, should be the n_9 seq
@@ -233,11 +245,25 @@ public class LeaderElectionTest extends 
       thread.join();
     }
     
-    //printLayout(server.getZkAddress());
+  }
+
+  private void waitForLeader(List<ClientThread> threads, int seq)
+      throws KeeperException, InterruptedException {
+    int leaderThread;
+    int tries = 0;
+    leaderThread = getLeaderThread();
+    while (threads.get(leaderThread).seq < seq) {
+      leaderThread = getLeaderThread();
+      if (tries++ > 50) {
+        break;
+      }
+      Thread.sleep(200);
+    }
   }
 
   private int getLeaderThread() throws KeeperException, InterruptedException {
-    return Integer.parseInt(getLeaderUrl("collection1", "shard1").replaceAll("/", ""));
+    String leaderUrl = getLeaderUrl("collection1", "shard1");
+    return Integer.parseInt(leaderUrl.replaceAll("/", ""));
   }
   
   @Test
@@ -347,10 +373,6 @@ public class LeaderElectionTest extends 
     killThread.join();
     
     scheduler.shutdownNow();
-    
-
-    printLayout(server.getZkAddress());
-    
 
     int seq = threads.get(getLeaderThread()).getSeq();
     
@@ -370,7 +392,6 @@ public class LeaderElectionTest extends 
   
   @Override
   public void tearDown() throws Exception {
-    printLayout(server.getZkAddress());
     zkClient.close();
     server.shutdown();
     SolrConfig.severeErrors.clear();