#!/usr/bin/env bash # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. # print usage usage() { echo " Description: This script is used to restore the tablets from trash. It supports single mode and batch mode. In single mode, it will restore just one tablet. In batch mode, it will restore all the tablets specified in file. The content of the file is comma-split tablet id and schema hash, like the following: 12345,11111 12346,11111 12347,11111 Usage: $0 Optional options: -h | --help print help info -b | --backend backend http service, default: http://127.0.0.1/8040 -t | --tablet_id tablet id to restore -s | --schema_hash tablet related schema hash -f | --file file with lines containing comma-split tablet id and schema hash Examples: batch mode: sh restore_tablet_tool.sh -b "http://127.0.0.1:8040" -f tablets.txt sh restore_tablet_tool.sh --backend "http://127.0.0.1:8040" --file tablets.txt single mode: sh restore_tablet_tool.sh -b "http://127.0.0.1:8040" -t 12345 -s 11111 sh restore_tablet_tool.sh --backend "http://127.0.0.1:8040" --tablet_id 12345 --schema_hash 11111 " exit 1 } OPTS=$(getopt \ -n $0 \ -o 'b:t:s:f:' \ -l 'server:,tablet_id:,schema_hash:,file:,help' \ -- "$@") if [ $? != 0 ] ; then usage fi eval set -- "$OPTS" SERVER="http://127.0.0.1/8040" TABLET_ID= SCHEMA_HASH= FILENAME= BATCH_MODE=false while true; do case "$1" in -b|--backend) SERVER=$2 ; shift 2 ;; -f|--file) FILENAME=$2 ; BATCH_MODE=true ; shift 2 ;; -t|--tablet_id) TABLET_ID=$2 ; shift 2 ;; -s|--schema_hash) SCHEMA_HASH=$2 ; shift 2 ;; -h|--help) usage ; shift ;; --) shift ; break ;; *) echo "Internal error!" ; exit 1 ;; esac done restore_tablet() { echo "start to restore tablet id:"$2", schema hash:"$3 curl -X POST "$1/api/restore_tablet?tablet_id=$2&schema_hash=$3" echo -e "\n" } if [ $BATCH_MODE = true ] ; then lines=`cat $FILENAME` for line in $lines do # split the comma-split line # format: tablet_id,schema_hash fields=(${line/,/ }) TABLET_ID=${fields[0]} SCHEMA_HASH=${fields[1]} restore_tablet $SERVER $TABLET_ID $SCHEMA_HASH done else restore_tablet $SERVER $TABLET_ID $SCHEMA_HASH fi