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/12/18 20:51:16 UTC

[lucene-solr] branch reference_impl_dev updated: @1250 Cleanup.

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


The following commit(s) were added to refs/heads/reference_impl_dev by this push:
     new 77fccf3  @1250 Cleanup.
77fccf3 is described below

commit 77fccf3bdf8636504955c2e04baa93934e29d519
Author: markrmiller@gmail.com <ma...@gmail.com>
AuthorDate: Fri Dec 18 14:50:33 2020 -0600

    @1250 Cleanup.
---
 .../org/apache/solr/cloud/ZkCollectionTerms.java   |  5 +++++
 .../java/org/apache/solr/cloud/ZkController.java   |  3 +++
 .../java/org/apache/solr/cloud/ZkShardTerms.java   | 22 ++++++++++++----------
 3 files changed, 20 insertions(+), 10 deletions(-)

diff --git a/solr/core/src/java/org/apache/solr/cloud/ZkCollectionTerms.java b/solr/core/src/java/org/apache/solr/cloud/ZkCollectionTerms.java
index 8c26bc6..08ebef4 100644
--- a/solr/core/src/java/org/apache/solr/cloud/ZkCollectionTerms.java
+++ b/solr/core/src/java/org/apache/solr/cloud/ZkCollectionTerms.java
@@ -17,6 +17,7 @@
 
 package org.apache.solr.cloud;
 
+import org.apache.solr.common.AlreadyClosedException;
 import org.apache.solr.common.cloud.SolrZkClient;
 import org.apache.solr.common.util.IOUtils;
 import org.apache.solr.common.util.ObjectReleaseTracker;
@@ -51,10 +52,14 @@ class ZkCollectionTerms implements AutoCloseable {
     try {
       ZkShardTerms zkterms = terms.get(shardId);
       if (zkterms == null) {
+        if (closed) {
+          throw new AlreadyClosedException();
+        }
         zkterms = new ZkShardTerms(collection, shardId, zkClient);
         IOUtils.closeQuietly(terms.put(shardId, zkterms));
         if (closed) {
           IOUtils.closeQuietly(zkterms);
+          throw new AlreadyClosedException();
         }
       }
       return zkterms;
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 3c0ec5c..18d824e 100644
--- a/solr/core/src/java/org/apache/solr/cloud/ZkController.java
+++ b/solr/core/src/java/org/apache/solr/cloud/ZkController.java
@@ -1778,6 +1778,9 @@ public class ZkController implements Closeable, Runnable {
   public ZkShardTerms getShardTerms(String collection, String shardId) throws Exception {
     ZkCollectionTerms ct = getCollectionTerms(collection);
     if (ct == null) {
+      if (getCoreContainer().isShutDown()) {
+        throw new AlreadyClosedException();
+      }
       ct = createCollectionTerms(collection);
     }
     return ct.getShard(shardId);
diff --git a/solr/core/src/java/org/apache/solr/cloud/ZkShardTerms.java b/solr/core/src/java/org/apache/solr/cloud/ZkShardTerms.java
index ba0dd0c..b19777d 100644
--- a/solr/core/src/java/org/apache/solr/cloud/ZkShardTerms.java
+++ b/solr/core/src/java/org/apache/solr/cloud/ZkShardTerms.java
@@ -327,23 +327,25 @@ public class ZkShardTerms implements Closeable {
   private boolean saveTerms(ShardTerms newTerms) throws KeeperException, InterruptedException {
     byte[] znodeData = Utils.toJSON(newTerms);
     ShardTerms terms = this.terms.get();
+    int version = 0;
     try {
-
+      version = newTerms.getVersion();
       Stat stat = zkClient.setData(znodePath, znodeData, newTerms.getVersion(), true);
-      setNewTerms(new ShardTerms(newTerms, stat.getVersion()));
+      ShardTerms newShardTerms = new ShardTerms(newTerms, stat.getVersion());
+      setNewTerms(newShardTerms);
       if (log.isDebugEnabled()) log.debug("Successful update of terms at {} to {}", znodePath, newTerms);
       return true;
     } catch (KeeperException.BadVersionException e) {
       log.info("Failed to save terms, version is not a match, retrying version={}", newTerms.getVersion());
-      while (this.terms.get() == null || this.terms.get() == terms) {
-        if (isClosed.get()) {
-          throw new AlreadyClosedException();
-        }
-        synchronized (termUpdate) {
-          termUpdate.wait(250);
-        }
+
+      if (isClosed.get()) {
+        throw new AlreadyClosedException();
+      }
+      synchronized (termUpdate) {
+        termUpdate.wait(250);
       }
-      // refreshTerms(false);
+
+      refreshTerms(false);
     }
     return false;
   }