You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by no...@apache.org on 2020/06/22 02:58:05 UTC
[lucene-solr] branch jira/solr14409 updated: SOLR-14409: Existing
violations allow bypassing policy rules when adding new replicas
This is an automated email from the ASF dual-hosted git repository.
noble pushed a commit to branch jira/solr14409
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git
The following commit(s) were added to refs/heads/jira/solr14409 by this push:
new a8e9e57 SOLR-14409: Existing violations allow bypassing policy rules when adding new replicas
a8e9e57 is described below
commit a8e9e5789beba6fdc344d618edf596318efd0bbc
Author: noble <no...@apache.org>
AuthorDate: Mon Jun 22 12:57:46 2020 +1000
SOLR-14409: Existing violations allow bypassing policy rules when adding new replicas
---
.../client/solrj/cloud/autoscaling/Suggester.java | 2 +-
.../solr/autoscaling/testAddTooManyPerPolicy.json | 129 +++++++++++++++++++++
.../solrj/cloud/autoscaling/TestPolicy2.java | 11 ++
3 files changed, 141 insertions(+), 1 deletion(-)
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/Suggester.java b/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/Suggester.java
index 28460cd..b9d5faf 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/Suggester.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/Suggester.java
@@ -291,7 +291,7 @@ public abstract class Suggester implements MapWriter {
//the computed value can change over time. So it's better to evaluate it in the end
if (isTxOpen && v.getClause().hasComputedValue) continue;
int idx = originalViolations.indexOf(v);
- if (idx < 0 /*|| originalViolations.get(idx).isLessSerious(v)*/) return true;
+ if (idx < 0 || originalViolations.get(idx).isLessSerious(v)) return true;
}
return false;
}
diff --git a/solr/solrj/src/test-files/solrj/solr/autoscaling/testAddTooManyPerPolicy.json b/solr/solrj/src/test-files/solrj/solr/autoscaling/testAddTooManyPerPolicy.json
new file mode 100644
index 0000000..23ab471
--- /dev/null
+++ b/solr/solrj/src/test-files/solrj/solr/autoscaling/testAddTooManyPerPolicy.json
@@ -0,0 +1,129 @@
+{
+ "diagnostics": {
+ "sortedNodes": [
+ {
+ "node": "127.0.0.1:61737_solr",
+ "isLive": true,
+ "cores": 2.0,
+ "freedisk": 184.94042205810547,
+ "totaldisk": 465.62699127197266,
+ "replicas": {
+ "TooManyPerPolicy": {
+ "shard1": [
+ {
+ "core_node3": {
+ "core": "TooManyPerPolicy_shard1_replica_n1",
+ "shard": "shard1",
+ "collection": "TooManyPerPolicy",
+ "node_name": "127.0.0.1:61737_solr",
+ "type": "NRT",
+ "leader": "true",
+ "base_url": "http://127.0.0.1:61737/solr",
+ "state": "active",
+ "force_set_state": "false",
+ "INDEX.sizeInGB": 6.426125764846802E-8
+ }
+ },
+ {
+ "core_node8": {
+ "core": "TooManyPerPolicy_shard1_replica_n7",
+ "shard": "shard1",
+ "collection": "TooManyPerPolicy",
+ "node_name": "127.0.0.1:61737_solr",
+ "type": "NRT",
+ "base_url": "http://127.0.0.1:61737/solr",
+ "state": "down",
+ "force_set_state": "false",
+ "INDEX.sizeInGB": 6.426125764846802E-8
+ }}]}}},
+ {
+ "node": "127.0.0.1:61738_solr",
+ "isLive": true,
+ "cores": 1.0,
+ "freedisk": 184.94042205810547,
+ "totaldisk": 465.62699127197266,
+ "replicas": {
+ "TooManyPerPolicy": {
+ "shard3": [
+ {
+ "core_node6": {
+ "core": "TooManyPerPolicy_shard3_replica_n4",
+ "shard": "shard3",
+ "collection": "TooManyPerPolicy",
+ "node_name": "127.0.0.1:61738_solr",
+ "type": "NRT",
+ "leader": "true",
+ "base_url": "http://127.0.0.1:61738/solr",
+ "state": "active",
+ "force_set_state": "false",
+ "INDEX.sizeInGB": 6.426125764846802E-8
+ }}]}}},
+ {
+ "node": "127.0.0.1:61739_solr",
+ "isLive": true,
+ "cores": 1.0,
+ "freedisk": 184.94042205810547,
+ "totaldisk": 465.62699127197266,
+ "replicas": {
+ "TooManyPerPolicy": {
+ "shard2": [
+ {
+ "core_node5": {
+ "core": "TooManyPerPolicy_shard2_replica_n2",
+ "shard": "shard2",
+ "collection": "TooManyPerPolicy",
+ "node_name": "127.0.0.1:61739_solr",
+ "type": "NRT",
+ "leader": "true",
+ "base_url": "http://127.0.0.1:61739/solr",
+ "state": "active",
+ "force_set_state": "false",
+ "INDEX.sizeInGB": 6.426125764846802E-8
+ }}]}}}
+ ],
+ "liveNodes": [
+ "127.0.0.1:61738_solr",
+ "127.0.0.1:61739_solr",
+ "127.0.0.1:61737_solr"
+ ],
+ "violations": [
+ {
+ "collection": "TooManyPerPolicy",
+ "node": "127.0.0.1:61737_solr",
+ "tagKey": "127.0.0.1:61737_solr",
+ "violation": {
+ "replica": {"NRT": 2, "count": 2},
+ "delta": 1.0},
+ "clause": {
+ "replica": "<2", "shard": "#ANY", "node": "#ANY", "strict": true, "collection": "TooManyPerPolicy"},
+ "violatingReplicas": [
+ {
+ "core_node3": {
+ "core": "TooManyPerPolicy_shard1_replica_n1",
+ "shard": "shard1",
+ "collection": "TooManyPerPolicy",
+ "node_name": "127.0.0.1:61737_solr",
+ "type": "NRT",
+ "leader": "true",
+ "base_url": "http://127.0.0.1:61737/solr",
+ "state": "active",
+ "force_set_state": "false",
+ "INDEX.sizeInGB": 6.426125764846802E-8}},
+ {
+ "core_node8": {
+ "core": "TooManyPerPolicy_shard1_replica_n7",
+ "shard": "shard1",
+ "collection": "TooManyPerPolicy",
+ "node_name": "127.0.0.1:61737_solr",
+ "type": "NRT",
+ "base_url": "http://127.0.0.1:61737/solr",
+ "state": "down",
+ "force_set_state": "false",
+ "INDEX.sizeInGB": 6.426125764846802E-8
+ }}]}],
+ "config": {
+ "cluster-preferences": [
+ {"minimize": "cores", "precision": 1},
+ {"maximize": "freedisk"}],
+ "cluster-policy": [
+ {"replica": "<2", "shard": "#ANY", "node": "#ANY", "strict": true}]}}}
\ No newline at end of file
diff --git a/solr/solrj/src/test/org/apache/solr/client/solrj/cloud/autoscaling/TestPolicy2.java b/solr/solrj/src/test/org/apache/solr/client/solrj/cloud/autoscaling/TestPolicy2.java
index 1632888..0369a0f 100644
--- a/solr/solrj/src/test/org/apache/solr/client/solrj/cloud/autoscaling/TestPolicy2.java
+++ b/solr/solrj/src/test/org/apache/solr/client/solrj/cloud/autoscaling/TestPolicy2.java
@@ -40,6 +40,7 @@ import org.apache.solr.client.solrj.cloud.NodeStateProvider;
import org.apache.solr.client.solrj.cloud.SolrCloudManager;
import org.apache.solr.client.solrj.impl.ClusterStateProvider;
import org.apache.solr.client.solrj.impl.SolrClientNodeStateProvider;
+import org.apache.solr.common.SolrException;
import org.apache.solr.common.cloud.ClusterState;
import org.apache.solr.common.cloud.ReplicaPosition;
import org.apache.solr.common.util.Utils;
@@ -516,6 +517,16 @@ public class TestPolicy2 extends SolrTestCaseJ4 {
System.out.println(suggestions);
}
+ public void testAddTooManyPerPolicy() {
+ Map<String, Object> m = (Map<String, Object>) loadFromResource("testAddTooManyPerPolicy.json");
+ SolrCloudManager cloudManagerFromDiagnostics = createCloudManagerFromDiagnostics(m);
+ AutoScalingConfig autoScalingConfig = new AutoScalingConfig((Map<String, Object>) getObjectByPath(m, false, "diagnostics/config"));
+ SolrException exp = expectThrows(SolrException.class, () -> PolicyHelper.getReplicaLocations("TooManyPerPolicy", autoScalingConfig, cloudManagerFromDiagnostics,
+ EMPTY_MAP, Collections.singletonList("shard1"), 1, 0, 0, null));
+ assertTrue(exp.getMessage().contains("No node can satisfy the rules"));
+
+ }
+
public static Object loadFromResource(String file) {
try (InputStream is = TestPolicy2.class.getResourceAsStream("/solrj/solr/autoscaling/" + file)) {
return Utils.fromJSON(is, MAPOBJBUILDER);