You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by er...@apache.org on 2015/12/10 18:30:35 UTC
svn commit: r1719119 - in /lucene/dev/branches/branch_5x: ./ solr/
solr/CHANGES.txt solr/bin/ solr/bin/solr solr/bin/solr.cmd solr/core/
solr/core/src/java/org/apache/solr/util/SolrCLI.java
Author: erick
Date: Thu Dec 10 17:30:34 2015
New Revision: 1719119
URL: http://svn.apache.org/viewvc?rev=1719119&view=rev
Log:
SOLR-8378: Add upconfig and downconfig commands to the bin/solr script
Modified:
lucene/dev/branches/branch_5x/ (props changed)
lucene/dev/branches/branch_5x/solr/ (props changed)
lucene/dev/branches/branch_5x/solr/CHANGES.txt (contents, props changed)
lucene/dev/branches/branch_5x/solr/bin/ (props changed)
lucene/dev/branches/branch_5x/solr/bin/solr
lucene/dev/branches/branch_5x/solr/bin/solr.cmd
lucene/dev/branches/branch_5x/solr/core/ (props changed)
lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/util/SolrCLI.java
Modified: lucene/dev/branches/branch_5x/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/CHANGES.txt?rev=1719119&r1=1719118&r2=1719119&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/CHANGES.txt (original)
+++ lucene/dev/branches/branch_5x/solr/CHANGES.txt Thu Dec 10 17:30:34 2015
@@ -17,6 +17,9 @@ New Features
* SOLR-7928: Improve CheckIndex to work against HdfsDirectory
(Mike Drob, Gregory Chanan)
+* SOLR-8378: Add upconfig and downconfig commands to the bin/solr script
+ (Erick Erickson)
+
Bug Fixes
----------------------
Modified: lucene/dev/branches/branch_5x/solr/bin/solr
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/bin/solr?rev=1719119&r1=1719118&r2=1719119&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/bin/solr (original)
+++ lucene/dev/branches/branch_5x/solr/bin/solr Thu Dec 10 17:30:34 2015
@@ -188,13 +188,13 @@ function print_usage() {
if [ -z "$CMD" ]; then
echo ""
echo "Usage: solr COMMAND OPTIONS"
- echo " where COMMAND is one of: start, stop, restart, status, healthcheck, create, create_core, create_collection, delete, version"
+ echo " where COMMAND is one of: start, stop, restart, status, healthcheck, create, create_core, create_collection, delete, version, zk"
echo ""
echo " Standalone server example (start Solr running in the background on port 8984):"
echo ""
echo " ./solr start -p 8984"
echo ""
- echo " SolrCloud example (start Solr running in SolrCloud mode using localhost:2181 to connect to ZooKeeper, with 1g max heap size and remote Java debug options enabled):"
+ echo " SolrCloud example (start Solr running in SolrCloud mode using localhost:2181 to connect to Zookeeper, with 1g max heap size and remote Java debug options enabled):"
echo ""
echo " ./solr start -c -m 1g -z localhost:2181 -a \"-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=1044\""
echo ""
@@ -208,7 +208,7 @@ function print_usage() {
echo " -f Start Solr in foreground; default starts Solr in the background"
echo " and sends stdout / stderr to solr-PORT-console.log"
echo ""
- echo " -c or -cloud Start Solr in SolrCloud mode; if -z not supplied, an embedded ZooKeeper"
+ echo " -c or -cloud Start Solr in SolrCloud mode; if -z not supplied, an embedded Zookeeper"
echo " instance is started on Solr port+1000, such as 9983 if Solr is bound to 8983"
echo ""
echo " -h <host> Specify the hostname for this Solr instance"
@@ -220,8 +220,8 @@ function print_usage() {
echo ""
echo " -d <dir> Specify the Solr server directory; defaults to server"
echo ""
- echo " -z <zkHost> ZooKeeper connection string; only used when running in SolrCloud mode using -c"
- echo " To launch an embedded ZooKeeper instance, don't pass this parameter."
+ echo " -z <zkHost> Zookeeper connection string; only used when running in SolrCloud mode using -c"
+ echo " To launch an embedded Zookeeper instance, don't pass this parameter."
echo ""
echo " -m <memory> Sets the min (-Xms) and max (-Xmx) heap size for the JVM, such as: -m 4g"
echo " results in: -Xms4g -Xmx4g; by default, this script sets the heap size to 512m"
@@ -229,7 +229,7 @@ function print_usage() {
echo " -s <dir> Sets the solr.solr.home system property; Solr will create core directories under"
echo " this directory. This allows you to run multiple Solr instances on the same host"
echo " while reusing the same server directory set using the -d parameter. If set, the"
- echo " specified directory should contain a solr.xml file, unless solr.xml exists in ZooKeeper."
+ echo " specified directory should contain a solr.xml file, unless solr.xml exists in Zookeeper."
echo " This parameter is ignored when running examples (-e), as the solr.solr.home depends"
echo " on which example is run. The default value is server/solr."
echo ""
@@ -266,7 +266,7 @@ function print_usage() {
echo ""
echo " -c <collection> Collection to run healthcheck against."
echo ""
- echo " -z <zkHost> ZooKeeper connection string; default is localhost:9983"
+ echo " -z <zkHost> Zookeeper connection string; default is localhost:9983"
echo ""
elif [ "$CMD" == "status" ]; then
echo ""
@@ -294,12 +294,12 @@ function print_usage() {
echo ""
echo " Deletes a core or collection depending on whether Solr is running in standalone (core) or SolrCloud"
echo " mode (collection). If you're deleting a collection in SolrCloud mode, the default behavior is to also"
- echo " delete the configuration directory from ZooKeeper so long as it is not being used by another collection."
+ echo " delete the configuration directory from Zookeeper so long as it is not being used by another collection."
echo " You can override this behavior by passing -deleteConfig false when running this command."
echo ""
echo " -c <name> Name of the core / collection to delete"
echo ""
- echo " -deleteConfig <boolean> Delete the configuration directory from ZooKeeper; default is true"
+ echo " -deleteConfig <boolean> Delete the configuration directory from Zookeeper; default is true"
echo ""
echo " -p <port> Port of a local Solr instance where you want to delete the core/collection"
echo " If not specified, the script will search the local system for a running"
@@ -345,14 +345,14 @@ function print_usage() {
echo " Alternatively, you can pass the path to your own configuration directory instead of using"
echo " one of the built-in configurations, such as: bin/solr create_collection -c mycoll -d /tmp/myconfig"
echo ""
- echo " By default the script will upload the specified confdir directory into ZooKeeper using the same"
+ echo " By default the script will upload the specified confdir directory into Zookeeper using the same"
echo " name as the collection (-c) option. Alternatively, if you want to reuse an existing directory"
- echo " or create a confdir in ZooKeeper that can be shared by multiple collections, use the -n option"
+ echo " or create a confdir in Zookeeper that can be shared by multiple collections, use the -n option"
echo ""
- echo " -n <configName> Name the configuration directory in ZooKeeper; by default, the configuration"
- echo " will be uploaded to ZooKeeper using the collection name (-c), but if you want"
+ echo " -n <configName> Name the configuration directory in Zookeeper; by default, the configuration"
+ echo " will be uploaded to Zookeeper using the collection name (-c), but if you want"
echo " to use an existing directory or override the name of the configuration in"
- echo " ZooKeeper, then use the -c option."
+ echo " Zookeeper, then use the -c option."
echo ""
echo " -shards <#> Number of shards to split the collection into; default is 1"
echo ""
@@ -362,6 +362,26 @@ function print_usage() {
echo " If not specified, the script will search the local system for a running"
echo " Solr instance and will use the port of the first server it finds."
echo ""
+ elif [ "$CMD" == "zk" ]; then
+ echo "Usage: solr zk [-upconfig|-downconfig] [-d confdir] [-n configName] [-z zkHost]"
+ echo ""
+ echo " -upconfig to move a configset from the local machine to Zookeeper."
+ echo ""
+ echo " -downconfig to move a configset from Zookeeper to the local machine."
+ echo ""
+ echo " -n configName Name of the configset in Zookeeper that will be the destinatino of"
+ echo " 'upconfig' and the source for 'downconfig'."
+ echo ""
+ echo " -d confdir The local directory the configuration will be uploaded from for"
+ echo " 'upconfig' or downloaded to for 'downconfig'. For 'upconfig', this"
+ echo " can be one of the example configsets, basic_configs, data_driven_schema_configs or"
+ echo " sample_techproducts_configs or an arbitrary directory."
+ echo ""
+ echo " -z zkHost Zookeeper connection string."
+ echo ""
+ echo " NOTE: Solr must have been started least once (or have it running) before using this command."
+ echo " This initialized Zookeeper for Solr"
+ echo ""
fi
} # end print_usage
@@ -694,7 +714,7 @@ if [[ "$SCRIPT_CMD" == "create" || "$SCR
exit 1
fi
- # If not defined, use the collection name for the name of the configuration in ZooKeeper
+ # If not defined, use the collection name for the name of the configuration in Zookeeper
if [ -z "$CREATE_CONFNAME" ]; then
CREATE_CONFNAME="$CREATE_NAME"
fi
@@ -784,7 +804,7 @@ if [[ "$SCRIPT_CMD" == "delete" ]]; then
exit 1
fi
- # If not defined, use the collection name for the name of the configuration in ZooKeeper
+ # If not defined, use the collection name for the name of the configuration in Zookeeper
if [ -z "$DELETE_CONFIG" ]; then
DELETE_CONFIG=true
fi
@@ -810,6 +830,97 @@ if [[ "$SCRIPT_CMD" == "delete" ]]; then
exit $?
fi
+# Upload or download a configset to Zookeeper
+if [[ "$SCRIPT_CMD" == "zk" ]]; then
+
+ if [ $# -gt 0 ]; then
+ while true; do
+ case "$1" in
+ -z|-zkhost)
+ if [[ -z "$2" || "${2:0:1}" == "-" ]]; then
+ print_usage "$SCRIPT_CMD" "ZooKeepeer connection string is required when using the $1 option!"
+ exit 1
+ fi
+ ZK_HOST="$2"
+ shift 2
+ ;;
+ -n|-confname)
+ if [[ -z "$2" || "${2:0:1}" == "-" ]]; then
+ print_usage "$SCRIPT_CMD" "Configuration name is required when using the $1 option!"
+ exit 1
+ fi
+ CONFIGSET_CONFNAME="$2"
+ shift 2
+ ;;
+ -d|-confdir)
+ if [[ -z "$2" || "${2:0:1}" == "-" ]]; then
+ print_usage "$SCRIPT_CMD" "Configuration directory is required when using the $1 option!"
+ exit 1
+ fi
+ CONFIGSET_CONFDIR="$2"
+ shift 2
+ ;;
+ -upconfig)
+ ZK_OP="upconfig"
+ shift 1
+ ;;
+ -downconfig)
+ ZK_OP="downconfig"
+ shift 1
+ ;;
+ -help|-usage|-h)
+ print_usage "$SCRIPT_CMD"
+ exit 0
+ ;;
+ --)
+ shift
+ break
+ ;;
+ *)
+ if [ "$1" != "" ]; then
+ print_usage "$SCRIPT_CMD" "Unrecognized or misplaced argument: $1!"
+ exit 1
+ else
+ break # out-of-args, stop looping
+ fi
+ ;;
+ esac
+ done
+ fi
+
+ if [ -z "$ZK_OP" ]; then
+ echo "Zookeeper operation (one of '-upconfig' or '-downconfig') is required!"
+ print_usage "$SCRIPT_CMD"
+ exit 1
+ fi
+
+ if [ -z "$ZK_HOST" ]; then
+ echo "Zookeeper address (-z) argument is required!"
+ print_usage "$SCRIPT_CMD"
+ exit 1
+ fi
+
+ if [ -z "$CONFIGSET_CONFDIR" ]; then
+ echo "Local directory of the configset (-d) argument is required!"
+ print_usage "$SCRIPT_CMD"
+ exit 1
+ fi
+
+ if [ -z "$CONFIGSET_CONFNAME" ]; then
+ echo "Configset name on Zookeeper (-n) argument is required!"
+ print_usage "$SCRIPT_CMD"
+ exit 1
+ fi
+
+ if [ "$ZK_OP" == "upconfig" ]; then
+ run_tool "$ZK_OP" -confname "$CONFIGSET_CONFNAME" -confdir "$CONFIGSET_CONFDIR" -zkHost "$ZK_HOST" -configsetsDir "$SOLR_TIP/server/solr/configsets"
+ else
+ run_tool "$ZK_OP" -confname "$CONFIGSET_CONFNAME" -confdir "$CONFIGSET_CONFDIR" -zkHost "$ZK_HOST"
+ fi
+
+ exit $?
+fi
+
# verify the command given is supported
if [ "$SCRIPT_CMD" != "stop" ] && [ "$SCRIPT_CMD" != "start" ] && [ "$SCRIPT_CMD" != "restart" ] && [ "$SCRIPT_CMD" != "status" ]; then
print_usage "" "$SCRIPT_CMD is not a valid command!"
@@ -900,7 +1011,7 @@ if [ $# -gt 0 ]; then
;;
-z|-zkhost)
if [[ -z "$2" || "${2:0:1}" == "-" ]]; then
- print_usage "$SCRIPT_CMD" "ZooKeeper connection string is required when using the $1 option!"
+ print_usage "$SCRIPT_CMD" "Zookeeper connection string is required when using the $1 option!"
exit 1
fi
ZK_HOST="$2"
@@ -1174,7 +1285,7 @@ if [ "$SOLR_MODE" == 'solrcloud' ]; then
CLOUD_MODE_OPTS+=("-DzkHost=$ZK_HOST")
else
if $verbose ; then
- echo "Configuring SolrCloud to launch an embedded ZooKeeper using -DzkRun"
+ echo "Configuring SolrCloud to launch an embedded Zookeeper using -DzkRun"
fi
CLOUD_MODE_OPTS+=('-DzkRun')
Modified: lucene/dev/branches/branch_5x/solr/bin/solr.cmd
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/bin/solr.cmd?rev=1719119&r1=1719118&r2=1719119&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/bin/solr.cmd (original)
+++ lucene/dev/branches/branch_5x/solr/bin/solr.cmd Thu Dec 10 17:30:34 2015
@@ -134,6 +134,12 @@ IF "%1"=="delete" (
SHIFT
goto parse_delete_args
)
+IF "%1"=="zk" (
+ set SCRIPT_CMD=zk
+ SHIFT
+ goto parse_zk_args
+)
+
goto parse_args
:usage
@@ -152,18 +158,19 @@ IF "%SCRIPT_CMD%"=="create" goto create_
IF "%SCRIPT_CMD%"=="create_core" goto create_core_usage
IF "%SCRIPT_CMD%"=="create_collection" goto create_collection_usage
IF "%SCRIPT_CMD%"=="delete" goto delete_usage
+IF "%SCRIPT_CMD%"=="zk" goto zk_usage
goto done
:script_usage
@echo.
@echo Usage: solr COMMAND OPTIONS
-@echo where COMMAND is one of: start, stop, restart, healthcheck, create, create_core, create_collection, delete, version
+@echo where COMMAND is one of: start, stop, restart, healthcheck, create, create_core, create_collection, delete, version, upconfig, downconfig
@echo.
@echo Standalone server example (start Solr running in the background on port 8984):
@echo.
@echo solr start -p 8984
@echo.
-@echo SolrCloud example (start Solr running in SolrCloud mode using localhost:2181 to connect to ZooKeeper, with 1g max heap size and remote Java debug options enabled):
+@echo SolrCloud example (start Solr running in SolrCloud mode using localhost:2181 to connect to Zookeeper, with 1g max heap size and remote Java debug options enabled):
@echo.
@echo solr start -c -m 1g -z localhost:2181 -a "-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=1044"
@echo.
@@ -179,7 +186,7 @@ goto done
@echo -f Start Solr in foreground; default starts Solr in the background
@echo and sends stdout / stderr to solr-PORT-console.log
@echo.
-@echo -c or -cloud Start Solr in SolrCloud mode; if -z not supplied, an embedded ZooKeeper
+@echo -c or -cloud Start Solr in SolrCloud mode; if -z not supplied, an embedded Zookeeper
@echo instance is started on Solr port+1000, such as 9983 if Solr is bound to 8983
@echo.
@echo -h host Specify the hostname for this Solr instance
@@ -188,8 +195,8 @@ goto done
@echo.
@echo -d dir Specify the Solr server directory; defaults to example
@echo.
-@echo -z zkHost ZooKeeper connection string; only used when running in SolrCloud mode using -c
-@echo To launch an embedded ZooKeeper instance, don't pass this parameter.
+@echo -z zkHost Zookeeper connection string; only used when running in SolrCloud mode using -c
+@echo To launch an embedded Zookeeper instance, don't pass this parameter.
@echo.
@echo -m memory Sets the min (-Xms) and max (-Xmx) heap size for the JVM, such as: -m 4g
@echo results in: -Xms4g -Xmx4g; by default, this script sets the heap size to 512m
@@ -197,7 +204,7 @@ goto done
@echo -s dir Sets the solr.solr.home system property; Solr will create core directories under
@echo this directory. This allows you to run multiple Solr instances on the same host
@echo while reusing the same server directory set using the -d parameter. If set, the
-@echo specified directory should contain a solr.xml file, unless solr.xml exists in ZooKeeper.
+@echo specified directory should contain a solr.xml file, unless solr.xml exists in Zookeeper.
@echo This parameter is ignored when running examples (-e), as the solr.solr.home depends
@echo on which example is run. The default value is server/solr.
@echo.
@@ -236,7 +243,7 @@ goto done
@echo.
@echo -c collection Collection to run healthcheck against.
@echo.
-@echo -z zkHost ZooKeeper connection string; default is localhost:9983
+@echo -z zkHost Zookeeper connection string; default is localhost:9983
@echo.
goto done
@@ -262,12 +269,12 @@ echo Usage: solr delete [-c name] [-dele
echo.
echo Deletes a core or collection depending on whether Solr is running in standalone (core) or SolrCloud
echo mode (collection). If you're deleting a collection in SolrCloud mode, the default behavior is to also
-echo delete the configuration directory from ZooKeeper so long as it is not being used by another collection.
+echo delete the configuration directory from Zookeeper so long as it is not being used by another collection.
echo You can override this behavior by passing -deleteConfig false when running this command.
echo.
echo -c name Name of core to create
echo.
-echo -deleteConfig boolean Delete the configuration directory from ZooKeeper; default is true
+echo -deleteConfig boolean Delete the configuration directory from Zookeeper; default is true
echo.
echo -p port Port of a local Solr instance where you want to create the new core
echo If not specified, the script will search the local system for a running
@@ -317,14 +324,14 @@ echo.
echo Alternatively, you can pass the path to your own configuration directory instead of using
echo one of the built-in configurations, such as: bin\solr create_collection -c mycoll -d c:/tmp/myconfig
echo.
-echo By default the script will upload the specified confdir directory into ZooKeeper using the same
+echo By default the script will upload the specified confdir directory into Zookeeper using the same
echo name as the collection (-c) option. Alternatively, if you want to reuse an existing directory
-echo or create a confdir in ZooKeeper that can be shared by multiple collections, use the -n option
+echo or create a confdir in Zookeeper that can be shared by multiple collections, use the -n option
echo.
-echo -n configName Name the configuration directory in ZooKeeper; by default, the configuration
-echo will be uploaded to ZooKeeper using the collection name (-c), but if you want
+echo -n configName Name the configuration directory in Zookeeper; by default, the configuration
+echo will be uploaded to Zookeeper using the collection name (-c), but if you want
echo to use an existing directory or override the name of the configuration in
-echo ZooKeeper, then use the -c option.
+echo Zookeeper, then use the -c option.
echo.
echo -shards # Number of shards to split the collection into
echo.
@@ -336,6 +343,30 @@ echo Solr inst
echo.
goto done
+:zk_usage
+echo.
+echo Usage: solr zk [-downconfig or -upconfig] [-d confdir] [-n configName] [-z zkHost]
+echo.
+echo -upconfig to move a configset from the local machine to Zookeeper
+echo.
+echo -downconfig to move a configset from Zookeeper to the local machine
+echo.
+echo -n configName Name of the configset in Zookeeper that will be the destination of
+echo 'upconfig' and the source for 'downconfig'.
+echo.
+echo -d confdir The local directory the configuration will be uploaded from for
+echo 'upconfig' or downloaded to for 'downconfig'. For 'upconfig', this
+echo can be one of the example configsets, basic_configs, data_driven_schema_configs or
+echo sample_techproducts_configs or an arbitrary directory.
+echo.
+echo -z zkHost Zookeeper connection string.
+echo.
+echo NOTE: Solr must have been started least once (or have it running) before using this command.
+echo This initialized Zookeeper for Solr
+echo.
+goto done
+
+
REM Really basic command-line arg parsing
:parse_args
@@ -540,13 +571,13 @@ goto parse_args
set "arg=%~2"
IF "%arg%"=="" (
- set SCRIPT_ERROR=ZooKeeper connection string is required!
+ set SCRIPT_ERROR=Zookeeper connection string is required!
goto invalid_cmd_line
)
set firstChar=%arg:~0,1%
IF "%firstChar%"=="-" (
- set SCRIPT_ERROR=Expected ZooKeeper connection string but found %2 instead!
+ set SCRIPT_ERROR=Expected Zookeeper connection string but found %2 instead!
goto invalid_cmd_line
)
@@ -783,7 +814,7 @@ IF "%SOLR_MODE%"=="solrcloud" (
IF NOT "%ZK_HOST%"=="" (
set "CLOUD_MODE_OPTS=!CLOUD_MODE_OPTS! -DzkHost=%ZK_HOST%"
) ELSE (
- IF "%verbose%"=="1" echo Configuring SolrCloud to launch an embedded ZooKeeper using -DzkRun
+ IF "%verbose%"=="1" echo Configuring SolrCloud to launch an embedded Zookeeper using -DzkRun
set "CLOUD_MODE_OPTS=!CLOUD_MODE_OPTS! -DzkRun"
)
IF EXIST "%SOLR_HOME%\collection1\core.properties" set "CLOUD_MODE_OPTS=!CLOUD_MODE_OPTS! -Dbootstrap_confdir=./solr/collection1/conf -Dcollection.configName=myconf -DnumShards=1"
@@ -1143,6 +1174,81 @@ org.apache.solr.util.SolrCLI delete -nam
goto done
+:parse_zk_args
+IF [%1]==[] goto run_zk
+IF "%1"=="-upconfig" goto set_zk_op_up
+IF "%1"=="-downconfig" goto set_zk_op_down
+IF "%1"=="-n" goto set_config_name
+IF "%1"=="-configname" goto set_config_name
+IF "%1"=="-d" goto set_configdir
+IF "%1"=="-confdir" goto set_configdir
+IF "%1"=="-z" goto set_config_zk
+IF "%1"=="/?" goto usage
+IF "%1"=="-h" goto zk_usage
+IF "%1"=="-help" goto zk_usage
+goto run_zk
+
+:set_zk_op_up
+set ZK_OP=upconfig
+SHIFT
+goto parse_zk_args
+
+:set_zk_op_down
+set ZK_OP=downconfig
+SHIFT
+goto parse_zk_args
+
+:set_config_name
+set CONFIGSET_NAME=%~2
+SHIFT
+SHIFT
+goto parse_zk_args
+
+:set_configdir
+set CONFIGSET_DIR=%~2
+SHIFT
+SHIFT
+goto parse_zk_args
+
+:set_config_zk
+set CONFIGSET_ZK=%~2
+SHIFT
+SHIFT
+goto parse_zk_args
+
+
+:run_zk
+IF "!ZK_OP!"=="" (
+ set "SCRIPT_ERROR=One of '-upconfig' or '-downconfig' is required for %SCRIPT_CMD%"
+ goto invalid_cmd_line
+)
+
+IF "!CONFIGSET_NAME!"=="" (
+ set "SCRIPT_ERROR=Name (-n) is a required parameter for %SCRIPT_CMD%"
+ goto invalid_cmd_line
+)
+
+if "!CONFIGSET_DIR!"=="" (
+ set "SCRIPT_ERROR=Name (-d) is a required parameter for %SCRIPT_CMD%"
+ goto err
+)
+
+if "!CONFIGSET_ZK!"=="" (
+ set "SCRIPT_ERROR=Name (-z) is a required parameter for %SCRIPT_CMD%"
+ goto err
+)
+
+IF "!ZK_OP!"=="upconfig" (
+ "%JAVA%" %SOLR_SSL_OPTS% -Dsolr.install.dir="%SOLR_TIP%" -Dlog4j.configuration="file:%DEFAULT_SERVER_DIR%\scripts\cloud-scripts\log4j.properties" ^
+ -classpath "%DEFAULT_SERVER_DIR%\solr-webapp\webapp\WEB-INF\lib\*;%DEFAULT_SERVER_DIR%\lib\ext\*" ^
+ org.apache.solr.util.SolrCLI !ZK_OP! -confname !CONFIGSET_NAME! -confdir !CONFIGSET_DIR! -zkHost !CONFIGSET_ZK! -configsetsDir "%SOLR_TIP%/server/solr/configsets"
+) ELSE (
+ "%JAVA%" %SOLR_SSL_OPTS% -Dsolr.install.dir="%SOLR_TIP%" -Dlog4j.configuration="file:%DEFAULT_SERVER_DIR%\scripts\cloud-scripts\log4j.properties" ^
+ -classpath "%DEFAULT_SERVER_DIR%\solr-webapp\webapp\WEB-INF\lib\*;%DEFAULT_SERVER_DIR%\lib\ext\*" ^
+ org.apache.solr.util.SolrCLI !ZK_OP! -confname !CONFIGSET_NAME! -confdir !CONFIGSET_DIR! -zkHost !CONFIGSET_ZK!
+)
+
+goto done
:invalid_cmd_line
@echo.
@@ -1168,6 +1274,8 @@ IF "%FIRST_ARG%"=="start" (
goto create_core_usage
) ELSE IF "%FIRST_ARG%"=="create_collection" (
goto create_collection_usage
+) ELSE IF "%FIRST_ARG%"=="zk" (
+ goto zk_usage
) ELSE (
goto script_usage
)
Modified: lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/util/SolrCLI.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/util/SolrCLI.java?rev=1719119&r1=1719118&r2=1719119&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/util/SolrCLI.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/util/SolrCLI.java Thu Dec 10 17:30:34 2015
@@ -28,11 +28,15 @@ import java.net.Socket;
import java.net.SocketException;
import java.net.URL;
import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Enumeration;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Locale;
@@ -150,6 +154,45 @@ public class SolrCLI {
}
protected abstract void runImpl(CommandLine cli) throws Exception;
+
+ // It's a little awkward putting this in ToolBase, but to re-use it in upconfig and create, _and_ have access
+ // to the (possibly) redirected "stdout", it needs to go here unless we reorganize things a bit.
+ protected void upconfig(CloudSolrClient cloudSolrClient, CommandLine cli, String confname, String configSet) throws IOException {
+
+ File configSetDir = null;
+ // we try to be flexible and allow the user to specify a configuration directory instead of a configset name
+ File possibleConfigDir = new File(configSet);
+ if (possibleConfigDir.isDirectory()) {
+ configSetDir = possibleConfigDir;
+ } else {
+ File configsetsDir = new File(cli.getOptionValue("configsetsDir"));
+ if (!configsetsDir.isDirectory())
+ throw new FileNotFoundException(configsetsDir.getAbsolutePath() + " not found!");
+
+ // upload the configset if it exists
+ configSetDir = new File(configsetsDir, configSet);
+ if (!configSetDir.isDirectory()) {
+ throw new FileNotFoundException("Specified config " + configSet +
+ " not found in " + configsetsDir.getAbsolutePath());
+ }
+ }
+
+ File confDir = new File(configSetDir, "conf");
+ if (!confDir.isDirectory()) {
+ // config dir should contain a conf sub-directory but if not and there's a solrconfig.xml, then use it
+ if ((new File(configSetDir, "solrconfig.xml")).isFile()) {
+ confDir = configSetDir;
+ } else {
+ throw new IllegalArgumentException("Specified configuration directory " + configSetDir.getAbsolutePath() +
+ " is invalid;\nit should contain either conf sub-directory or solrconfig.xml");
+ }
+ }
+
+ //
+ echo("Uploading " + confDir.getAbsolutePath() +
+ " for config " + confname + " to ZooKeeper at " + cloudSolrClient.getZkHost());
+ cloudSolrClient.uploadConfig(confDir.toPath(), confname);
+ }
}
/**
@@ -223,7 +266,7 @@ public class SolrCLI {
if (args == null || args.length == 0 || args[0] == null || args[0].trim().length() == 0) {
System.err.println("Invalid command-line args! Must pass the name of a tool to run.\n"
+ "Supported tools:\n");
- displayToolOptions(System.err);
+ displayToolOptions();
exit(1);
}
@@ -327,6 +370,10 @@ public class SolrCLI {
return new ConfigTool();
else if ("run_example".equals(toolType))
return new RunExampleTool();
+ else if ("upconfig".equals(toolType))
+ return new ConfigSetUploadTool();
+ else if ("downconfig".equals(toolType))
+ return new ConfigSetDownloadTool();
// If you add a built-in tool to this class, add it here to avoid
// classpath scanning
@@ -340,7 +387,7 @@ public class SolrCLI {
throw new IllegalArgumentException(toolType + " not supported!");
}
- private static void displayToolOptions(PrintStream out) throws Exception {
+ private static void displayToolOptions() throws Exception {
HelpFormatter formatter = new HelpFormatter();
formatter.printHelp("healthcheck", getToolOptions(new HealthcheckTool()));
formatter.printHelp("status", getToolOptions(new StatusTool()));
@@ -351,6 +398,8 @@ public class SolrCLI {
formatter.printHelp("delete", getToolOptions(new DeleteTool()));
formatter.printHelp("config", getToolOptions(new ConfigTool()));
formatter.printHelp("run_example", getToolOptions(new RunExampleTool()));
+ formatter.printHelp("upconfig", getToolOptions(new ConfigSetUploadTool()));
+ formatter.printHelp("downconfig", getToolOptions(new ConfigSetDownloadTool()));
List<Class<Tool>> toolClasses = findToolClassesInPackage("org.apache.solr.util");
for (Class<Tool> next : toolClasses) {
@@ -1393,40 +1442,7 @@ public class SolrCLI {
} else if (configExistsInZk) {
echo("Re-using existing configuration directory "+confname);
} else {
- String configSet = cli.getOptionValue("confdir", DEFAULT_CONFIG_SET);
- File configSetDir = null;
- // we try to be flexible and allow the user to specify a configuration directory instead of a configset name
- File possibleConfigDir = new File(configSet);
- if (possibleConfigDir.isDirectory()) {
- configSetDir = possibleConfigDir;
- } else {
- File configsetsDir = new File(cli.getOptionValue("configsetsDir"));
- if (!configsetsDir.isDirectory())
- throw new FileNotFoundException(configsetsDir.getAbsolutePath()+" not found!");
-
- // upload the configset if it exists
- configSetDir = new File(configsetsDir, configSet);
- if (!configSetDir.isDirectory()) {
- throw new FileNotFoundException("Specified config " + configSet +
- " not found in " + configsetsDir.getAbsolutePath());
- }
- }
-
- File confDir = new File(configSetDir, "conf");
- if (!confDir.isDirectory()) {
- // config dir should contain a conf sub-directory but if not and there's a solrconfig.xml, then use it
- if ((new File(configSetDir, "solrconfig.xml")).isFile()) {
- confDir = configSetDir;
- } else {
- throw new IllegalArgumentException("Specified configuration directory "+configSetDir.getAbsolutePath()+
- " is invalid;\nit should contain either conf sub-directory or solrconfig.xml");
- }
- }
-
- // test to see if that config exists in ZK
- echo("Uploading "+confDir.getAbsolutePath()+
- " for config "+confname+" to ZooKeeper at "+cloudSolrClient.getZkHost());
- cloudSolrClient.uploadConfig(confDir.toPath(), confname);
+ upconfig(cloudSolrClient, cli, confname, cli.getOptionValue("confdir", DEFAULT_CONFIG_SET));
}
// since creating a collection is a heavy-weight operation, check for existence first
@@ -1639,6 +1655,139 @@ public class SolrCLI {
} // end CreateTool class
+ public static class ConfigSetUploadTool extends ToolBase {
+
+ public ConfigSetUploadTool() {
+ this(System.out);
+ }
+
+ public ConfigSetUploadTool(PrintStream stdout) {
+ super(stdout);
+ }
+
+ @SuppressWarnings("static-access")
+ public Option[] getOptions() {
+ return new Option[]{
+ OptionBuilder
+ .withArgName("confname") // Comes out in help message
+ .hasArg() // Has one sub-argument
+ .isRequired(true) // confname argument must be present
+ .withDescription("Configset name on Zookeeper")
+ .create("confname"), // passed as -confname value
+ OptionBuilder
+ .withArgName("confdir")
+ .hasArg()
+ .isRequired(true)
+ .withDescription("Local directory with configs")
+ .create("confdir"),
+ OptionBuilder
+ .withArgName("configsetsDir")
+ .hasArg()
+ .isRequired()
+ .withDescription("Parent directory of example configsets")
+ .create("configsetsDir"),
+ OptionBuilder
+ .withArgName("HOST")
+ .hasArg()
+ .isRequired(true)
+ .withDescription("Address of the Zookeeper ensemble; defaults to: " + ZK_HOST)
+ .create("zkHost")
+ };
+ }
+
+
+ public String getName() {
+ return "upconfig";
+ }
+
+ protected void runImpl(CommandLine cli) throws Exception {
+ String zkHost = getZkHost(cli);
+ if (zkHost == null) {
+ throw new IllegalStateException("Solr at " + cli.getOptionValue("solrUrl") +
+ " is running in standalone server mode, upconfig can only be used when running in SolrCloud mode.\n");
+ }
+
+ try (CloudSolrClient cloudSolrClient = new CloudSolrClient(zkHost)) {
+ echo("\nConnecting to ZooKeeper at " + zkHost + " ...");
+ cloudSolrClient.connect();
+ upconfig(cloudSolrClient, cli, cli.getOptionValue("confname"), cli.getOptionValue("confdir"));
+ }
+ }
+ }
+
+ public static class ConfigSetDownloadTool extends ToolBase {
+
+ public ConfigSetDownloadTool() {
+ this(System.out);
+ }
+
+ public ConfigSetDownloadTool(PrintStream stdout) {
+ super(stdout);
+ }
+
+ @SuppressWarnings("static-access")
+ public Option[] getOptions() {
+ return new Option[]{
+ OptionBuilder
+ .withArgName("confname")
+ .hasArg()
+ .isRequired(true)
+ .withDescription("Configset name on Zookeeper")
+ .create("confname"),
+ OptionBuilder
+ .withArgName("confdir")
+ .hasArg()
+ .isRequired(true)
+ .withDescription("Local directory with configs")
+ .create("confdir"),
+ OptionBuilder
+ .withArgName("HOST")
+ .hasArg()
+ .isRequired(true)
+ .withDescription("Address of the Zookeeper ensemble; defaults to: " + ZK_HOST)
+ .create("zkHost")
+ };
+ }
+
+ public String getName() {
+ return "downconfig";
+ }
+
+ protected void runImpl(CommandLine cli) throws Exception {
+
+ String zkHost = getZkHost(cli);
+ if (zkHost == null) {
+ throw new IllegalStateException("Solr at " + cli.getOptionValue("solrUrl") +
+ " is running in standalone server mode, downconfig can only be used when running in SolrCloud mode.\n");
+ }
+
+
+ try (CloudSolrClient cloudSolrClient = new CloudSolrClient(zkHost)) {
+ echo("\nConnecting to ZooKeeper at " + zkHost + " ...");
+ cloudSolrClient.connect();
+ downconfig(cloudSolrClient, cli.getOptionValue("confname"), cli.getOptionValue("confdir"));
+ }
+ }
+
+ protected void downconfig(CloudSolrClient cloudSolrClient, String confname, String confdir) throws IOException {
+
+ Path configSetPath = Paths.get(confdir);
+ // we try to be nice about having the "conf" in the directory, and we create it if it's not there.
+ if (configSetPath.endsWith("/conf") == false) {
+ configSetPath = Paths.get(configSetPath.toString(), "conf");
+ }
+ if (Files.exists(configSetPath) == false) {
+ Files.createDirectories(configSetPath);
+ }
+
+ // Try to download the configset
+ echo("Downloading configset " + confname + " from ZooKeeper at " + cloudSolrClient.getZkHost() +
+ " to directory " + configSetPath.toAbsolutePath());
+ cloudSolrClient.downloadConfig(confname, configSetPath);
+ }
+
+ } // End ConfigSetDownloadTool class
+
public static class DeleteTool extends ToolBase {
public DeleteTool() { this(System.out); }
@@ -2486,13 +2635,13 @@ public class SolrCLI {
echo("Please choose a configuration for the "+collectionName+" collection, available options are:");
cloudConfig =
- prompt(readInput, "basic_configs, data_driven_schema_configs, or sample_techproducts_configs ["+cloudConfig+"] ", cloudConfig);
+ prompt(readInput, "basic_configs, data_driven_schema_configs, sample_techproducts_configs, or managed_schema_configs ["+cloudConfig+"] ", cloudConfig);
// validate the cloudConfig name
while (!isValidConfig(configsetsDir, cloudConfig)) {
echo(cloudConfig+" is not a valid configuration directory! Please choose a configuration for the "+collectionName+" collection, available options are:");
cloudConfig =
- prompt(readInput, "basic_configs, data_driven_schema_configs, or sample_techproducts_configs ["+cloudConfig+"] ", cloudConfig);
+ prompt(readInput, "basic_configs, data_driven_schema_configs, sample_techproducts_configs, or managed_schema_configs ["+cloudConfig+"] ", cloudConfig);
}
} else {
// must verify if default collection exists