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/07/12 20:08:04 UTC

[2/2] lucene-solr:jira/solr-11000: SOLR-11000 Fix a few bugs.

SOLR-11000 Fix a few bugs.


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

Branch: refs/heads/jira/solr-11000
Commit: d9424762cbf94e0f2971a4b55d1d30fc0c6c6451
Parents: fe2a7e8
Author: Andrzej Bialecki <ab...@apache.org>
Authored: Wed Jul 12 22:05:46 2017 +0200
Committer: Andrzej Bialecki <ab...@apache.org>
Committed: Wed Jul 12 22:07:08 2017 +0200

----------------------------------------------------------------------
 .../solr/cloud/autoscaling/ComputePlanAction.java    |  4 ++--
 .../cloud/autoscaling/OverseerTriggerThread.java     |  7 ++++---
 .../solrj/cloud/autoscaling/AutoScalingConfig.java   | 15 +++++++++++++--
 .../org/apache/solr/common/cloud/ZkStateReader.java  | 13 +++++++++++--
 4 files changed, 30 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/d9424762/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 a02e7d3..473762e 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
@@ -56,11 +56,11 @@ public class ComputePlanAction extends TriggerActionBase {
           .build()) {
         ZkStateReader zkStateReader = cloudSolrClient.getZkStateReader();
         AutoScalingConfig autoScalingConf = zkStateReader.getAutoScalingConfig();
-        Policy policy = autoScalingConf.getPolicy();
-        if (policy.getClusterPolicy().isEmpty() && policy.getPolicies().isEmpty()) {
+        if (autoScalingConf.isEmpty()) {
           log.error("Action: " + getName() + " executed but no policy is configured");
           return;
         }
+        Policy policy = autoScalingConf.getPolicy();
         Policy.Session session = policy.createSession(new SolrClientDataProvider(cloudSolrClient));
         Policy.Suggester suggester = getSuggester(session, event, zkStateReader);
         while (true) {

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/d9424762/solr/core/src/java/org/apache/solr/cloud/autoscaling/OverseerTriggerThread.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/cloud/autoscaling/OverseerTriggerThread.java b/solr/core/src/java/org/apache/solr/cloud/autoscaling/OverseerTriggerThread.java
index 7f6405b..ca9bb2e 100644
--- a/solr/core/src/java/org/apache/solr/cloud/autoscaling/OverseerTriggerThread.java
+++ b/solr/core/src/java/org/apache/solr/cloud/autoscaling/OverseerTriggerThread.java
@@ -262,12 +262,13 @@ public class OverseerTriggerThread implements Runnable, Closeable {
       if (isClosed) {
         return;
       }
-      AutoScalingConfig autoScalingConfig = zkStateReader.getAutoScalingConfig();
-      log.debug("Refreshing {} with znode version {}", ZkStateReader.SOLR_AUTOSCALING_CONF_PATH, autoScalingConfig.getZkVersion());
-      if (znodeVersion >= autoScalingConfig.getZkVersion()) {
+      AutoScalingConfig currentConfig = zkStateReader.getAutoScalingConfig(watcher);
+      log.debug("Refreshing {} with znode version {}", ZkStateReader.SOLR_AUTOSCALING_CONF_PATH, currentConfig.getZkVersion());
+      if (znodeVersion >= currentConfig.getZkVersion()) {
         // protect against reordered watcher fires by ensuring that we only move forward
         return;
       }
+      autoScalingConfig = currentConfig;
       znodeVersion = autoScalingConfig.getZkVersion();
       Map<String, AutoScaling.Trigger> triggerMap = loadTriggers(triggerFactory, autoScalingConfig);
 

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/d9424762/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/AutoScalingConfig.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/AutoScalingConfig.java b/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/AutoScalingConfig.java
index 8fc594d..37f7cc2 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/AutoScalingConfig.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/AutoScalingConfig.java
@@ -44,6 +44,7 @@ public class AutoScalingConfig implements MapWriter {
   private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
 
   private final Map<String, Object> jsonMap;
+  private final boolean empty;
 
   private Policy policy;
   private Map<String, TriggerConfig> triggers;
@@ -288,14 +289,16 @@ public class AutoScalingConfig implements MapWriter {
   public AutoScalingConfig(Map<String, Object> jsonMap) {
     this.jsonMap = Utils.getDeepCopy(jsonMap, 10);
     int version = -1;
-    if (jsonMap.containsKey("zkversion")) {
+    if (jsonMap.containsKey(AutoScalingParams.ZK_VERSION)) {
       try {
-        version = Integer.parseInt(String.valueOf(jsonMap.get("zkversion")));
+        version = Integer.parseInt(String.valueOf(jsonMap.get(AutoScalingParams.ZK_VERSION)));
       } catch (Exception e) {
         // ignore
       }
     }
     zkVersion = version;
+    jsonMap.remove(AutoScalingParams.ZK_VERSION);
+    empty = jsonMap.isEmpty();
   }
 
   private AutoScalingConfig(Policy policy, Map<String, TriggerConfig> triggerConfigs, Map<String,
@@ -305,6 +308,14 @@ public class AutoScalingConfig implements MapWriter {
     this.listeners = listenerConfigs != null ? Collections.unmodifiableMap(listenerConfigs) : null;
     this.jsonMap = null;
     this.zkVersion = zkVersion;
+    this.empty = false;
+  }
+
+  /**
+   * Return true if the source <code>autoscaling.json</code> was empty, false otherwise.
+   */
+  public boolean isEmpty() {
+    return empty;
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/d9424762/solr/solrj/src/java/org/apache/solr/common/cloud/ZkStateReader.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/common/cloud/ZkStateReader.java b/solr/solrj/src/java/org/apache/solr/common/cloud/ZkStateReader.java
index a6eda15..23d624b 100644
--- a/solr/solrj/src/java/org/apache/solr/common/cloud/ZkStateReader.java
+++ b/solr/solrj/src/java/org/apache/solr/common/cloud/ZkStateReader.java
@@ -167,12 +167,21 @@ public class ZkStateReader implements Closeable {
    * this data is retrieved from ZK on each call.
    */
   public AutoScalingConfig getAutoScalingConfig() throws KeeperException, InterruptedException {
+    return getAutoScalingConfig(null);
+  }
+
+  /**
+   * Get current {@link AutoScalingConfig}.
+   * @param watcher optional {@link Watcher} to set on a znode to watch for config changes.
+   * @return current configuration from <code>autoscaling.json</code>. NOTE:
+   * this data is retrieved from ZK on each call.
+   */
+  public AutoScalingConfig getAutoScalingConfig(Watcher watcher) throws KeeperException, InterruptedException {
     Stat stat = new Stat();
-    stat.setVersion(-1);
 
     Map<String, Object> map = new HashMap<>();
     try {
-      byte[] bytes = zkClient.getData(SOLR_AUTOSCALING_CONF_PATH, null, stat, true);
+      byte[] bytes = zkClient.getData(SOLR_AUTOSCALING_CONF_PATH, watcher, stat, true);
       if (bytes != null && bytes.length > 0) {
         map = (Map<String, Object>) fromJSON(bytes);
       }