From: Hongchao Zhang Date: Thu, 13 Apr 2017 07:48:32 +0000 (+0800) Subject: LU-9364 test: wait rmultiop_start to start X-Git-Tag: 2.10.52~27 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=f1e337e077b3bc653c91fda0e19a5346ca154705 LU-9364 test: wait rmultiop_start to start In rmultiop_start, the remote command could be delayed a while, and wait some time for the command to run. Test-Parameters: trivial testlist=replay-vbr Change-Id: Ic8beec725edc89a527c74e2033e59e1da0d444c9 Signed-off-by: Hongchao Zhang Reviewed-on: https://review.whamcloud.com/26729 Tested-by: Jenkins Tested-by: Maloo Reviewed-by: Wei Liu Reviewed-by: James Nunez Reviewed-by: Saurabh Tandan Reviewed-by: Oleg Drokin --- diff --git a/lustre/tests/replay-vbr.sh b/lustre/tests/replay-vbr.sh index 7da4f8a..4e817a0 100755 --- a/lustre/tests/replay-vbr.sh +++ b/lustre/tests/replay-vbr.sh @@ -43,33 +43,46 @@ CLIENT2=${CLIENT2:-$CLIENT1} is_mounted $MOUNT2 || error "MOUNT2 is not mounted" rmultiop_start() { - local client=$1 - local file=$2 - local cmds=$3 - - # We need to run do_node in bg, because pdsh does not exit - # if child process of run script exists. - # I.e. pdsh does not exit when runmultiop_bg_pause exited, - # because of multiop_bg_pause -> $MULTIOP_PROG & - # By the same reason we need sleep a bit after do_nodes starts - # to let runmultiop_bg_pause start muliop and - # update /tmp/multiop_bg.pid ; - # The rm /tmp/multiop_bg.pid guarantees here that - # we have the updated by runmultiop_bg_pause - # /tmp/multiop_bg.pid file - - local pid_file=$TMP/multiop_bg.pid.$$ - do_node $client "MULTIOP_PID_FILE=$pid_file LUSTRE= runmultiop_bg_pause $file $cmds" & - local pid=$! - sleep 3 - local multiop_pid - multiop_pid=$(do_node $client cat $pid_file) - [ -n "$multiop_pid" ] || error "$client : Can not get multiop_pid from $pid_file " - eval export $(node_var_name $client)_multiop_pid=$multiop_pid - eval export $(node_var_name $client)_do_node_pid=$pid - local var=$(node_var_name $client)_multiop_pid - echo client $client multiop_bg started multiop_pid=${!var} - return $? + local client=$1 + local file=$2 + local cmds=$3 + local WAIT_MAX=${4:-60} + local wait_time=0 + + # We need to run do_node in bg, because pdsh does not exit + # if child process of run script exists. + # I.e. pdsh does not exit when runmultiop_bg_pause exited, + # because of multiop_bg_pause -> $MULTIOP_PROG & + # By the same reason we need sleep a bit after do_nodes starts + # to let runmultiop_bg_pause start muliop and + # update /tmp/multiop_bg.pid ; + # The rm /tmp/multiop_bg.pid guarantees here that + # we have the updated by runmultiop_bg_pause + # /tmp/multiop_bg.pid file + + local pid_file=$TMP/multiop_bg.pid.$$ + do_node $client "MULTIOP_PID_FILE=$pid_file LUSTRE= \ + runmultiop_bg_pause $file $cmds" & + local pid=$! + local multiop_pid + + while [[ $wait_time -lt $WAIT_MAX ]]; do + sleep 3 + wait_time=$((wait_time + 3)) + multiop_pid=$(do_node $client cat $pid_file) + if [ -n "$multiop_pid" ]; then + break + fi + done + + [ -n "$multiop_pid" ] || + error "$client : Can not get multiop_pid from $pid_file " + + eval export $(node_var_name $client)_multiop_pid=$multiop_pid + eval export $(node_var_name $client)_do_node_pid=$pid + local var=$(node_var_name $client)_multiop_pid + echo client $client multiop_bg started multiop_pid=${!var} + return $? } rmultiop_stop() {