You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by no...@apache.org on 2017/10/12 13:49:31 UTC
[1/2] lucene-solr:branch_7x: SOLR-11451: added logging to track the
failures
Repository: lucene-solr
Updated Branches:
refs/heads/branch_7x dbf5514fd -> 3f3e49d5b
SOLR-11451: added logging to track the failures
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/c969634b
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/c969634b
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/c969634b
Branch: refs/heads/branch_7x
Commit: c969634b6bd9fc8d73d95ff1a1e9169a26efa38c
Parents: dbf5514
Author: Noble Paul <no...@apache.org>
Authored: Wed Oct 11 00:42:55 2017 +1030
Committer: Noble Paul <no...@apache.org>
Committed: Fri Oct 13 00:14:44 2017 +1030
----------------------------------------------------------------------
.../solr/cloud/autoscaling/ComputePlanAction.java | 1 +
.../cloud/autoscaling/ComputePlanActionTest.java | 18 +++++++++++++++---
.../client/solrj/impl/SolrClientDataProvider.java | 6 ++++++
3 files changed, 22 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c969634b/solr/core/src/java/org/apache/solr/cloud/autoscaling/ComputePlanAction.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/cloud/autoscaling/ComputePlanAction.java b/solr/core/src/java/org/apache/solr/cloud/autoscaling/ComputePlanAction.java
index 5d5e3eb..dd710a4 100644
--- a/solr/core/src/java/org/apache/solr/cloud/autoscaling/ComputePlanAction.java
+++ b/solr/core/src/java/org/apache/solr/cloud/autoscaling/ComputePlanAction.java
@@ -63,6 +63,7 @@ public class ComputePlanAction extends TriggerActionBase {
}
Policy policy = autoScalingConf.getPolicy();
SolrClientDataProvider dataProvider = new SolrClientDataProvider(cloudSolrClient);
+ dataProvider.config = autoScalingConf;
if (log.isDebugEnabled()) {
log.debug("Cluster data provider: {}", dataProvider.toMap(new HashMap<>()));
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c969634b/solr/core/src/test/org/apache/solr/cloud/autoscaling/ComputePlanActionTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/autoscaling/ComputePlanActionTest.java b/solr/core/src/test/org/apache/solr/cloud/autoscaling/ComputePlanActionTest.java
index 9f1e5de..ae69d00 100644
--- a/solr/core/src/test/org/apache/solr/cloud/autoscaling/ComputePlanActionTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/autoscaling/ComputePlanActionTest.java
@@ -30,6 +30,7 @@ import org.apache.solr.client.solrj.SolrRequest;
import org.apache.solr.client.solrj.cloud.autoscaling.TriggerEventType;
import org.apache.solr.client.solrj.embedded.JettySolrRunner;
import org.apache.solr.client.solrj.impl.CloudSolrClient;
+import org.apache.solr.client.solrj.impl.SolrClientDataProvider;
import org.apache.solr.client.solrj.request.CollectionAdminRequest;
import org.apache.solr.cloud.SolrCloudTestCase;
import org.apache.solr.common.cloud.ClusterState;
@@ -39,6 +40,7 @@ import org.apache.solr.common.cloud.ZkStateReader;
import org.apache.solr.common.params.CollectionParams;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.common.util.NamedList;
+import org.apache.solr.common.util.Utils;
import org.apache.solr.util.LogLevel;
import org.junit.Before;
import org.junit.BeforeClass;
@@ -174,6 +176,7 @@ public class ComputePlanActionTest extends SolrCloudTestCase {
// 1 replica per node and none on the overseer
JettySolrRunner node2 = cluster.startJettySolrRunner();
cluster.waitForAllNodes(30);
+ assertTrue(node2.getNodeName() + "is not live yet", cluster.getSolrClient().getZkStateReader().getClusterState().liveNodesContain(node2.getNodeName()) );
// stop the original node
for (int i = 0; i < cluster.getJettySolrRunners().size(); i++) {
@@ -190,7 +193,7 @@ public class ComputePlanActionTest extends SolrCloudTestCase {
Map context = actionContextPropsRef.get();
assertNotNull(context);
List<SolrRequest> operations = (List<SolrRequest>) context.get("operations");
- assertNotNull("The operations computed by ComputePlanAction should not be null", operations);
+ assertNotNull("The operations computed by ComputePlanAction should not be null , "+ getDataProviderState(), operations);
assertEquals("ComputePlanAction should have computed exactly 1 operation", 1, operations.size());
SolrRequest solrRequest = operations.get(0);
SolrParams params = solrRequest.getParams();
@@ -207,6 +210,15 @@ public class ComputePlanActionTest extends SolrCloudTestCase {
}
}
}
+ static String getDataProviderState() {
+ String result = "SolrClientDataProvider.DEBUG";
+ if(SolrClientDataProvider.INST != null) {
+ result+= Utils.toJSONString(SolrClientDataProvider.INST);
+ if(SolrClientDataProvider.INST.config != null) result+= Utils.toJSONString(SolrClientDataProvider.INST.config);
+ }
+ return result;
+
+ }
public void testNodeWithMultipleReplicasLost() throws Exception {
// start 3 more nodes
@@ -268,7 +280,7 @@ public class ComputePlanActionTest extends SolrCloudTestCase {
Map context = actionContextPropsRef.get();
assertNotNull(context);
List<SolrRequest> operations = (List<SolrRequest>) context.get("operations");
- assertNotNull("The operations computed by ComputePlanAction should not be null", operations);
+ assertNotNull("The operations computed by ComputePlanAction should not be null "+getDataProviderState(), operations);
operations.forEach(solrRequest -> log.info(solrRequest.getParams().toString()));
assertEquals("ComputePlanAction should have computed exactly 2 operation", 2, operations.size());
@@ -334,7 +346,7 @@ public class ComputePlanActionTest extends SolrCloudTestCase {
Map context = actionContextPropsRef.get();
assertNotNull(context);
List<SolrRequest> operations = (List<SolrRequest>) context.get("operations");
- assertNotNull("The operations computed by ComputePlanAction should not be null", operations);
+ assertNotNull("The operations computed by ComputePlanAction should not be null" + getDataProviderState(), operations);
assertEquals("ComputePlanAction should have computed exactly 1 operation", 1, operations.size());
SolrRequest request = operations.get(0);
SolrParams params = request.getParams();
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c969634b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/SolrClientDataProvider.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/SolrClientDataProvider.java b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/SolrClientDataProvider.java
index d63f5f0..6558a48 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/SolrClientDataProvider.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/SolrClientDataProvider.java
@@ -32,6 +32,7 @@ import java.util.Set;
import org.apache.solr.client.solrj.SolrRequest;
import org.apache.solr.client.solrj.SolrServerException;
+import org.apache.solr.client.solrj.cloud.autoscaling.AutoScalingConfig;
import org.apache.solr.client.solrj.cloud.autoscaling.ClusterDataProvider;
import org.apache.solr.client.solrj.cloud.autoscaling.ReplicaInfo;
import org.apache.solr.client.solrj.request.GenericSolrRequest;
@@ -61,6 +62,10 @@ import static org.apache.solr.client.solrj.cloud.autoscaling.Clause.METRICS_PREF
*/
public class SolrClientDataProvider implements ClusterDataProvider, MapWriter {
private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
+ //only for debugging
+ public static SolrClientDataProvider INST;
+ //only for debugging, do not use it for anything else
+ public AutoScalingConfig config;
private final CloudSolrClient solrClient;
private final Map<String, Map<String, Map<String, List<ReplicaInfo>>>> data = new HashMap<>();
@@ -84,6 +89,7 @@ public class SolrClientDataProvider implements ClusterDataProvider, MapWriter {
replicas.add(new ReplicaInfo(replica.getName(), collName, shard, replica.getType(), new HashMap<>()));
});
});
+ if(log.isDebugEnabled()) INST = this;
}
@Override
[2/2] lucene-solr:branch_7x: SOLR-11451:
ComputePlanActionTest.testNodeLost() failure
Posted by no...@apache.org.
SOLR-11451: ComputePlanActionTest.testNodeLost() failure
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/3f3e49d5
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/3f3e49d5
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/3f3e49d5
Branch: refs/heads/branch_7x
Commit: 3f3e49d5bc9ab8603386d8544640661bb0a5b2ab
Parents: c969634
Author: Noble Paul <no...@apache.org>
Authored: Fri Oct 13 00:13:42 2017 +1030
Committer: Noble Paul <no...@apache.org>
Committed: Fri Oct 13 00:15:02 2017 +1030
----------------------------------------------------------------------
.../cloud/autoscaling/ComputePlanAction.java | 4 +--
.../solr/cloud/autoscaling/TriggerEvent.java | 8 ++----
.../autoscaling/ComputePlanActionTest.java | 26 ++++++++++++++------
3 files changed, 23 insertions(+), 15 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/3f3e49d5/solr/core/src/java/org/apache/solr/cloud/autoscaling/ComputePlanAction.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/cloud/autoscaling/ComputePlanAction.java b/solr/core/src/java/org/apache/solr/cloud/autoscaling/ComputePlanAction.java
index dd710a4..094556b 100644
--- a/solr/core/src/java/org/apache/solr/cloud/autoscaling/ComputePlanAction.java
+++ b/solr/core/src/java/org/apache/solr/cloud/autoscaling/ComputePlanAction.java
@@ -101,12 +101,12 @@ public class ComputePlanAction extends TriggerActionBase {
case NODEADDED:
suggester = session.getSuggester(CollectionParams.CollectionAction.MOVEREPLICA)
.hint(Policy.Suggester.Hint.TARGET_NODE, event.getProperty(TriggerEvent.NODE_NAMES));
- log.debug("Created suggester with targetNode: {}", event.getProperty(TriggerEvent.NODE_NAMES));
+ log.debug("NODEADDED Created suggester with targetNode: {}", event.getProperty(TriggerEvent.NODE_NAMES));
break;
case NODELOST:
suggester = session.getSuggester(CollectionParams.CollectionAction.MOVEREPLICA)
.hint(Policy.Suggester.Hint.SRC_NODE, event.getProperty(TriggerEvent.NODE_NAMES));
- log.debug("Created suggester with srcNode: {}", event.getProperty(TriggerEvent.NODE_NAMES));
+ log.debug("NODELOST Created suggester with srcNode: {}", event.getProperty(TriggerEvent.NODE_NAMES));
break;
default:
throw new UnsupportedOperationException("No support for events other than nodeAdded and nodeLost, received: " + event.getEventType());
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/3f3e49d5/solr/core/src/java/org/apache/solr/cloud/autoscaling/TriggerEvent.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/cloud/autoscaling/TriggerEvent.java b/solr/core/src/java/org/apache/solr/cloud/autoscaling/TriggerEvent.java
index 33eeebe..3d436af 100644
--- a/solr/core/src/java/org/apache/solr/cloud/autoscaling/TriggerEvent.java
+++ b/solr/core/src/java/org/apache/solr/cloud/autoscaling/TriggerEvent.java
@@ -22,6 +22,7 @@ import java.util.Map;
import org.apache.solr.client.solrj.cloud.autoscaling.TriggerEventType;
import org.apache.solr.common.MapWriter;
+import org.apache.solr.common.util.Utils;
import org.apache.solr.util.IdUtils;
/**
@@ -145,11 +146,6 @@ public class TriggerEvent implements MapWriter {
@Override
public String toString() {
- return this.getClass().getSimpleName() + "{" +
- "id='" + id + '\'' +
- ", source='" + source + '\'' +
- ", eventTime=" + eventTime +
- ", properties=" + properties +
- '}';
+ return Utils.toJSONString(this);
}
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/3f3e49d5/solr/core/src/test/org/apache/solr/cloud/autoscaling/ComputePlanActionTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/autoscaling/ComputePlanActionTest.java b/solr/core/src/test/org/apache/solr/cloud/autoscaling/ComputePlanActionTest.java
index ae69d00..c5aa775 100644
--- a/solr/core/src/test/org/apache/solr/cloud/autoscaling/ComputePlanActionTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/autoscaling/ComputePlanActionTest.java
@@ -19,6 +19,7 @@ package org.apache.solr.cloud.autoscaling;
import java.io.IOException;
import java.lang.invoke.MethodHandles;
+import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CountDownLatch;
@@ -55,7 +56,7 @@ import static org.apache.solr.common.params.CollectionParams.CollectionAction.MO
/**
* Test for {@link ComputePlanAction}
*/
-@LogLevel("org.apache.solr.cloud.autoscaling=DEBUG;org.apache.solr.cloud.Overseer=DEBUG;org.apache.solr.cloud.overseer=DEBUG;")
+@LogLevel("org.apache.solr.cloud.autoscaling=DEBUG;org.apache.solr.cloud.Overseer=DEBUG;org.apache.solr.cloud.overseer=DEBUG;org.apache.solr.client.solrj.impl.SolrClientDataProvider=DEBUG;")
public class ComputePlanActionTest extends SolrCloudTestCase {
private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
@@ -143,13 +144,14 @@ public class ComputePlanActionTest extends SolrCloudTestCase {
// let's start a node so that we have at least two
JettySolrRunner runner = cluster.startJettySolrRunner();
String node = runner.getNodeName();
+ AssertingTriggerAction.expectedNode = node;
CloudSolrClient solrClient = cluster.getSolrClient();
String setTriggerCommand = "{" +
"'set-trigger' : {" +
"'name' : 'node_lost_trigger'," +
"'event' : 'nodeLost'," +
- "'waitFor' : '1s'," +
+ "'waitFor' : '7s'," +
"'enabled' : true," +
"'actions' : [{'name':'compute_plan', 'class' : 'solr.ComputePlanAction'}," +
"{'name':'test','class':'" + ComputePlanActionTest.AssertingTriggerAction.class.getName() + "'}]" +
@@ -186,14 +188,15 @@ public class ComputePlanActionTest extends SolrCloudTestCase {
break;
}
}
+ log.info("$$$$$$$$$$$$$$Stopped_node : {}", node);
cluster.waitForAllNodes(30);
- assertTrue("Trigger was not fired even after 5 seconds", triggerFiredLatch.await(5, TimeUnit.SECONDS));
+ assertTrue("Trigger was not fired even after 10 seconds", triggerFiredLatch.await(10, TimeUnit.SECONDS));
assertTrue(fired.get());
Map context = actionContextPropsRef.get();
assertNotNull(context);
List<SolrRequest> operations = (List<SolrRequest>) context.get("operations");
- assertNotNull("The operations computed by ComputePlanAction should not be null , "+ getDataProviderState(), operations);
+ assertNotNull("The operations computed by ComputePlanAction should not be null , " + getDataProviderState() + eventRef.get(), operations);
assertEquals("ComputePlanAction should have computed exactly 1 operation", 1, operations.size());
SolrRequest solrRequest = operations.get(0);
SolrParams params = solrRequest.getParams();
@@ -214,13 +217,16 @@ public class ComputePlanActionTest extends SolrCloudTestCase {
String result = "SolrClientDataProvider.DEBUG";
if(SolrClientDataProvider.INST != null) {
result+= Utils.toJSONString(SolrClientDataProvider.INST);
- if(SolrClientDataProvider.INST.config != null) result+= Utils.toJSONString(SolrClientDataProvider.INST.config);
+ if (SolrClientDataProvider.INST.config != null)
+ result += "autoscalingconf: " + Utils.toJSONString(SolrClientDataProvider.INST.config);
}
return result;
}
public void testNodeWithMultipleReplicasLost() throws Exception {
+ AssertingTriggerAction.expectedNode = null;
+
// start 3 more nodes
cluster.startJettySolrRunner();
cluster.startJettySolrRunner();
@@ -280,7 +286,7 @@ public class ComputePlanActionTest extends SolrCloudTestCase {
Map context = actionContextPropsRef.get();
assertNotNull(context);
List<SolrRequest> operations = (List<SolrRequest>) context.get("operations");
- assertNotNull("The operations computed by ComputePlanAction should not be null "+getDataProviderState(), operations);
+ assertNotNull("The operations computed by ComputePlanAction should not be null " + getDataProviderState() + actionContextPropsRef.get(), operations);
operations.forEach(solrRequest -> log.info(solrRequest.getParams().toString()));
assertEquals("ComputePlanAction should have computed exactly 2 operation", 2, operations.size());
@@ -294,6 +300,7 @@ public class ComputePlanActionTest extends SolrCloudTestCase {
@Test
public void testNodeAdded() throws Exception {
+ AssertingTriggerAction.expectedNode = null;
CloudSolrClient solrClient = cluster.getSolrClient();
String setTriggerCommand = "{" +
"'set-trigger' : {" +
@@ -346,7 +353,7 @@ public class ComputePlanActionTest extends SolrCloudTestCase {
Map context = actionContextPropsRef.get();
assertNotNull(context);
List<SolrRequest> operations = (List<SolrRequest>) context.get("operations");
- assertNotNull("The operations computed by ComputePlanAction should not be null" + getDataProviderState(), operations);
+ assertNotNull("The operations computed by ComputePlanAction should not be null" + getDataProviderState() + context, operations);
assertEquals("ComputePlanAction should have computed exactly 1 operation", 1, operations.size());
SolrRequest request = operations.get(0);
SolrParams params = request.getParams();
@@ -356,6 +363,7 @@ public class ComputePlanActionTest extends SolrCloudTestCase {
}
public static class AssertingTriggerAction implements TriggerAction {
+ static String expectedNode;
@Override
public String getName() {
@@ -364,6 +372,10 @@ public class ComputePlanActionTest extends SolrCloudTestCase {
@Override
public void process(TriggerEvent event, ActionContext context) {
+ if (expectedNode != null) {
+ Collection nodes = (Collection) event.getProperty(TriggerEvent.NODE_NAMES);
+ if (nodes == null || !nodes.contains(expectedNode)) return;//this is not the event we are looking for
+ }
if (fired.compareAndSet(false, true)) {
eventRef.set(event);
actionContextPropsRef.set(context.getProperties());