From a15a51276d16e83740c7d5689e9d2278e1f0c68b Mon Sep 17 00:00:00 2001 From: Sami Siren Date: Wed, 13 Jun 2012 04:40:43 +0000 Subject: [PATCH] SOLR-3511 be less aggressive when killing overseer during the test git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1349633 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/solr/cloud/OverseerTest.java | 49 +++++++++++-------- 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/solr/core/src/test/org/apache/solr/cloud/OverseerTest.java b/solr/core/src/test/org/apache/solr/cloud/OverseerTest.java index 3a3e9335fb2..aabd3b8eaff 100644 --- a/solr/core/src/test/org/apache/solr/cloud/OverseerTest.java +++ b/solr/core/src/test/org/apache/solr/cloud/OverseerTest.java @@ -510,6 +510,7 @@ public class OverseerTest extends SolrTestCaseJ4 { private void verifyShardLeader(ZkStateReader reader, String collection, String shard, String expectedCore) throws InterruptedException, KeeperException { int maxIterations = 100; while(maxIterations-->0) { + reader.updateCloudState(true); // poll state ZkNodeProps props = reader.getCloudState().getLeader(collection, shard); if(props!=null) { if(expectedCore.equals(props.get(ZkStateReader.CORE_NAME_PROP))) { @@ -593,6 +594,8 @@ public class OverseerTest extends SolrTestCaseJ4 { server.shutdown(); } } + + private AtomicInteger killCounter = new AtomicInteger(); private class OverseerRestarter implements Runnable{ SolrZkClient overseerClient = null; @@ -607,33 +610,37 @@ public class OverseerTest extends SolrTestCaseJ4 { public void run() { try { overseerClient = electNewOverseer(zkAddress); - } catch (Throwable t) { - //t.printStackTrace(); - } - Random rnd = random(); - while (run) { - if(rnd.nextInt(20)==1){ + Random rnd = random(); + while (run) { + if (killCounter.get()>0) { + try { + killCounter.decrementAndGet(); + log.info("Killing overseer."); + overseerClient.close(); + overseerClient = electNewOverseer(zkAddress); + } catch (Throwable e) { + // e.printStackTrace(); + } + } try { - overseerClient.close(); - overseerClient = electNewOverseer(zkAddress); + Thread.sleep(100); } catch (Throwable e) { - //e.printStackTrace(); + // e.printStackTrace(); } } - try { - Thread.sleep(100); - } catch (Throwable e) { - //e.printStackTrace(); + } catch (Throwable t) { + // ignore + } finally { + if (overseerClient != null) { + try { + overseerClient.close(); + } catch (Throwable t) { + // ignore + } } } - try { - overseerClient.close(); - } catch (Throwable e) { - //e.printStackTrace(); - } } } - @Test public void testShardLeaderChange() throws Exception { @@ -657,10 +664,10 @@ public class OverseerTest extends SolrTestCaseJ4 { killerThread = new Thread(killer); killerThread.start(); - reader = new ZkStateReader(controllerClient); - reader.createClusterStateWatchersAndUpdate(); + reader = new ZkStateReader(controllerClient); //no watches, we'll poll for (int i = 0; i < atLeast(4); i++) { + killCounter.incrementAndGet(); //for each round allow 1 kill mockController = new MockZKController(server.getZkAddress(), "node1", "collection1"); mockController.publishState("core1", "state1",1); if(mockController2!=null) {