Skip to content

Commit

Permalink
SOLR-17321: Cleanup JDK version related logic in scripts (#2792)
Browse files Browse the repository at this point in the history
* Cleanup JDK related logic in scripts
* Match logic for GC_LOG_OPTS in scripts
  • Loading branch information
malliaridis authored Oct 28, 2024
1 parent 290dba6 commit 97a11cf
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 74 deletions.
27 changes: 4 additions & 23 deletions solr/bin/solr
Original file line number Diff line number Diff line change
Expand Up @@ -1054,31 +1054,13 @@ fi

# Establish default GC logging opts if no env var set (otherwise init to sensible default)
if [ -z "${GC_LOG_OPTS}" ]; then
if [[ "$JAVA_VER_NUM" -lt "9" ]] ; then
GC_LOG_OPTS=('-verbose:gc' '-XX:+PrintHeapAtGC' '-XX:+PrintGCDetails' \
'-XX:+PrintGCDateStamps' '-XX:+PrintGCTimeStamps' '-XX:+PrintTenuringDistribution' \
'-XX:+PrintGCApplicationStoppedTime')
else
GC_LOG_OPTS=('-Xlog:gc*')
fi
else
# TODO: Should probably not overload GC_LOG_OPTS as both string and array, but leaving it be for now
# shellcheck disable=SC2128
GC_LOG_OPTS=($GC_LOG_OPTS)
GC_LOG_OPTS=('-Xlog:gc*')
fi

# if verbose gc logging enabled, setup the location of the log file and rotation
if [ "${#GC_LOG_OPTS[@]}" -gt 0 ]; then
if [[ "$JAVA_VER_NUM" -lt "9" ]] || [ "$JAVA_VENDOR" == "OpenJ9" ]; then
gc_log_flag="-Xloggc"
if [ "$JAVA_VENDOR" == "OpenJ9" ]; then
gc_log_flag="-Xverbosegclog"
fi
if [ -z ${JAVA8_GC_LOG_FILE_OPTS+x} ]; then
GC_LOG_OPTS+=("$gc_log_flag:$SOLR_LOGS_DIR/solr_gc.log" '-XX:+UseGCLogFileRotation' '-XX:NumberOfGCLogFiles=9' '-XX:GCLogFileSize=20M')
else
GC_LOG_OPTS+=($JAVA8_GC_LOG_FILE_OPTS)
fi
if [ "$JAVA_VENDOR" == "OpenJ9" ]; then
GC_LOG_OPTS+=("-Xverbosegclog:$SOLR_LOGS_DIR/solr_gc.log" '-XX:+UseGCLogFileRotation' '-XX:NumberOfGCLogFiles=9' '-XX:GCLogFileSize=20M')
else
# https://openjdk.java.net/jeps/158
for i in "${!GC_LOG_OPTS[@]}";
Expand Down Expand Up @@ -1322,8 +1304,7 @@ function start_solr() {
exit 1
fi

# Vector optimizations are only supported for Java 20 and 21 for now.
# This will need to change as Lucene is upgraded and newer Java versions are released
# Add vector optimizations module
SCRIPT_SOLR_OPTS+=("--add-modules" "jdk.incubator.vector")

SOLR_START_OPTS=('-server' "${JAVA_MEM_OPTS[@]}" "${GC_TUNE_ARR[@]}" "${GC_LOG_OPTS[@]}" "${IP_ACL_OPTS[@]}" \
Expand Down
63 changes: 12 additions & 51 deletions solr/bin/solr.cmd
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@

IF "%OS%"=="Windows_NT" setlocal enabledelayedexpansion enableextensions

@REM What version of Java is required to run this version of Solr.
set REQUIRED_JAVA_VERSION=21
set "PASS_TO_RUN_EXAMPLE="

REM Determine top-level Solr directory
Expand Down Expand Up @@ -61,8 +63,8 @@ IF NOT EXIST "%JAVA_HOME%\bin\java.exe" (
)
set "JAVA=%JAVA_HOME%\bin\java"
CALL :resolve_java_info
IF !JAVA_MAJOR_VERSION! LSS 8 (
set "SCRIPT_ERROR=Java 1.8 or later is required to run Solr. Current Java version is: !JAVA_VERSION_INFO! (detected major: !JAVA_MAJOR_VERSION!)"
IF !JAVA_MAJOR_VERSION! LSS !REQUIRED_JAVA_VERSION! (
set "SCRIPT_ERROR=Java !REQUIRED_JAVA_VERSION! or later is required to run Solr. Current Java version is: !JAVA_VERSION_INFO! (detected major: !JAVA_MAJOR_VERSION!)"
goto err
)

Expand Down Expand Up @@ -890,18 +892,6 @@ IF ERRORLEVEL 1 (
set IS_JDK=true
set "SERVEROPT=-server"
)
if !JAVA_MAJOR_VERSION! LSS 9 (
"%JAVA%" -d64 -version > nul 2>&1
IF ERRORLEVEL 1 (
set "IS_64BIT=false"
@echo WARNING: 32-bit Java detected. Not recommended for production. Point your JAVA_HOME to a 64-bit JDK
@echo.
) ELSE (
set IS_64bit=true
)
) ELSE (
set IS_64bit=true
)

IF NOT "%ZK_HOST%"=="" set SOLR_MODE=solrcloud
IF "%SOLR_MODE%"=="" set SOLR_MODE=solrcloud
Expand Down Expand Up @@ -1015,41 +1005,16 @@ IF "%GC_TUNE%"=="" (
-XX:+ExplicitGCInvokesConcurrent
)

REM Workaround for JIT crash, see https://issues.apache.org/jira/browse/SOLR-16463
if !JAVA_MAJOR_VERSION! GEQ 17 (
set SCRIPT_SOLR_OPTS=%SCRIPT_SOLR_OPTS% -XX:CompileCommand=exclude,com.github.benmanes.caffeine.cache.BoundedLocalCache::put
echo Java %JAVA_MAJOR_VERSION% detected. Enabled workaround for SOLR-16463
)
REM Add vector optimizations module
set SCRIPT_SOLR_OPTS=%SCRIPT_SOLR_OPTS% --add-modules jdk.incubator.vector

REM Vector optimizations are only supported for Java 20 and 21 for now.
REM This will need to change as Lucene is upgraded and newer Java versions are released
if !JAVA_MAJOR_VERSION! GEQ 20 if !JAVA_MAJOR_VERSION! LEQ 21 (
set SCRIPT_SOLR_OPTS=%SCRIPT_SOLR_OPTS% --add-modules jdk.incubator.vector
echo Java %JAVA_MAJOR_VERSION% detected. Incubating Panama Vector APIs have been enabled
IF "%GC_LOG_OPTS%"=="" (
set GC_LOG_OPTS="-Xlog:gc*"
)

if !JAVA_MAJOR_VERSION! GEQ 9 if NOT "%JAVA_VENDOR%" == "OpenJ9" (
IF NOT "%GC_LOG_OPTS%"=="" (
echo ERROR: On Java 9 you cannot set GC_LOG_OPTS, only default GC logging is available. Exiting
GOTO :eof
)
set GC_LOG_OPTS="-Xlog:gc*:file=\"!SOLR_LOGS_DIR!\solr_gc.log\":time,uptime:filecount=9,filesize=20M"
if "%JAVA_VENDOR%" == "OpenJ9" (
set GC_LOG_OPTS=!GC_LOG_OPTS! "-Xverbosegclog:!SOLR_LOGS_DIR!\solr_gc.log" -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=9 -XX:GCLogFileSize=20M
) else (
IF "%GC_LOG_OPTS%"=="" (
rem Set defaults for Java 8
set GC_LOG_OPTS=-verbose:gc ^
-XX:+PrintHeapAtGC ^
-XX:+PrintGCDetails ^
-XX:+PrintGCDateStamps ^
-XX:+PrintGCTimeStamps ^
-XX:+PrintTenuringDistribution ^
-XX:+PrintGCApplicationStoppedTime
)
if "%JAVA_VENDOR%" == "OpenJ9" (
set GC_LOG_OPTS=!GC_LOG_OPTS! "-Xverbosegclog:!SOLR_LOGS_DIR!\solr_gc.log" -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=9 -XX:GCLogFileSize=20M
) else (
set GC_LOG_OPTS=!GC_LOG_OPTS! "-Xloggc:!SOLR_LOGS_DIR!\solr_gc.log" -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=9 -XX:GCLogFileSize=20M
)
set GC_LOG_OPTS=!GC_LOG_OPTS! "-Xloggc:!SOLR_LOGS_DIR!\solr_gc.log" -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=9 -XX:GCLogFileSize=20M
)

IF "%verbose%"=="1" (
Expand Down Expand Up @@ -1565,11 +1530,7 @@ IF "%FIRST_ARG%"=="start" (
)

:need_java_home
@echo Please set the JAVA_HOME environment variable to the path where you installed Java 1.8+
goto done

:need_java_vers
@echo Java 1.8 or later is required to run Solr.
@echo Please set the JAVA_HOME environment variable to the path where you installed Java 21+
goto done

:err
Expand Down

0 comments on commit 97a11cf

Please sign in to comment.