You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ma...@apache.org on 2020/09/06 02:13:21 UTC

[lucene-solr] branch reference_impl_dev updated (5a1a8c0 -> 105b3bf)

This is an automated email from the ASF dual-hosted git repository.

markrmiller pushed a change to branch reference_impl_dev
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git.


    from 5a1a8c0  @751 Simplify test that is tricky to get 100% solid - there are better ways to only test the other constructor options.
     new b23c3da  @752 Try this fix for very rare loss of replica(s) instead.
     new a032021  @753 Move this back to register.
     new 105b3bf  @754 Full copy.

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../src/java/org/apache/solr/cloud/Overseer.java     | 20 +++++++++++++++++++-
 .../src/java/org/apache/solr/cloud/ZkController.java |  8 ++++++++
 .../apache/solr/cloud/overseer/ZkStateWriter.java    |  8 --------
 .../core/src/java/org/apache/solr/core/SolrCore.java |  6 ------
 4 files changed, 27 insertions(+), 15 deletions(-)


[lucene-solr] 03/03: @754 Full copy.

Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

markrmiller pushed a commit to branch reference_impl_dev
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git

commit 105b3bfed659ef3afac29886e1ca505f386bd069
Author: markrmiller@gmail.com <ma...@gmail.com>
AuthorDate: Sat Sep 5 20:58:39 2020 -0500

    @754 Full copy.
---
 solr/core/src/java/org/apache/solr/cloud/Overseer.java | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/solr/core/src/java/org/apache/solr/cloud/Overseer.java b/solr/core/src/java/org/apache/solr/cloud/Overseer.java
index 32d1954..35a9f14 100644
--- a/solr/core/src/java/org/apache/solr/cloud/Overseer.java
+++ b/solr/core/src/java/org/apache/solr/cloud/Overseer.java
@@ -439,7 +439,8 @@ public class Overseer implements SolrCloseable {
             }
           }
 
-          collStates.put(docCollection.getName(), new ClusterState.CollectionRef(new DocCollection(docCollection.getName(), slicesMap, docCollection.getProperties(), docCollection.getRouter())));
+          collStates.put(docCollection.getName(), new ClusterState.CollectionRef(new DocCollection(docCollection.getName(),
+              slicesMap, docCollection.getProperties(), docCollection.getRouter(), docCollection.getZNodeVersion(), docCollection.getZNode())));
         }
       }
 


[lucene-solr] 02/03: @753 Move this back to register.

Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

markrmiller pushed a commit to branch reference_impl_dev
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git

commit a032021929c82b9d48ca5b3a86f713c19b2d16b5
Author: markrmiller@gmail.com <ma...@gmail.com>
AuthorDate: Sat Sep 5 20:55:39 2020 -0500

    @753 Move this back to register.
---
 solr/core/src/java/org/apache/solr/cloud/ZkController.java | 8 ++++++++
 solr/core/src/java/org/apache/solr/core/SolrCore.java      | 6 ------
 2 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/solr/core/src/java/org/apache/solr/cloud/ZkController.java b/solr/core/src/java/org/apache/solr/cloud/ZkController.java
