You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by da...@apache.org on 2017/07/31 16:04:30 UTC

lucene-solr:feature/autoscaling: SOLR-10397: Fix AutoScalingHandlerTest failure

Repository: lucene-solr
Updated Branches:
  refs/heads/feature/autoscaling 77a5dfe38 -> 4e7af7246


SOLR-10397: Fix AutoScalingHandlerTest 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/4e7af724
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/4e7af724
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/4e7af724

Branch: refs/heads/feature/autoscaling
Commit: 4e7af724648157cce6d6cd13801dd211496bc7fb
Parents: 77a5dfe
Author: Cao Manh Dat <da...@apache.org>
Authored: Mon Jul 31 23:04:20 2017 +0700
Committer: Cao Manh Dat <da...@apache.org>
Committed: Mon Jul 31 23:04:20 2017 +0700

----------------------------------------------------------------------
 .../autoscaling/AutoScalingHandlerTest.java     | 118 +++++++------------
 1 file changed, 44 insertions(+), 74 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/4e7af724/solr/core/src/test/org/apache/solr/cloud/autoscaling/AutoScalingHandlerTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/autoscaling/AutoScalingHandlerTest.java b/solr/core/src/test/org/apache/solr/cloud/autoscaling/AutoScalingHandlerTest.java
index fd9ca75..0d97909 100644
--- a/solr/core/src/test/org/apache/solr/cloud/autoscaling/AutoScalingHandlerTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/autoscaling/AutoScalingHandlerTest.java
@@ -28,7 +28,6 @@ import java.util.concurrent.TimeUnit;
 import org.apache.solr.client.solrj.SolrClient;
 import org.apache.solr.client.solrj.SolrRequest;
 import org.apache.solr.client.solrj.SolrResponse;
-import org.apache.solr.client.solrj.SolrServerException;
 import org.apache.solr.client.solrj.cloud.autoscaling.Policy;
 import org.apache.solr.client.solrj.impl.CloudSolrClient;
 import org.apache.solr.client.solrj.impl.HttpSolrClient;
@@ -37,13 +36,12 @@ import org.apache.solr.client.solrj.request.V2Request;
 import org.apache.solr.client.solrj.response.CollectionAdminResponse;
 import org.apache.solr.cloud.SolrCloudTestCase;
 import org.apache.solr.common.cloud.ZkNodeProps;
-import org.apache.solr.common.params.CollectionParams;
-import org.apache.solr.common.params.ModifiableSolrParams;
 import org.apache.solr.common.params.SolrParams;
 import org.apache.solr.common.util.ContentStream;
 import org.apache.solr.common.util.ContentStreamBase;
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.common.util.Utils;
+import org.apache.solr.util.TimeOut;
 import org.apache.zookeeper.data.Stat;
 import org.junit.Before;
 import org.junit.BeforeClass;
@@ -62,6 +60,31 @@ public class AutoScalingHandlerTest extends SolrCloudTestCase {
     configureCluster(2)
         .addConfig(CONFIGSET_NAME, configset("cloud-minimal"))
         .configure();
+    testAutoAddReplicas();
+  }
+
+  private static void testAutoAddReplicas() throws Exception {
+    TimeOut timeOut = new TimeOut(30, TimeUnit.SECONDS);
+    while (!timeOut.hasTimedOut()) {
+      byte[] data = zkClient().getData(SOLR_AUTOSCALING_CONF_PATH, null, null, true);
+      ZkNodeProps loaded = ZkNodeProps.load(data);
+      Map triggers = (Map) loaded.get("triggers");
+      if (triggers != null && triggers.containsKey(".auto_add_replicas")) {
+        Map<String, Object> autoAddReplicasTrigger = (Map<String, Object>) triggers.get(".auto_add_replicas");
+        assertNotNull(autoAddReplicasTrigger);
+        List<Map<String, Object>> actions = (List<Map<String, Object>>) autoAddReplicasTrigger.get("actions");
+        assertNotNull(actions);
+        assertEquals(2, actions.size());
+        assertEquals("auto_add_replicas_plan", actions.get(0).get("name").toString());
+        assertEquals("solr.AutoAddReplicasPlanAction", actions.get(0).get("class").toString());
+        break;
+      } else {
+        Thread.sleep(300);
+      }
+    }
+    if (timeOut.hasTimedOut()) {
+      fail("Timeout waiting for .auto_add_replicas being created");
+    }
   }
 
   @Before
@@ -71,67 +94,6 @@ public class AutoScalingHandlerTest extends SolrCloudTestCase {
   }
 
   @Test
