mirror of https://github.com/apache/lucene.git
SOLR-9745: fix solr.cmd to print errors from invoked script
This commit is contained in:
parent
52632cfc0c
commit
65b4530fb3
|
@ -190,6 +190,8 @@ Other Changes
|
||||||
|
|
||||||
* SOLR-8906: Make transient core cache pluggable (Erick Erickson)
|
* SOLR-8906: Make transient core cache pluggable (Erick Erickson)
|
||||||
|
|
||||||
|
* SOLR-9745: print errors from solr.cmd (Gopikannan Venugopalsamy via Mikhail Khludnev)
|
||||||
|
|
||||||
================== 6.5.1 ==================
|
================== 6.5.1 ==================
|
||||||
|
|
||||||
Bug Fixes
|
Bug Fixes
|
||||||
|
|
|
@ -62,6 +62,7 @@ import org.apache.commons.cli.Options;
|
||||||
import org.apache.commons.cli.ParseException;
|
import org.apache.commons.cli.ParseException;
|
||||||
import org.apache.commons.exec.DefaultExecuteResultHandler;
|
import org.apache.commons.exec.DefaultExecuteResultHandler;
|
||||||
import org.apache.commons.exec.DefaultExecutor;
|
import org.apache.commons.exec.DefaultExecutor;
|
||||||
|
import org.apache.commons.exec.ExecuteException;
|
||||||
import org.apache.commons.exec.Executor;
|
import org.apache.commons.exec.Executor;
|
||||||
import org.apache.commons.exec.OS;
|
import org.apache.commons.exec.OS;
|
||||||
import org.apache.commons.exec.environment.EnvironmentUtils;
|
import org.apache.commons.exec.environment.EnvironmentUtils;
|
||||||
|
@ -2928,18 +2929,25 @@ public class SolrCLI {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
executor.execute(org.apache.commons.exec.CommandLine.parse(startCmd), startEnv, new DefaultExecuteResultHandler());
|
DefaultExecuteResultHandler handler = new DefaultExecuteResultHandler();
|
||||||
|
executor.execute(org.apache.commons.exec.CommandLine.parse(startCmd), startEnv, handler);
|
||||||
|
|
||||||
// brief wait before proceeding on Windows
|
// wait for execution.
|
||||||
try {
|
try {
|
||||||
Thread.sleep(3000);
|
handler.waitFor();
|
||||||
} catch (InterruptedException ie) {
|
} catch (InterruptedException ie) {
|
||||||
// safe to ignore ...
|
// safe to ignore ...
|
||||||
Thread.interrupted();
|
Thread.interrupted();
|
||||||
}
|
}
|
||||||
|
if (handler.getExitValue() != 0) {
|
||||||
|
throw new Exception("Failed to start Solr using command: "+startCmd+" Exception : "+handler.getException());
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
|
try {
|
||||||
code = executor.execute(org.apache.commons.exec.CommandLine.parse(startCmd));
|
code = executor.execute(org.apache.commons.exec.CommandLine.parse(startCmd));
|
||||||
|
} catch(ExecuteException e){
|
||||||
|
throw new Exception("Failed to start Solr using command: "+startCmd+" Exception : "+ e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (code != 0)
|
if (code != 0)
|
||||||
throw new Exception("Failed to start Solr using command: "+startCmd);
|
throw new Exception("Failed to start Solr using command: "+startCmd);
|
||||||
|
|
|
@ -482,4 +482,42 @@ public class TestSolrCLIRunExample extends SolrTestCaseJ4 {
|
||||||
// stop the test instance
|
// stop the test instance
|
||||||
executor.execute(org.apache.commons.exec.CommandLine.parse("bin/solr stop -p "+bindPort));
|
executor.execute(org.apache.commons.exec.CommandLine.parse("bin/solr stop -p "+bindPort));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testFailExecuteScript() throws Exception {
|
||||||
|
File solrHomeDir = new File(ExternalPaths.SERVER_HOME);
|
||||||
|
if (!solrHomeDir.isDirectory())
|
||||||
|
fail(solrHomeDir.getAbsolutePath()+" not found and is required to run this test!");
|
||||||
|
|
||||||
|
Path tmpDir = createTempDir();
|
||||||
|
File solrExampleDir = tmpDir.toFile();
|
||||||
|
File solrServerDir = solrHomeDir.getParentFile();
|
||||||
|
|
||||||
|
// need a port to start the example server on
|
||||||
|
int bindPort = -1;
|
||||||
|
try (ServerSocket socket = new ServerSocket(0)) {
|
||||||
|
bindPort = socket.getLocalPort();
|
||||||
|
}
|
||||||
|
|
||||||
|
File toExecute = new File(tmpDir.toString(), "failExecuteScript");
|
||||||
|
assertTrue("Should have been able to create file '" + toExecute.getAbsolutePath() + "' ", toExecute.createNewFile());
|
||||||
|
|
||||||
|
String[] toolArgs = new String[] {
|
||||||
|
"-e", "techproducts",
|
||||||
|
"-serverDir", solrServerDir.getAbsolutePath(),
|
||||||
|
"-exampleDir", solrExampleDir.getAbsolutePath(),
|
||||||
|
"-p", String.valueOf(bindPort),
|
||||||
|
"-script", toExecute.getAbsolutePath().toString()
|
||||||
|
};
|
||||||
|
|
||||||
|
// capture tool output to stdout
|
||||||
|
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||||
|
PrintStream stdoutSim = new PrintStream(baos, true, StandardCharsets.UTF_8.name());
|
||||||
|
|
||||||
|
DefaultExecutor executor = new DefaultExecutor();
|
||||||
|
|
||||||
|
SolrCLI.RunExampleTool tool = new SolrCLI.RunExampleTool(executor, System.in, stdoutSim);
|
||||||
|
int code = tool.runTool(SolrCLI.processCommandLineArgs(SolrCLI.joinCommonAndToolOptions(tool.getOptions()), toolArgs));
|
||||||
|
assertTrue("Execution should have failed with return code 1", code == 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue