You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by sa...@apache.org on 2018/08/29 15:28:11 UTC
[1/2] lucene-solr:master: SOLR-12662: Eliminate possible race
conditions by moving Type-by-name map construction to Variable.Type,
accessible via Variable.Type.get(name)
Repository: lucene-solr
Updated Branches:
refs/heads/branch_7x 171cfc8e8 -> 9fcd4929d
refs/heads/master 5a0e7a615 -> 098f475a6
SOLR-12662: Eliminate possible race conditions by moving Type-by-name map construction to Variable.Type, accessible via Variable.Type.get(name)
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/098f475a
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/098f475a
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/098f475a
Branch: refs/heads/master
Commit: 098f475a671c88bf09cb2e73af631fd45ee5c5ef
Parents: 5a0e7a6
Author: Steve Rowe <sa...@apache.org>
Authored: Wed Aug 29 11:26:31 2018 -0400
Committer: Steve Rowe <sa...@apache.org>
Committed: Wed Aug 29 11:26:31 2018 -0400
----------------------------------------------------------------------
.../client/solrj/cloud/autoscaling/Variable.java | 15 +++++++++++++++
.../solrj/cloud/autoscaling/VariableBase.java | 18 +-----------------
2 files changed, 16 insertions(+), 17 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/098f475a/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/Variable.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/Variable.java b/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/Variable.java
index d817c2f..1ffb0a5 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/Variable.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/Variable.java
@@ -22,7 +22,9 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.Arrays;
+import java.util.HashMap;
import java.util.HashSet;
+import java.util.Map;
import java.util.Set;
import java.util.function.Consumer;
@@ -30,6 +32,7 @@ import org.apache.solr.common.cloud.rule.ImplicitSnitch;
import static java.util.Collections.emptySet;
import static java.util.Collections.unmodifiableSet;
+import static java.util.Collections.unmodifiableMap;
/**
* A Variable Type used in Autoscaling policy rules. Each variable type may have unique implementation
@@ -328,6 +331,18 @@ public interface Variable {
public boolean match(Object inputVal, Operand op, Object val, String name, Row row) {
return impl.match(inputVal, op, val, name, row);
}
+
+ private static final Map<String, Type> typeByNameMap;
+ static {
+ HashMap<String, Type> m = new HashMap<>();
+ for (Type t : Type.values()) {
+ m.put(t.tagName, t);
+ }
+ typeByNameMap = unmodifiableMap(m);
+ }
+ static Type get(String name) {
+ return typeByNameMap.get(name);
+ }
}
@Target(ElementType.FIELD)
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/098f475a/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/VariableBase.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/VariableBase.java b/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/VariableBase.java
index 8b0c1cf..82a5ce6 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/VariableBase.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/VariableBase.java
@@ -17,8 +17,6 @@
package org.apache.solr.client.solrj.cloud.autoscaling;
-import java.util.HashMap;
-import java.util.Map;
import org.apache.solr.common.cloud.rule.ImplicitSnitch;
import org.apache.solr.common.util.StrUtils;
@@ -77,7 +75,7 @@ public class VariableBase implements Variable {
}
public static Type getTagType(String name) {
- Type info = getValidatetypes().get(name);
+ Type info = Type.get(name);
if (info == null && name.startsWith(ImplicitSnitch.SYSPROP)) info = Type.STRING;
if (info == null && name.startsWith(Clause.METRICS_PREFIX)) info = Type.LAZY;
return info;
@@ -192,19 +190,5 @@ public class VariableBase implements Variable {
public void getSuggestions(Suggestion.Ctx ctx) {
perNodeSuggestions(ctx);
}
-
-
- }
-
- private static Map<String, Type> validatetypes = null;
-
- /** SOLR-12662: Lazily init validatetypes to avoid Type.values() NPE due to static initializer ordering */
- private static Map<String, Type> getValidatetypes() {
- if (validatetypes == null) {
- validatetypes = new HashMap<>();
- for (Type t : Type.values())
- validatetypes.put(t.tagName, t);
- }
- return validatetypes;
}
}
[2/2] lucene-solr:branch_7x: SOLR-12662: Eliminate possible race
conditions by moving Type-by-name map construction to Variable.Type,
accessible via Variable.Type.get(name)
Posted by sa...@apache.org.
SOLR-12662: Eliminate possible race conditions by moving Type-by-name map construction to Variable.Type, accessible via Variable.Type.get(name)
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/9fcd4929
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/9fcd4929
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/9fcd4929
Branch: refs/heads/branch_7x
Commit: 9fcd4929db83f8302ff4a3021247f60db4af4b8e
Parents: 171cfc8
Author: Steve Rowe <sa...@apache.org>
Authored: Wed Aug 29 11:26:31 2018 -0400
Committer: Steve Rowe <sa...@apache.org>
Committed: Wed Aug 29 11:27:25 2018 -0400
----------------------------------------------------------------------
.../client/solrj/cloud/autoscaling/Variable.java | 15 +++++++++++++++
.../solrj/cloud/autoscaling/VariableBase.java | 18 +-----------------
2 files changed, 16 insertions(+), 17 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/9fcd4929/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/Variable.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/Variable.java b/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/Variable.java
index d817c2f..1ffb0a5 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/Variable.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/Variable.java
@@ -22,7 +22,9 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.Arrays;
+import java.util.HashMap;
import java.util.HashSet;
+import java.util.Map;
import java.util.Set;
import java.util.function.Consumer;
@@ -30,6 +32,7 @@ import org.apache.solr.common.cloud.rule.ImplicitSnitch;
import static java.util.Collections.emptySet;
import static java.util.Collections.unmodifiableSet;
+import static java.util.Collections.unmodifiableMap;
/**
* A Variable Type used in Autoscaling policy rules. Each variable type may have unique implementation
@@ -328,6 +331,18 @@ public interface Variable {
public boolean match(Object inputVal, Operand op, Object val, String name, Row row) {
return impl.match(inputVal, op, val, name, row);
}
+
+ private static final Map<String, Type> typeByNameMap;
+ static {
+ HashMap<String, Type> m = new HashMap<>();
+ for (Type t : Type.values()) {
+ m.put(t.tagName, t);
+ }
+ typeByNameMap = unmodifiableMap(m);
+ }
+ static Type get(String name) {
+ return typeByNameMap.get(name);
+ }
}
@Target(ElementType.FIELD)
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/9fcd4929/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/VariableBase.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/VariableBase.java b/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/VariableBase.java
index 8b0c1cf..82a5ce6 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/VariableBase.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/VariableBase.java
@@ -17,8 +17,6 @@
package org.apache.solr.client.solrj.cloud.autoscaling;
-import java.util.HashMap;
-import java.util.Map;
import org.apache.solr.common.cloud.rule.ImplicitSnitch;
import org.apache.solr.common.util.StrUtils;
@@ -77,7 +75,7 @@ public class VariableBase implements Variable {
}
public static Type getTagType(String name) {
- Type info = getValidatetypes().get(name);
+ Type info = Type.get(name);
if (info == null && name.startsWith(ImplicitSnitch.SYSPROP)) info = Type.STRING;
if (info == null && name.startsWith(Clause.METRICS_PREFIX)) info = Type.LAZY;
return info;
@@ -192,19 +190,5 @@ public class VariableBase implements Variable {
public void getSuggestions(Suggestion.Ctx ctx) {
perNodeSuggestions(ctx);
}
-
-
- }
-
- private static Map<String, Type> validatetypes = null;
-
- /** SOLR-12662: Lazily init validatetypes to avoid Type.values() NPE due to static initializer ordering */
- private static Map<String, Type> getValidatetypes() {
- if (validatetypes == null) {
- validatetypes = new HashMap<>();
- for (Type t : Type.values())
- validatetypes.put(t.tagName, t);
- }
- return validatetypes;
}
}