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