This is an automated email from the ASF dual-hosted git repository. ab pushed a commit to branch jira/solr-15232 in repository https://gitbox.apache.org/repos/asf/solr.git
commit 0ea9fb8e596e37851e59ea1a8d04118275dedfcb Author: Andrzej Bialecki <[email protected]> AuthorDate: Tue Apr 6 17:31:39 2021 +0200 SOLR-15232: Fix precommit errors. --- .../java/org/apache/solr/core/CoreContainer.java | 12 +++- .../org/apache/solr/util/scripting/Script.java | 66 +++++++++++++--------- .../apache/solr/util/scripting/package-info.java | 24 ++++++++ .../apache/solr/util/scripting/ScriptingTest.java | 17 ++++++ 4 files changed, 90 insertions(+), 29 deletions(-) diff --git a/solr/core/src/java/org/apache/solr/core/CoreContainer.java b/solr/core/src/java/org/apache/solr/core/CoreContainer.java index 3c21593..adc52d1 100644 --- a/solr/core/src/java/org/apache/solr/core/CoreContainer.java +++ b/solr/core/src/java/org/apache/solr/core/CoreContainer.java @@ -952,7 +952,9 @@ public class CoreContainer { try { script = Script.parseResource(loader, solrClient, nodeName, resourceName); } catch (Exception e) { - log.warn("Error loading script, ignoring " + resourceName, e); + if (log.isWarnEnabled()) { + log.warn("Error loading script, ignoring {}: {}", resourceName, e); + } script = null; } final Script finalScript = script; @@ -960,9 +962,13 @@ public class CoreContainer { try { finalScript.run(); } catch (Exception e) { - log.warn("Error running script " + resourceName, e); + if (log.isWarnEnabled()) { + log.warn("Error running script {}: {}", resourceName, e); + } if (!inShutdown && finalScript.getErrorHandling() == Script.ErrorHandling.FATAL) { - log.warn("Script error handling set to FATAL - shutting down."); + if (log.isWarnEnabled()) { + log.warn("Script error handling set to FATAL - shutting down."); + } shutdown(); } } diff --git a/solr/core/src/java/org/apache/solr/util/scripting/Script.java b/solr/core/src/java/org/apache/solr/util/scripting/Script.java index ab8d167..48884e1 100644 --- a/solr/core/src/java/org/apache/solr/util/scripting/Script.java +++ b/solr/core/src/java/org/apache/solr/util/scripting/Script.java @@ -46,7 +46,6 @@ import org.slf4j.LoggerFactory; import java.io.Closeable; import java.io.IOException; import java.io.InputStream; -import java.io.PrintStream; import java.lang.invoke.MethodHandles; import java.net.URLDecoder; import java.util.ArrayList; @@ -122,7 +121,6 @@ public class Script implements Closeable { public final List<OpResult> opResults = new ArrayList<>(); private ExecutorService executorService; private final boolean shouldCloseExecutor; - public PrintStream console = System.err; public boolean verbose; public boolean abortLoop; public boolean abortScript; @@ -374,18 +372,25 @@ public class Script implements Closeable { } for (int i = 0; i < iterations; i++) { if (script.abortLoop) { - log.info(" -- abortLoop requested, aborting after {} iterations.", i); + if (log.isDebugEnabled()) { + log.debug(" -- abortLoop requested, aborting after {} iterations.", i); + } return Map.of("iterations", i, "state", "aborted"); } script.context.put(LOOP_ITER_PROP, String.valueOf(i)); - log.debug(" * iter {} :", i + 1); // logOK + int k = i + 1; // can't use a plus in a logging stmt :) + if (log.isDebugEnabled()) { + log.debug(" * iter {} :", k); + } for (ScriptOp op : ops) { if (log.isInfoEnabled()) { log.info(" - {}\t{})", op.getClass().getSimpleName(), op.params); } script.execOp(op); if (script.abortLoop) { - log.info(" -- abortLoop requested, aborting after {} iterations.", i); + if (log.isDebugEnabled()) { + log.debug(" -- abortLoop requested, aborting after {} iterations.", i); + } return Map.of("iterations", i, "state", "aborted"); } } @@ -473,44 +478,50 @@ public class Script implements Closeable { */ public static class DumpOp extends ScriptOp { + private void logLine(String format, Object... params) { + if (log.isInfoEnabled()) { + log.info(format, params); + } + } + @Override public Object execute(Script script) throws Exception { - log.info("========= START script dump =========="); - log.info("------ Script Operations --------"); + logLine("========= START script dump =========="); + logLine("------ Script Operations --------"); for (int i = 0; i < script.ops.size(); i++) { - log.info("{}.\t{}", i + 1, script.ops.get(i)); + logLine("{}.\t{}", i + 1, script.ops.get(i)); } - log.info("------ Script Execution --------"); + logLine("------ Script Execution --------"); for (int i = 0; i < script.opResults.size(); i++) { OpResult res = script.opResults.get(i); dumpResult(res, i + 1, 0); } - log.info("------ Final Script Context --------"); + logLine("------ Final Script Context --------"); TreeMap<String, Object> map = new TreeMap<>(script.context); map.forEach((key, value) -> { if (value instanceof Collection) { @SuppressWarnings("unchecked") Collection<Object> collection = (Collection<Object>) value; - log.info("{} size={}", key, collection.size()); + logLine("{} size={}", key, collection.size()); int i = 1; for (Object o : collection) { - log.info("\t{}.\t{}", i, o); + logLine("\t{}.\t{}", i, o); i++; } } else if (value instanceof Map) { @SuppressWarnings("unchecked") Map<String, Object> m = (Map<String, Object>) value; - log.info("{} size={}", key, m.size()); - m.forEach((k, v) -> log.info("\t{}\t{}", k, v)); + logLine("{} size={}", key, m.size()); + m.forEach((k, v) -> logLine("\t{}\t{}", k, v)); } else { if (value instanceof OpResult) { dumpResult((OpResult) value, 0, 0); } else { - log.info("{}\t{}", key, value); + logLine("{}\t{}", key, value); } } }); - log.info("========= END script dump =========="); + logLine("========= END script dump =========="); return null; } @@ -520,35 +531,35 @@ public class Script implements Closeable { indentSb.append('\t'); } String indentStr = indentSb.toString(); - log.info("{}{}.\t{}", indentStr, index, res.op); + logLine("{}{}.\t{}", indentStr, index, res.op); if (res.result == null) { return; } if (res.result instanceof Collection) { @SuppressWarnings("unchecked") Collection<Object> col = (Collection<Object>) res.result; - log.info("{}\tRes: size={}", indentStr, col.size()); + logLine("{}\tRes: size={}", indentStr, col.size()); int k = 1; for (Object o : col) { if (o instanceof OpResult) { // LOOP op results dumpResult((OpResult) o, k, indent + 1); } else { - log.info("{}\t-\t{}. {}", indentStr, k, o); + logLine("{}\t-\t{}. {}", indentStr, k, o); } k++; } } else if (res.result instanceof Map) { @SuppressWarnings("unchecked") Map<String, Object> map = (Map<String, Object>) res.result; - log.info("{}\tRes: size={}", indentStr, map.size()); - map.forEach((k, v) -> log.info("{}\t-\t{}\t{}", indentStr, k, v)); + logLine("{}\tRes: size={}", indentStr, map.size()); + map.forEach((k, v) -> logLine("{}\t-\t{}\t{}", indentStr, k, v)); } else if (res.result instanceof MapWriter) { @SuppressWarnings("unchecked") MapWriter mw = (MapWriter) res.result; - log.info("{}\tRes: size={}", indentStr, mw._size()); - log.info("{}\t{}", indentStr, mw.jsonStr()); + logLine("{}\tRes: size={}", indentStr, mw._size()); + logLine("{}\t{}", indentStr, mw.jsonStr()); } else { - log.info("{}\tRes: {}", indentStr, res.result); + logLine("{}\tRes: {}", indentStr, res.result); } } } @@ -885,12 +896,15 @@ public class Script implements Closeable { try { for (int i = 0; i < ops.size(); i++) { if (abortScript) { - log.info("-- abortScript requested, aborting after {} ops.", i); + if (log.isInfoEnabled()) { + log.info("-- abortScript requested, aborting after {} ops.", i); + } return; } ScriptOp op = ops.get(i); + int k = i + 1; // can't use a plus in a logging stmt if (log.isInfoEnabled()) { - log.info("{}.\t{}\t{}", i + 1, op.getClass().getSimpleName(), op.initParams); // logOk + log.info("{}.\t{}\t{}", k, op.getClass().getSimpleName(), op.initParams); } execOp(op); } diff --git a/solr/core/src/java/org/apache/solr/util/scripting/package-info.java b/solr/core/src/java/org/apache/solr/util/scripting/package-info.java new file mode 100644 index 0000000..7512d87 --- /dev/null +++ b/solr/core/src/java/org/apache/solr/util/scripting/package-info.java @@ -0,0 +1,24 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * A simple scripting language to execute a series of common collection-specific + * commands. This is used to support Solr node init / shutdown scripts. + */ +package org.apache.solr.util.scripting; + + diff --git a/solr/core/src/test/org/apache/solr/util/scripting/ScriptingTest.java b/solr/core/src/test/org/apache/solr/util/scripting/ScriptingTest.java index 161ed1d..34f0f5b 100644 --- a/solr/core/src/test/org/apache/solr/util/scripting/ScriptingTest.java +++ b/solr/core/src/test/org/apache/solr/util/scripting/ScriptingTest.java @@ -1,3 +1,20 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package org.apache.solr.util.scripting; import org.apache.solr.client.solrj.cloud.SolrCloudManager;
