#/bin/bash # # Test thread for File system metadata stress testing script # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public # License as published by the Free Software Foundation; version # 2. # # 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 for more details. # # You should find a copy of v2 of the GNU General Public License somewhere # on your Linux system; if not, write to the Free Software Foundation, # Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Copyright (C) 2009, Intel Corp. # Author: Shaohui Zheng # run program and do not display the output function run_quiet() { local cmd=$* $cmd >/dev/null 2>&1 return $? } function k_log() { echo [$(date "+%m-%d %H:%M:%S")] $* | tee -a $K_LOG } function k_result() { echo [$(date "+%m-%d %H:%M:%S")] $* | tee -a $K_LOG echo $* | egrep "pass|fail" ret_val=$? if [ -f $K_FLAG ] ;then echo [$(date "+%m-%d %H:%M:%S")] $* >> $K_RESULT fi if [ ! -f $K_FLAG ] && [ $ret_val -ne 0 ] ;then echo [$(date "+%m-%d %H:%M:%S")] $* >> $K_RESULT fi } # Compare 2 trees, if it is the same, return 0, or return 1 # # we need to make sure whether the tree has changes after we # finish a lot of meta operations on he heavy workloads, this # function can compare the hierarchy between 2 trees. # # the basic idea is diff the output by command find. function k_tree_diff() { local ta=$1 # tree a local tb=$2 # tree b local md5a=$(run_quiet cd $ta; find | md5sum | awk '{ print $1}') local md5b=$(run_quiet cd $tb; find | md5sum | awk '{ print $1}') if [ $md5a = $md5b ];then return 0 else return 1 fi } dir=$1 depth=$2 width=$3 result= k_log "thread $1 starts with pid $$" echo $$ | tee -a $K_THREADS_PID # generate new tree k_log "begin to generate tree $dir" $K_TREE_GEN $depth $width k_log "end to generate tree $dir" cwd=$(pwd) run_quiet cd $K_VAR while [ -e $K_FLAG ] do new_dir=$dir-new cp $dir $new_dir -pr run_quiet cd $new_dir k_log "thread $dir: begin to traverse dir $new_dir" $K_TREE_TRAV $2 $3 k_log "thread $dir: end to traverse dir $new_dir" run_quiet cd - result=pass k_tree_diff $dir $new_dir || result=fail k_result "thread $dir: $result to compare result between dir $dir and $new_dir" rm $new_dir -fr done run_quiet cd $cwd # test ends, remove the oringal tree rm $dir -fr