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;
}