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 2014/06/26 17:33:38 UTC

svn commit: r1605822 - in /lucene/dev/branches/branch_4x: ./ solr/ solr/core/ solr/core/src/java/org/apache/solr/cloud/ solr/core/src/test/org/apache/solr/cloud/

Author: shalin
Date: Thu Jun 26 15:33:37 2014
New Revision: 1605822

URL: http://svn.apache.org/r1605822
Log:
SOLR-6196: The overseerstatus collection API instruments amILeader and ZK state update calls

Modified:
    lucene/dev/branches/branch_4x/   (props changed)
    lucene/dev/branches/branch_4x/solr/   (props changed)
    lucene/dev/branches/branch_4x/solr/CHANGES.txt   (contents, props changed)
    lucene/dev/branches/branch_4x/solr/core/   (props changed)
    lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/cloud/Overseer.java
    lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/cloud/OverseerCollectionProcessor.java
    lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/cloud/OverseerStatusTest.java

Modified: lucene/dev/branches/branch_4x/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/CHANGES.txt?rev=1605822&r1=1605821&r2=1605822&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/CHANGES.txt (original)
+++ lucene/dev/branches/branch_4x/solr/CHANGES.txt Thu Jun 26 15:33:37 2014
@@ -25,6 +25,11 @@ $Id$
 
 ==================  4.10.0 =================
 
+New Features
+----------------------
+* SOLR-6196: The overseerstatus collection API instruments amILeader and ZK state update calls.
+  (shalin)
+
 Bug Fixes
 ----------------------
 

Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/cloud/Overseer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/cloud/Overseer.java?rev=1605822&r1=1605821&r2=1605822&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/cloud/Overseer.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/cloud/Overseer.java Thu Jun 26 15:33:37 2014
@@ -170,9 +170,8 @@ public class Overseer {
                   } finally {
                     timerContext.stop();
                   }
-                  zkClient.setData(ZkStateReader.CLUSTER_STATE,
-                      ZkStateReader.toJSON(clusterState), true);
-
+                  updateZkStates(clusterState);
+                  
                   workQueue.poll(); // poll-ing removes the element we got by peek-ing
                 }
                 else {
@@ -260,9 +259,7 @@ public class Overseer {
                 // if an event comes in the next 100ms batch it together
                 head = stateUpdateQueue.peek(100);
               }
-              lastUpdatedTime = System.nanoTime();
-              zkClient.setData(ZkStateReader.CLUSTER_STATE,
-                  ZkStateReader.toJSON(clusterState), true);
+              updateZkStates(clusterState);
               // clean work queue
               while (workQueue.poll() != null) ;
 
@@ -294,6 +291,23 @@ public class Overseer {
       }
     }
 
