You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by th...@apache.org on 2015/02/09 16:04:49 UTC

svn commit: r1658423 - in /lucene/dev/trunk/solr: CHANGES.txt bin/solr.cmd

Author: thelabdude
Date: Mon Feb  9 15:04:48 2015
New Revision: 1658423

URL: http://svn.apache.org/r1658423
Log:
SOLR-6693: bin\solr.cmd doesn't support 32-bit JRE/JDK running on Windows due to parenthesis in JAVA_HOME

Modified:
    lucene/dev/trunk/solr/CHANGES.txt
    lucene/dev/trunk/solr/bin/solr.cmd

Modified: lucene/dev/trunk/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/CHANGES.txt?rev=1658423&r1=1658422&r2=1658423&view=diff
==============================================================================
--- lucene/dev/trunk/solr/CHANGES.txt (original)
+++ lucene/dev/trunk/solr/CHANGES.txt Mon Feb  9 15:04:48 2015
@@ -630,6 +630,9 @@ Bug Fixes
   node attempts to become the leader for a shard. 
   (Mark Miller, Maxim Novikov)
 
+* SOLR-6693: bin\solr.cmd doesn't support 32-bit JRE/JDK running on Windows due to 
+  parenthesis in JAVA_HOME. (Timothy Potter, Christopher Hewitt, Jan Høydahl)
+
 Optimizations
 ----------------------
 

Modified: lucene/dev/trunk/solr/bin/solr.cmd
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/bin/solr.cmd?rev=1658423&r1=1658422&r2=1658423&view=diff
==============================================================================
--- lucene/dev/trunk/solr/bin/solr.cmd (original)
+++ lucene/dev/trunk/solr/bin/solr.cmd Mon Feb  9 15:04:48 2015
@@ -47,16 +47,22 @@ REM Try to detect JAVA_HOME from the reg
 IF NOT DEFINED JAVA_HOME (
   FOR /F "skip=2 tokens=2*" %%A IN ('REG QUERY "HKLM\Software\JavaSoft\Java Runtime Environment" /v CurrentVersion') DO set CurVer=%%B
   FOR /F "skip=2 tokens=2*" %%A IN ('REG QUERY "HKLM\Software\JavaSoft\Java Runtime Environment\!CurVer!" /v JavaHome') DO (
-    set JAVA_HOME=%%B
+    set "JAVA_HOME=%%B"
   )
 )
-
 IF NOT DEFINED JAVA_HOME goto need_java_home
 set JAVA_HOME=%JAVA_HOME:"=%
-"%JAVA_HOME%"\bin\java -version:1.8 -version > nul 2>&1
-IF ERRORLEVEL 1 "%JAVA_HOME%"\bin\java -version:1.7 -version > nul 2>&1
-IF ERRORLEVEL 1 goto need_java_vers
+IF %JAVA_HOME:~-1%==\ SET JAVA_HOME=%JAVA_HOME:~0,-1%
+IF NOT EXIST "%JAVA_HOME%\bin\java.exe" (
+  set "SCRIPT_ERROR=java.exe not found in %JAVA_HOME%\bin. Please set JAVA_HOME to a valid JRE / JDK directory."
+  goto err
+)
 set "JAVA=%JAVA_HOME%\bin\java"
+CALL :resolve_java_version
+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!"
+  goto err
+)
 
 set "DEFAULT_SERVER_DIR=%SOLR_TIP%\server"
 
