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 3466cdc6b23..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 @@ -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 @@ -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 @@ -1018,7 +1010,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 @@ -1156,14 +1149,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) @@ -1213,17 +1198,10 @@ 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 - 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 @@ -1307,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 @@ -1316,7 +1294,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[@]}") + "${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..a17383aebe8 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%" ( @@ -925,14 +917,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 "%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%" ) ELSE ( @@ -1006,13 +990,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 +1071,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!" @@ -1111,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" @@ -1141,7 +1117,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 @@ -1149,7 +1125,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 ( @@ -1157,7 +1133,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 @@ -1166,7 +1142,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/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/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/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/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/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/servlet/LoadAdminUiServlet.java b/solr/core/src/java/org/apache/solr/servlet/LoadAdminUiServlet.java index 436906d3a69..0f1e93ea467 100644 --- a/solr/core/src/java/org/apache/solr/servlet/LoadAdminUiServlet.java +++ b/solr/core/src/java/org/apache/solr/servlet/LoadAdminUiServlet.java @@ -39,9 +39,9 @@ */ 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(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"; 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/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/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/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/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/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/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/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/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/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/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"); } 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/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/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/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/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 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/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-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/java/org/apache/solr/common/util/EnvUtils.java b/solr/solrj/src/java/org/apache/solr/common/util/EnvUtils.java index 6adac222ab7..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 @@ -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,19 @@ 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 {} 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)); + } + } } 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..d3daf7fb2ce --- /dev/null +++ b/solr/solrj/src/resources/EnvToSyspropDeprecatedMappings.properties @@ -0,0 +1,5 @@ +# 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 a entry for a solrMyProperty to solr.my.property conversion +solrConfigSetForbiddenFileTypes=solr.configset.forbidden.file.types +enable.packages=solr.enable.packages diff --git a/solr/solrj/src/resources/EnvToSyspropMappings.properties b/solr/solrj/src/resources/EnvToSyspropMappings.properties index dcfa553961a..fdd05c05a51 100644 --- a/solr/solrj/src/resources/EnvToSyspropMappings.properties +++ b/solr/solrj/src/resources/EnvToSyspropMappings.properties @@ -5,29 +5,21 @@ # 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_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 -SOLR_DELETE_UNKNOWN_CORES=solr.deleteUnknownCores 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 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 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 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..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 @@ -80,7 +81,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 @@ -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")); + } }