You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by sh...@apache.org on 2017/03/30 11:39:38 UTC

[07/31] lucene-solr:feature/autoscaling: SOLR-9835: TestInjection.waitForInSyncWithLeader() should rely on commit point of searcher

SOLR-9835: TestInjection.waitForInSyncWithLeader() should rely on commit point of searcher


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/f8166f3d
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/f8166f3d
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/f8166f3d

Branch: refs/heads/feature/autoscaling
Commit: f8166f3d80595918cda8cf80ac747318de6f9813
Parents: 83541fa
Author: Cao Manh Dat <da...@apache.org>
Authored: Mon Mar 27 16:44:22 2017 +0700
Committer: Shalin Shekhar Mangar <sh...@apache.org>
Committed: Thu Mar 30 17:09:04 2017 +0530

----------------------------------------------------------------------
 .../org/apache/solr/util/TestInjection.java     | 25 +++++++++++++-------
 1 file changed, 17 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f8166f3d/solr/core/src/java/org/apache/solr/util/TestInjection.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/util/TestInjection.java b/solr/core/src/java/org/apache/solr/util/TestInjection.java
index 97291a1..15f5b3d 100644
--- a/solr/core/src/java/org/apache/solr/util/TestInjection.java
+++ b/solr/core/src/java/org/apache/solr/util/TestInjection.java
@@ -28,6 +28,7 @@ import java.util.concurrent.atomic.AtomicInteger;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import org.apache.lucene.search.IndexSearcher;
 import org.apache.solr.client.solrj.impl.HttpSolrClient;
 import org.apache.solr.client.solrj.request.QueryRequest;
 import org.apache.solr.cloud.ZkController;
@@ -43,6 +44,7 @@ import org.apache.solr.common.util.SuppressForbidden;
 import org.apache.solr.core.CoreContainer;
 import org.apache.solr.core.SolrCore;
 import org.apache.solr.handler.ReplicationHandler;
+import org.apache.solr.search.SolrIndexSearcher;
 import org.apache.solr.update.SolrIndexWriter;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -363,7 +365,8 @@ public class TestInjection {
   @SuppressForbidden(reason = "Need currentTimeMillis, because COMMIT_TIME_MSEC_KEY use currentTimeMillis as value")
   public static boolean waitForInSyncWithLeader(SolrCore core, ZkController zkController, String collection, String shardId) throws InterruptedException {
     if (waitForReplicasInSync == null) return true;
-
+    log.info("Start waiting for replica in sync with leader");
+    long currentTime = System.currentTimeMillis();
     Pair<Boolean,Integer> pair = parseValue(waitForReplicasInSync);
     boolean enabled = pair.first();
     if (!enabled) return true;
@@ -380,14 +383,20 @@ public class TestInjection {
 
           NamedList<Object> response = leaderClient.request(new QueryRequest(params));
           long leaderVersion = (long) ((NamedList)response.get("details")).get("indexVersion");
-
-          String localVersion = core.getDeletionPolicy().getLatestCommit().getUserData().get(SolrIndexWriter.COMMIT_TIME_MSEC_KEY);
-          if (localVersion == null && leaderVersion == 0 && !core.getUpdateHandler().getUpdateLog().hasUncommittedChanges()) return true;
-          if (localVersion != null && Long.parseLong(localVersion) == leaderVersion && (leaderVersion >= t || i >= 6)) {
-            return true;
-          } else {
-            Thread.sleep(500);
+          RefCounted<SolrIndexSearcher> searcher = core.getSearcher();
+          try {
+            String localVersion = searcher.get().getIndexReader().getIndexCommit().getUserData().get(SolrIndexWriter.COMMIT_TIME_MSEC_KEY);
+            if (localVersion == null && leaderVersion == 0 && !core.getUpdateHandler().getUpdateLog().hasUncommittedChanges()) return true;
+            if (localVersion != null && Long.parseLong(localVersion) == leaderVersion && (leaderVersion >= t || i >= 6)) {
+              log.info("Waiting time for replica in sync with leader: {}", System.currentTimeMillis()-currentTime);
+              return true;
+            } else {
+              Thread.sleep(500);
+            }
+          } finally {
+            searcher.decref();
           }
+
         }
       }