| #!/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 |