-  public void testAutoAddReplicas() throws Exception {
-    String collection = "test-collection";
-    CollectionAdminRequest
-        .createCollection(collection, CONFIGSET_NAME,1, 1)
-        .setAutoAddReplicas(true)
-        .process(cluster.getSolrClient());
-    byte[] data = zkClient().getData(SOLR_AUTOSCALING_CONF_PATH, null, null, true);
-    ZkNodeProps loaded = ZkNodeProps.load(data);
-    Map triggers = (Map) loaded.get("triggers");
-    assertNotNull(triggers);
-    assertEquals("auto add replicas trigger were not created", triggers.size(), 1);
-    Map<String, Object> autoAddReplicasTrigger = (Map<String, Object>) triggers.get(".auto_add_replicas");
-    assertNotNull(autoAddReplicasTrigger);
-    List<Map<String, Object>> actions = (List<Map<String, Object>>) autoAddReplicasTrigger.get("actions");
-    assertNotNull(actions);
-    assertEquals(2, actions.size());
-    assertEquals("auto_add_replicas_plan", actions.get(0).get("name").toString());
-    assertEquals("solr.AutoAddReplicasPlanAction", actions.get(0).get("class").toString());
-
-    // lets turn of autoAddReplicas, currently it doesn't change anything in autoscaling config
-    // because AutoAddReplicasPlanAction will just ignore any collections with autoAddReplicas turned off
-    new CollectionAdminRequest.AsyncCollectionAdminRequest(CollectionParams.CollectionAction.MODIFYCOLLECTION) {
-      @Override
-      public SolrParams getParams() {
-        ModifiableSolrParams params = (ModifiableSolrParams) super.getParams();
-        params.set("collection", collection);
-        params.set("autoAddReplicas", false);
-        return params;
-      }
-    }.process(cluster.getSolrClient());
-
-    // lets delete all autoscaling config
-    zkClient().setData(SOLR_AUTOSCALING_CONF_PATH, Utils.toJSON(new ZkNodeProps()), true);
-
-    // now enable autoAddReplicas and assert that the trigger was re-created correctly
-    new CollectionAdminRequest.AsyncCollectionAdminRequest(CollectionParams.CollectionAction.MODIFYCOLLECTION) {
-      @Override
-      public SolrParams getParams() {
-        ModifiableSolrParams params = (ModifiableSolrParams) super.getParams();
-        params.set("collection", collection);
-        params.set("autoAddReplicas", true);
-        return params;
-      }
-    }.process(cluster.getSolrClient());
-    data = zkClient().getData(SOLR_AUTOSCALING_CONF_PATH, null, null, true);
-    loaded = ZkNodeProps.load(data);
-    triggers = (Map) loaded.get("triggers");
-    assertNotNull(triggers);
-    assertEquals("auto add replicas trigger did not created", triggers.size(), 1);
-    autoAddReplicasTrigger = (Map<String, Object>) triggers.get(".auto_add_replicas");
-    assertNotNull(autoAddReplicasTrigger);
-    actions = (List<Map<String, Object>>) autoAddReplicasTrigger.get("actions");
-    assertNotNull(actions);
-    assertEquals(2, actions.size());
-    assertEquals("auto_add_replicas_plan", actions.get(0).get("name").toString());
-    assertEquals("solr.AutoAddReplicasPlanAction", actions.get(0).get("class").toString());
-
-    CollectionAdminRequest.deleteCollection(collection).process(cluster.getSolrClient());
-  }
-
-  @Test
   public void testSuspendTrigger() throws Exception {
     CloudSolrClient solrClient = cluster.getSolrClient();
     String suspendEachCommand = "{\n" +
@@ -191,7 +153,7 @@ public class AutoScalingHandlerTest extends SolrCloudTestCase {
     ZkNodeProps loaded = ZkNodeProps.load(data);
     Map<String, Object> triggers = (Map<String, Object>) loaded.get("triggers");
     assertNotNull(triggers);
-    assertEquals(2, triggers.size());
+    assertEquals(2, countNotImplicitTriggers(triggers));
     assertTrue(triggers.containsKey("node_lost_trigger"));
     assertTrue(triggers.containsKey("node_added_trigger"));
     Map<String, Object> nodeLostTrigger = (Map<String, Object>) triggers.get("node_lost_trigger");
@@ -216,7 +178,7 @@ public class AutoScalingHandlerTest extends SolrCloudTestCase {
     loaded = ZkNodeProps.load(data);
     triggers = (Map<String, Object>) loaded.get("triggers");
     assertNotNull(triggers);
-    assertEquals(2, triggers.size());
+    assertEquals(2, countNotImplicitTriggers(triggers));
     nodeLostTrigger = (Map<String, Object>) triggers.get("node_lost_trigger");
     assertEquals(4, nodeLostTrigger.size());
     assertEquals("false", nodeLostTrigger.get("enabled").toString());
@@ -239,7 +201,7 @@ public class AutoScalingHandlerTest extends SolrCloudTestCase {
     loaded = ZkNodeProps.load(data);
     triggers = (Map<String, Object>) loaded.get("triggers");
     assertNotNull(triggers);
-    assertEquals(2, triggers.size());
+    assertEquals(2, countNotImplicitTriggers(triggers));
     nodeLostTrigger = (Map<String, Object>) triggers.get("node_lost_trigger");
     assertEquals(4, nodeLostTrigger.size());
     assertEquals("false", nodeLostTrigger.get("enabled").toString());
@@ -262,7 +224,7 @@ public class AutoScalingHandlerTest extends SolrCloudTestCase {
     loaded = ZkNodeProps.load(data);
     triggers = (Map<String, Object>) loaded.get("triggers");
     assertNotNull(triggers);
-    assertEquals(2, triggers.size());
+    assertEquals(2, countNotImplicitTriggers(triggers));
     nodeLostTrigger = (Map<String, Object>) triggers.get("node_lost_trigger");
     assertEquals(4, nodeLostTrigger.size());
     assertEquals("true", nodeLostTrigger.get("enabled").toString());
@@ -286,7 +248,7 @@ public class AutoScalingHandlerTest extends SolrCloudTestCase {
     loaded = ZkNodeProps.load(data);
     triggers = (Map<String, Object>) loaded.get("triggers");
     assertNotNull(triggers);
-    assertEquals(2, triggers.size());
+    assertEquals(2, countNotImplicitTriggers(triggers));
     nodeLostTrigger = (Map<String, Object>) triggers.get("node_lost_trigger");
     assertEquals(5, nodeLostTrigger.size());
     assertEquals("false", nodeLostTrigger.get("enabled").toString());
@@ -316,7 +278,7 @@ public class AutoScalingHandlerTest extends SolrCloudTestCase {
     ZkNodeProps loaded = ZkNodeProps.load(data);
     Map<String, Object> triggers = (Map<String, Object>) loaded.get("triggers");
     assertNotNull(triggers);
-    assertEquals(1, triggers.size());
+    assertEquals(1, countNotImplicitTriggers(triggers));
     assertTrue(triggers.containsKey("node_lost_trigger"));
     Map<String, Object> nodeLostTrigger = (Map<String, Object>) triggers.get("node_lost_trigger");
     assertEquals(4, nodeLostTrigger.size());
@@ -339,7 +301,7 @@ public class AutoScalingHandlerTest extends SolrCloudTestCase {
     loaded = ZkNodeProps.load(data);
     triggers = (Map<String, Object>) loaded.get("triggers");
     assertNotNull(triggers);
-    assertEquals(1, triggers.size());
+    assertEquals(1, countNotImplicitTriggers(triggers));
     assertTrue(triggers.containsKey("node_lost_trigger"));
     nodeLostTrigger = (Map<String, Object>) triggers.get("node_lost_trigger");
     assertEquals(4, nodeLostTrigger.size());
@@ -422,7 +384,7 @@ public class AutoScalingHandlerTest extends SolrCloudTestCase {
     loaded = ZkNodeProps.load(data);
     triggers = (Map<String, Object>) loaded.get("triggers");
     assertNotNull(triggers);
-    assertEquals(0, triggers.size());
+    assertEquals(0, countNotImplicitTriggers(triggers));
 
     setListenerCommand = "{" +
         "'set-listener' : {" +
@@ -617,7 +579,7 @@ public class AutoScalingHandlerTest extends SolrCloudTestCase {
 
     Map triggers = (Map) response.get("triggers");
     assertNotNull(triggers);
-    assertEquals(2, triggers.size());
+    assertEquals(1, countNotImplicitTriggers(triggers));
     assertTrue(triggers.containsKey("node_added_trigger1"));
     Map node_added_trigger1 = (Map) triggers.get("node_added_trigger1");
     assertEquals(4, node_added_trigger1.size());
@@ -756,7 +718,7 @@ public class AutoScalingHandlerTest extends SolrCloudTestCase {
 
     Map triggers = (Map) response.get("triggers");
     assertNotNull(triggers);
-    assertEquals(1, triggers.size());
+    assertEquals(1, countNotImplicitTriggers(triggers));
     assertTrue(triggers.containsKey("node_added_trigger1"));
     Map node_added_trigger1 = (Map) triggers.get("node_added_trigger1");
     assertEquals(4, node_added_trigger1.size());
@@ -766,6 +728,14 @@ public class AutoScalingHandlerTest extends SolrCloudTestCase {
 
   }
 
+  private int countNotImplicitTriggers(Map triggers) {
+    if (triggers == null) return 0;
+    int count = 0;
+    for (Object trigger : triggers.keySet()) {
+      if (!trigger.toString().startsWith(".")) count++;
+    }
+    return count;
+  }
 
   public static SolrRequest createAutoScalingRequest(SolrRequest.METHOD m, String message) {
     return createAutoScalingRequest(m, null, message);