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/07/15 01:40:39 UTC

[lucene-solr] branch reference_impl updated (57d5b78 -> 97d6aa1)

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

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


 discard 57d5b78  #163- Fix javadoc.
     new 5644d48  #163 - Fix javadoc.
     new 97d6aa1  #164 - Harden zk connection manager wait for connect.

This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version.  This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:

 * -- * -- B -- O -- O -- O   (57d5b78)
            \
             N -- N -- N   refs/heads/reference_impl (97d6aa1)

You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.

Any revisions marked "omit" are not gone; other references still
refer to them.  Any revisions marked "discard" are gone forever.

The 2 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:
 .../java/org/apache/solr/cloud/ZkShardTerms.java   |  8 +--
 .../solr/common/cloud/ConnectionManager.java       | 66 +++++++++++-----------
 .../org/apache/solr/common/cloud/SolrZkClient.java | 13 ++---
 .../client/solrj/io/stream/JDBCStreamTest.java     |  2 +
 4 files changed, 44 insertions(+), 45 deletions(-)


[lucene-solr] 02/02: #164 - Harden zk connection manager wait for connect.

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
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git

commit 97d6aa180d84146f58428ea9f92192784af8c195
Author: markrmiller@gmail.com <ma...@gmail.com>
AuthorDate: Tue Jul 14 20:39:55 2020 -0500

    #164 - Harden zk connection manager wait for connect.
---
 .../java/org/apache/solr/cloud/ZkShardTerms.java   |  8 +--
 .../solr/common/cloud/ConnectionManager.java       | 66 +++++++++++-----------
 .../org/apache/solr/common/cloud/SolrZkClient.java | 13 ++---
 .../client/solrj/io/stream/JDBCStreamTest.java     |  2 +
 4 files changed, 44 insertions(+), 45 deletions(-)

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 be49409..f640e96 100644
--- a/solr/core/src/java/org/apache/solr/cloud/ZkShardTerms.java
+++ b/solr/core/src/java/org/apache/solr/cloud/ZkShardTerms.java
@@ -27,6 +27,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicReference;
 
 import org.apache.solr.client.solrj.cloud.ShardTerms;
+import org.apache.solr.common.ParWork;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.cloud.SolrZkClient;
 import org.apache.solr.common.cloud.ZkStateReader;
@@ -386,10 +387,9 @@ public class ZkShardTerms implements AutoCloseable{
         log.warn("Failed watching shard term for collection: {}, retrying!", collection, e);
         try {
           zkClient.getConnectionManager().waitForConnected(zkClient.getZkClientTimeout());
-        } catch (TimeoutException te) {
-          if (Thread.interrupted()) {
-            throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "Error watching shard term for collection: " + collection, te);
-          }
+        } catch (TimeoutException | InterruptedException te) {
+          ParWork.propegateInterrupt(te);
+          throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "Error watching shard term for collection: " + collection, te);
         }
       }
     }
diff --git a/solr/solrj/src/java/org/apache/solr/common/cloud/ConnectionManager.java b/solr/solrj/src/java/org/apache/solr/common/cloud/ConnectionManager.java
index ccb4571..7c30c84 100644
--- a/solr/solrj/src/java/org/apache/solr/common/cloud/ConnectionManager.java
+++ b/solr/solrj/src/java/org/apache/solr/common/cloud/ConnectionManager.java
@@ -18,12 +18,15 @@ package org.apache.solr.common.cloud;
 
 import java.io.Closeable;
 import java.lang.invoke.MethodHandles;
+import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
 
 import org.apache.solr.common.AlreadyClosedException;
 import org.apache.solr.common.ParWork;
 import org.apache.solr.common.SolrException;
+import org.apache.solr.common.util.TimeOut;
+import org.apache.solr.common.util.TimeSource;
 import org.apache.zookeeper.WatchedEvent;
 import org.apache.zookeeper.Watcher;
 import org.apache.zookeeper.Watcher.Event.KeeperState;
