X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre-iokit%2Fobdfilter-survey%2Flibecho;h=9a4e8c4b0c8f4486664fc257e68890cd37168526;hb=369f9a5c41e35f63787c2c0f077df5f44048c87f;hp=3beeecf3361da177eae7ac4bdedb068484182107;hpb=963b9589deac17a20bd9d3a60a352a4bd288a32e;p=fs%2Flustre-release.git diff --git a/lustre-iokit/obdfilter-survey/libecho b/lustre-iokit/obdfilter-survey/libecho index 3beeecf..9a4e8c4 100644 --- a/lustre-iokit/obdfilter-survey/libecho +++ b/lustre-iokit/obdfilter-survey/libecho @@ -1,19 +1,38 @@ #!/bin/bash -#* Copyright (C) 2002 Cluster File Systems, Inc. -#* Author: Jitendra Pawar -#* -#* Lustre-iokit is free software; you can redistribute it and/or -#* modify it under the terms of version 2 of the GNU General Public -#* License as published by the Free Software Foundation. -#* -#* Lustre-iokit is distributed in the hope that it will be useful, -#* but WITHOUT ANY WARRANTY; without even the implied warranty of -#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -#* GNU General Public License for more details. -#* -#* You should have received a copy of the GNU General Public License -#* along with Lustre; if not, write to the Free Software -#* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# GPL HEADER START +# +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2 only, +# as published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License version 2 for more details (a copy is included +# in the LICENSE file that accompanied this code). +# +# You should have received a copy of the GNU General Public License +# version 2 along with this program; If not, see +# http://www.sun.com/software/products/lustre/docs/GPLv2.pdf +# +# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, +# CA 95054 USA or visit www.sun.com if you need additional information or +# have any questions. +# +# GPL HEADER END +# +# Copyright 2008 Sun Microsystems, Inc. All rights reserved +# Use is subject to license terms. +# +# Copyright (c) 2012, Whamcloud, Inc. +# +# This file is part of Lustre, http://www.lustre.org/ +# Lustre is a trademark of Sun Microsystems, Inc. +# +# Author: Jitendra Pawar + # binaries lsmod="/sbin/lsmod" @@ -22,6 +41,7 @@ insmod="/sbin/insmod" rmmod="/sbin/rmmod" declare -a ost_names +declare -a client_names declare -a host_list declare -a dev_list declare -a unique_hosts @@ -30,21 +50,31 @@ declare -a vmstatpids declare -a do_unload_echo -# This function executes the command sent through parameters to host -# parameters -# 1. hostname -# 2. command to be executed on host -custom_remote_shell () { - host=$1 - shift - cmds="$*" - here=`pwd` - # Hop on to the remote node, chdir to 'here' and run the given - # commands. One of the following will probably work. - ssh $host "cd $here; $cmds" - #rsh $host "cd $here; $cmds" - # we have to remove the leading `uname -n`: from pdsh output lines - #pdsh -w $host "cd $here; $cmds" | sed 's/^[^:]*://' +DSH=${DSH:-"ssh"} +NETTYPE=${NETTYPE:-tcp} + +dsh () { + local node="$1" + local user="$2" + shift 2 + local command="$@" + + command="export PATH=/sbin:/usr/sbin:\$PATH; $command" + + case $DSH in + ssh) + if [ -n "$user" ]; then + user="$user@" + fi + $DSH $user$node "$command" + ;; + rsh) + if [ -n "$user" ]; then + user="-l $user" + fi + $DSH $user $node "$command" + ;; + esac } # how to run commands on other nodes @@ -53,11 +83,17 @@ custom_remote_shell () { remote_shell () { host=$1 shift - cmds="$*" + cmds="$@" if [ "$host" = "localhost" -o "$host" = `uname -n` ]; then eval "$cmds" else - custom_remote_shell $host "$cmds" + # split $host into $host and $user + local user="" + if [[ $host == *@* ]]; then + user=${host%@*} + host=${host#*@} + fi + dsh $host "$user" "$cmds" fi } @@ -109,10 +145,10 @@ unload_obdecho () { } # returns the device number which is displayed in "lctl device_list" -# +# # parameter: 1. hostname -# 2. type of device ex: echo_client -# 3. name of device ex: ECHO_matrix.linsyssoft.com +# 2. type of device ex: echo_client +# 3. name of device ex: ECHO_matrix.linsyssoft.com get_devno () { local host=$1 local type=$2 @@ -138,102 +174,147 @@ get_devnos () { return 0 } +# do cleanup for netdisk case. +cleanup_netdisk () { + for osc in $@; do + $lctl <<-EOF + cfg_device $osc + cleanup + detach + EOF + done +} + +# do cleanup for network case. +cleanup_network () { + local clean_srv_OSS=$1 + $lctl <<-EOF + cfg_device echotmp + cleanup + detach + EOF + remote_shell "root@$server_nid" \ + "$lctl <<-EOF + cfg_device echo_srv + cleanup + detach + EOF" + if [ $clean_srv_OSS ]; then + remote_shell "root@$server_nid" \ + "$lctl <<-EOF + cfg_device OSS + cleanup + detach + EOF" + fi +} + # do cleanup and exit. cleanup () { - for ((i = 0; i < ndevs; i++)); do - host=${host_names[$i]} - if [ -n ${do_teardown_ec[$i]} ]; then - teardown_ec_devno $host ${client_names[$i]} - fi + local exit_status=$1 + local host + case=${case:-"disk"} + shift + for ((i = 0; i < $ndevs; i++)); do + host=${host_names[$i]} + if [[ -n "${do_teardown_ec[$i]}" ]]; then + teardown_ec_devno $host ${client_names[$i]} + fi done pidcount=0 - for host in ${unique_hosts[@]}; do - remote_shell $host "killall vmstat -q" & + for ((i = 0; i < ${#unique_hosts[@]}; i++)); do + host=${unique_hosts[$i]} + remote_shell $host "killall -q vmstat >/dev/null 2>&1" & pid=$! kill -term ${vmstatpids[$pidcount]} 2>/dev/null kill -kill ${vmstatpids[$pidcount]} 2>/dev/null wait $pid pidcount=$((pidcount+1)) - if ((${do_unload_obdecho[$host]})); then - unload_obdecho $host + if ((${do_unload_echo[$i]})); then + unload_obdecho $i fi done if [ $case == "network" ]; then - lctl <&1 1>&2 local host=$1 local client_name="$2" local ost_name="$3" + local dev_type="${4:-obdfilter}" + local stack_type="${5:-}" + if [ -z "$client_name" ]; then - if [ -z "$ost_name" ]; then - echo "client and ost name both null" 1>&2 - return - fi - client_name=${ost_name}_echo_client + if [ -z "$ost_name" ]; then + echo "client and ost name both null" + exit 1 + fi + client_name=${ost_name}_ecc fi ec=`get_devno $host echo_client $client_name` if [ -n "$ec" ]; then - echo $ec $client_name $client_name - return + echo $ec $client_name $client_name >&8 + exit 0 fi if [ -z "$ost_name" ]; then - echo "no echo client and ost_name not set, client: $client_name, host: $host" 1>&2 - return + echo "no echo client and ost_name not set, client:" \ + "$client_name, host: $host" + exit 1 fi - ost=`get_devno $host obdfilter $ost_name` + ost=`get_devno $host $dev_type $ost_name` if [ -z "$ost" ]; then - echo "OST $ost_name not setup" 1>&2 - return + echo "OST $ost_name not setup" + exit 1 fi - remote_shell $host "$lctl <&2 - return + echo "Can't setup echo-client" + exit 1 fi - echo $ec $client_name 1 + echo $ec $client_name 1 >&8 + exit 0 } # Create echo-clients using osc_names and osc_uuid # It creates echoclients for all osc listed using #lctl device_list command ec_using_osc () { local osc_name=$1 - local osc_uuid=$2 - $lctl </dev/null 2>&1 + $lctl <<-EOF + attach osc $ocsname $oscuuid + cfg_device $ocsname + setup echo_srv_UUID echo_UUID + EOF + $lctl <<-EOF + attach echo_client ${ocsname}_ecc $oscuuid + setup $ocsname + EOF } -# setup obdecho and ost on server +setup_osc_for_remote_ost () { + local ost_nid=$1 + local obdfilter_name=$2 + local host_name=host_$3 + $lctl add_uuid ${host_name}_UUID $ost_nid@$NETTYPE >/dev/null 2>&1 + $lctl <<-EOF + attach osc ${obdfilter_name}_osc ${obdfilter_name}_osc_UUID + cfg_device ${obdfilter_name}_osc + setup ${obdfilter_name}_UUID ${host_name}_UUID + EOF +} + +# setup obdecho on server setup_srv_obd () { local server_nid=$1 local test_ostfsnm=$2 - echo - remote_shell "root@$server_nid" "$lctl << EOF - attach obdecho $test_ostfsnm ${test_ostfsnm}_UUID - cfg_device $test_ostfsnm - setup - attach ost OSS OSS_UUID - cfg_device OSS - setup -EOF" + remote_shell "root@$server_nid" \ + "$lctl <<-EOF + attach obdecho $test_ostfsnm ${test_ostfsnm}_UUID + cfg_device $test_ostfsnm + setup + EOF" +} + +# setup OSS on server +setup_OSS () { + local server_nid=$1 + remote_shell "root@$server_nid" \ + "$lctl <<-EOF + attach ost OSS OSS_UUID + cfg_device OSS + setup + EOF" } # cleanup and detach the echo-clients that we have created during the test. # parameter: 1. hostname -# 2. client name, ex:- ns8:ECHO_ns8 +# 2. client name, ex:- ns8:ECHO_ns8 teardown_ec_devno () { local host=$1 local client_name=$2 - remote_shell $host "$lctl <