#!/bin/bash
-#* Copyright (C) 2002 Cluster File Systems, Inc.
-#* Author: Jitendra Pawar <jitendra@clusterfs.com>
-#*
-#* 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.
+#
+# This file is part of Lustre, http://www.lustre.org/
+# Lustre is a trademark of Sun Microsystems, Inc.
+#
+# Author: Jitendra Pawar <jitendra@clusterfs.com>
+
# binaries
lsmod="/sbin/lsmod"
DSH=${DSH:-"ssh"}
+NETTYPE=${NETTYPE:-tcp}
dsh () {
local node="$1"
shift 2
local command="$@"
- local here=$(pwd)
-
- command="cd $here; export PATH=/sbin:/usr/sbin:\$PATH; $command"
+ command="export PATH=/sbin:/usr/sbin:\$PATH; $command"
case $DSH in
ssh)
# do cleanup for netdisk case.
cleanup_netdisk () {
for osc in $@; do
- lctl <<EOF
+ $lctl <<EOF
cfg_device $osc
cleanup
detach
# do cleanup for network case.
cleanup_network () {
local clean_srv_OSS=$1
- lctl <<EOF
+ $lctl <<EOF
cfg_device echotmp
cleanup
detach
EOF
- remote_shell "root@$server_nid" "lctl << 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
+ remote_shell "root@$server_nid" "$lctl << EOF
cfg_device OSS
cleanup
detach
}
trap cleanup SIGHUP SIGINT SIGTERM
-# gets echoclient device number and attch it to the client UUID
-#
+# gets echoclient device number and attach it to the client UUID
+# Results are returned by an echo followed by an exit
+# This must run in a subshell.
+#
# parameter: 1. hostname
# 2. client name, ex:- ns8:ECHO_ns8
# 3. name of ost instances, ex:- lustre-OST0001
get_ec_devno () {
+ exec 8>&1 1>&2
local host=$1
local client_name="$2"
local ost_name="$3"
if [ -z "$client_name" ]; then
if [ -z "$ost_name" ]; then
- echo "client and ost name both null" 1>&2
- return
+ 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`
if [ -z "$ost" ]; then
- echo "OST $ost_name not setup" 1>&2
- return
+ echo "OST $ost_name not setup"
+ exit 1
fi
client_name=${ost_name}_ecc
remote_shell $host "$lctl <<EOF
EOF"
ec=`get_devno $host echo_client $client_name`
if [ -z "$ec" ]; then
- echo "Can't setup echo-client" 1>&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
local server_nid=$1
local ocsname=$2
local oscuuid=$3
- $lctl add_uuid echo_UUID $server_nid@tcp >/dev/null 2>&1
+ $lctl add_uuid echo_UUID $server_nid@$NETTYPE >/dev/null 2>&1
$lctl <<EOF
attach osc $ocsname $oscuuid
cfg_device $ocsname
local ost_nid=$1
local obdfilter_name=$2
local host_name=host_$3
- $lctl add_uuid ${host_name}_UUID $ost_nid@tcp >/dev/null 2>&1
+ $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
check_cleanup () {
type_obj="$1"
- osc_names_str=$(lctl dl | grep $type_obj)
+ osc_names_str=$($lctl dl | grep $type_obj)
count=0;
for name in $osc_names_str; do
count=$((count+1))
check_setup () {
type_obj="$1"
- osc_names_str=$(lctl dl | grep $type_obj)
+ osc_names_str=$($lctl dl | grep $type_obj)
count=0;
for name in $osc_names_str; do
count=$((count+1))