From c01f7a3d05b0601d366545e9dcf08fac6e83c1a5 Mon Sep 17 00:00:00 2001 From: Eric Pugh Date: Sat, 5 Apr 2025 17:38:56 +0200 Subject: [PATCH 01/17] Simplify life by using EnvUtil to avoid extra steps. --- solr/bin/solr | 10 +--------- solr/bin/solr.cmd | 8 -------- .../org/apache/solr/servlet/LoadAdminUiServlet.java | 6 ++++-- .../src/resources/EnvToSyspropMappings.properties | 1 - 4 files changed, 5 insertions(+), 20 deletions(-) diff --git a/solr/bin/solr b/solr/bin/solr index 3466cdc6b23..2e150cae07d 100755 --- a/solr/bin/solr +++ b/solr/bin/solr @@ -1156,14 +1156,6 @@ else SECURITY_MANAGER_OPTS=() fi -# Enable Admin UI by default, and give the option for users to disable it -if [ "${SOLR_ADMIN_UI_DISABLED:-false}" == "true" ]; then - SOLR_ADMIN_UI="-DdisableAdminUI=true" - echo -e "ADMIN UI Disabled" -else - SOLR_ADMIN_UI="-DdisableAdminUI=false" -fi - JAVA_MEM_OPTS=() if [ -z "${SOLR_HEAP:-}" ] && [ -n "${SOLR_JAVA_MEM:-}" ]; then JAVA_MEM_OPTS=($SOLR_JAVA_MEM) @@ -1316,7 +1308,7 @@ function start_solr() { # OOME is thrown. Program operation after OOME is unpredictable. "-XX:+CrashOnOutOfMemoryError" "-XX:ErrorFile=${SOLR_LOGS_DIR}/jvm_crash_%p.log" \ "-Djetty.home=$SOLR_SERVER_DIR" "-Dsolr.solr.home=$SOLR_HOME" "-Dsolr.install.dir=$SOLR_TIP" "-Dsolr.install.symDir=$SOLR_TIP_SYM" \ - "-Dsolr.default.confdir=$DEFAULT_CONFDIR" "${LOG4J_CONFIG[@]}" "${SCRIPT_SOLR_OPTS[@]}" "${SECURITY_MANAGER_OPTS[@]}" "${SOLR_ADMIN_UI}" "${SOLR_OPTS[@]}") + "-Dsolr.default.confdir=$DEFAULT_CONFDIR" "${LOG4J_CONFIG[@]}" "${SCRIPT_SOLR_OPTS[@]}" "${SECURITY_MANAGER_OPTS[@]}" "${SOLR_OPTS[@]}") mk_writable_dir "$SOLR_LOGS_DIR" "Logs" if [[ -n "${SOLR_HEAP_DUMP_DIR:-}" ]]; then diff --git a/solr/bin/solr.cmd b/solr/bin/solr.cmd index bb2b3917a0e..d9d94065f57 100755 --- a/solr/bin/solr.cmd +++ b/solr/bin/solr.cmd @@ -1006,13 +1006,6 @@ IF "%SOLR_SECURITY_MANAGER_ENABLED%"=="true" ( -Dsolr.internal.network.permission=* ) -REM Enable ADMIN UI by default, and give the option for users to disable it -IF "%SOLR_ADMIN_UI_DISABLED%"=="true" ( - set DISABLE_ADMIN_UI="true" -) else ( - set DISABLE_ADMIN_UI="false" -) - IF NOT "%SOLR_HEAP%"=="" set SOLR_JAVA_MEM=-Xms%SOLR_HEAP% -Xmx%SOLR_HEAP% IF "%SOLR_JAVA_MEM%"=="" set SOLR_JAVA_MEM=-Xms512m -Xmx512m IF "%SOLR_JAVA_STACK_SIZE%"=="" set SOLR_JAVA_STACK_SIZE=-Xss256k @@ -1094,7 +1087,6 @@ REM OOME is thrown. Program operation after OOME is unpredictable. set START_OPTS=%START_OPTS% -XX:+CrashOnOutOfMemoryError set START_OPTS=%START_OPTS% -XX:ErrorFile="%SOLR_LOGS_DIR%\jvm_crash_%%p.log" set START_OPTS=%START_OPTS% !GC_TUNE! %GC_LOG_OPTS% -set START_OPTS=%START_OPTS% -DdisableAdminUI=%DISABLE_ADMIN_UI% IF NOT "!CLOUD_MODE_OPTS!"=="" set "START_OPTS=%START_OPTS% !CLOUD_MODE_OPTS!" IF NOT "!IP_ACL_OPTS!"=="" set "START_OPTS=%START_OPTS% !IP_ACL_OPTS!" IF NOT "!REMOTE_JMX_OPTS!"=="" set "START_OPTS=%START_OPTS% !REMOTE_JMX_OPTS!" diff --git a/solr/core/src/java/org/apache/solr/servlet/LoadAdminUiServlet.java b/solr/core/src/java/org/apache/solr/servlet/LoadAdminUiServlet.java index 436906d3a69..7ea682b2564 100644 --- a/solr/core/src/java/org/apache/solr/servlet/LoadAdminUiServlet.java +++ b/solr/core/src/java/org/apache/solr/servlet/LoadAdminUiServlet.java @@ -29,6 +29,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.io.output.CloseShieldOutputStream; +import org.apache.solr.common.util.EnvUtils; import org.apache.solr.core.CoreContainer; import org.apache.solr.core.SolrCore; @@ -39,9 +40,10 @@ */ public final class LoadAdminUiServlet extends HttpServlet { - // check system properties for whether or not admin UI is disabled, default is false + // check system properties for whether the admin UI is disabled, default is false private static final boolean disabled = - Boolean.parseBoolean(System.getProperty("disableAdminUI", "false")); + Boolean.parseBoolean(EnvUtils.getProperty("solr.admin.ui.disabled", "false")); + // Boolean.parseBoolean(System.getProperty("disableAdminUI", "false")); // list of comma separated URLs to inject into the CSP connect-src directive public static final String SYSPROP_CSP_CONNECT_SRC_URLS = "solr.ui.headers.csp.connect-src.urls"; diff --git a/solr/solrj/src/resources/EnvToSyspropMappings.properties b/solr/solrj/src/resources/EnvToSyspropMappings.properties index dcfa553961a..25a88faf097 100644 --- a/solr/solrj/src/resources/EnvToSyspropMappings.properties +++ b/solr/solrj/src/resources/EnvToSyspropMappings.properties @@ -6,7 +6,6 @@ # TODO: Deprecate non-standard sysprops and standardize on solr.foo.bar in Solr 10 AWS_PROFILE=aws.profile DEFAULT_CONFDIR=solr.default.confdir -SOLR_ADMIN_UI_DISABLED=disableAdminUI SOLR_ALWAYS_ON_TRACE_ID=solr.alwaysOnTraceId SOLR_AUTH_JWT_ALLOW_OUTBOUND_HTTP=solr.auth.jwt.allowOutboundHttp SOLR_CONFIG_SET_FORBIDDEN_FILE_TYPES=solrConfigSetForbiddenFileTypes From e5db4376a749682c6d284a774110f942cd119bfa Mon Sep 17 00:00:00 2001 From: Eric Pugh Date: Sat, 5 Apr 2025 17:56:58 +0200 Subject: [PATCH 02/17] Clear out previous look up way --- .../src/java/org/apache/solr/servlet/LoadAdminUiServlet.java | 1 - 1 file changed, 1 deletion(-) diff --git a/solr/core/src/java/org/apache/solr/servlet/LoadAdminUiServlet.java b/solr/core/src/java/org/apache/solr/servlet/LoadAdminUiServlet.java index 7ea682b2564..9135f035d7d 100644 --- a/solr/core/src/java/org/apache/solr/servlet/LoadAdminUiServlet.java +++ b/solr/core/src/java/org/apache/solr/servlet/LoadAdminUiServlet.java @@ -43,7 +43,6 @@ public final class LoadAdminUiServlet extends HttpServlet { // check system properties for whether the admin UI is disabled, default is false private static final boolean disabled = Boolean.parseBoolean(EnvUtils.getProperty("solr.admin.ui.disabled", "false")); - // Boolean.parseBoolean(System.getProperty("disableAdminUI", "false")); // list of comma separated URLs to inject into the CSP connect-src directive public static final String SYSPROP_CSP_CONNECT_SRC_URLS = "solr.ui.headers.csp.connect-src.urls"; From d1951026388823517d0742e8b06f3ca355c27800 Mon Sep 17 00:00:00 2001 From: Eric Pugh Date: Sat, 5 Apr 2025 18:07:20 +0200 Subject: [PATCH 03/17] EnvUtils has done it's magic, so use System.getProperty --- .../src/java/org/apache/solr/servlet/LoadAdminUiServlet.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/solr/core/src/java/org/apache/solr/servlet/LoadAdminUiServlet.java b/solr/core/src/java/org/apache/solr/servlet/LoadAdminUiServlet.java index 9135f035d7d..0f1e93ea467 100644 --- a/solr/core/src/java/org/apache/solr/servlet/LoadAdminUiServlet.java +++ b/solr/core/src/java/org/apache/solr/servlet/LoadAdminUiServlet.java @@ -29,7 +29,6 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.io.output.CloseShieldOutputStream; -import org.apache.solr.common.util.EnvUtils; import org.apache.solr.core.CoreContainer; import org.apache.solr.core.SolrCore; @@ -42,7 +41,7 @@ public final class LoadAdminUiServlet extends HttpServlet { // check system properties for whether the admin UI is disabled, default is false private static final boolean disabled = - Boolean.parseBoolean(EnvUtils.getProperty("solr.admin.ui.disabled", "false")); + Boolean.parseBoolean(System.getProperty("solr.admin.ui.disabled", "false")); // list of comma separated URLs to inject into the CSP connect-src directive public static final String SYSPROP_CSP_CONNECT_SRC_URLS = "solr.ui.headers.csp.connect-src.urls"; From 1d3adfef0549b553968da99a3c758c6956f51882 Mon Sep 17 00:00:00 2001 From: Eric Pugh Date: Sat, 5 Apr 2025 18:41:12 +0200 Subject: [PATCH 04/17] Align on solr.default.confdir pattern everywhere. --- solr/bin/solr | 7 ++++--- solr/bin/solr.cmd | 8 ++++---- solr/solrj/src/resources/EnvToSyspropMappings.properties | 1 - 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/solr/bin/solr b/solr/bin/solr index 2e150cae07d..9691fa0ee72 100755 --- a/solr/bin/solr +++ b/solr/bin/solr @@ -114,7 +114,7 @@ fi # Export variables we want to make visible to Solr sub-process for var in $(compgen -v); do - if [[ "$var" =~ ^(SOLR_.*|DEFAULT_CONFDIR|ZK_.*|GCS_BUCKET|GCS_.*|S3_.*|OTEL_.*|AWS_.*)$ ]]; then + if [[ "$var" =~ ^(SOLR_.*|ZK_.*|GCS_BUCKET|GCS_.*|S3_.*|OTEL_.*|AWS_.*)$ ]]; then export "${var?}" fi done @@ -1018,7 +1018,8 @@ elif [[ $SOLR_HOME != /* ]]; then fi # Set the default configset dir to be bootstrapped as _default -: "${DEFAULT_CONFDIR:="$SOLR_SERVER_DIR/solr/configsets/_default/conf"}" +: "${SOLR_DEFAULT_CONFDIR:="$SOLR_SERVER_DIR/solr/configsets/_default/conf"}" +export SOLR_DEFAULT_CONFDIR # This is quite hacky, but examples rely on a different log4j2.xml # so that we can write logs for examples to $SOLR_HOME/../logs @@ -1308,7 +1309,7 @@ function start_solr() { # OOME is thrown. Program operation after OOME is unpredictable. "-XX:+CrashOnOutOfMemoryError" "-XX:ErrorFile=${SOLR_LOGS_DIR}/jvm_crash_%p.log" \ "-Djetty.home=$SOLR_SERVER_DIR" "-Dsolr.solr.home=$SOLR_HOME" "-Dsolr.install.dir=$SOLR_TIP" "-Dsolr.install.symDir=$SOLR_TIP_SYM" \ - "-Dsolr.default.confdir=$DEFAULT_CONFDIR" "${LOG4J_CONFIG[@]}" "${SCRIPT_SOLR_OPTS[@]}" "${SECURITY_MANAGER_OPTS[@]}" "${SOLR_OPTS[@]}") + "${LOG4J_CONFIG[@]}" "${SCRIPT_SOLR_OPTS[@]}" "${SECURITY_MANAGER_OPTS[@]}" "${SOLR_OPTS[@]}") mk_writable_dir "$SOLR_LOGS_DIR" "Logs" if [[ -n "${SOLR_HEAP_DUMP_DIR:-}" ]]; then diff --git a/solr/bin/solr.cmd b/solr/bin/solr.cmd index d9d94065f57..79b8f413e8a 100755 --- a/solr/bin/solr.cmd +++ b/solr/bin/solr.cmd @@ -1133,7 +1133,7 @@ IF NOT EXIST "%SOLR_SERVER_DIR%\tmp" ( mkdir "%SOLR_SERVER_DIR%\tmp" ) -IF "%DEFAULT_CONFDIR%"=="" set "DEFAULT_CONFDIR=%SOLR_SERVER_DIR%\solr\configsets\_default\conf" +IF "%SOLR_DEFAULT_CONFDIR%"=="" set "SOLR_DEFAULT_CONFDIR=%SOLR_SERVER_DIR%\solr\configsets\_default\conf" IF "%FG%"=="1" ( REM run solr in the foreground @@ -1141,7 +1141,7 @@ IF "%FG%"=="1" ( echo %SOLR_PORT%>"%SOLR_TIP%"\bin\solr-%SOLR_PORT%.port "%JAVA%" %SERVEROPT% %SOLR_JAVA_MEM% %START_OPTS% ^ -Dlog4j.configurationFile="%LOG4J_CONFIG%" -DSTOP.PORT=!STOP_PORT! -DSTOP.KEY=%STOP_KEY% ^ - -Dsolr.solr.home="%SOLR_HOME%" -Dsolr.install.dir="%SOLR_TIP%" -Dsolr.install.symDir="%SOLR_TIP%" -Dsolr.default.confdir="%DEFAULT_CONFDIR%" ^ + -Dsolr.solr.home="%SOLR_HOME%" -Dsolr.install.dir="%SOLR_TIP%" -Dsolr.install.symDir="%SOLR_TIP%" ^ -Djetty.port=%SOLR_PORT% -Djetty.home="%SOLR_SERVER_DIR%" ^ -Djava.io.tmpdir="%SOLR_SERVER_DIR%\tmp" -jar start.jar %SOLR_JETTY_CONFIG% "%SOLR_JETTY_ADDL_CONFIG%" ) ELSE ( @@ -1149,7 +1149,7 @@ IF "%FG%"=="1" ( "%JAVA%" %SERVEROPT% %SOLR_JAVA_MEM% %START_OPTS% ^ -Dlog4j.configurationFile="%LOG4J_CONFIG%" -DSTOP.PORT=!STOP_PORT! -DSTOP.KEY=%STOP_KEY% ^ -Dsolr.log.muteconsole ^ - -Dsolr.solr.home="%SOLR_HOME%" -Dsolr.install.dir="%SOLR_TIP%" -Dsolr.install.symDir="%SOLR_TIP%" -Dsolr.default.confdir="%DEFAULT_CONFDIR%" ^ + -Dsolr.solr.home="%SOLR_HOME%" -Dsolr.install.dir="%SOLR_TIP%" -Dsolr.install.symDir="%SOLR_TIP%" ^ -Djetty.port=%SOLR_PORT% -Djetty.home="%SOLR_SERVER_DIR%" ^ -Djava.io.tmpdir="%SOLR_SERVER_DIR%\tmp" -jar start.jar %SOLR_JETTY_CONFIG% "%SOLR_JETTY_ADDL_CONFIG%" > "!SOLR_LOGS_DIR!\solr-%SOLR_PORT%-console.log" echo %SOLR_PORT%>"%SOLR_TIP%"\bin\solr-%SOLR_PORT%.port @@ -1158,7 +1158,7 @@ IF "%FG%"=="1" ( set SOLR_START_WAIT=180 ) REM now wait to see Solr come online ... - "%JAVA%" %SOLR_SSL_OPTS% %AUTHC_OPTS% %SOLR_ZK_CREDS_AND_ACLS% %SOLR_TOOL_OPTS% -Dsolr.install.dir="%SOLR_TIP%" -Dsolr.default.confdir="%DEFAULT_CONFDIR%"^ + "%JAVA%" %SOLR_SSL_OPTS% %AUTHC_OPTS% %SOLR_ZK_CREDS_AND_ACLS% %SOLR_TOOL_OPTS% -Dsolr.install.dir="%SOLR_TIP%" ^ -Dlog4j.configurationFile="file:///%DEFAULT_SERVER_DIR%\resources\log4j2-console.xml" ^ -classpath "%DEFAULT_SERVER_DIR%\solr-webapp\webapp\WEB-INF\lib\*;%DEFAULT_SERVER_DIR%\lib\ext\*" ^ org.apache.solr.cli.SolrCLI status --max-wait-secs !SOLR_START_WAIT! diff --git a/solr/solrj/src/resources/EnvToSyspropMappings.properties b/solr/solrj/src/resources/EnvToSyspropMappings.properties index 25a88faf097..1d143dba0ed 100644 --- a/solr/solrj/src/resources/EnvToSyspropMappings.properties +++ b/solr/solrj/src/resources/EnvToSyspropMappings.properties @@ -5,7 +5,6 @@ # This way, env SOLR_FOO_BAR will also match property 'solr.foo.bar' without a mapping in this file # TODO: Deprecate non-standard sysprops and standardize on solr.foo.bar in Solr 10 AWS_PROFILE=aws.profile -DEFAULT_CONFDIR=solr.default.confdir SOLR_ALWAYS_ON_TRACE_ID=solr.alwaysOnTraceId SOLR_AUTH_JWT_ALLOW_OUTBOUND_HTTP=solr.auth.jwt.allowOutboundHttp SOLR_CONFIG_SET_FORBIDDEN_FILE_TYPES=solrConfigSetForbiddenFileTypes From 59b4d5532becdfaf0f87ca6d8a544c69611800ae Mon Sep 17 00:00:00 2001 From: Eric Pugh Date: Sat, 5 Apr 2025 18:47:34 +0200 Subject: [PATCH 05/17] standardize on solr.delete.unknown.cores name --- solr/bin/solr | 3 --- solr/bin/solr.cmd | 3 --- solr/core/src/java/org/apache/solr/core/CoreContainer.java | 2 +- .../test/org/apache/solr/cloud/DeleteInactiveReplicaTest.java | 4 ++-- solr/solrj/src/resources/EnvToSyspropMappings.properties | 1 - 5 files changed, 3 insertions(+), 10 deletions(-) diff --git a/solr/bin/solr b/solr/bin/solr index 9691fa0ee72..d23def3fafb 100755 --- a/solr/bin/solr +++ b/solr/bin/solr @@ -1214,9 +1214,6 @@ function start_solr() { SCRIPT_SOLR_OPTS+=("-Dsolr.data.home=$SOLR_DATA_HOME") fi - if [ -n "${SOLR_DELETE_UNKNOWN_CORES:-}" ]; then - SCRIPT_SOLR_OPTS+=("-Dsolr.deleteUnknownCores=$SOLR_DELETE_UNKNOWN_CORES") - fi # If SSL-related system props are set, add them to SCRIPT_SOLR_OPTS if [ "$SOLR_SSL_ENABLED" == "true" ]; then diff --git a/solr/bin/solr.cmd b/solr/bin/solr.cmd index 79b8f413e8a..32df97b4721 100755 --- a/solr/bin/solr.cmd +++ b/solr/bin/solr.cmd @@ -929,9 +929,6 @@ IF "%SOLR_MODE%"=="solrcloud" ( set "CLOUD_MODE_OPTS=!CLOUD_MODE_OPTS! -DwaitForZk=%SOLR_WAIT_FOR_ZK%" ) - IF NOT "%SOLR_DELETE_UNKNOWN_CORES%"=="" ( - set "CLOUD_MODE_OPTS=!CLOUD_MODE_OPTS! -Dsolr.deleteUnknownCores=%SOLR_DELETE_UNKNOWN_CORES%" - ) IF NOT "%ZK_HOST%"=="" ( set "CLOUD_MODE_OPTS=!CLOUD_MODE_OPTS! -DzkHost=%ZK_HOST%" 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 bf0d56495d5..6ab37ab3606 100644 --- a/solr/core/src/java/org/apache/solr/core/CoreContainer.java +++ b/solr/core/src/java/org/apache/solr/core/CoreContainer.java @@ -1766,7 +1766,7 @@ private SolrCore createFromDescriptor( // this mostly happens when the core is deleted when this node is down // but it can also happen if connecting to the wrong zookeeper final boolean deleteUnknownCores = - Boolean.parseBoolean(System.getProperty("solr.deleteUnknownCores", "false")); + Boolean.parseBoolean(System.getProperty("solr.delete.unknown.cores", "false")); log.error( "SolrCore {} in {} is not in cluster state.{}", dcore.getName(), diff --git a/solr/core/src/test/org/apache/solr/cloud/DeleteInactiveReplicaTest.java b/solr/core/src/test/org/apache/solr/cloud/DeleteInactiveReplicaTest.java index 2d1b3564527..f868874b86e 100644 --- a/solr/core/src/test/org/apache/solr/cloud/DeleteInactiveReplicaTest.java +++ b/solr/core/src/test/org/apache/solr/cloud/DeleteInactiveReplicaTest.java @@ -48,12 +48,12 @@ public static void setupCluster() throws Exception { @AfterClass public static void reset() { - System.setProperty("solr.deleteUnknownCores", "false"); + System.setProperty("solr.delete.unknown.cores", "false"); } @Test public void deleteInactiveReplicaTest() throws Exception { - System.setProperty("solr.deleteUnknownCores", "true"); + System.setProperty("solr.delete.unknown.cores", "true"); String collectionName = "delDeadColl"; int replicationFactor = 2; diff --git a/solr/solrj/src/resources/EnvToSyspropMappings.properties b/solr/solrj/src/resources/EnvToSyspropMappings.properties index 1d143dba0ed..039a1728b81 100644 --- a/solr/solrj/src/resources/EnvToSyspropMappings.properties +++ b/solr/solrj/src/resources/EnvToSyspropMappings.properties @@ -8,7 +8,6 @@ AWS_PROFILE=aws.profile SOLR_ALWAYS_ON_TRACE_ID=solr.alwaysOnTraceId SOLR_AUTH_JWT_ALLOW_OUTBOUND_HTTP=solr.auth.jwt.allowOutboundHttp SOLR_CONFIG_SET_FORBIDDEN_FILE_TYPES=solrConfigSetForbiddenFileTypes -SOLR_DELETE_UNKNOWN_CORES=solr.deleteUnknownCores SOLR_DISABLE_REQUEST_ID=solr.disableRequestId SOLR_ENABLE_PACKAGES=enable.packages SOLR_ENABLE_REMOTE_STREAMING=solr.enableRemoteStreaming From 58e71dd7ee9dc94ac05c7c8e4c04a4957fe21bf9 Mon Sep 17 00:00:00 2001 From: Eric Pugh Date: Sat, 5 Apr 2025 18:57:17 +0200 Subject: [PATCH 06/17] Move waitForZk property standard solr.wait.for.zk pattern --- solr/bin/solr | 4 ---- solr/bin/solr.cmd | 5 ----- solr/core/src/java/org/apache/solr/core/NodeConfig.java | 2 +- .../core/src/test/org/apache/solr/cloud/ZkFailoverTest.java | 6 +++--- solr/solrj/src/resources/EnvToSyspropMappings.properties | 1 - 5 files changed, 4 insertions(+), 14 deletions(-) diff --git a/solr/bin/solr b/solr/bin/solr index d23def3fafb..2f775e34523 100755 --- a/solr/bin/solr +++ b/solr/bin/solr @@ -1206,10 +1206,6 @@ function start_solr() { GC_TUNE_ARR=($GC_TUNE) # Stuff the string from outside into first value of the array fi - if [ -n "${SOLR_WAIT_FOR_ZK:-}" ]; then - SCRIPT_SOLR_OPTS+=("-DwaitForZk=$SOLR_WAIT_FOR_ZK") - fi - if [ -n "${SOLR_DATA_HOME:-}" ]; then SCRIPT_SOLR_OPTS+=("-Dsolr.data.home=$SOLR_DATA_HOME") fi diff --git a/solr/bin/solr.cmd b/solr/bin/solr.cmd index 32df97b4721..b8b82c97194 100755 --- a/solr/bin/solr.cmd +++ b/solr/bin/solr.cmd @@ -925,11 +925,6 @@ IF "%SOLR_MODE%"=="solrcloud" ( set "CLOUD_MODE_OPTS=-DzkClientTimeout=!ZK_CLIENT_TIMEOUT!" - IF NOT "%SOLR_WAIT_FOR_ZK%"=="" ( - set "CLOUD_MODE_OPTS=!CLOUD_MODE_OPTS! -DwaitForZk=%SOLR_WAIT_FOR_ZK%" - ) - - IF NOT "%ZK_HOST%"=="" ( set "CLOUD_MODE_OPTS=!CLOUD_MODE_OPTS! -DzkHost=%ZK_HOST%" ) ELSE ( diff --git a/solr/core/src/java/org/apache/solr/core/NodeConfig.java b/solr/core/src/java/org/apache/solr/core/NodeConfig.java index 1dcdc896d35..eeaa009a3fb 100644 --- a/solr/core/src/java/org/apache/solr/core/NodeConfig.java +++ b/solr/core/src/java/org/apache/solr/core/NodeConfig.java @@ -248,7 +248,7 @@ public static NodeConfig loadNodeConfig(Path solrHome, Properties nodeProperties // ZkFailoverTest test case... String zkHost = nodeProperties.getProperty(SolrXmlConfig.ZK_HOST); if (StrUtils.isNotNullOrEmpty(zkHost)) { - int startUpZkTimeOut = 1000 * Integer.getInteger("waitForZk", 0); + int startUpZkTimeOut = 1000 * Integer.getInteger("solr.wait.for.zk", 0); if (startUpZkTimeOut == 0) { startUpZkTimeOut = SolrZkClientTimeout.DEFAULT_ZK_CLIENT_TIMEOUT; } diff --git a/solr/core/src/test/org/apache/solr/cloud/ZkFailoverTest.java b/solr/core/src/test/org/apache/solr/cloud/ZkFailoverTest.java index d9dceb79614..620a2172301 100644 --- a/solr/core/src/test/org/apache/solr/cloud/ZkFailoverTest.java +++ b/solr/core/src/test/org/apache/solr/cloud/ZkFailoverTest.java @@ -47,7 +47,7 @@ public static void setupCluster() throws Exception { @AfterClass public static void resetWaitForZk() { - System.setProperty("waitForZk", "30"); + System.setProperty("solr.wait.for.zk", "30"); } public void testRestartZkWhenClusterDown() throws Exception { @@ -58,12 +58,12 @@ public void testRestartZkWhenClusterDown() throws Exception { zkTestServer = cluster.getZkServer(); // This attempt will fail since it will time out after 1 second - System.setProperty("waitForZk", "1"); + System.setProperty("solr.wait.for.zk", "1"); restartSolrAndZk(); waitForLiveNodes(0); // This attempt will succeed since there will be enough time to connect - System.setProperty("waitForZk", "20"); + System.setProperty("solr.wait.for.zk", "20"); restartSolrAndZk(); waitForLiveNodes(cluster.getJettySolrRunners().size()); waitForState("Timeout waiting for " + coll, coll, clusterShape(2, 2)); diff --git a/solr/solrj/src/resources/EnvToSyspropMappings.properties b/solr/solrj/src/resources/EnvToSyspropMappings.properties index 039a1728b81..482cb1bbeb5 100644 --- a/solr/solrj/src/resources/EnvToSyspropMappings.properties +++ b/solr/solrj/src/resources/EnvToSyspropMappings.properties @@ -24,7 +24,6 @@ SOLR_PORT=jetty.port SOLR_TIMEZONE=user.timezone SOLR_TIP=solr.install.dir SOLR_TIP_SYM=solr.install.symDir -SOLR_WAIT_FOR_ZK=waitForZk ZK_CLIENT_TIMEOUT=zkClientTimeout ZK_CREATE_CHROOT=createZkChroot ZK_CREDENTIALS_INJECTOR=zkCredentialsInjector From 42d9f1caa3b44387b88e221ef37b69142cc54272 Mon Sep 17 00:00:00 2001 From: Eric Pugh Date: Sat, 5 Apr 2025 19:07:33 +0200 Subject: [PATCH 07/17] Use the standardized name everywhere. --- solr/bin/solr | 8 -------- solr/bin/solr.cmd | 8 -------- .../java/org/apache/solr/servlet/SolrRequestParsers.java | 4 ++-- .../test/org/apache/solr/request/TestRemoteStreaming.java | 4 ++-- .../src/test/org/apache/solr/servlet/CacheHeaderTest.java | 2 +- .../org/apache/solr/servlet/SolrRequestParserTest.java | 4 ++-- solr/solrj/src/resources/EnvToSyspropMappings.properties | 2 -- 7 files changed, 7 insertions(+), 25 deletions(-) diff --git a/solr/bin/solr b/solr/bin/solr index 2f775e34523..a5870724a08 100755 --- a/solr/bin/solr +++ b/solr/bin/solr @@ -856,14 +856,6 @@ if [[ -n "${SOLR_PLACEMENTPLUGIN_DEFAULT:-}" ]] ; then SCRIPT_SOLR_OPTS+=("-Dsolr.placementplugin.default=$SOLR_PLACEMENTPLUGIN_DEFAULT") fi -# Remote streaming and stream body -if [ "${SOLR_ENABLE_REMOTE_STREAMING:-false}" == "true" ]; then - SCRIPT_SOLR_OPTS+=("-Dsolr.enableRemoteStreaming=true") -fi -if [ "${SOLR_ENABLE_STREAM_BODY:-false}" == "true" ]; then - SCRIPT_SOLR_OPTS+=("-Dsolr.enableStreamBody=true") -fi - : ${SOLR_SERVER_DIR:=$DEFAULT_SERVER_DIR} if [ ! -e "$SOLR_SERVER_DIR" ]; then diff --git a/solr/bin/solr.cmd b/solr/bin/solr.cmd index b8b82c97194..d6ce57a0408 100755 --- a/solr/bin/solr.cmd +++ b/solr/bin/solr.cmd @@ -728,14 +728,6 @@ IF DEFINED SOLR_PLACEMENTPLUGIN_DEFAULT ( set "SCRIPT_SOLR_OPTS=%SCRIPT_SOLR_OPTS% -Dsolr.placementplugin.default=%SOLR_PLACEMENTPLUGIN_DEFAULT%" ) -REM Remote streaming and stream body -IF "%SOLR_ENABLE_REMOTE_STREAMING%"=="true" ( - set "SCRIPT_SOLR_OPTS=%SCRIPT_SOLR_OPTS% -Dsolr.enableRemoteStreaming=true" -) -IF "%SOLR_ENABLE_STREAM_BODY%"=="true" ( - set "SCRIPT_SOLR_OPTS=%SCRIPT_SOLR_OPTS% -Dsolr.enableStreamBody=true" -) - IF "%SOLR_SERVER_DIR%"=="" set "SOLR_SERVER_DIR=%DEFAULT_SERVER_DIR%" IF NOT EXIST "%SOLR_SERVER_DIR%" ( diff --git a/solr/core/src/java/org/apache/solr/servlet/SolrRequestParsers.java b/solr/core/src/java/org/apache/solr/servlet/SolrRequestParsers.java index 8902acf51a3..caf67442942 100644 --- a/solr/core/src/java/org/apache/solr/servlet/SolrRequestParsers.java +++ b/solr/core/src/java/org/apache/solr/servlet/SolrRequestParsers.java @@ -114,8 +114,8 @@ public SolrRequestParsers(SolrConfig globalConfig) { formUploadLimitKB = globalConfig.getFormUploadLimitKB(); // security risks; disabled by default - enableRemoteStreams = Boolean.getBoolean("solr.enableRemoteStreaming"); - enableStreamBody = Boolean.getBoolean("solr.enableStreamBody"); + enableRemoteStreams = Boolean.getBoolean("solr.enable.remote.streaming"); + enableStreamBody = Boolean.getBoolean("solr.enable.stream.body"); // Let this filter take care of /select?xxx format handleSelect = globalConfig.isHandleSelect(); diff --git a/solr/core/src/test/org/apache/solr/request/TestRemoteStreaming.java b/solr/core/src/test/org/apache/solr/request/TestRemoteStreaming.java index c1350ae970b..f9eb51c01f0 100644 --- a/solr/core/src/test/org/apache/solr/request/TestRemoteStreaming.java +++ b/solr/core/src/test/org/apache/solr/request/TestRemoteStreaming.java @@ -44,8 +44,8 @@ public class TestRemoteStreaming extends SolrJettyTestBase { @BeforeClass public static void beforeTest() throws Exception { - System.setProperty("solr.enableRemoteStreaming", "true"); - System.setProperty("solr.enableStreamBody", "true"); + System.setProperty("solr.enable.remote.streaming", "true"); + System.setProperty("solr.enable.stream.body", "true"); // this one has handleSelect=true which a test here needs Path solrHomeDirectory = createTempDir(LuceneTestCase.getTestClass().getSimpleName()); setupJettyTestHome(solrHomeDirectory, "collection1"); diff --git a/solr/core/src/test/org/apache/solr/servlet/CacheHeaderTest.java b/solr/core/src/test/org/apache/solr/servlet/CacheHeaderTest.java index f304468abd7..c4558c82b10 100644 --- a/solr/core/src/test/org/apache/solr/servlet/CacheHeaderTest.java +++ b/solr/core/src/test/org/apache/solr/servlet/CacheHeaderTest.java @@ -36,7 +36,7 @@ public class CacheHeaderTest extends CacheHeaderTestBase { @BeforeClass public static void beforeTest() throws Exception { - System.setProperty("solr.enableRemoteStreaming", "true"); // needed for testCacheVetoHandler + System.setProperty("solr.enable.remote.streaming", "true"); // needed for testCacheVetoHandler Path solrHomeDirectory = createTempDir(); setupJettyTestHome(solrHomeDirectory, "collection1"); diff --git a/solr/core/src/test/org/apache/solr/servlet/SolrRequestParserTest.java b/solr/core/src/test/org/apache/solr/servlet/SolrRequestParserTest.java index f2634411e90..a90311d0ac7 100644 --- a/solr/core/src/test/org/apache/solr/servlet/SolrRequestParserTest.java +++ b/solr/core/src/test/org/apache/solr/servlet/SolrRequestParserTest.java @@ -64,8 +64,8 @@ public class SolrRequestParserTest extends SolrTestCaseJ4 { @BeforeClass public static void beforeClass() throws Exception { assumeWorkingMockito(); - System.setProperty("solr.enableRemoteStreaming", "true"); - System.setProperty("solr.enableStreamBody", "true"); + System.setProperty("solr.enable.remote.streaming", "true"); + System.setProperty("solr.enable.stream.body", "true"); initCore("solrconfig.xml", "schema.xml"); parser = new SolrRequestParsers(h.getCore().getSolrConfig()); } diff --git a/solr/solrj/src/resources/EnvToSyspropMappings.properties b/solr/solrj/src/resources/EnvToSyspropMappings.properties index 482cb1bbeb5..92f5697fabb 100644 --- a/solr/solrj/src/resources/EnvToSyspropMappings.properties +++ b/solr/solrj/src/resources/EnvToSyspropMappings.properties @@ -10,8 +10,6 @@ SOLR_AUTH_JWT_ALLOW_OUTBOUND_HTTP=solr.auth.jwt.allowOutboundHttp SOLR_CONFIG_SET_FORBIDDEN_FILE_TYPES=solrConfigSetForbiddenFileTypes SOLR_DISABLE_REQUEST_ID=solr.disableRequestId SOLR_ENABLE_PACKAGES=enable.packages -SOLR_ENABLE_REMOTE_STREAMING=solr.enableRemoteStreaming -SOLR_ENABLE_STREAM_BODY=solr.enableStreamBody SOLR_HIDDEN_SYS_PROPS=solr.hiddenSysProps SOLR_HOME=solr.solr.home SOLR_HOST=host From 3ea631ccafc71f97cc23d3d6b01dbfa57cb4f7a6 Mon Sep 17 00:00:00 2001 From: Eric Pugh Date: Sat, 5 Apr 2025 19:21:59 +0200 Subject: [PATCH 08/17] Standardize on the plural solr.logs.dir form everywhere. --- dev-tools/scripts/cloud.sh | 2 +- gradle/ide/eclipse/run-solr-cloud.launch | 2 +- gradle/ide/eclipse/run-solr.launch | 2 +- .../testing/randomization/policies/solr-tests.policy | 4 ++-- solr/benchmark/log4j2-bench.xml | 12 ++++++------ .../java/org/apache/solr/bench/BaseBenchState.java | 2 +- solr/benchmark/src/test-files/log4j2.xml | 10 +++++----- solr/bin/solr | 2 +- solr/bin/solr.cmd | 2 +- .../apache/solr/servlet/CoreContainerProvider.java | 2 +- .../org/apache/solr/util/StartupLoggingUtils.java | 4 ++-- .../org/apache/solr/cli/TestSolrCLIRunExample.java | 4 ++-- solr/docker/tests/cases/test_log4j/log4j2.xml | 12 ++++++------ solr/server/etc/jetty-requestlog.xml | 2 +- solr/server/etc/security.policy | 4 ++-- solr/server/resources/log4j2.xml | 8 ++++---- .../pages/system-info-handler.adoc | 4 ++-- .../deployment-guide/pages/metrics-reporting.adoc | 4 ++-- .../src/resources/EnvToSyspropMappings.properties | 2 +- .../org/apache/solr/common/util/EnvUtilsTest.java | 2 +- 20 files changed, 43 insertions(+), 43 deletions(-) diff --git a/dev-tools/scripts/cloud.sh b/dev-tools/scripts/cloud.sh index 9824fb3eea7..30271dc4ce8 100755 --- a/dev-tools/scripts/cloud.sh +++ b/dev-tools/scripts/cloud.sh @@ -336,7 +336,7 @@ start(){ mkdir -p "${CLUSTER_WD}/n${i}" argsArray=(-c --solr-home $CLUSTER_WD_FULL/n${i} -z localhost:${ZK_PORT}/solr_${SAFE_DEST} -p 898${i} -m $MEMORY \ -a "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=500${i} \ - -Dsolr.log.dir=$CLUSTER_WD_FULL/n${i} $JVM_ARGS") + -Dsolr.logs.dir=$CLUSTER_WD_FULL/n${i} $JVM_ARGS") FINAL_COMMAND="${SOLR}/bin/solr ${argsArray[@]}" echo ${FINAL_COMMAND} ${SOLR}/bin/solr start "${argsArray[@]}" diff --git a/gradle/ide/eclipse/run-solr-cloud.launch b/gradle/ide/eclipse/run-solr-cloud.launch index c9d5dbbe9f4..685782ceabc 100644 --- a/gradle/ide/eclipse/run-solr-cloud.launch +++ b/gradle/ide/eclipse/run-solr-cloud.launch @@ -16,5 +16,5 @@ - + diff --git a/gradle/ide/eclipse/run-solr.launch b/gradle/ide/eclipse/run-solr.launch index 00f225dacc8..2cebe437425 100644 --- a/gradle/ide/eclipse/run-solr.launch +++ b/gradle/ide/eclipse/run-solr.launch @@ -16,5 +16,5 @@ - + diff --git a/gradle/testing/randomization/policies/solr-tests.policy b/gradle/testing/randomization/policies/solr-tests.policy index c869aa9af80..9fd6d39a630 100644 --- a/gradle/testing/randomization/policies/solr-tests.policy +++ b/gradle/testing/randomization/policies/solr-tests.policy @@ -227,8 +227,8 @@ grant { permission java.io.FilePermission "${solr.default.confdir}", "read,write,delete,readlink"; permission java.io.FilePermission "${solr.default.confdir}${/}-", "read,write,delete,readlink"; - permission java.io.FilePermission "${solr.log.dir}", "read,write,delete,readlink"; - permission java.io.FilePermission "${solr.log.dir}${/}-", "read,write,delete,readlink"; + permission java.io.FilePermission "${solr.logs.dir}", "read,write,delete,readlink"; + permission java.io.FilePermission "${solr.logs.dir}${/}-", "read,write,delete,readlink"; permission java.io.FilePermission "${solr.allowPaths}", "read,write,delete,readlink"; permission java.io.FilePermission "${solr.allowPaths}${/}-", "read,write,delete,readlink"; diff --git a/solr/benchmark/log4j2-bench.xml b/solr/benchmark/log4j2-bench.xml index 628bfbcac64..c3b81a84ca5 100644 --- a/solr/benchmark/log4j2-bench.xml +++ b/solr/benchmark/log4j2-bench.xml @@ -31,8 +31,8 @@ + fileName="${sys:solr.logs.dir:-build/work/solr-logs}/${sys:solr.log.name:-solr}.log" + filePattern="${sys:solr.logs.dir:-build/work/solr-logs}/${sys:solr.log.name:-solr}.log.%i"> %maxLen{%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p (%t) [%notEmpty{c:%X{collection}}%notEmpty{ s:%X{shard}}%notEmpty{ r:%X{replica}}%notEmpty{ x:%X{core}}] %c{1.} @@ -48,8 +48,8 @@ + fileName="${sys:solr.logs.dir:-build/work/solr-logs}/${sys:solr.log.name:-solr}_slow_requests.log" + filePattern="${sys:solr.logs.dir:-build/work/solr-logs}/${sys:solr.log.name:-solr}_slow_requests.log.%i"> %maxLen{%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p (%t) [%notEmpty{c:%X{collection}}%notEmpty{ s:%X{shard}}%notEmpty{ r:%X{replica}}%notEmpty{ x:%X{core}}] %c{1.} @@ -66,8 +66,8 @@ + fileName="${sys:solr.logs.dir:-build/work/solr-logs}/${sys:solr.log.name:-solr}_random_counts.log" + filePattern="${sys:solr.logs.dir:-build/work/solr-logs}/${sys:solr.log.name:-solr}_random_counts.log.%i"> %maxLen{%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p (%t) [%notEmpty{c:%X{collection}}%notEmpty{ s:%X{shard}}%notEmpty{ r:%X{replica}}%notEmpty{ x:%X{core}}] %c{1.} diff --git a/solr/benchmark/src/java/org/apache/solr/bench/BaseBenchState.java b/solr/benchmark/src/java/org/apache/solr/bench/BaseBenchState.java index f45ffaf8aa1..4ecfcad70bd 100644 --- a/solr/benchmark/src/java/org/apache/solr/bench/BaseBenchState.java +++ b/solr/benchmark/src/java/org/apache/solr/bench/BaseBenchState.java @@ -104,7 +104,7 @@ public void doSetup(BenchmarkParams benchmarkParams) { workDir = System.getProperty("workBaseDir", "build/work"); - System.setProperty("solr.log.dir", workDir + "/logs"); + System.setProperty("solr.logs.dir", workDir + "/logs"); System.setProperty("solr.log.name", benchmarkParams.id()); } diff --git a/solr/benchmark/src/test-files/log4j2.xml b/solr/benchmark/src/test-files/log4j2.xml index f65aca5e456..983559c47c8 100644 --- a/solr/benchmark/src/test-files/log4j2.xml +++ b/solr/benchmark/src/test-files/log4j2.xml @@ -31,8 +31,8 @@ + fileName="${sys:solr.logs.dir:-build/work/solr-logs}/${sys:solr.log.name:-solr}.log" + filePattern="${sys:solr.logs.dir:-build/work/solr-logs}/${sys:solr.log.name:-solr}.log.%i"> %maxLen{%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p (%t) [%notEmpty{c:%X{collection}}%notEmpty{ s:%X{shard}}%notEmpty{ r:%X{replica}}%notEmpty{ x:%X{core}}] %c{1.} @@ -48,8 +48,8 @@ + fileName="${sys:solr.logs.dir:-build/work/solr-logs}/${sys:solr.log.name:-solr}_slow_requests.log" + filePattern="${sys:solr.logs.dir:-build/work/solr-logs}/${sys:solr.log.name:-solr}_slow_requests.log.%i"> %maxLen{%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p (%t) [%notEmpty{c:%X{collection}}%notEmpty{ s:%X{shard}}%notEmpty{ r:%X{replica}}%notEmpty{ x:%X{core}}] %c{1.} @@ -65,7 +65,7 @@ + fileName="${sys:solr.logs.dir:-build/work/solr-logs}/${sys:solr.log.name:-solr}_random_counts.log"> %maxLen{%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p (%t) [%notEmpty{c:%X{collection}}%notEmpty{ s:%X{shard}}%notEmpty{ r:%X{replica}}%notEmpty{ x:%X{core}}] %c{1.} diff --git a/solr/bin/solr b/solr/bin/solr index a5870724a08..f929ee1b484 100755 --- a/solr/bin/solr +++ b/solr/bin/solr @@ -1285,7 +1285,7 @@ function start_solr() { SCRIPT_SOLR_OPTS+=("--add-modules" "jdk.incubator.vector") SOLR_START_OPTS=('-server' "${JAVA_MEM_OPTS[@]}" "${GC_TUNE_ARR[@]}" "${GC_LOG_OPTS[@]}" "${IP_ACL_OPTS[@]}" \ - "${REMOTE_JMX_OPTS[@]}" "${CLOUD_MODE_OPTS[@]}" -Dsolr.log.dir="$SOLR_LOGS_DIR" \ + "${REMOTE_JMX_OPTS[@]}" "${CLOUD_MODE_OPTS[@]}" -Dsolr.logs.dir="$SOLR_LOGS_DIR" \ "-Djetty.port=$SOLR_PORT" "-DSTOP.PORT=$stop_port" "-DSTOP.KEY=$STOP_KEY" \ # '-OmitStackTraceInFastThrow' ensures stack traces in errors, # users who don't care about useful error msgs can override in SOLR_OPTS with +OmitStackTraceInFastThrow diff --git a/solr/bin/solr.cmd b/solr/bin/solr.cmd index d6ce57a0408..a17383aebe8 100755 --- a/solr/bin/solr.cmd +++ b/solr/bin/solr.cmd @@ -1087,7 +1087,7 @@ IF "%SOLR_SSL_ENABLED%"=="true" ( set SOLR_LOGS_DIR_QUOTED="%SOLR_LOGS_DIR%" set SOLR_DATA_HOME_QUOTED="%SOLR_DATA_HOME%" -set "START_OPTS=%START_OPTS% -Dsolr.log.dir=%SOLR_LOGS_DIR_QUOTED%" +set "START_OPTS=%START_OPTS% -Dsolr.logs.dir=%SOLR_LOGS_DIR_QUOTED%" IF NOT "%SOLR_DATA_HOME%"=="" set "START_OPTS=%START_OPTS% -Dsolr.data.home=%SOLR_DATA_HOME_QUOTED%" IF NOT DEFINED LOG4J_CONFIG set "LOG4J_CONFIG=%SOLR_SERVER_DIR%\resources\log4j2.xml" diff --git a/solr/core/src/java/org/apache/solr/servlet/CoreContainerProvider.java b/solr/core/src/java/org/apache/solr/servlet/CoreContainerProvider.java index a35dfc4d73f..c8e8e5c9b62 100644 --- a/solr/core/src/java/org/apache/solr/servlet/CoreContainerProvider.java +++ b/solr/core/src/java/org/apache/solr/servlet/CoreContainerProvider.java @@ -307,7 +307,7 @@ private void logWelcomeBanner() { "Solr typically starts with \"-XX:+CrashOnOutOfMemoryError\" that will crash on any OutOfMemoryError exception. " + "Unable to get the specific file due to an exception." + "The cause of the OOME will be logged in a crash file in the logs directory: %s", - System.getProperty("solr.log.dir")); + System.getProperty("solr.logs.dir")); log.info(logMessage, e); } } diff --git a/solr/core/src/java/org/apache/solr/util/StartupLoggingUtils.java b/solr/core/src/java/org/apache/solr/util/StartupLoggingUtils.java index 79047a502e3..73ddc50fe3d 100644 --- a/solr/core/src/java/org/apache/solr/util/StartupLoggingUtils.java +++ b/solr/core/src/java/org/apache/solr/util/StartupLoggingUtils.java @@ -47,8 +47,8 @@ public final class StartupLoggingUtils { /** Checks whether mandatory log dir is given */ public static void checkLogDir() { - if (EnvUtils.getProperty("solr.log.dir") == null) { - log.error("Missing Java Option solr.log.dir. Logging may be missing or incomplete."); + if (EnvUtils.getProperty("solr.logs.dir") == null) { + log.error("Missing Java Option solr.logs.dir. Logging may be missing or incomplete."); } } diff --git a/solr/core/src/test/org/apache/solr/cli/TestSolrCLIRunExample.java b/solr/core/src/test/org/apache/solr/cli/TestSolrCLIRunExample.java index 90219220371..47d300c83b6 100644 --- a/solr/core/src/test/org/apache/solr/cli/TestSolrCLIRunExample.java +++ b/solr/core/src/test/org/apache/solr/cli/TestSolrCLIRunExample.java @@ -122,7 +122,7 @@ public int execute(org.apache.commons.exec.CommandLine cmd) throws IOException { try { if (solrCloudCluster == null) { Path logDir = createTempDir("solr_logs"); - System.setProperty("solr.log.dir", logDir.toString()); + System.setProperty("solr.logs.dir", logDir.toString()); System.setProperty("host", "localhost"); System.setProperty("jetty.port", String.valueOf(port)); solrCloudCluster = new MiniSolrCloudCluster(1, createTempDir(), solrxml, jettyConfig); @@ -223,7 +223,7 @@ protected int startStandaloneSolr(String[] args) { System.setProperty("host", "localhost"); System.setProperty("jetty.port", String.valueOf(port)); - System.setProperty("solr.log.dir", createTempDir("solr_logs").toString()); + System.setProperty("solr.logs.dir", createTempDir("solr_logs").toString()); standaloneSolr = new JettySolrRunner(solrHomeDir.toString(), port); Thread bg = diff --git a/solr/docker/tests/cases/test_log4j/log4j2.xml b/solr/docker/tests/cases/test_log4j/log4j2.xml index f1958fc4eeb..0d9949535cd 100644 --- a/solr/docker/tests/cases/test_log4j/log4j2.xml +++ b/solr/docker/tests/cases/test_log4j/log4j2.xml @@ -29,8 +29,8 @@ + fileName="${sys:solr.logs.dir}/solr.log" + filePattern="${sys:solr.logs.dir}/solr.log.%i" > %d{yyyy-MM-dd HH:mm:ss.SSS} %-5p (%t) [%notEmpty{c:%X{collection}}%notEmpty{ s:%X{shard}}%notEmpty{ r:%X{replica}}%notEmpty{ x:%X{core}}] %c{1.} %m%n @@ -45,8 +45,8 @@ + fileName="${sys:solr.logs.dir}/solr.json.log" + filePattern="${sys:solr.logs.dir}/solr.json.log.%i" > @@ -57,8 +57,8 @@ + fileName="${sys:solr.logs.dir}/solr_slow_requests.log" + filePattern="${sys:solr.logs.dir}/solr_slow_requests.log.%i" > %d{yyyy-MM-dd HH:mm:ss.SSS} %-5p (%t) [%notEmpty{c:%X{collection}}%notEmpty{ s:%X{shard}}%notEmpty{ r:%X{replica}}%notEmpty{ x:%X{core}}] %c{1.} %m%n diff --git a/solr/server/etc/jetty-requestlog.xml b/solr/server/etc/jetty-requestlog.xml index 9560ca96542..dee4a585182 100644 --- a/solr/server/etc/jetty-requestlog.xml +++ b/solr/server/etc/jetty-requestlog.xml @@ -28,7 +28,7 @@ - /yyyy_mm_dd.request.log + /yyyy_mm_dd.request.log yyyy_MM_dd true diff --git a/solr/server/etc/security.policy b/solr/server/etc/security.policy index aec689deae6..2fe0e4e14a7 100644 --- a/solr/server/etc/security.policy +++ b/solr/server/etc/security.policy @@ -197,8 +197,8 @@ grant { permission java.io.FilePermission "${solr.default.confdir}", "read,write,delete,readlink"; permission java.io.FilePermission "${solr.default.confdir}${/}-", "read,write,delete,readlink"; - permission java.io.FilePermission "${solr.log.dir}", "read,write,delete,readlink"; - permission java.io.FilePermission "${solr.log.dir}${/}-", "read,write,delete,readlink"; + permission java.io.FilePermission "${solr.logs.dir}", "read,write,delete,readlink"; + permission java.io.FilePermission "${solr.logs.dir}${/}-", "read,write,delete,readlink"; permission java.io.FilePermission "${solr.allowPaths}", "read,write,delete,readlink"; permission java.io.FilePermission "${solr.allowPaths}${/}-", "read,write,delete,readlink"; diff --git a/solr/server/resources/log4j2.xml b/solr/server/resources/log4j2.xml index 1c59712cc79..3a0e51d91b6 100644 --- a/solr/server/resources/log4j2.xml +++ b/solr/server/resources/log4j2.xml @@ -30,8 +30,8 @@ + fileName="${sys:solr.logs.dir}/solr.log" + filePattern="${sys:solr.logs.dir}/solr.log.%i" > %maxLen{%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p (%t) [%notEmpty{c:%X{collection}}%notEmpty{ s:%X{shard}}%notEmpty{ r:%X{replica}}%notEmpty{ x:%X{core}}%notEmpty{ t:%X{trace_id}}] %c{1.} %m%notEmpty{ =>%ex{short}}}{10240}%n @@ -46,8 +46,8 @@ + fileName="${sys:solr.logs.dir}/solr_slow_requests.log" + filePattern="${sys:solr.logs.dir}/solr_slow_requests.log.%i" > %maxLen{%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p (%t) [%notEmpty{c:%X{collection}}%notEmpty{ s:%X{shard}}%notEmpty{ r:%X{replica}}%notEmpty{ x:%X{core}}%notEmpty{ t:%X{trace_id}}] %c{1.} %m%notEmpty{ =>%ex{short}}}{10240}%n diff --git a/solr/solr-ref-guide/modules/configuration-guide/pages/system-info-handler.adoc b/solr/solr-ref-guide/modules/configuration-guide/pages/system-info-handler.adoc index afd8680858d..8dcb0ea527d 100644 --- a/solr/solr-ref-guide/modules/configuration-guide/pages/system-info-handler.adoc +++ b/solr/solr-ref-guide/modules/configuration-guide/pages/system-info-handler.adoc @@ -188,7 +188,7 @@ curl http://localhost:8983/solr/admin/info/system "-Dcom.sun.management.jmxremote.rmi.port=18983", "-DzkClientTimeout=15000", "-DzkHost=192.168.32.3:2181", - "-Dsolr.log.dir=/var/solr/logs", + "-Dsolr.logs.dir=/var/solr/logs", "-Djetty.port=8983", "-DSTOP.PORT=7983", "-DSTOP.KEY=solrrocks", @@ -297,7 +297,7 @@ curl http://localhost:8983/solr/gettingstarted/admin/system "-Dcom.sun.management.jmxremote.authenticate=false", "-Dcom.sun.management.jmxremote.port=18983", "-Dcom.sun.management.jmxremote.rmi.port=18983", - "-Dsolr.log.dir=/var/solr/logs", + "-Dsolr.logs.dir=/var/solr/logs", "-Djetty.port=8983", "-DSTOP.PORT=7983", "-DSTOP.KEY=solrrocks", diff --git a/solr/solr-ref-guide/modules/deployment-guide/pages/metrics-reporting.adoc b/solr/solr-ref-guide/modules/deployment-guide/pages/metrics-reporting.adoc index 8295050aa9f..61f60827c3c 100644 --- a/solr/solr-ref-guide/modules/deployment-guide/pages/metrics-reporting.adoc +++ b/solr/solr-ref-guide/modules/deployment-guide/pages/metrics-reporting.adoc @@ -527,8 +527,8 @@ This can be used in conjunction with the `solr.xml` example provided earlier in ... + fileName="${sys:solr.logs.dir}/solr_metrics.log" + filePattern="${sys:solr.logs.dir}/solr_metrics.log.%i" > %d{yyyy-MM-dd HH:mm:ss.SSS} %-5p (%t) [%X{node_name} %X{collection} %X{shard} %X{replica} %X{core} %X{trace_id}] %m%n diff --git a/solr/solrj/src/resources/EnvToSyspropMappings.properties b/solr/solrj/src/resources/EnvToSyspropMappings.properties index 92f5697fabb..712a93a7560 100644 --- a/solr/solrj/src/resources/EnvToSyspropMappings.properties +++ b/solr/solrj/src/resources/EnvToSyspropMappings.properties @@ -14,9 +14,9 @@ SOLR_HIDDEN_SYS_PROPS=solr.hiddenSysProps SOLR_HOME=solr.solr.home SOLR_HOST=host SOLR_HTTP_DISABLE_COOKIES=solr.http.disableCookies +# Couldn't we just use solr.ip.allowlist everywhere instead of solr.jetty.intetaccess.includes? SOLR_IP_ALLOWLIST=solr.jetty.inetaccess.includes SOLR_IP_DENYLIST=solr.jetty.inetaccess.excludes -SOLR_LOGS_DIR=solr.log.dir SOLR_OTEL_DEFAULT_CONFIGURATOR=solr.otelDefaultConfigurator SOLR_PORT=jetty.port SOLR_TIMEZONE=user.timezone diff --git a/solr/solrj/src/test/org/apache/solr/common/util/EnvUtilsTest.java b/solr/solrj/src/test/org/apache/solr/common/util/EnvUtilsTest.java index d2cd63795f9..10f6835df54 100644 --- a/solr/solrj/src/test/org/apache/solr/common/util/EnvUtilsTest.java +++ b/solr/solrj/src/test/org/apache/solr/common/util/EnvUtilsTest.java @@ -80,7 +80,7 @@ public void testEnvsWithCustomKeyNameMappings() { assertEquals(ENV.get("SOLR_HOME"), EnvUtils.getProperty("solr.solr.home")); assertEquals(ENV.get("SOLR_PORT"), EnvUtils.getProperty("jetty.port")); assertEquals(ENV.get("SOLR_HOST"), EnvUtils.getProperty("host")); - assertEquals(ENV.get("SOLR_LOGS_DIR"), EnvUtils.getProperty("solr.log.dir")); + assertEquals(ENV.get("SOLR_LOGS_DIR"), EnvUtils.getProperty("solr.logs.dir")); } @Test From 898350f5fb6bd415e2d3e1a6d81d8844ebc135a2 Mon Sep 17 00:00:00 2001 From: Eric Pugh Date: Mon, 7 Apr 2025 05:24:26 -0400 Subject: [PATCH 09/17] comment language tweak --- solr/bin/solr | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/solr/bin/solr b/solr/bin/solr index f929ee1b484..97bd3202322 100755 --- a/solr/bin/solr +++ b/solr/bin/solr @@ -68,7 +68,7 @@ if [ $$ -ne $(ps -o pid='' -p $$ || echo 0) ] ; then exit 1 fi -# This helps with debugging when running bats tests but not the whole script is compliant yet +# This helps with debugging when running bats tests however the whole script is not compliant yet # set -u # set -o pipefail From 064d9a0e40c83baf18cb521d5bf29aa6cab2c789 Mon Sep 17 00:00:00 2001 From: Eric Pugh Date: Mon, 7 Apr 2025 05:59:45 -0400 Subject: [PATCH 10/17] Migrate to correct property name. --- solr/core/src/test/org/apache/solr/request/TestStreamBody.java | 2 +- solr/core/src/test/org/apache/solr/search/TestSmileRequest.java | 2 +- .../src/test/org/apache/solr/search/json/TestJsonRequest.java | 2 +- .../test/org/apache/solr/servlet/DirectSolrConnectionTest.java | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/solr/core/src/test/org/apache/solr/request/TestStreamBody.java b/solr/core/src/test/org/apache/solr/request/TestStreamBody.java index 4fb530d2594..17cbac0bf30 100644 --- a/solr/core/src/test/org/apache/solr/request/TestStreamBody.java +++ b/solr/core/src/test/org/apache/solr/request/TestStreamBody.java @@ -68,7 +68,7 @@ public void after() throws Exception { // SOLR-3161 @Test public void testQtUpdateFails() throws Exception { - System.setProperty("solr.enableStreamBody", "true"); + System.setProperty("solr.enable.stream.body", "true"); startSolr(); SolrQuery query = new SolrQuery(); diff --git a/solr/core/src/test/org/apache/solr/search/TestSmileRequest.java b/solr/core/src/test/org/apache/solr/search/TestSmileRequest.java index 7f282cc39d7..bcafdd04dab 100644 --- a/solr/core/src/test/org/apache/solr/search/TestSmileRequest.java +++ b/solr/core/src/test/org/apache/solr/search/TestSmileRequest.java @@ -43,7 +43,7 @@ public class TestSmileRequest extends SolrTestCaseJ4 { @BeforeClass public static void beforeTests() throws Exception { systemSetPropertySolrDisableUrlAllowList("true"); - System.setProperty("solr.enableStreamBody", "true"); + System.setProperty("solr.enable.stream.body", "true"); JSONTestUtil.failRepeatedKeys = true; initCore("solrconfig-tlog.xml", "schema_latest.xml"); } diff --git a/solr/core/src/test/org/apache/solr/search/json/TestJsonRequest.java b/solr/core/src/test/org/apache/solr/search/json/TestJsonRequest.java index f8527583aae..9dc47518ca6 100644 --- a/solr/core/src/test/org/apache/solr/search/json/TestJsonRequest.java +++ b/solr/core/src/test/org/apache/solr/search/json/TestJsonRequest.java @@ -50,7 +50,7 @@ public class TestJsonRequest extends SolrTestCaseHS { @BeforeClass public static void beforeTests() throws Exception { systemSetPropertySolrDisableUrlAllowList("true"); - System.setProperty("solr.enableStreamBody", "true"); + System.setProperty("solr.enable.stream.body", "true"); JSONTestUtil.failRepeatedKeys = true; initCore("solrconfig-tlog.xml", "schema_latest.xml"); } diff --git a/solr/core/src/test/org/apache/solr/servlet/DirectSolrConnectionTest.java b/solr/core/src/test/org/apache/solr/servlet/DirectSolrConnectionTest.java index 8166578f8e2..9d001961e7b 100644 --- a/solr/core/src/test/org/apache/solr/servlet/DirectSolrConnectionTest.java +++ b/solr/core/src/test/org/apache/solr/servlet/DirectSolrConnectionTest.java @@ -26,7 +26,7 @@ public class DirectSolrConnectionTest extends SolrTestCaseJ4 { @BeforeClass public static void beforeClass() throws Exception { - System.setProperty("solr.enableStreamBody", "true"); + System.setProperty("solr.enable.stream.body", "true"); initCore("solr/crazy-path-to-config.xml", "solr/crazy-path-to-schema.xml"); } From 5dc09bb4e57b151166ec667f3edf9ba3c85c1858 Mon Sep 17 00:00:00 2001 From: Eric Pugh Date: Wed, 9 Apr 2025 05:59:59 -0400 Subject: [PATCH 11/17] Migrate solrConfigSetForbiddenFileTypes to solr.configset.forbidden.file.types Use EnvUtils to simplify consulting properties or env variables. --- .../org/apache/solr/common/cloud/ZkMaintenanceUtils.java | 8 +++----- solr/solrj/src/resources/EnvToSyspropMappings.properties | 1 - 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/solr/solrj-zookeeper/src/java/org/apache/solr/common/cloud/ZkMaintenanceUtils.java b/solr/solrj-zookeeper/src/java/org/apache/solr/common/cloud/ZkMaintenanceUtils.java index 6e18e0d3e54..69e51967dae 100644 --- a/solr/solrj-zookeeper/src/java/org/apache/solr/common/cloud/ZkMaintenanceUtils.java +++ b/solr/solrj-zookeeper/src/java/org/apache/solr/common/cloud/ZkMaintenanceUtils.java @@ -33,6 +33,7 @@ import java.util.function.Predicate; import java.util.regex.Pattern; import org.apache.solr.client.solrj.SolrServerException; +import org.apache.solr.common.util.EnvUtils; import org.apache.solr.common.util.StrUtils; import org.apache.zookeeper.CreateMode; import org.apache.zookeeper.KeeperException; @@ -580,8 +581,7 @@ public static String createZkNodeName(String zkRoot, Path root, Path file) { return ret; } - public static final String FORBIDDEN_FILE_TYPES_PROP = "solrConfigSetForbiddenFileTypes"; - public static final String FORBIDDEN_FILE_TYPES_ENV = "SOLR_CONFIG_SET_FORBIDDEN_FILE_TYPES"; + public static final String FORBIDDEN_FILE_TYPES_PROP = "solr.configset.forbidden.file.types"; public static final Set DEFAULT_FORBIDDEN_FILE_TYPES = Set.of("class", "java", "jar", "tgz", "zip", "tar", "gz"); private static volatile Set USE_FORBIDDEN_FILE_TYPES = null; @@ -591,9 +591,7 @@ public static boolean isFileForbiddenInConfigSets(String filePath) { if (USE_FORBIDDEN_FILE_TYPES == null) { synchronized (DEFAULT_FORBIDDEN_FILE_TYPES) { if (USE_FORBIDDEN_FILE_TYPES == null) { - String userForbiddenFileTypes = - System.getProperty( - FORBIDDEN_FILE_TYPES_PROP, System.getenv(FORBIDDEN_FILE_TYPES_ENV)); + String userForbiddenFileTypes = EnvUtils.getProperty(FORBIDDEN_FILE_TYPES_PROP); if (StrUtils.isNullOrEmpty(userForbiddenFileTypes)) { USE_FORBIDDEN_FILE_TYPES = DEFAULT_FORBIDDEN_FILE_TYPES; } else { diff --git a/solr/solrj/src/resources/EnvToSyspropMappings.properties b/solr/solrj/src/resources/EnvToSyspropMappings.properties index 712a93a7560..e90dbd324b6 100644 --- a/solr/solrj/src/resources/EnvToSyspropMappings.properties +++ b/solr/solrj/src/resources/EnvToSyspropMappings.properties @@ -7,7 +7,6 @@ AWS_PROFILE=aws.profile SOLR_ALWAYS_ON_TRACE_ID=solr.alwaysOnTraceId SOLR_AUTH_JWT_ALLOW_OUTBOUND_HTTP=solr.auth.jwt.allowOutboundHttp -SOLR_CONFIG_SET_FORBIDDEN_FILE_TYPES=solrConfigSetForbiddenFileTypes SOLR_DISABLE_REQUEST_ID=solr.disableRequestId SOLR_ENABLE_PACKAGES=enable.packages SOLR_HIDDEN_SYS_PROPS=solr.hiddenSysProps From 16c941f1ebc653371e25675b0b7c874daedac646 Mon Sep 17 00:00:00 2001 From: Eric Pugh Date: Wed, 9 Apr 2025 08:57:29 -0400 Subject: [PATCH 12/17] Update docs to use the migrated pattern. --- .../modules/configuration-guide/pages/config-sets.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/solr/solr-ref-guide/modules/configuration-guide/pages/config-sets.adoc b/solr/solr-ref-guide/modules/configuration-guide/pages/config-sets.adoc index b44c8a82825..f404b76ae09 100644 --- a/solr/solr-ref-guide/modules/configuration-guide/pages/config-sets.adoc +++ b/solr/solr-ref-guide/modules/configuration-guide/pages/config-sets.adoc @@ -57,7 +57,7 @@ By default the excluded file types are: However, users can impose stricter or looser limits on their systems by providing a comma separated list of file types (without the preceding dot, e.g. `jar,class,csv`), to either of the following settings: -- System Property: `-DsolrConfigSetForbiddenFileTypes` +- System Property: `-Dsolr.configset.forbidden.file.types` - Environment Variable: `SOLR_CONFIG_SET_FORBIDDEN_FILE_TYPES` == Configsets in User-Managed Clusters or Single-Node Installations From ed1362e3fa70de48132775e25a012c22cc46733c Mon Sep 17 00:00:00 2001 From: Eric Pugh Date: Wed, 9 Apr 2025 10:24:52 -0400 Subject: [PATCH 13/17] Support deprecation warning of system properties Converts non standard old system properties into the current standard and warns users about upgrading. --- .../org/apache/solr/common/util/EnvUtils.java | 42 +++++++++++++++++-- .../EnvToSyspropDeprecatedMappings.properties | 4 ++ .../apache/solr/common/util/EnvUtilsTest.java | 17 ++++++-- 3 files changed, 57 insertions(+), 6 deletions(-) create mode 100644 solr/solrj/src/resources/EnvToSyspropDeprecatedMappings.properties diff --git a/solr/solrj/src/java/org/apache/solr/common/util/EnvUtils.java b/solr/solrj/src/java/org/apache/solr/common/util/EnvUtils.java index 6adac222ab7..a65c709032c 100644 --- a/solr/solrj/src/java/org/apache/solr/common/util/EnvUtils.java +++ b/solr/solrj/src/java/org/apache/solr/common/util/EnvUtils.java @@ -20,6 +20,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; +import java.lang.invoke.MethodHandles; import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.List; @@ -32,6 +33,8 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; import org.apache.solr.common.SolrException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Provides convenient access to System Properties for Solr. It also converts 'SOLR_FOO' env vars to @@ -39,21 +42,38 @@ * use this in lieu of JDK equivalents. */ public class EnvUtils { + private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); + /** Maps ENV keys to sys prop keys for special/custom mappings */ private static final Map CUSTOM_MAPPINGS = new HashMap<>(); + /** Maps deprecated sys prop keys to current sys prop keys with special/custom mappings */ + private static final Map DEPRECATED_MAPPINGS = new HashMap<>(); + private static final Map camelCaseToDotsMap = new ConcurrentHashMap<>(); static { try { Properties props = new Properties(); + Properties deprecatedProps = new Properties(); try (InputStream stream = - EnvUtils.class.getClassLoader().getResourceAsStream("EnvToSyspropMappings.properties")) { + EnvUtils.class + .getClassLoader() + .getResourceAsStream("EnvToSyspropMappings.properties"); + InputStream stream2 = + EnvUtils.class + .getClassLoader() + .getResourceAsStream("EnvToSyspropDeprecatedMappings.properties")) { props.load(new InputStreamReader(Objects.requireNonNull(stream), StandardCharsets.UTF_8)); + deprecatedProps.load( + new InputStreamReader(Objects.requireNonNull(stream2), StandardCharsets.UTF_8)); for (String key : props.stringPropertyNames()) { CUSTOM_MAPPINGS.put(key, props.getProperty(key)); } - init(false, System.getenv()); + for (String key : deprecatedProps.stringPropertyNames()) { + DEPRECATED_MAPPINGS.put(key, deprecatedProps.getProperty(key)); + } + init(false, System.getenv(), System.getProperties()); } } catch (IOException e) { throw new SolrException( @@ -179,7 +199,8 @@ public static void setProperty(String key, String value) { /** * Re-reads environment variables and updates the internal map. Mainly for internal and test use. */ - static synchronized void init(boolean overwrite, Map env) { + static synchronized void init( + boolean overwrite, Map env, Properties sysProperties) { // Convert eligible environment variables to system properties for (String key : env.keySet()) { if (key.startsWith("SOLR_") || CUSTOM_MAPPINGS.containsKey(key)) { @@ -190,6 +211,21 @@ static synchronized void init(boolean overwrite, Map env) { } } } + + // Convert deprecated keys to non deprecated versions + for (String key : sysProperties.stringPropertyNames()) { + if (DEPRECATED_MAPPINGS.containsKey(key)) { + String deprecatedKey = key; + key = DEPRECATED_MAPPINGS.get(deprecatedKey); + log.warn( + "You are passing in deprecated system property " + + deprecatedKey + + " and should upgrade to using " + + key + + "instead. The property will be removed in future version of Solr."); + setProperty(key, sysProperties.getProperty(deprecatedKey)); + } + } } protected static String envNameToSyspropName(String envName) { diff --git a/solr/solrj/src/resources/EnvToSyspropDeprecatedMappings.properties b/solr/solrj/src/resources/EnvToSyspropDeprecatedMappings.properties new file mode 100644 index 00000000000..40c0c6de79c --- /dev/null +++ b/solr/solrj/src/resources/EnvToSyspropDeprecatedMappings.properties @@ -0,0 +1,4 @@ +# Mapping from legacy system property names to current system property +# This file only contains non-standard mappings that do not follow the standard naming conversion convention +# You do not need it for solrMyProperty to solr.my.property legacy values +solrConfigSetForbiddenFileTypes=solr.configset.forbidden.file.types diff --git a/solr/solrj/src/test/org/apache/solr/common/util/EnvUtilsTest.java b/solr/solrj/src/test/org/apache/solr/common/util/EnvUtilsTest.java index 10f6835df54..32ea7e281ac 100644 --- a/solr/solrj/src/test/org/apache/solr/common/util/EnvUtilsTest.java +++ b/solr/solrj/src/test/org/apache/solr/common/util/EnvUtilsTest.java @@ -19,6 +19,7 @@ import java.util.List; import java.util.Map; +import java.util.Properties; import org.apache.solr.SolrTestCase; import org.junit.BeforeClass; import org.junit.Test; @@ -41,7 +42,7 @@ public class EnvUtilsTest extends SolrTestCase { @BeforeClass public static void beforeClass() throws Exception { // Make a map of some common Solr environment variables for testing, and initialize EnvUtils - EnvUtils.init(true, ENV); + EnvUtils.init(true, ENV, System.getProperties()); } @Test @@ -93,9 +94,19 @@ public void testNotMapped() { public void testOverwrite() { EnvUtils.setProperty("solr.overwrite", "original"); var env2 = Map.of("SOLR_OVERWRITE", "overwritten"); - EnvUtils.init(false, env2); + EnvUtils.init(false, env2, new Properties()); assertEquals("original", EnvUtils.getProperty("solr.overwrite")); - EnvUtils.init(true, env2); + EnvUtils.init(true, env2, new Properties()); assertEquals("overwritten", EnvUtils.getProperty("solr.overwrite")); } + + @Test + public void testDeprecated() { + var env = Map.of("SOLR_OVERWRITE", "overwritten"); + Properties defaultProps = new Properties(); + defaultProps.setProperty("solrConfigSetForbiddenFileTypes", "xml,json,jar"); + + EnvUtils.init(false, env, defaultProps); + assertEquals("xml,json,jar", EnvUtils.getProperty("solr.configset.forbidden.file.types")); + } } From b12e7627588aff45d01bb9b85c28bc65c0bf9ee8 Mon Sep 17 00:00:00 2001 From: Eric Pugh Date: Wed, 9 Apr 2025 10:26:46 -0400 Subject: [PATCH 14/17] Clarify when you need a mapping. --- .../src/resources/EnvToSyspropDeprecatedMappings.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/solr/solrj/src/resources/EnvToSyspropDeprecatedMappings.properties b/solr/solrj/src/resources/EnvToSyspropDeprecatedMappings.properties index 40c0c6de79c..0533cff9abf 100644 --- a/solr/solrj/src/resources/EnvToSyspropDeprecatedMappings.properties +++ b/solr/solrj/src/resources/EnvToSyspropDeprecatedMappings.properties @@ -1,4 +1,4 @@ # Mapping from legacy system property names to current system property # This file only contains non-standard mappings that do not follow the standard naming conversion convention -# You do not need it for solrMyProperty to solr.my.property legacy values +# You do not need a entry for a solrMyProperty to solr.my.property conversion solrConfigSetForbiddenFileTypes=solr.configset.forbidden.file.types From e204ea7d2d8739fee667e5045c5cbf43cb26b214 Mon Sep 17 00:00:00 2001 From: Eric Pugh Date: Wed, 9 Apr 2025 12:13:36 -0400 Subject: [PATCH 15/17] Migrate enable.package to solr.enable.package Adds a bats test to show the deprecated value still works, but emits a warning to the user. --- solr/core/src/java/org/apache/solr/cli/PackageTool.java | 2 +- solr/core/src/java/org/apache/solr/pkg/PackageAPI.java | 4 ++-- solr/core/src/test/org/apache/solr/cli/PackageToolTest.java | 4 ++-- .../solr/cluster/events/ClusterEventProducerTest.java | 4 ++-- .../org/apache/solr/filestore/TestDistribFileStore.java | 4 ++-- .../test/org/apache/solr/handler/TestContainerPlugin.java | 4 ++-- .../org/apache/solr/pkg/PackageStoreSchemaPluginsTest.java | 4 ++-- solr/core/src/test/org/apache/solr/pkg/TestPackages.java | 4 ++-- solr/packaging/test/test_basic_auth.bats | 2 +- solr/packaging/test/test_packages.bats | 6 +++--- solr/packaging/test/test_start_solr.bats | 5 +++++ .../pages/package-manager-internals.adoc | 4 ++-- .../modules/configuration-guide/pages/package-manager.adoc | 4 ++-- .../src/java/org/apache/solr/common/util/EnvUtils.java | 2 +- .../src/resources/EnvToSyspropDeprecatedMappings.properties | 1 + 15 files changed, 30 insertions(+), 24 deletions(-) diff --git a/solr/core/src/java/org/apache/solr/cli/PackageTool.java b/solr/core/src/java/org/apache/solr/cli/PackageTool.java index e60507bebe7..ee87393ea77 100644 --- a/solr/core/src/java/org/apache/solr/cli/PackageTool.java +++ b/solr/core/src/java/org/apache/solr/cli/PackageTool.java @@ -334,7 +334,7 @@ public String getHeader() { "Note: (a) Please add '--solr-url http://host:port' parameter if needed (usually on Windows)."); format( sb, - " (b) Please make sure that all Solr nodes are started with '-Denable.packages=true' parameter."); + " (b) Please make sure that all Solr nodes are started with '-Dsolr.enable.packages=true' parameter."); format(sb, "\n"); format(sb, "List of options:"); return sb.toString(); diff --git a/solr/core/src/java/org/apache/solr/pkg/PackageAPI.java b/solr/core/src/java/org/apache/solr/pkg/PackageAPI.java index aa5ca5d9564..8d935a9b262 100644 --- a/solr/core/src/java/org/apache/solr/pkg/PackageAPI.java +++ b/solr/core/src/java/org/apache/solr/pkg/PackageAPI.java @@ -62,11 +62,11 @@ /** This implements the public end points (/api/cluster/package) of package API. */ public class PackageAPI { - public final boolean enablePackages = EnvUtils.getPropertyAsBool("enable.packages", false); + public final boolean enablePackages = EnvUtils.getPropertyAsBool("solr.enable.packages", false); private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); public static final String ERR_MSG = - "Package loading is not enabled , Start your nodes with -Denable.packages=true"; + "Package loading is not enabled , Start your nodes with -Dsolr.enable.packages=true"; final CoreContainer coreContainer; private final ObjectMapper mapper = SolrJacksonAnnotationInspector.createObjectMapper(); diff --git a/solr/core/src/test/org/apache/solr/cli/PackageToolTest.java b/solr/core/src/test/org/apache/solr/cli/PackageToolTest.java index e7a59053a81..f87dd7a5f9f 100644 --- a/solr/core/src/test/org/apache/solr/cli/PackageToolTest.java +++ b/solr/core/src/test/org/apache/solr/cli/PackageToolTest.java @@ -61,7 +61,7 @@ public class PackageToolTest extends SolrCloudTestCase { @BeforeClass public static void setupClusterWithSecurityEnabled() throws Exception { - System.setProperty("enable.packages", "true"); + System.setProperty("solr.enable.packages", "true"); configureCluster(2) .addConfig( @@ -83,7 +83,7 @@ public static void teardown() throws Exception { repositoryServer.stop(); } } finally { - System.clearProperty("enable.packages"); + System.clearProperty("solr.enable.packages"); } } diff --git a/solr/core/src/test/org/apache/solr/cluster/events/ClusterEventProducerTest.java b/solr/core/src/test/org/apache/solr/cluster/events/ClusterEventProducerTest.java index e46266f2f80..3e77181c16c 100644 --- a/solr/core/src/test/org/apache/solr/cluster/events/ClusterEventProducerTest.java +++ b/solr/core/src/test/org/apache/solr/cluster/events/ClusterEventProducerTest.java @@ -66,7 +66,7 @@ public static void setupCluster() throws Exception { @Override @Before public void setUp() throws Exception { - System.setProperty("enable.packages", "true"); + System.setProperty("solr.enable.packages", "true"); super.setUp(); cluster.deleteAllCollections(); eventsListener = new AllEventsListener(); @@ -87,7 +87,7 @@ public void setUp() throws Exception { @After public void teardown() throws Exception { - System.clearProperty("enable.packages"); + System.clearProperty("solr.enable.packages"); if (eventsListener != null) { cluster .getOpenOverseer() diff --git a/solr/core/src/test/org/apache/solr/filestore/TestDistribFileStore.java b/solr/core/src/test/org/apache/solr/filestore/TestDistribFileStore.java index 1a32a24330f..88c53efbabc 100644 --- a/solr/core/src/test/org/apache/solr/filestore/TestDistribFileStore.java +++ b/solr/core/src/test/org/apache/solr/filestore/TestDistribFileStore.java @@ -67,12 +67,12 @@ public class TestDistribFileStore extends SolrCloudTestCase { @Before public void setup() { - System.setProperty("enable.packages", "true"); + System.setProperty("solr.enable.packages", "true"); } @After public void teardown() { - System.clearProperty("enable.packages"); + System.clearProperty("solr.enable.packages"); } @Test diff --git a/solr/core/src/test/org/apache/solr/handler/TestContainerPlugin.java b/solr/core/src/test/org/apache/solr/handler/TestContainerPlugin.java index 3b657e9cf72..8dff5591964 100644 --- a/solr/core/src/test/org/apache/solr/handler/TestContainerPlugin.java +++ b/solr/core/src/test/org/apache/solr/handler/TestContainerPlugin.java @@ -111,7 +111,7 @@ public boolean waitFor(int num) throws InterruptedException { @Before public void setup() throws Exception { - System.setProperty("enable.packages", "true"); + System.setProperty("solr.enable.packages", "true"); phaser = new Phaser(); forceV2 = random().nextBoolean(); @@ -142,7 +142,7 @@ public void setup() throws Exception { @After public void teardown() throws Exception { shutdownCluster(); - System.clearProperty("enable.packages"); + System.clearProperty("solr.enable.packages"); } @SuppressWarnings("unchecked") diff --git a/solr/core/src/test/org/apache/solr/pkg/PackageStoreSchemaPluginsTest.java b/solr/core/src/test/org/apache/solr/pkg/PackageStoreSchemaPluginsTest.java index 5fa62780a6b..7a6ff6b613d 100644 --- a/solr/core/src/test/org/apache/solr/pkg/PackageStoreSchemaPluginsTest.java +++ b/solr/core/src/test/org/apache/solr/pkg/PackageStoreSchemaPluginsTest.java @@ -60,7 +60,7 @@ public class PackageStoreSchemaPluginsTest extends SolrCloudTestCase { @Override public void setUp() throws Exception { super.setUp(); - System.setProperty("enable.packages", "true"); + System.setProperty("solr.enable.packages", "true"); configureCluster(2) // add a configset where one schema field is of type `my.pkg.MyTextField` // this class is available via schema-plugins.jar.bin @@ -79,7 +79,7 @@ public void tearDown() throws Exception { cluster.shutdown(); cluster = null; } - System.clearProperty("enable.packages"); + System.clearProperty("solr.enable.packages"); super.tearDown(); } diff --git a/solr/core/src/test/org/apache/solr/pkg/TestPackages.java b/solr/core/src/test/org/apache/solr/pkg/TestPackages.java index 78de0ee5199..cc0f1227388 100644 --- a/solr/core/src/test/org/apache/solr/pkg/TestPackages.java +++ b/solr/core/src/test/org/apache/solr/pkg/TestPackages.java @@ -91,7 +91,7 @@ public class TestPackages extends SolrCloudTestCase { @Override public void setUp() throws Exception { super.setUp(); - System.setProperty("enable.packages", "true"); + System.setProperty("solr.enable.packages", "true"); configureCluster(4) .withJettyConfig(jetty -> jetty.enableV2(true)) .addConfig("conf", configset("conf3")) @@ -105,7 +105,7 @@ public void tearDown() throws Exception { if (cluster != null) { cluster.shutdown(); } - System.clearProperty("enable.packages"); + System.clearProperty("solr.enable.packages"); super.tearDown(); } diff --git a/solr/packaging/test/test_basic_auth.bats b/solr/packaging/test/test_basic_auth.bats index a84d9d15d4a..8fc7ba079cc 100644 --- a/solr/packaging/test/test_basic_auth.bats +++ b/solr/packaging/test/test_basic_auth.bats @@ -21,7 +21,7 @@ setup() { common_clean_setup echo "Starting Solr" - solr start -Denable.packages=true + solr start -Dsolr.enable.packages=true # The auth command exports some system variables that are injected as basic auth username and password, # however that defeats our test so fake that out via --solr-include-file param specifing a bogus path. diff --git a/solr/packaging/test/test_packages.bats b/solr/packaging/test/test_packages.bats index cc7cd1b82ce..751dd2b49d4 100644 --- a/solr/packaging/test/test_packages.bats +++ b/solr/packaging/test/test_packages.bats @@ -29,7 +29,7 @@ teardown() { } @test "lifecycle of package" { - run solr start -Denable.packages=true + run solr start -Dsolr.enable.packages=true run solr package --help assert_output --partial "Add a repository to Solr" @@ -39,7 +39,7 @@ teardown() { } @test "deploying and undeploying a collection level package" { - run solr start -Denable.packages=true + run solr start -Dsolr.enable.packages=true solr create -c foo-1.2 @@ -64,7 +64,7 @@ teardown() { @test "deploying and undeploying a cluster level package" { skip "For developing package infra; requires a connection to github" - run solr start -Denable.packages=true + run solr start -Dsolr.enable.packages=true run solr package add-repo splainer "https://raw.githubusercontent.com/o19s/splainer/refs/heads/main/solr-splainer-package/repo/" assert_output --partial "Added repository: splainer" diff --git a/solr/packaging/test/test_start_solr.bats b/solr/packaging/test/test_start_solr.bats index a4b80efe01d..6a894ca6abb 100644 --- a/solr/packaging/test/test_start_solr.bats +++ b/solr/packaging/test/test_start_solr.bats @@ -80,3 +80,8 @@ teardown() { run cat ${SOLR_LOGS_DIR}/solr-${SOLR_PORT}-console.log refute_output --partial 'Exception' } + +@test "deprecated system properties converted to modern properties" { + solr start -Denable.packages=true + assert_file_contains "${SOLR_LOGS_DIR}/solr.log" 'You are passing in deprecated system property enable.packages and should upgrade to using solr.enable.packages instead.' +} diff --git a/solr/solr-ref-guide/modules/configuration-guide/pages/package-manager-internals.adoc b/solr/solr-ref-guide/modules/configuration-guide/pages/package-manager-internals.adoc index 33b6afcc2a4..732f730a842 100644 --- a/solr/solr-ref-guide/modules/configuration-guide/pages/package-manager-internals.adoc +++ b/solr/solr-ref-guide/modules/configuration-guide/pages/package-manager-internals.adoc @@ -42,13 +42,13 @@ As soon as the configuration is modified, the corresponding classloaders are rel == Package Loading Security Packages are disabled by default. -Start all your nodes with the system property `-Denable.packages=true` to use this feature. +Start all your nodes with the system property `-Dsolr.enable.packages=true` to use this feature. *Example* [source,bash] ---- -bin/solr start -Denable.packages=true +bin/solr start -Dsolr.enable.packages=true ---- === Upload Your Keys diff --git a/solr/solr-ref-guide/modules/configuration-guide/pages/package-manager.adoc b/solr/solr-ref-guide/modules/configuration-guide/pages/package-manager.adoc index d4fd1754234..6babb1b383c 100644 --- a/solr/solr-ref-guide/modules/configuration-guide/pages/package-manager.adoc +++ b/solr/solr-ref-guide/modules/configuration-guide/pages/package-manager.adoc @@ -42,11 +42,11 @@ The package manager (CLI) allows you to: === Enable the Package Manager The package manager is disabled by default. -To enable it, start all Solr nodes with the `-Denable.packages=true` parameter. +To enable it, start all Solr nodes with the `-Dsolr.enable.packages=true` parameter. [source,bash] ---- -$ bin/solr start -Denable.packages=true +$ bin/solr start -Dsolr.enable.packages=true ---- WARNING: There are security consequences to enabling the package manager. diff --git a/solr/solrj/src/java/org/apache/solr/common/util/EnvUtils.java b/solr/solrj/src/java/org/apache/solr/common/util/EnvUtils.java index a65c709032c..deb9fcb3fbd 100644 --- a/solr/solrj/src/java/org/apache/solr/common/util/EnvUtils.java +++ b/solr/solrj/src/java/org/apache/solr/common/util/EnvUtils.java @@ -222,7 +222,7 @@ static synchronized void init( + deprecatedKey + " and should upgrade to using " + key - + "instead. The property will be removed in future version of Solr."); + + " instead. The deprecated property support will be removed in future version of Solr."); setProperty(key, sysProperties.getProperty(deprecatedKey)); } } diff --git a/solr/solrj/src/resources/EnvToSyspropDeprecatedMappings.properties b/solr/solrj/src/resources/EnvToSyspropDeprecatedMappings.properties index 0533cff9abf..d3daf7fb2ce 100644 --- a/solr/solrj/src/resources/EnvToSyspropDeprecatedMappings.properties +++ b/solr/solrj/src/resources/EnvToSyspropDeprecatedMappings.properties @@ -2,3 +2,4 @@ # This file only contains non-standard mappings that do not follow the standard naming conversion convention # You do not need a entry for a solrMyProperty to solr.my.property conversion solrConfigSetForbiddenFileTypes=solr.configset.forbidden.file.types +enable.packages=solr.enable.packages From 6946605e79b28f22f4f015444d0935be25a1935e Mon Sep 17 00:00:00 2001 From: Eric Pugh Date: Wed, 9 Apr 2025 12:51:27 -0400 Subject: [PATCH 16/17] Format log message using best practices. --- .../src/java/org/apache/solr/common/util/EnvUtils.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/solr/solrj/src/java/org/apache/solr/common/util/EnvUtils.java b/solr/solrj/src/java/org/apache/solr/common/util/EnvUtils.java index deb9fcb3fbd..91b6889cc3b 100644 --- a/solr/solrj/src/java/org/apache/solr/common/util/EnvUtils.java +++ b/solr/solrj/src/java/org/apache/solr/common/util/EnvUtils.java @@ -218,11 +218,9 @@ static synchronized void init( String deprecatedKey = key; key = DEPRECATED_MAPPINGS.get(deprecatedKey); log.warn( - "You are passing in deprecated system property " - + deprecatedKey - + " and should upgrade to using " - + key - + " instead. The deprecated property support will be removed in future version of Solr."); + "You are passing in deprecated system property {} and should upgrade to using {} instead. The deprecated property support will be removed in future version of Solr.", + deprecatedKey, + key); setProperty(key, sysProperties.getProperty(deprecatedKey)); } } From 6e55300cf2d70a4ad382c1fc41e0cb3efee43cfc Mon Sep 17 00:00:00 2001 From: Eric Pugh Date: Wed, 9 Apr 2025 13:05:04 -0400 Subject: [PATCH 17/17] Remove the actual mapping! --- solr/solrj/src/resources/EnvToSyspropMappings.properties | 1 - 1 file changed, 1 deletion(-) diff --git a/solr/solrj/src/resources/EnvToSyspropMappings.properties b/solr/solrj/src/resources/EnvToSyspropMappings.properties index e90dbd324b6..fdd05c05a51 100644 --- a/solr/solrj/src/resources/EnvToSyspropMappings.properties +++ b/solr/solrj/src/resources/EnvToSyspropMappings.properties @@ -8,7 +8,6 @@ AWS_PROFILE=aws.profile SOLR_ALWAYS_ON_TRACE_ID=solr.alwaysOnTraceId SOLR_AUTH_JWT_ALLOW_OUTBOUND_HTTP=solr.auth.jwt.allowOutboundHttp SOLR_DISABLE_REQUEST_ID=solr.disableRequestId -SOLR_ENABLE_PACKAGES=enable.packages SOLR_HIDDEN_SYS_PROPS=solr.hiddenSysProps SOLR_HOME=solr.solr.home SOLR_HOST=host