blob: 3055967d16ace7b574e2b1fd2dce7dc52657bde6 [file] [log] [blame]
#!/bin/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.
PID=$$
if [ $# -ne 3 ]
then
echo "This tool is for set usage scenario of specified table(app)."
echo "USAGE: $0 <cluster-meta-list> <app-name> <normal|prefer_write|bulk_load>"
exit 1
fi
pwd="$( cd "$( dirname "$0" )" && pwd )"
shell_dir="$( cd $pwd/.. && pwd )"
cd $shell_dir
cluster=$1
app_name=$2
scenario=$3
scenario_key="rocksdb.usage_scenario"
if [ "$scenario" != "normal" -a "$scenario" != "prefer_write" -a "$scenario" != "bulk_load" ]; then
echo "invalid usage scenario type: $scenario"
exit 1
fi
echo "UID: $UID"
echo "PID: $PID"
echo "cluster: $cluster"
echo "app_name: $app_name"
echo "scenario: $scenario"
echo "Start time: `date`"
all_start_time=$((`date +%s`))
echo
echo -e "use $app_name\nset_app_envs $scenario_key $scenario" | ./run.sh shell --cluster $cluster &>/tmp/$UID.$PID.pegasus.set_app_envs
set_fail=`grep 'set app env failed' /tmp/$UID.$PID.pegasus.set_app_envs | wc -l`
if [ $set_fail -eq 1 ]; then
grep ERR /tmp/$UID.$PID.pegasus.set_app_envs
echo "ERROR: set app envs failed, refer to /tmp/$UID.$PID.pegasus.set_app_envs"
exit 1
fi
echo ls | ./run.sh shell --cluster $cluster &>/tmp/$UID.$PID.pegasus.ls
while read app_line
do
status=`echo $app_line | awk '{print $2}'`
if [ "$status" = "AVAILABLE" ]
then
gid=`echo $app_line | awk '{print $1}'`
app=`echo $app_line | awk '{print $3}'`
partition_count=`echo $app_line | awk '{print $5}'`
replica_count=`echo $app_line | awk '{print $6}'`
if [ "$app_name" != "$app" ]
then
continue
fi
echo "Checking app envs take effect to all replicas..."
sleeped=0
while true
do
echo "remote_command -t replica-server replica.query-app-envs $gid" | ./run.sh shell --cluster $cluster &>/tmp/$UID.$PID.pegasus.query_app_envs.$app
effect_count=`grep "$scenario_key=$scenario" /tmp/$UID.$PID.pegasus.query_app_envs.$app | wc -l`
total_count=$((partition_count * replica_count))
if [ $effect_count -ge $total_count ]; then
echo "[${sleeped}s] $effect_count/$total_count finished."
echo "All finished."
break
else
echo "[${sleeped}s] $effect_count/$total_count finished."
sleep 5
sleeped=$((sleeped + 5))
fi
done
echo
fi
done </tmp/$UID.$PID.pegasus.ls
echo "Finish time: `date`"
all_finish_time=$((`date +%s`))
echo "Set usage scenario done, elasped time is $((all_finish_time - all_start_time)) seconds."
rm -f /tmp/$UID.$PID.pegasus.* &>/dev/null