diff options
Diffstat (limited to 'solr-8.1.1/server/scripts/cloud-scripts/snapshotscli.sh')
-rw-r--r-- | solr-8.1.1/server/scripts/cloud-scripts/snapshotscli.sh | 176 |
1 files changed, 176 insertions, 0 deletions
diff --git a/solr-8.1.1/server/scripts/cloud-scripts/snapshotscli.sh b/solr-8.1.1/server/scripts/cloud-scripts/snapshotscli.sh new file mode 100644 index 000000000..e5a26d645 --- /dev/null +++ b/solr-8.1.1/server/scripts/cloud-scripts/snapshotscli.sh @@ -0,0 +1,176 @@ +#!/usr/bin/env bash + +set -e + +run_solr_snapshot_tool() { + JVM="java" + scriptDir=$(dirname "$0") + if [ -n "$LOG4J_PROPS" ]; then + log4j_config="file:${LOG4J_PROPS}" + else + log4j_config="file:${scriptDir}/../../resources/log4j2-console.xml" + fi + PATH=${JAVA_HOME}/bin:${PATH} ${JVM} ${ZKCLI_JVM_FLAGS} -Dlog4j.configurationFile=${log4j_config} \ + -classpath "${solrLibPath}" org.apache.solr.core.snapshots.SolrSnapshotsTool "$@" 2> /dev/null +} + +usage() { + run_solr_snapshot_tool --help +} + +distcp_warning() { + echo "SOLR_USE_DISTCP environment variable is not set. \ + Do you want to use hadoop distcp tool for exporting Solr collection snapshot ?" +} + +parse_options() { + OPTIND=3 + while getopts ":c:d:s:z:p:r:i:" o ; do + case "${o}" in + d) + destPath=${OPTARG} + ;; + s) + sourcePath=${OPTARG} + ;; + c) + collectionName=${OPTARG} + ;; + z) + solrZkEnsemble=${OPTARG} + ;; + p) + pathPrefix=${OPTARG} + ;; + r) + backupRepoName=${OPTARG} + ;; + i) + aysncReqId=${OPTARG} + ;; + *) + echo "Unknown option ${OPTARG}" + usage 1>&2 + exit 1 + ;; + esac + done +} + +prepare_snapshot_export() { + #Make sure to cleanup the temporary files. + scratch=$(mktemp -d -t solrsnaps.XXXXXXXXXX) + function finish { + rm -rf "${scratch}" + } + trap finish EXIT + + if hdfs dfs -test -d "${destPath}" ; then + run_solr_snapshot_tool --prepare-snapshot-export "$@" -t "${scratch}" + + hdfs dfs -mkdir -p "${copyListingDirPath}" > /dev/null + find "${scratch}" -type f -printf "%f\n" | while read shardId; do + echo "Copying the copy-listing for $shardId" + hdfs dfs -copyFromLocal "${scratch}/${shardId}" "${copyListingDirPath}" > /dev/null + done + else + echo "Directory ${destPath} does not exist." + exit 1 + fi +} + +copy_snapshot_files() { + copylisting_dir_path="$1" + + if hdfs dfs -test -d "${copylisting_dir_path}" ; then + for shardId in $(hdfs dfs -stat "%n" "${copylisting_dir_path}/*"); do + oPath="${destPath}/${snapshotName}/snapshot.${shardId}" + echo "Copying the index files for ${shardId} to ${oPath}" + ${distCpCmd} -f "${copylisting_dir_path}/${shardId}" "${oPath}" > /dev/null + done + else + echo "Directory ${copylisting_dir_path} does not exist." + exit 1 + fi +} + +collectionName="" +solrZkEnsemble="" +pathPrefix="" +destPath="" +sourcePath="" +cmd="$1" +snapshotName="$2" +copyListingDirPath="" +distCpCmd="${SOLR_DISTCP_CMD:-hadoop distcp}" +scriptDir=$(dirname "$0") +solrLibPath="${SOLR_LIB_PATH:-${scriptDir}/../../solr-webapp/webapp/WEB-INF/lib/*:${scriptDir}/../../lib/ext/*}" + +case "${cmd}" in + --create) + run_solr_snapshot_tool "$@" + ;; + --delete) + run_solr_snapshot_tool "$@" + ;; + --list) + run_solr_snapshot_tool "$@" + ;; + --describe) + run_solr_snapshot_tool "$@" + ;; + --prepare-snapshot-export) + : "${SOLR_USE_DISTCP:? $(distcp_warning)}" + + parse_options "$@" + + : "${destPath:? Please specify destination directory using -d option}" + + copyListingDirPath="${destPath}/copylistings" + prepare_snapshot_export "${@:2}" + echo "Done. GoodBye!" + ;; + --export) + if [ -z "${SOLR_USE_DISTCP}" ]; then + run_solr_snapshot_tool "$@" + echo "Done. GoodBye!" + exit 0 + fi + + parse_options "$@" + + : "${snapshotName:? Please specify the name of the snapshot}" + : "${destPath:? Please specify destination directory using -d option}" + + if [ -n "${collectionName}" ] && [ -n "${sourcePath}" ]; then + echo "The -c and -s options can not be specified together" + exit 1 + fi + + if [ -z "${collectionName}" ] && [ -z "${sourcePath}" ]; then + echo "At least one of options (-c or -s) must be specified" + exit 1 + fi + + if [ -n "${collectionName}" ]; then + copyListingDirPath="${destPath}/${snapshotName}/copylistings" + prepare_snapshot_export "${@:2}" + copy_snapshot_files "${destPath}/${snapshotName}/copylistings" + hdfs dfs -rm -r -f -skipTrash "${destPath}/${snapshotName}/copylistings" > /dev/null + else + copy_snapshot_files "${sourcePath}/copylistings" + echo "Copying the collection meta-data to ${destPath}/${snapshotName}" + ${distCpCmd} "${sourcePath}/${snapshotName}/*" "${destPath}/${snapshotName}/" > /dev/null + fi + + echo "Done. GoodBye!" + ;; + --help) + usage 1>&2 + ;; + *) + echo "Unknown command ${cmd}" + usage 1>&2 + exit 1 +esac + |