You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ab...@apache.org on 2017/05/24 14:56:09 UTC

[5/7] lucene-solr:jira/solr-10515: Merge branch 'feature/autoscaling' into jira/solr-10515

Merge branch 'feature/autoscaling' into jira/solr-10515


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/a35852e7
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/a35852e7
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/a35852e7

Branch: refs/heads/jira/solr-10515
Commit: a35852e726392fbbe971b826780b3c9e4da68828
Parents: 15d637f fe21766
Author: Andrzej Bialecki <ab...@apache.org>
Authored: Wed May 24 11:12:02 2017 +0200
Committer: Andrzej Bialecki <ab...@apache.org>
Committed: Wed May 24 11:12:02 2017 +0200

----------------------------------------------------------------------
 solr/CHANGES.txt                                |  2 +
 .../cloud/autoscaling/NodeAddedTrigger.java     |  1 -
 .../solr/cloud/autoscaling/NodeLostTrigger.java |  1 -
 .../cloud/autoscaling/ScheduledTriggers.java    |  4 ++
 .../autoscaling/TriggerIntegrationTest.java     |  6 +--
 .../apache/solr/cloud/autoscaling/Policy.java   | 57 ++++++++++++++++----
 .../solr/cloud/autoscaling/PolicyHelper.java    |  8 +--
 7 files changed, 56 insertions(+), 23 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/a35852e7/solr/core/src/java/org/apache/solr/cloud/autoscaling/NodeAddedTrigger.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/a35852e7/solr/core/src/java/org/apache/solr/cloud/autoscaling/NodeLostTrigger.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/a35852e7/solr/core/src/java/org/apache/solr/cloud/autoscaling/ScheduledTriggers.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/a35852e7/solr/core/src/test/org/apache/solr/cloud/autoscaling/TriggerIntegrationTest.java
----------------------------------------------------------------------
diff --cc solr/core/src/test/org/apache/solr/cloud/autoscaling/TriggerIntegrationTest.java
index c43fabf,db15f6c..23c1391
--- a/solr/core/src/test/org/apache/solr/cloud/autoscaling/TriggerIntegrationTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/autoscaling/TriggerIntegrationTest.java
@@@ -572,64 -506,8 +571,65 @@@ public class TriggerIntegrationTest ext
  
      @Override
      public void init(Map<String, String> args) {
- 
+       log.info("TestTriggerAction init");
+       actionCreated.countDown();
      }
    }
 +
 +  @Test
 +  public void testEventQueue() throws Exception {
 +    CloudSolrClient solrClient = cluster.getSolrClient();
 +    String setTriggerCommand = "{" +
 +        "'set-trigger' : {" +
 +        "'name' : 'node_added_trigger1'," +
 +        "'event' : 'nodeAdded'," +
 +        "'waitFor' : '" + waitForSeconds + "s'," +
 +        "'enabled' : true," +
 +        "'actions' : [{'name':'test','class':'" + TestEventQueueAction.class.getName() + "'}]" +
 +        "}}";
 +    NamedList<Object> overSeerStatus = cluster.getSolrClient().request(CollectionAdminRequest.getOverseerStatus());
 +    String overseerLeader = (String) overSeerStatus.get("leader");
 +    int overseerLeaderIndex = 0;
 +    for (int i = 0; i < cluster.getJettySolrRunners().size(); i++) {
 +      JettySolrRunner jetty = cluster.getJettySolrRunner(i);
 +      if (jetty.getNodeName().equals(overseerLeader)) {
 +        overseerLeaderIndex = i;
 +        break;
 +      }
 +    }
 +    SolrRequest req = new AutoScalingHandlerTest.AutoScalingRequest(SolrRequest.METHOD.POST, path, setTriggerCommand);
 +    NamedList<Object> response = solrClient.request(req);
 +    assertEquals(response.get("result").toString(), "success");
 +
 +    if (!actionCreated.await(3, TimeUnit.SECONDS))  {
 +      fail("The TriggerAction should have been created by now");
 +    }
 +
 +    // add node to generate the event
 +    JettySolrRunner newNode = cluster.startJettySolrRunner();
 +    // we are the first party so we expect index 1
 +    int await = actionStarted.await(60, TimeUnit.SECONDS);
 +    assertEquals("action started too early", 1, await);
 +    // event should be there
 +    NodeAddedTrigger.NodeAddedEvent nodeAddedEvent = (NodeAddedTrigger.NodeAddedEvent) eventRef.get();
 +    assertNotNull(nodeAddedEvent);
 +    // but action did not complete yet so the event is still enqueued
 +    assertFalse(triggerFired.get());
 +    actionStarted.reset();
 +    // kill overseer leader
 +    cluster.stopJettySolrRunner(overseerLeaderIndex);
 +    Thread.sleep(5000);
 +    // we are the last party, so we expect index 0
 +    await = actionInterrupted.await(3, TimeUnit.SECONDS);
 +    assertEquals("action wasn't interrupted", 0, await);
 +    // new overseer leader should be elected and run triggers
 +    newNode = cluster.startJettySolrRunner();
 +    // it should fire again but not complete yet
 +    await = actionStarted.await(60, TimeUnit.SECONDS);
 +    TriggerEvent replayedEvent = eventRef.get();
 +    assertTrue(replayedEvent.getProperty(TriggerEventQueue.ENQUEUE_TIME) != null);
 +    assertTrue(replayedEvent.getProperty(TriggerEventQueue.DEQUEUE_TIME) != null);
 +    await = actionCompleted.await(10, TimeUnit.SECONDS);
 +    assertTrue(triggerFired.get());
 +  }
  }