@@ -52,6 +55,9 @@ public class ConnectionManager implements Watcher, Closeable {
 
   private volatile boolean isClosed = false;
 
+  private CountDownLatch connectedLatch = new CountDownLatch(1);
+  private CountDownLatch disconnectedLatch = new CountDownLatch(1);
+
   public void setOnReconnect(OnReconnect onReconnect) {
     this.onReconnect = onReconnect;
   }
@@ -105,6 +111,8 @@ public class ConnectionManager implements Watcher, Closeable {
   private synchronized void connected() {
     connected = true;
     likelyExpiredState = LikelyExpiredState.NOT_EXPIRED;
+    connectedLatch.countDown();
+    disconnectedLatch = new CountDownLatch(1);
     notifyAll();
   }
 
@@ -114,6 +122,8 @@ public class ConnectionManager implements Watcher, Closeable {
     if (!likelyExpiredState.isLikelyExpired(0)) {
       likelyExpiredState = new LikelyExpiredState(LikelyExpiredState.StateType.TRACKING_TIME, System.nanoTime());
     }
+    disconnectedLatch.countDown();;
+    connectedLatch = new CountDownLatch(1);
     notifyAll();
   }
 
@@ -267,15 +277,6 @@ public class ConnectionManager implements Watcher, Closeable {
   public void close() {
     this.isClosed = true;
     this.likelyExpiredState = LikelyExpiredState.EXPIRED;
-
-//    try {
-//      waitForDisconnected(10000);
-//    } catch (InterruptedException e) {
-//      ParWork.propegateInterrupt(e);
-//      throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, e);
-//    } catch (TimeoutException e) {
-//      throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, e);
-//    }
   }
 
   private boolean isClosed() {
@@ -295,40 +296,37 @@ public class ConnectionManager implements Watcher, Closeable {
   }
 
   public synchronized void waitForConnected(long waitForConnection)
-      throws TimeoutException {
+          throws TimeoutException, InterruptedException {
     log.info("Waiting for client to connect to ZooKeeper");
-    long expire = System.nanoTime() + TimeUnit.NANOSECONDS.convert(waitForConnection, TimeUnit.MILLISECONDS);
-    long left = 1;
-    while (!connected && left > 0) {
-      if (isClosed()) {
-        throw new AlreadyClosedException();
-      }
-      try {
-        wait(250);
-      } catch (InterruptedException e) {
-        Thread.currentThread().interrupt();
-        throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, e);
+    TimeOut timeout = new TimeOut(waitForConnection, TimeUnit.MILLISECONDS, TimeSource.NANO_TIME);
+    boolean success = false;
+    while (!success) {
+      if (client.isConnected()) {
+        connected();
+        break;
       }
-      left = expire - System.nanoTime();
-    }
-    synchronized (this) {
-      if (!connected) {
+      if (timeout.hasTimedOut()) {
         throw new TimeoutException("Could not connect to ZooKeeper " + zkServerAddress + " within " + waitForConnection + " ms");
       }
+      success = connectedLatch.await(250, TimeUnit.MILLISECONDS);
     }
+
     log.info("Client is connected to ZooKeeper");
   }
 
-  public synchronized void waitForDisconnected(long timeout)
+  public synchronized void waitForDisconnected(long waitForDisconnected)
       throws InterruptedException, TimeoutException {
-    long expire = System.nanoTime() + TimeUnit.NANOSECONDS.convert(timeout, TimeUnit.MILLISECONDS);
-    long left = timeout;
-    while (connected && left > 0) {
-      wait(250);
-      left = expire - System.nanoTime();
-    }
-    if (connected) {
-      throw new TimeoutException("Did not disconnect");
+    TimeOut timeout = new TimeOut(waitForDisconnected, TimeUnit.MILLISECONDS, TimeSource.NANO_TIME);
+    boolean success = false;
+    while (!success) {
+      if (client.isConnected()) {
+        connected();
+        break;
+      }
+      if (timeout.hasTimedOut()) {
+        throw new TimeoutException("Timeout waiting to disconnect from ZooKeeper " + zkServerAddress + " within " + waitForDisconnected + " ms");
+      }
+      success = disconnectedLatch.await(250, TimeUnit.MILLISECONDS);
     }
   }
 
diff --git a/solr/solrj/src/java/org/apache/solr/common/cloud/SolrZkClient.java b/solr/solrj/src/java/org/apache/solr/common/cloud/SolrZkClient.java
index e5ee667..17f1637 100644
--- a/solr/solrj/src/java/org/apache/solr/common/cloud/SolrZkClient.java
+++ b/solr/solrj/src/java/org/apache/solr/common/cloud/SolrZkClient.java
@@ -102,11 +102,11 @@ public class SolrZkClient implements Closeable {
 
   private final ZkClientConnectionStrategy strat;
 
-  private ConnectionManager connManager;
+  private volatile ConnectionManager connManager;
 
   private volatile SolrZooKeeper keeper;
 
-  private ZkCmdExecutor zkCmdExecutor;
+  private volatile ZkCmdExecutor zkCmdExecutor;
 
   private final ExecutorService zkCallbackExecutor =
           new ThreadPoolExecutor(1, 1,
@@ -144,12 +144,11 @@ public class SolrZkClient implements Closeable {
       ExecutorUtil.newMDCAwareSingleThreadExecutor(new SolrNamedThreadFactory("zkConnectionManagerCallback"));
 
   private volatile boolean isClosed = false;
-  private ZkClientConnectionStrategy zkClientConnectionStrategy;
-  private int zkClientTimeout;
+  private volatile ZkClientConnectionStrategy zkClientConnectionStrategy;
+  private volatile int zkClientTimeout;
   private volatile ZkACLProvider zkACLProvider;
-  private String zkServerAddress;
-
-  private IsClosed higherLevelIsClosed;
+  private volatile String zkServerAddress;
+  private volatile IsClosed higherLevelIsClosed;
 
   public int getZkClientTimeout() {
     return zkClientTimeout;
diff --git a/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/JDBCStreamTest.java b/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/JDBCStreamTest.java
index 116703a..341b889 100644
--- a/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/JDBCStreamTest.java
+++ b/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/JDBCStreamTest.java
@@ -46,6 +46,7 @@ import org.apache.solr.cloud.SolrCloudTestCase;
 import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.BeforeClass;
+import org.junit.Ignore;
 import org.junit.Test;
 
 /**
@@ -53,6 +54,7 @@ import org.junit.Test;
 
 @SuppressPointFields(bugUrl="https://issues.apache.org/jira/browse/SOLR-10960")
 @LuceneTestCase.SuppressCodecs({"Lucene3x", "Lucene40","Lucene41","Lucene42","Lucene45"})
+@Ignore // nocommit flakey
 public class JDBCStreamTest extends SolrCloudTestCase {
 
   private static final String COLLECTIONORALIAS = "jdbc";


[lucene-solr] 01/02: #163 - Fix javadoc.

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
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git

commit 5644d48a256b174f42528315baad9227dca56a8e
Author: markrmiller@gmail.com <ma...@gmail.com>
AuthorDate: Tue Jul 14 19:58:42 2020 -0500

    #163 - Fix javadoc.
---
 .../test/org/apache/solr/cloud/cdcr/BaseCdcrDistributedZkTest.java    | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/solr/core/src/test/org/apache/solr/cloud/cdcr/BaseCdcrDistributedZkTest.java b/solr/core/src/test/org/apache/solr/cloud/cdcr/BaseCdcrDistributedZkTest.java
index 87bdac1..a495be7 100644
--- a/solr/core/src/test/org/apache/solr/cloud/cdcr/BaseCdcrDistributedZkTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/cdcr/BaseCdcrDistributedZkTest.java
@@ -90,10 +90,6 @@ import static org.apache.solr.handler.admin.CoreAdminHandler.RESPONSE_STATUS;
  * be created per core.
  * </p>
  * <p>
- * The source and target collection can be reinitialised at will by calling {@link #clearSourceCollection()} and
- * {@link #clearTargetCollection()}. After reinitialisation, a collection will have a new fresh index and update log.
- * </p>
- * <p>
  * Servers can be restarted at will by calling
  * {@link #restartServer(BaseCdcrDistributedZkTest.CloudJettyRunner)} or
  * {@link #restartServers(java.util.List)}.