+    private void updateZkStates(ClusterState clusterState) throws KeeperException, InterruptedException {
+      TimerContext timerContext = stats.time("update_state");
+      boolean success = false;
+      try {
+        zkClient.setData(ZkStateReader.CLUSTER_STATE, ZkStateReader.toJSON(clusterState), true);
+        lastUpdatedTime = System.nanoTime();
+        success = true;
+      } finally {
+        timerContext.stop();
+        if (success)  {
+          stats.success("update_state");
+        } else  {
+          stats.error("update_state");
+        }
+      }
+    }
+
     private void checkIfIamStillLeader() {
       org.apache.zookeeper.data.Stat stat = new org.apache.zookeeper.data.Stat();
       String path = "/overseer_elect/leader";
@@ -580,6 +594,8 @@ public class Overseer {
     }
 
     private LeaderStatus amILeader() {
+      TimerContext timerContext = stats.time("am_i_leader");
+      boolean success = true;
       try {
         ZkNodeProps props = ZkNodeProps.load(zkClient.getData(
             "/overseer_elect/leader", null, null, true));
@@ -587,6 +603,7 @@ public class Overseer {
           return LeaderStatus.YES;
         }
       } catch (KeeperException e) {
+        success = false;
         if (e.code() == KeeperException.Code.CONNECTIONLOSS) {
           log.error("", e);
           return LeaderStatus.DONT_KNOW;
@@ -596,7 +613,15 @@ public class Overseer {
           log.warn("", e);
         }
       } catch (InterruptedException e) {
+        success = false;
         Thread.currentThread().interrupt();
+      } finally {
+        timerContext.stop();
+        if (success)  {
+          stats.success("am_i_leader");
+        } else  {
+          stats.error("am_i_leader");
+        }
       }
       log.info("According to ZK I (id=" + myId + ") am no longer a leader.");
       return LeaderStatus.NO;

Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/cloud/OverseerCollectionProcessor.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/cloud/OverseerCollectionProcessor.java?rev=1605822&r1=1605821&r2=1605822&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/cloud/OverseerCollectionProcessor.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/cloud/OverseerCollectionProcessor.java Thu Jun 26 15:33:37 2014
@@ -512,6 +512,8 @@ public class OverseerCollectionProcessor
 
 
   protected LeaderStatus amILeader() {
+    TimerContext timerContext = stats.time("collection_am_i_leader");
+    boolean success = true;
     try {
       ZkNodeProps props = ZkNodeProps.load(zkStateReader.getZkClient().getData(
           "/overseer_elect/leader", null, null, true));
@@ -519,6 +521,7 @@ public class OverseerCollectionProcessor
         return LeaderStatus.YES;
       }
     } catch (KeeperException e) {
+      success = false;
       if (e.code() == KeeperException.Code.CONNECTIONLOSS) {
         log.error("", e);
         return LeaderStatus.DONT_KNOW;
@@ -528,7 +531,15 @@ public class OverseerCollectionProcessor
         log.warn("", e);
       }
     } catch (InterruptedException e) {
+      success = false;
       Thread.currentThread().interrupt();
+    } finally {
+      timerContext.stop();
+      if (success)  {
+        stats.success("collection_am_i_leader");
+      } else  {
+        stats.error("collection_am_i_leader");
+      }
     }
     log.info("According to ZK I (id=" + myId + ") am no longer a leader.");
     return LeaderStatus.NO;

Modified: lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/cloud/OverseerStatusTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/cloud/OverseerStatusTest.java?rev=1605822&r1=1605821&r2=1605822&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/cloud/OverseerStatusTest.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/cloud/OverseerStatusTest.java Thu Jun 26 15:33:37 2014
@@ -100,6 +100,27 @@ public class OverseerStatusTest extends 
     assertEquals("No stats for split in OverseerCollectionProcessor", 1, split.get("errors"));
     assertNotNull(split.get("recent_failures"));
 
+    SimpleOrderedMap<Object> amIleader = (SimpleOrderedMap<Object>) collection_operations.get("am_i_leader");
+    assertNotNull("OverseerCollectionProcessor amILeader stats should not be null", amIleader);
+    assertNotNull(amIleader.get("requests"));
+    assertTrue(Integer.parseInt(amIleader.get("requests").toString()) > 0);
+    assertNotNull(amIleader.get("errors"));
+    assertNotNull(amIleader.get("avgTimePerRequest"));
+
+    amIleader = (SimpleOrderedMap<Object>) overseer_operations.get("am_i_leader");
+    assertNotNull("Overseer amILeader stats should not be null", amIleader);
+    assertNotNull(amIleader.get("requests"));
+    assertTrue(Integer.parseInt(amIleader.get("requests").toString()) > 0);
+    assertNotNull(amIleader.get("errors"));
+    assertNotNull(amIleader.get("avgTimePerRequest"));
+
+    SimpleOrderedMap<Object> updateState = (SimpleOrderedMap<Object>) overseer_operations.get("update_state");
+    assertNotNull("Overseer update_state stats should not be null", updateState);
+    assertNotNull(updateState.get("requests"));
+    assertTrue(Integer.parseInt(updateState.get("requests").toString()) > 0);
+    assertNotNull(updateState.get("errors"));
+    assertNotNull(updateState.get("avgTimePerRequest"));
+
     waitForThingsToLevelOut(15);
   }
 }