@@ -543,9 +549,10 @@ REM Perform the requested command after
 :process_script_cmd
 
 IF "%verbose%"=="1" (
-  @echo Using Solr root directory: %SOLR_TIP%
-  @echo Using Java: %JAVA%
+  CALL :safe_echo "Using Solr root directory: %SOLR_TIP%"
+  CALL :safe_echo "Using Java: %JAVA%"
   "%JAVA%" -version
+  @echo.
 )
 
 IF NOT "%SOLR_HOST%"=="" (
@@ -554,10 +561,10 @@ IF NOT "%SOLR_HOST%"=="" (
   set SOLR_HOST_ARG=
 )
 
-IF "%SOLR_SERVER_DIR%"=="" set SOLR_SERVER_DIR=%DEFAULT_SERVER_DIR%
+IF "%SOLR_SERVER_DIR%"=="" set "SOLR_SERVER_DIR=%DEFAULT_SERVER_DIR%"
 
 IF NOT EXIST "%SOLR_SERVER_DIR%" (
-  set SCRIPT_ERROR=Solr server directory %SOLR_SERVER_DIR% not found!
+  set "SCRIPT_ERROR=Solr server directory %SOLR_SERVER_DIR% not found!"
   goto err
 )
 
@@ -601,13 +608,13 @@ IF NOT EXIST "%SOLR_HOME%\" (
   ) ELSE IF EXIST "%cd%\%SOLR_HOME%" (
     set "SOLR_HOME=%cd%\%SOLR_HOME%"
   ) ELSE (
-    set SCRIPT_ERROR=Solr home directory %SOLR_HOME% not found!
+    set "SCRIPT_ERROR=Solr home directory %SOLR_HOME% not found!"
     goto err
   )
 )
 
 IF NOT EXIST "%SOLR_HOME%\solr.xml" (
-  set SCRIPT_ERROR=Solr home directory %SOLR_HOME% must contain solr.xml!
+  set "SCRIPT_ERROR=Solr home directory %SOLR_HOME% must contain solr.xml!"
   goto err
 )
 
@@ -624,6 +631,16 @@ IF NOT "%TMP%"=="%SOLR_HOME%" (
   set "LOG4J_CONFIG=file:%EXAMPLE_DIR%\resources\log4j.properties"
 )
 
+set IS_RESTART=0
+IF "%SCRIPT_CMD%"=="restart" (
+  IF "%SOLR_PORT%"=="" (
+    set "SCRIPT_ERROR=Must specify the port when trying to restart Solr."
+    goto err
+  )
+  set SCRIPT_CMD=stop
+  set IS_RESTART=1
+)
+
 @REM stop logic here
 IF "%SCRIPT_CMD%"=="stop" (
   IF "%SOLR_PORT%"=="" (
@@ -665,7 +682,7 @@ IF "%SCRIPT_CMD%"=="stop" (
       )
       if "!found_it!"=="0" echo No Solr nodes found to stop.
     ) ELSE (
-      set SCRIPT_ERROR=Must specify the port when trying to stop Solr, or use -all to stop all running nodes on this host.
+      set "SCRIPT_ERROR=Must specify the port when trying to stop Solr, or use -all to stop all running nodes on this host."
       goto err
     )
   ) ELSE (
@@ -697,9 +714,12 @@ IF "%SCRIPT_CMD%"=="stop" (
     )
     if "!found_it!"=="0" echo No Solr found running on port %SOLR_PORT%
   )
-  goto done
+
+  IF "!IS_RESTART!"=="0" goto done
 )
 
+IF "!IS_RESTART!"=="1" set SCRIPT_CMD=start
+
 IF "%SOLR_PORT%"=="" set SOLR_PORT=8983
 IF "%STOP_PORT%"=="" set /A STOP_PORT=%SOLR_PORT% - 1000
 
@@ -717,6 +737,26 @@ IF "%SCRIPT_CMD%"=="start" (
   )
 )
 
+@REM determine if -server flag is supported by current JVM
+"%JAVA%" -server -version > nul 2>&1
+IF ERRORLEVEL 1 (
+  set IS_JDK=false
+  set "SERVEROPT="
+  @echo WARNING: You are using a JRE without support for -server option. Please upgrade to latest JDK for best performance
+  @echo.
+) ELSE (
+  set IS_JDK=true
+  set "SERVEROPT=-server"
+)
+"%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
+)
+
 REM backup log files (use current timestamp for backup name)
 For /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set mydate=%%c-%%a-%%b)
 For /f "tokens=1-2 delims=/:" %%a in ("%TIME%") do (set mytime=%%a%%b)
@@ -731,9 +771,6 @@ IF EXIST "!SOLR_LOGS_DIR!\solr_gc.log" (
   move /Y "!SOLR_LOGS_DIR!\solr_gc.log" "!SOLR_LOGS_DIR!\solr_gc_log_!now_ts!"
 )
 
