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();