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