-REM if verbose gc logging enabled, setup the location of the log file
-IF NOT "%GC_LOG_OPTS%"=="" set GC_LOG_OPTS=%GC_LOG_OPTS% -Xloggc:"!SOLR_LOGS_DIR!/solr_gc.log"
-
 IF "%SOLR_MODE%"=="solrcloud" (
   IF "%ZK_CLIENT_TIMEOUT%"=="" set "ZK_CLIENT_TIMEOUT=15000"
 
@@ -760,7 +797,7 @@ IF "%ENABLE_REMOTE_JMX_OPTS%"=="true" (
 -Dcom.sun.management.jmxremote.port=!RMI_PORT! ^
 -Dcom.sun.management.jmxremote.rmi.port=!RMI_PORT!
 
-IF NOT "%SOLR_HOST%"=="" set REMOTE_JMX_OPTS=%REMOTE_JMX_OPTS% -Djava.rmi.server.hostname=%SOLR_HOST%
+  IF NOT "%SOLR_HOST%"=="" set REMOTE_JMX_OPTS=%REMOTE_JMX_OPTS% -Djava.rmi.server.hostname=%SOLR_HOST%
 ) ELSE (
   set REMOTE_JMX_OPTS=
 )
@@ -769,61 +806,47 @@ IF NOT "%SOLR_HEAP%"=="" set SOLR_JAVA_M
 IF "%SOLR_JAVA_MEM%"=="" set SOLR_JAVA_MEM=-Xms512m -Xmx512m
 IF "%SOLR_TIMEZONE%"=="" set SOLR_TIMEZONE=UTC
 
-@REM Add Java version specific flags if needed
-set JAVAVER=
-set JAVA_MAJOR=
-set JAVA_BUILD=0
-
-"%JAVA%" -version 2>&1 | findstr /i "version" > javavers
-set /p JAVAVEROUT=<javavers
-del javavers
-for /f "tokens=3" %%g in ("!JAVAVEROUT!") do (
-  set JAVAVER=%%g
-  set JAVAVER=!JAVAVER:"=!
-  for /f "delims=_ tokens=1-3" %%v in ("!JAVAVER!") do (
-    set JAVA_MAJOR=!JAVAVER:~0,3!
-    set /a JAVA_BUILD=%%w
-  )
-)
-IF "!JAVA_MAJOR!"=="1.7" (
+IF "!JAVA_MAJOR_VERSION!"=="7" (
   set "GC_TUNE=%GC_TUNE% -XX:CMSFullGCsBeforeCompaction=1 -XX:CMSTriggerPermRatio=80"
   IF !JAVA_BUILD! GEQ 40 (
     IF !JAVA_BUILD! LEQ 51 (
       set "GC_TUNE=!GC_TUNE! -XX:-UseSuperWord"
-      @echo WARNING: Java version !JAVAVER! has known bugs with Lucene and requires the -XX:-UseSuperWord flag. Please consider upgrading your JVM.
+      @echo WARNING: Java version !JAVA_VERSION_INFO! has known bugs with Lucene and requires the -XX:-UseSuperWord flag. Please consider upgrading your JVM.
     )
   )
 )
 
 IF "%verbose%"=="1" (
-    @echo Starting Solr using the following settings:
-    @echo     JAVA            = %JAVA%
-    @echo     SOLR_SERVER_DIR = %SOLR_SERVER_DIR%
-    @echo     SOLR_HOME       = %SOLR_HOME%
-    @echo     SOLR_HOST       = %SOLR_HOST%
-    @echo     SOLR_PORT       = %SOLR_PORT%
-    @echo     STOP_PORT       = %STOP_PORT%
-    @echo     SOLR_JAVA_MEM   = %SOLR_JAVA_MEM%
-    @echo     GC_TUNE         = !GC_TUNE!
-    @echo     GC_LOG_OPTS     = %GC_LOG_OPTS%
-    @echo     SOLR_TIMEZONE   = %SOLR_TIMEZONE%
+  @echo Starting Solr using the following settings:
+  CALL :safe_echo "    JAVA            = %JAVA%"
+  CALL :safe_echo "    SOLR_SERVER_DIR = %SOLR_SERVER_DIR%"
+  CALL :safe_echo "    SOLR_HOME       = %SOLR_HOME%"
+  @echo     SOLR_HOST       = %SOLR_HOST%
+  @echo     SOLR_PORT       = %SOLR_PORT%
+  @echo     STOP_PORT       = %STOP_PORT%
+  @echo     SOLR_JAVA_MEM   = %SOLR_JAVA_MEM%
+  @echo     GC_TUNE         = !GC_TUNE!
+  @echo     GC_LOG_OPTS     = %GC_LOG_OPTS%
+  @echo     SOLR_TIMEZONE   = %SOLR_TIMEZONE%
 
-    IF "%SOLR_MODE%"=="solrcloud" (
-      @echo     CLOUD_MODE_OPTS = %CLOUD_MODE_OPTS%
-    )
+  IF "%SOLR_MODE%"=="solrcloud" (
+    @echo     CLOUD_MODE_OPTS = %CLOUD_MODE_OPTS%
+  )
 
-    IF NOT "%SOLR_OPTS%"=="" (
-      @echo     SOLR_OPTS       = %SOLR_OPTS%
-    )
+  IF NOT "%SOLR_OPTS%"=="" (
+    @echo     SOLR_OPTS       = %SOLR_OPTS%
+  )
 
-    IF NOT "%SOLR_ADDL_ARGS%"=="" (
-      @echo     SOLR_ADDL_ARGS  = %SOLR_ADDL_ARGS%
-    )
+  IF NOT "%SOLR_ADDL_ARGS%"=="" (
+    CALL :safe_echo "     SOLR_ADDL_ARGS  = %SOLR_ADDL_ARGS%"
+  )
 
-    IF "%ENABLE_REMOTE_JMX_OPTS%"=="true" (
-        @echo     RMI_PORT        = !RMI_PORT!
-        @echo     REMOTE_JMX_OPTS = %REMOTE_JMX_OPTS%
-    )
+  IF "%ENABLE_REMOTE_JMX_OPTS%"=="true" (
+    @echo     RMI_PORT        = !RMI_PORT!
+    @echo     REMOTE_JMX_OPTS = %REMOTE_JMX_OPTS%
+  )
+
+  @echo.
 )
 
 set START_OPTS=-Duser.timezone=%SOLR_TIMEZONE% -Djava.net.preferIPv4Stack=true
@@ -852,21 +875,20 @@ IF NOT EXIST "%SOLR_SERVER_DIR%\tmp" (
 )
 
 @echo.
-@echo Starting Solr on port %SOLR_PORT% from %SOLR_SERVER_DIR%
+CALL :safe_echo "Starting Solr on port %SOLR_PORT% from %SOLR_SERVER_DIR%"
 @echo.
 IF "%FG%"=="1" (
   REM run solr in the foreground
   title "Solr-%SOLR_PORT%"
   echo %SOLR_PORT%>"%SOLR_TIP%"\bin\solr-%SOLR_PORT%.port
-  "%JAVA%" -server -Xss256k %SOLR_JAVA_MEM% %START_OPTS% -Dlog4j.configuration="%LOG4J_CONFIG%" -DSTOP.PORT=!STOP_PORT! -DSTOP.KEY=%STOP_KEY% ^
+  "%JAVA%" %SERVEROPT% -Xss256k %SOLR_JAVA_MEM% %START_OPTS% -Xloggc:"!SOLR_LOGS_DIR!"/solr_gc.log -Dlog4j.configuration="%LOG4J_CONFIG%" -DSTOP.PORT=!STOP_PORT! -DSTOP.KEY=%STOP_KEY% ^
     -Djetty.port=%SOLR_PORT% -Dsolr.solr.home="%SOLR_HOME%" -Dsolr.install.dir="%SOLR_TIP%" -Djetty.home="%SOLR_SERVER_DIR%" -Djava.io.tmpdir="%SOLR_SERVER_DIR%\tmp" -jar start.jar
 ) ELSE (
-  START /B "Solr-%SOLR_PORT%" /D "%SOLR_SERVER_DIR%" "%JAVA%" -server -Xss256k %SOLR_JAVA_MEM% %START_OPTS% -Dlog4j.configuration="%LOG4J_CONFIG%" -DSTOP.PORT=!STOP_PORT! -DSTOP.KEY=%STOP_KEY% ^
+  START /B "Solr-%SOLR_PORT%" /D "%SOLR_SERVER_DIR%" "%JAVA%" %SERVEROPT% -Xss256k %SOLR_JAVA_MEM% %START_OPTS% -Xloggc:"!SOLR_LOGS_DIR!"/solr_gc.log -Dlog4j.configuration="%LOG4J_CONFIG%" -DSTOP.PORT=!STOP_PORT! -DSTOP.KEY=%STOP_KEY% ^
     -Djetty.port=%SOLR_PORT% -Dsolr.solr.home="%SOLR_HOME%" -Dsolr.install.dir="%SOLR_TIP%" -Djetty.home="%SOLR_SERVER_DIR%" -Djava.io.tmpdir="%SOLR_SERVER_DIR%\tmp" -jar start.jar > "!SOLR_LOGS_DIR!\solr-%SOLR_PORT%-console.log"
   echo %SOLR_PORT%>"%SOLR_TIP%"\bin\solr-%SOLR_PORT%.port
 )
 
-
 set EXAMPLE_NAME=%EXAMPLE%
 set CREATE_EXAMPLE_CONFIG=
 IF "%EXAMPLE%"=="schemaless" (
@@ -894,7 +916,7 @@ IF NOT "!CREATE_EXAMPLE_CONFIG!"=="" (
 
 IF "%EXAMPLE%"=="techproducts" (
   @echo.
-  @echo Indexing tech product example docs from %SOLR_TIP%\example\exampledocs
+  @echo Indexing tech product example docs from "%SOLR_TIP%\example\exampledocs"
   "%JAVA%" %SOLR_SSL_OPTS% -Durl=!SOLR_URL_SCHEME!://localhost:%SOLR_PORT%/solr/%EXAMPLE%/update -jar "%SOLR_TIP%/example/exampledocs/post.jar" "%SOLR_TIP%/example/exampledocs/*.xml"
 )
 
@@ -942,14 +964,14 @@ IF NOT DEFINED CLOUD_NUM_NODES (
 
 set "CLOUD_EXAMPLE_DIR=%SOLR_TIP%\example\cloud"
 
-@echo Creating Solr home %CLOUD_EXAMPLE_DIR%\node1\solr
+@echo Creating Solr home "%CLOUD_EXAMPLE_DIR%\node1\solr"
 mkdir "%CLOUD_EXAMPLE_DIR%\node1\solr"
 copy "%DEFAULT_SERVER_DIR%\solr\solr.xml" "%CLOUD_EXAMPLE_DIR%\node1\solr\solr.xml"
 copy "%DEFAULT_SERVER_DIR%\solr\zoo.cfg" "%CLOUD_EXAMPLE_DIR%\node1\solr\zoo.cfg"
 
 for /l %%x in (2, 1, !CLOUD_NUM_NODES!) do (
   IF NOT EXIST "%SOLR_TIP%\node%%x" (
-    @echo Cloning %CLOUD_EXAMPLE_DIR%\node1 into %CLOUD_EXAMPLE_DIR%\node%%x
+    @echo Cloning "%CLOUD_EXAMPLE_DIR%\node1" into "%CLOUD_EXAMPLE_DIR%\node%%x"
     xcopy /Q /E /I "%CLOUD_EXAMPLE_DIR%\node1" "%CLOUD_EXAMPLE_DIR%\node%%x"
   )
 )
@@ -1331,3 +1353,32 @@ exit /b 1
 :done
 
 ENDLOCAL
+
+GOTO :eof
+
+REM Tests what Java we have and sets some global variables
+:resolve_java_version
+
+set JAVA_MAJOR_VERSION=0
+set JAVA_VERSION_INFO=
+set JAVA_BUILD=0
+"%JAVA%" -version 2>&1 | findstr /i "version" > javavers
+set /p JAVAVEROUT=<javavers
+del javavers
+for /f "tokens=3" %%g in ("!JAVAVEROUT!") do (
+  set JAVA_VERSION_INFO=%%g
+  set JAVA_VERSION_INFO=!JAVA_VERSION_INFO:"=!
+  for /f "delims=_ tokens=1-3" %%v in ("!JAVA_VERSION_INFO!") do (
+    set JAVA_MAJOR=!JAVA_VERSION_INFO:~0,3!
+    set /a JAVA_BUILD=%%w
+    set /a JAVA_MAJOR_VERSION=!JAVA_MAJOR:~2,1!*1
+  )
+)
+GOTO :eof
+
+REM Safe echo which does not mess with () in strings
+:safe_echo
+set "eout=%1"
+set eout=%eout:"=%
+echo !eout!
+GOTO :eof
\ No newline at end of file