}
load_modules_local() {
+ [ $(facet_fstype ost1) == "zfs" ] && export USE_OFD=yes
if [ "$USE_OFD" == yes ]; then
if module_loaded obdfilter; then
if ! $LUSTRE_RMMOD ldiskfs; then
load_module osd-ldiskfs/osd_ldiskfs
fi
load_module mdt/mdt
- load_module cmm/cmm
load_module ost/ost
+ load_module lod/lod
+ load_module osp/osp
if [ "$USE_OFD" == yes ]; then
load_module ofd/ofd
else
# save quota version (both administrative and operational quotas)
# add an additional parameter if mountpoint is ever different from $MOUNT
#
-# XXX This function is kept for interoperability with old server (< 2.3.51),
+# XXX This function is kept for interoperability with old server (< 2.3.50),
# it should be removed whenever we drop the interoperability for such
# server.
quota_save_version() {
# client could mount several lustre
#
-# XXX This function is kept for interoperability with old server (< 2.3.51),
+# XXX This function is kept for interoperability with old server (< 2.3.50),
# it should be removed whenever we drop the interoperability for such
# server.
quota_type () {
return $rc
}
-# XXX This function is kept for interoperability with old server (< 2.3.51),
+# XXX This function is kept for interoperability with old server (< 2.3.50),
# it should be removed whenever we drop the interoperability for such
# server.
restore_quota_old() {
quota_save_version $old_QUOTA_TYPE
}
-# XXX This function is kept for interoperability with old server (< 2.3.51),
+# XXX This function is kept for interoperability with old server (< 2.3.50),
# it should be removed whenever we drop the interoperability for such
# server.
setup_quota_old(){
local mntpt=$1
- if [ "$USE_OFD" = "yes" ]; then
- $LFS quotacheck $mntpt || error "quotacheck failed"
- return
- fi
+ # no quota enforcement for now and accounting works out of the box
+ return
# We need save the original quota_type params, and restore them after testing
# restore old quota type settings
restore_quota() {
- if [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.3.51) ]; then
+ if [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.3.50) ]; then
restore_quota_old
return
fi
}
setup_quota(){
- if [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.3.51) ]; then
+ if [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.3.50) ]; then
setup_quota_old $1
return
fi
+ # XXX remove it once all quota code landed
+ echo "skip quota setup"
+ return
+
local mntpt=$1
# save old quota type & set new quota type
grep -v 'Found no match'
}
-wait_delete_completed () {
- local TOTALPREV=`lctl get_param -n osc.*.kbytesavail | \
- awk 'BEGIN{total=0}; {total+=$1}; END{print total}'`
+wait_delete_completed_mds() {
+ local MAX_WAIT=${1:-20}
+ local mds2sync=""
+ local stime=`date +%s`
+ local etime
+ local node
+ local changes
+
+ # find MDS with pending deletions
+ for node in $(mdts_nodes); do
+ changes=$(do_node $node "lctl get_param -n osc.*MDT*.sync_*" \
+ 2>/dev/null | calc_sum)
+ if [ -z "$changes" ] || [ $changes -eq 0 ]; then
+ continue
+ fi
+ mds2sync="$mds2sync $node"
+ done
+ if [ "$mds2sync" == "" ]; then
+ return
+ fi
+ mds2sync=$(comma_list $mds2sync)
+
+ # sync MDS transactions
+ do_nodes $mds2sync "lctl set_param -n osd*.*MD*.force_sync 1"
+
+ # wait till all changes are sent and commmitted by OSTs
+ # for ldiskfs space is released upon execution, but DMU
+ # do this upon commit
+
+ local WAIT=0
+ while [ "$WAIT" -ne "$MAX_WAIT" ]; do
+ changes=$(do_nodes $mds2sync "lctl get_param -n osc.*MDT*.sync_*" \
+ | calc_sum)
+ #echo "$node: $changes changes on all"
+ if [ "$changes" -eq "0" ]; then
+ etime=`date +%s`
+ #echo "delete took $((etime - stime)) seconds"
+ return
+ fi
+ sleep 1
+ WAIT=$(( WAIT + 1))
+ done
- local WAIT=0
- local MAX_WAIT=20
- while [ "$WAIT" -ne "$MAX_WAIT" ]; do
- sleep 1
- TOTAL=`lctl get_param -n osc.*.kbytesavail | \
- awk 'BEGIN{total=0}; {total+=$1}; END{print total}'`
- [ "$TOTAL" -eq "$TOTALPREV" ] && return 0
- echo "Waiting delete completed ... prev: $TOTALPREV current: $TOTAL "
- TOTALPREV=$TOTAL
- WAIT=$(( WAIT + 1))
- done
- echo "Delete is not completed in $MAX_WAIT sec"
- return 1
+ etime=`date +%s`
+ echo "Delete is not completed in $((etime - stime)) seconds"
+ do_nodes $mds2sync "lctl get_param osc.*MDT*.sync_*"
}
wait_for_host() {
}
wait_destroy_complete () {
- echo "Waiting for destroy to be done..."
- # MAX value shouldn't be big as this mean server responsiveness
- # never increase this just to make test pass but investigate
- # why it takes so long time
- local MAX=5
- local WAIT=0
- while [ $WAIT -lt $MAX ]; do
- local -a RPCs=($($LCTL get_param -n osc.*.destroys_in_flight))
- local con=1
- for ((i=0; i<${#RPCs[@]}; i++)); do
- [ ${RPCs[$i]} -eq 0 ] && continue
- # there are still some destroy RPCs in flight
- con=0
- break;
- done
- sleep 1
- [ ${con} -eq 1 ] && return 0 # done waiting
- echo "Waiting $WAIT secs for destroys to be done."
- WAIT=$((WAIT + 1))
- done
- echo "Destroys weren't done in $MAX sec."
- return 1
+ echo "Waiting for local destroys to complete"
+ # MAX value shouldn't be big as this mean server responsiveness
+ # never increase this just to make test pass but investigate
+ # why it takes so long time
+ local MAX=5
+ local WAIT=0
+ while [ $WAIT -lt $MAX ]; do
+ local -a RPCs=($($LCTL get_param -n osc.*.destroys_in_flight))
+ local con=1
+ local i
+
+ for ((i=0; i<${#RPCs[@]}; i++)); do
+ [ ${RPCs[$i]} -eq 0 ] && continue
+ # there are still some destroy RPCs in flight
+ con=0
+ break;
+ done
+ sleep 1
+ [ ${con} -eq 1 ] && return 0 # done waiting
+ echo "Waiting ${WAIT}s for local destroys to complete"
+ WAIT=$((WAIT + 1))
+ done
+ echo "Local destroys weren't done in $MAX sec."
+ return 1
+}
+
+wait_delete_completed() {
+ wait_delete_completed_mds $1 || return $?
+ wait_destroy_complete
}
wait_exit_ST () {
setup_quota $MOUNT || return 2
else
echo "disable quota as required"
- $LFS quotaoff -ug $MOUNT > /dev/null 2>&1
+ # $LFS quotaoff -ug $MOUNT > /dev/null 2>&1
fi
fi
return 0