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/10/30 06:09:02 UTC

[lucene-solr] 01/02: @1081 Harden.

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 503d050d54247d183f8f012af8c5e3d9735037b6
Author: markrmiller@gmail.com <ma...@gmail.com>
AuthorDate: Fri Oct 30 00:49:06 2020 -0500

    @1081 Harden.
---
 .../src/java/org/apache/solr/core/CoreContainer.java | 20 +++++++++++++++++++-
 1 file changed, 19 insertions(+), 1 deletion(-)

diff --git a/solr/core/src/java/org/apache/solr/core/CoreContainer.java b/solr/core/src/java/org/apache/solr/core/CoreContainer.java
index 883569d..b77b20c 100644
--- a/solr/core/src/java/org/apache/solr/core/CoreContainer.java
+++ b/solr/core/src/java/org/apache/solr/core/CoreContainer.java
@@ -42,6 +42,7 @@ import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
 
 import com.google.common.collect.ImmutableMap;
@@ -78,6 +79,7 @@ import org.apache.solr.common.SolrException.ErrorCode;
 import org.apache.solr.common.cloud.DocCollection;
 import org.apache.solr.common.cloud.Replica;
 import org.apache.solr.common.cloud.Replica.State;
+import org.apache.solr.common.cloud.Slice;
 import org.apache.solr.common.cloud.SolrZkClient;
 import org.apache.solr.common.cloud.ZkNodeProps;
 import org.apache.solr.common.cloud.ZkStateReader;
@@ -1752,7 +1754,6 @@ public class CoreContainer implements Closeable {
     if (name != null) {
       if (isZooKeeperAware() && cd != null && cd.getCloudDescriptor() != null) {
         CloudDescriptor cloudDesc = cd.getCloudDescriptor();
-        cloudDesc.getCoreNodeName();
         try {
           deleteCoreNode(cloudDesc.getCollectionName(), cloudDesc.getCoreNodeName(), getZkController().getNodeName(), getZkController().getBaseUrl(), name);
         } catch (Exception e) {
@@ -1851,6 +1852,23 @@ public class CoreContainer implements Closeable {
           SolrException.log(log, "Failed to delete instance dir for core:" + cd.getName() + " dir:" + cd.getInstanceDir());
         }
       }
+      if (isZooKeeperAware() && cd != null && cd.getCloudDescriptor() != null) {
+        CloudDescriptor cloudDesc = cd.getCloudDescriptor();
+        cloudDesc.getCoreNodeName();
+        try {
+          getZkController().getZkStateReader().waitForState(cloudDesc.getCollectionName(), 5000, TimeUnit.MILLISECONDS, (c) -> {
+            if (c == null)
+              return true;
+            Slice slice = c.getSlice(cloudDesc.getShardId());
+            if(slice == null || slice.getReplica(cloudDesc.getCoreNodeName()) == null) {
+              return true;
+            }
+            return false;
+          });
+        } catch (TimeoutException | InterruptedException e) {
+          ParWork.propagateInterrupt(e);
+        }
+      }
     }
   }