You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by sh...@apache.org on 2015/04/18 10:42:58 UTC
svn commit: r1674458 - in /lucene/dev/trunk/solr: CHANGES.txt
core/src/java/org/apache/solr/cloud/Overseer.java
core/src/test/org/apache/solr/cloud/OverseerTest.java
Author: shalin
Date: Sat Apr 18 08:42:57 2015
New Revision: 1674458
URL: http://svn.apache.org/r1674458
Log:
SOLR-7420: Overseer stats are not reset on loss of ZK connection
Modified:
lucene/dev/trunk/solr/CHANGES.txt
lucene/dev/trunk/solr/core/src/java/org/apache/solr/cloud/Overseer.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/cloud/OverseerTest.java
Modified: lucene/dev/trunk/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/CHANGES.txt?rev=1674458&r1=1674457&r2=1674458&view=diff
==============================================================================
--- lucene/dev/trunk/solr/CHANGES.txt (original)
+++ lucene/dev/trunk/solr/CHANGES.txt Sat Apr 18 08:42:57 2015
@@ -128,6 +128,8 @@ Bug Fixes
* SOLR-6087: SolrIndexSearcher makes no DelegatingCollector.finish() call when IndexSearcher
throws an expected exception. (Christine Poerschke via shalin)
+* SOLR-7420: Overseer stats are not reset on loss of ZK connection. (Jessica Cheng, shalin)
+
Optimizations
----------------------
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/cloud/Overseer.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/cloud/Overseer.java?rev=1674458&r1=1674457&r2=1674458&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/cloud/Overseer.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/cloud/Overseer.java Sat Apr 18 08:42:57 2015
@@ -825,6 +825,7 @@ public class Overseer implements Closeab
this.id = id;
closed = false;
doClose();
+ stats = new Stats();
log.info("Overseer (id=" + id + ") starting");
createOverseerNode(reader.getZkClient());
//launch cluster state updater thread
@@ -1048,6 +1049,10 @@ public class Overseer implements Closeab
public void setQueueLength(int queueLength) {
this.queueLength = queueLength;
}
+
+ public void clear() {
+ stats.clear();
+ }
}
public static class Stat {
Modified: lucene/dev/trunk/solr/core/src/test/org/apache/solr/cloud/OverseerTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/cloud/OverseerTest.java?rev=1674458&r1=1674457&r2=1674458&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/cloud/OverseerTest.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/cloud/OverseerTest.java Sat Apr 18 08:42:57 2015
@@ -434,7 +434,7 @@ public class OverseerTest extends SolrTe
Thread.sleep(200);
}
- assertEquals("Unable to verify all cores have been assigned an id in cloudstate",
+ assertEquals("Unable to verify all cores have been assigned an id in cloudstate",
coreCount, cloudStateSliceCount);
// make sure all cores have been returned an id
@@ -687,6 +687,69 @@ public class OverseerTest extends SolrTe
close(zkClient);
close(reader);
server.shutdown();
+ }
+ }
+
+ @Test
+ public void testOverseerStatsReset() throws Exception {
+ String zkDir = createTempDir("zkData").toFile().getAbsolutePath();
+ ZkTestServer server = new ZkTestServer(zkDir);
+ ZkStateReader reader = null;
+ MockZKController mockController = null;
+
+ SolrZkClient zkClient = null;
+ try {
+ server.run();
+
+ AbstractZkTestCase.tryCleanSolrZkNode(server.getZkHost());
+ AbstractZkTestCase.makeSolrZkNode(server.getZkHost());
+
+ zkClient = new SolrZkClient(server.getZkAddress(), TIMEOUT);
+
+ ZkController.createClusterZkNodes(zkClient);
+
+ reader = new ZkStateReader(zkClient);
+ reader.createClusterStateWatchersAndUpdate();
+
+ mockController = new MockZKController(server.getZkAddress(), "node1");
+
+ LeaderElector overseerElector = new LeaderElector(zkClient);
+ if (overseers.size() > 0) {
+ overseers.get(overseers.size() -1).close();
+ overseers.get(overseers.size() -1).getZkStateReader().getZkClient().close();
+ }
+ UpdateShardHandler updateShardHandler = new UpdateShardHandler(UpdateShardHandlerConfig.DEFAULT);
+ updateShardHandlers.add(updateShardHandler);
+ HttpShardHandlerFactory httpShardHandlerFactory = new HttpShardHandlerFactory();
+ httpShardHandlerFactorys.add(httpShardHandlerFactory);
+ Overseer overseer = new Overseer(httpShardHandlerFactory.getShardHandler(), updateShardHandler, "/admin/cores", reader, null,
+ new CloudConfig.CloudConfigBuilder("127.0.0.1", 8983, "").build());
+ overseers.add(overseer);
+ ElectionContext ec = new OverseerElectionContext(zkClient, overseer,
+ server.getZkAddress().replaceAll("/", "_"));
+ overseerElector.setup(ec);
+ overseerElector.joinElection(ec, false);
+
+ mockController.publishState(collection, "core1", "core_node1", Replica.State.RECOVERING, 1);
+
+ assertNotNull(overseer.getStats());
+ assertEquals(1, (overseer.getStats().getSuccessCount(OverseerAction.STATE.toLower())));
+
+ // shut it down
+ overseer.close();
+ ec.cancelElection();
+
+ // start it again
+ overseerElector.setup(ec);
+ overseerElector.joinElection(ec, false);
+ assertNotNull(overseer.getStats());
+ assertEquals(0, (overseer.getStats().getSuccessCount(OverseerAction.STATE.toLower())));
+
+ } finally {
+ close(mockController);
+ close(zkClient);
+ close(reader);
+ server.shutdown();
}
}