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