You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by mk...@apache.org on 2019/06/28 14:49:54 UTC
[lucene-solr] branch master updated: SOLR-13577: spin until slave
got a replication failure while master is down.
This is an automated email from the ASF dual-hosted git repository.
mkhl pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git
The following commit(s) were added to refs/heads/master by this push:
new d54555c SOLR-13577: spin until slave got a replication failure while master is down.
d54555c is described below
commit d54555c7575c86bb68581c6bbe5057c4725948dd
Author: Mikhail Khludnev <mk...@apache.org>
AuthorDate: Fri Jun 28 17:28:21 2019 +0300
SOLR-13577: spin until slave got a replication failure while master is down.
---
.../solr/handler/TestReplicationHandler.java | 35 +++++++++++++++-------
1 file changed, 25 insertions(+), 10 deletions(-)
diff --git a/solr/core/src/test/org/apache/solr/handler/TestReplicationHandler.java b/solr/core/src/test/org/apache/solr/handler/TestReplicationHandler.java
index c080ba3..d608a56 100644
--- a/solr/core/src/test/org/apache/solr/handler/TestReplicationHandler.java
+++ b/solr/core/src/test/org/apache/solr/handler/TestReplicationHandler.java
@@ -675,28 +675,34 @@ public class TestReplicationHandler extends SolrTestCaseJ4 {
masterJetty.stop();
- // poll interval on slave is 1 second, so we just sleep for a few seconds
- Thread.sleep(2000);
-
- masterJetty.start();
-
- // poll interval on slave is 1 second, so we just sleep for a few seconds
for(int retries=0; ;retries++) {
+
+ Thread.yield(); // might not be necessary at all
+ // poll interval on slave is 1 second, so we just sleep for a few seconds
Thread.sleep(2000);
+
+ NamedList<Object> slaveDetails=null;
try {
- int failed = Integer.parseInt(getSlaveDetails("timesFailed"));
+ slaveDetails = getSlaveDetails();
+ int failed = Integer.parseInt(getStringOrNull(slaveDetails,"timesFailed"));
if (previousTimesFailed != null) {
assertTrue(failed > previousTimesFailed);
}
- assertEquals(1, Integer.parseInt(getSlaveDetails("timesIndexReplicated")) - failed);
+ assertEquals(1, Integer.parseInt(getStringOrNull(slaveDetails,"timesIndexReplicated")) - failed);
break;
} catch (NumberFormatException | AssertionError notYet) {
+ log.info((retries+1)+"th attempt failure on " + notYet+" details are "+slaveDetails);
if (retries>9) {
+ log.error("giving up: ", notYet);
throw notYet;
}
}
}
+
+ masterJetty.start();
+ // poll interval on slave is 1 second, so we just sleep for a few seconds
+ Thread.sleep(2000);
//get docs from slave and assert that they are still the same as before
slaveQueryRsp = rQuery(nDocs, "*:*", slaveClient);
slaveQueryResult = (SolrDocumentList) slaveQueryRsp.get("response");
@@ -708,6 +714,16 @@ public class TestReplicationHandler extends SolrTestCaseJ4 {
}
private String getSlaveDetails(String keyName) throws SolrServerException, IOException {
+ NamedList<Object> details = getSlaveDetails();
+ return getStringOrNull(details, keyName);
+ }
+
+ private String getStringOrNull(NamedList<Object> details, String keyName) {
+ Object o = details.get(keyName);
+ return o != null ? o.toString() : null;
+ }
+
+ private NamedList<Object> getSlaveDetails() throws SolrServerException, IOException {
ModifiableSolrParams params = new ModifiableSolrParams();
params.set(CommonParams.QT, "/replication");
params.set("command", "details");
@@ -716,8 +732,7 @@ public class TestReplicationHandler extends SolrTestCaseJ4 {
// details/slave/timesIndexReplicated
NamedList<Object> details = (NamedList<Object>) response.getResponse().get("details");
NamedList<Object> slave = (NamedList<Object>) details.get("slave");
- Object o = slave.get(keyName);
- return o != null ? o.toString() : null;
+ return slave;
}
@Test