index f619f01..8303f60 100644
--- a/solr/core/src/java/org/apache/solr/cloud/ZkController.java
+++ b/solr/core/src/java/org/apache/solr/cloud/ZkController.java
@@ -1483,6 +1483,14 @@ public class ZkController implements Closeable {
       final String coreZkNodeName = cloudDesc.getCoreNodeName();
       assert coreZkNodeName != null : "we should have a coreNodeName by now";
       log.info("Register SolrCore, baseUrl={} collection={}, shard={} coreNodeName={}", baseUrl, collection, shardId, coreZkNodeName);
+
+      // make sure we don't stop watching our own collection after a collection delete -> create
+
+      // the watcher is added to a set so multiple calls of this method will left only one watcher
+      getZkStateReader().registerCore(cloudDesc.getCollectionName());
+      // the watcher is added to a set so multiple calls of this method will left only one watcher
+      registerUnloadWatcher(cloudDesc.getCollectionName(), cloudDesc.getShardId(), cloudDesc.getCoreNodeName(), desc.getName());
+
       // check replica's existence in clusterstate first
       try {
         zkStateReader.waitForState(collection, Overseer.isLegacy(zkStateReader) ? 10000 : 10000,
diff --git a/solr/core/src/java/org/apache/solr/core/SolrCore.java b/solr/core/src/java/org/apache/solr/core/SolrCore.java
index 291a5af..e05c4e6 100644
--- a/solr/core/src/java/org/apache/solr/core/SolrCore.java
+++ b/solr/core/src/java/org/apache/solr/core/SolrCore.java
@@ -1083,12 +1083,6 @@ public final class SolrCore implements SolrInfoBean, Closeable {
       if (coreContainer.isZooKeeperAware()) {
         // make sure we see our shard first - these tries to cover a surprising race where we don't find our shard in the clusterstate
         // in the below bufferUpdatesIfConstructing call
-        // make sure we don't stop watching our own collection after a collection delete -> create
-        CloudDescriptor cloudDesc = coreDescriptor.getCloudDescriptor();
-        // the watcher is added to a set so multiple calls of this method will left only one watcher
-        coreContainer.getZkController().getZkStateReader().registerCore(cloudDesc.getCollectionName());
-        // the watcher is added to a set so multiple calls of this method will left only one watcher
-        coreContainer.getZkController().registerUnloadWatcher(cloudDesc.getCollectionName(), cloudDesc.getShardId(), cloudDesc.getCoreNodeName(), cd.getName());
 
         coreContainer.getZkController().getZkStateReader().waitForState(coreDescriptor.getCollectionName(),
             5, TimeUnit.SECONDS, (l,c) -> c != null && c.getSlice(coreDescriptor.getCloudDescriptor().getShardId()) != null);


[lucene-solr] 01/03: @752 Try this fix for very rare loss of replica(s) instead.

Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

markrmiller pushed a commit to branch reference_impl_dev
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git

commit b23c3da9b0f2d7f34a5fd4c10b8a1e0bd30f65ba
Author: markrmiller@gmail.com <ma...@gmail.com>
AuthorDate: Sat Sep 5 20:43:23 2020 -0500

    @752 Try this fix for very rare loss of replica(s) instead.
---
 .../core/src/java/org/apache/solr/cloud/Overseer.java | 19 ++++++++++++++++++-
 .../org/apache/solr/cloud/overseer/ZkStateWriter.java |  8 --------
 2 files changed, 18 insertions(+), 9 deletions(-)

diff --git a/solr/core/src/java/org/apache/solr/cloud/Overseer.java b/solr/core/src/java/org/apache/solr/cloud/Overseer.java
index 0de28c8..32d1954 100644
--- a/solr/core/src/java/org/apache/solr/cloud/Overseer.java
+++ b/solr/core/src/java/org/apache/solr/cloud/Overseer.java
@@ -40,6 +40,7 @@ import org.apache.solr.common.SolrException;
 import org.apache.solr.common.cloud.ClusterState;
 import org.apache.solr.common.cloud.ConnectionManager;
 import org.apache.solr.common.cloud.DocCollection;
+import org.apache.solr.common.cloud.Replica;
 import org.apache.solr.common.cloud.Slice;
 import org.apache.solr.common.cloud.SolrZkClient;
 import org.apache.solr.common.cloud.ZkNodeProps;
@@ -66,8 +67,10 @@ import static org.apache.solr.common.params.CommonParams.ID;
 import java.io.Closeable;
 import java.io.IOException;
 import java.lang.invoke.MethodHandles;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.LinkedHashMap;
 import java.util.LinkedList;
@@ -425,10 +428,24 @@ public class Overseer implements SolrCloseable {
       Map<String,DocCollection> updatesToWrite = zkStateWriter
           .getUpdatesToWrite();
       for (DocCollection docCollection : updatesToWrite.values()) {
-        collStates.put(docCollection.getName(), new ClusterState.CollectionRef(docCollection));
+        Map<String,Slice> slicesMap = docCollection.getSlicesMap();
+        for (Slice slice : slicesMap.values()) {
+          Collection<Replica> existingReplicas = slice.getReplicas();
+          for (Replica ereplica : existingReplicas) {
+            if (!docCollection.getReplicas().contains(ereplica)) {
+              Map<String,Replica> replicas = new HashMap<>(slice.getReplicasMap());
+              replicas.put(ereplica.getName(), ereplica);
+              slicesMap.put(slice.getName(), new Slice(slice.getName(), replicas, slice.getProperties(), docCollection.getName()));
+            }
+          }
+
+          collStates.put(docCollection.getName(), new ClusterState.CollectionRef(new DocCollection(docCollection.getName(), slicesMap, docCollection.getProperties(), docCollection.getRouter())));
+        }
       }
+
       ClusterState prevState = new ClusterState(state.getLiveNodes(),
           collStates, state.getZNodeVersion());
+
         List<ZkWriteCommand> zkWriteOps = processMessage(updatesToWrite.isEmpty() ? state : prevState, message, operation);
 
         cs = zkStateWriter.enqueueUpdate(clusterState, zkWriteOps,
diff --git a/solr/core/src/java/org/apache/solr/cloud/overseer/ZkStateWriter.java b/solr/core/src/java/org/apache/solr/cloud/overseer/ZkStateWriter.java
index 6cfecb5..4e76974 100644
--- a/solr/core/src/java/org/apache/solr/cloud/overseer/ZkStateWriter.java
+++ b/solr/core/src/java/org/apache/solr/cloud/overseer/ZkStateWriter.java
@@ -179,14 +179,6 @@ public class ZkStateWriter {
             c.getSlicesMap().forEach((sliceId, slice) -> {
               if (finalColl.getSlice(sliceId) != null) {
                 Map<String,Replica> newReplicas = new HashMap<>();
-
-                // start with existing state unless it's a replica that has been removed
-                Collection<Replica> nReplicas = finalC.getSlice(sliceId).getReplicas();
-                for (Replica oReplica : slice.getReplicas()) {
-                  if (nReplicas.contains(oReplica)) {
-                    newReplicas.put(oReplica.getName(), oReplica);
-                  }
-                }
                 
                 finalC.getSlice(sliceId).getReplicas().forEach((replica) -> {
                   newReplicas.put(replica.getName(), replica);