Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
None
-
None
-
None
Description
From https://jenkins.thetaphi.de/job/Lucene-Solr-7.x-MacOSX/551/:
[junit4] 2> 750759 INFO (TEST-TestReplicationHandler.doTestRepeater-seed#[7078A21248E0962E]) [ ] o.a.s.h.TestReplicationHandler Waited for 0ms and found 3 docs [junit4] 2> 750760 INFO (qtp351238853-8844) [ x:collection1] o.a.s.c.S.Request [collection1] webapp=/solr path=/replication params={_trace=getDetails&qt=/replication&wt=javabin&version=2&command=details} status=0 QTime=1 [junit4] 2> 750761 INFO (qtp351238853-8846) [ x:collection1] o.a.s.c.S.Request [collection1] webapp=/solr path=/replication params={_trace=getDetails&qt=/replication&wt=javabin&version=2&command=details} status=0 QTime=0 [junit4] 2> 750769 WARN (qtp738580099-8901) [ x:collection1] o.a.s.h.ReplicationHandler Exception while invoking 'details' method for replication on master [junit4] 2> org.apache.solr.client.solrj.SolrServerException: Server refused connection at: http://127.0.0.1:TEST_PORT/solr [junit4] 2> at org.apache.solr.client.solrj.impl.HttpSolrClient.executeMethod(HttpSolrClient.java:650) ~[java/:?] [junit4] 2> at org.apache.solr.client.solrj.impl.HttpSolrClient.request(HttpSolrClient.java:255) ~[java/:?] [junit4] 2> at org.apache.solr.client.solrj.impl.HttpSolrClient.request(HttpSolrClient.java:244) ~[java/:?] [junit4] 2> at org.apache.solr.client.solrj.SolrClient.request(SolrClient.java:1219) ~[java/:?] [junit4] 2> at org.apache.solr.handler.IndexFetcher.getDetails(IndexFetcher.java:1852) ~[java/:?]
I looked at TestReplicationHandler Jenkins failure logs from the last couple days, and every single one has the same pattern: a WARN message from doTestRepeater() about failure to connect with a URL containing port TEST_PORT (rather than a numeric value).
On the dev list Dawid Weiss wrote:
I see this in TestReplicationHandler:
/** * character copy of file using UTF-8. If port is non-null, will be substituted any time "TEST_PORT" is found. */ private static void copyFile(File src, File dst, Integer port, boolean internalCompression) throws IOException { BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(src), StandardCharsets.UTF_8)); Writer out = new OutputStreamWriter(new FileOutputStream(dst), StandardCharsets.UTF_8); for (String line = in.readLine(); null != line; line = in.readLine()) { if (null != port) line = line.replace("TEST_PORT", port.toString());So it seems port is allowed to be null and then won't be substituted.
This looks like a bug in the test scaffolding: this situation
shouldn't be allowed; if a port cannot be acquired the test should
fail much sooner?
I attached a patch that includes the test port on the repeater SolrInstance constructor (previously was specified as null), and also insures that the master port is set as the test port prior to copying all non-master config files (this was already done in a few places, but not all).
I beasted 100 iterations of TestReplicationHandler with the patch, 31 of which failed for various reasons, and the WARN log entries about TEST_PORT did not occur in any of the logs.
Committing shortly.