diff --git a/src/run-policy/run-mmpol.sh b/src/run-policy/run-mmpol.sh index 5538f5e759fda05bbb52775fe258f32ba8972858..5158a5a10a695611ec24f6a984f6b2f8932bdd93 100755 --- a/src/run-policy/run-mmpol.sh +++ b/src/run-policy/run-mmpol.sh @@ -12,6 +12,7 @@ outdir="/data/rc/gpfs-policy/data" policy_file="./policy-def/list-path-external" device="scratch" output_log_prefix="" +dry_run="" ############################################################ # Help # @@ -33,7 +34,9 @@ Runs mmapplypolicy on the specified device/fileset. The policy file dictates the Usage: $0 [ -h ] [ -o | --outdir ] [ -f | --output-prefix ] [ -P | --policy-file ] device options: - -h|--help Print this Help. + -h|--help Print this Help. + --dry-run Do not run the policy command or any command that modifies any files or directories such as + mkdir Required: device GPFS fileset/directory apply the policy to. Can be @@ -53,7 +56,7 @@ EOF exit 0 } -args=$(getopt -a -o ho:f:P: --long help,outdir:,output-prefix:,policy-file: -- "$@") +args=$(getopt -a -o ho:f:P: --long help,outdir:,output-prefix:,policy-file:,dry-run -- "$@") if [[ $? -gt 0 ]]; then usage @@ -67,7 +70,8 @@ do -h | --help) help ;; -o | --outdir) outdir=$2 ; shift 2 ;; -f | --output-prefix) output_log_prefix=$2 ; shift 2 ;; - -P | --policy-file) policy_file=$2 ; shift 2 ;; + -P | --policy-file) policy_file=$2 ; shift 2 ;; + --dry-run) dry_run=true ; shift 1 ;; --) shift; break ;; *) >&2 echo Unsupported option: $1 usage ;; @@ -86,7 +90,7 @@ if [[ -z "$device" ]]; then usage fi -# create default output_log_prefix if not specified in the arguments +# set default output_log_prefix if not specified in the arguments if [[ -z "$output_log_prefix"]]; then modified_device=$(echo "$device" | sed -e 's|^/||' -e 's|/$||' -e 's|/|-|g') output_log_prefix="list-policy_${modified_device}" @@ -95,7 +99,6 @@ fi # create temporary working directory for list aggregation tmpglobal=$outdir/slurm-tmp-${SLURM_JOBID} tmpscratch=$outdir/slurm-tmp-${SLURM_JOBID} -mkdir -p $tmpglobal nodes=`scontrol show hostnames "${SLURM_JOB_NODELIST}" | tr '\n' ',' | sed -e 's/,$//'` cores="${SLURM_CPUS_PER_TASK}" @@ -118,13 +121,17 @@ cmd="mmapplypolicy ${device} -I defer \ # report final command in job log echo $cmd -# run policy command -$cmd - -# tag output file with run metadata -outfile=`ls -t $tmpglobal | head -1` -if [[ "$outfile" != "" ]] -then - mv -n $tmpglobal/$outfile $tmpglobal/../${output_log_prefix}_$filetag -fi -rmdir $tmpglobal +if [[ -z "${dry_run}" ]]; then + mkdir -p $tmpglobal + + # run policy command + $cmd + + # tag output file with run metadata + outfile=`ls -t $tmpglobal | head -1` + if [[ "$outfile" != "" ]] + then + mv -n $tmpglobal/$outfile $tmpglobal/../${output_log_prefix}_$filetag + fi + rmdir $tmpglobal +fi \ No newline at end of file diff --git a/src/run-policy/submit-pol-job b/src/run-policy/submit-pol-job index d71f91aca50e9bf7dd0df1ab7d1ad56607f4e9df..8920f143ca4e17aa0920b5cbef83a6c1fdef2e1e 100755 --- a/src/run-policy/submit-pol-job +++ b/src/run-policy/submit-pol-job @@ -14,6 +14,7 @@ partition="amd-hdr100,medium" outdir="/data/rc/gpfs-policy/data" policy="./policy-def/list-path-external" outfile="" +dry_run="" ############################################################ # Help # @@ -23,7 +24,7 @@ usage() >&2 cat << EOF Usage: $0 [ -h ] [ -o | --outdir ] [ -f | --outfile ] [ --with-dirs ] [ -N | --nodes ] [ -c | --cores ] [ -p | --partition] - [ -t | --time ] [ -m | --mem-per-cpu ] + [ -t | --time ] [ -m | --mem-per-cpu ] [ --dry_run ] device EOF exit 1 @@ -38,11 +39,13 @@ as root or via the run-submit-pol-job.py script. The default policy file is Usage: $0 [ -h ] [ -o | --outdir ] [ -f | --outfile ] [ -P | --policy ] [ -N | --nodes ] [ -c | --cores ] [ -p | --partition ] - [ -t | --time ] [ -m | --mem ] + [ -t | --time ] [ -m | --mem ] [ --dry-run ] device options: - -h|--help Print this Help. + -h|--help Print this Help. + --dry-run Do not submit a Slurm job running the policy. Instead, pass --dry-run to run-mmpol.sh and call + it normally to just print the output to STDOUT Required: device GPFS fileset/directory apply the policy to. Can be @@ -69,7 +72,8 @@ EOF exit 0 } -args=$(getopt -a -o ho:f:P:N:c:p:t:m: --long help,outdir:,outfile:,policy:,nodes:,cores:,partition:,time:,mem: -- "$@") +args=$(getopt -a -o ho:f:P:N:c:p:t:m: \ + --long help,outdir:,outfile:,policy:,nodes:,cores:,partition:,time:,mem:,dry-run -- "$@") if [[ $? -gt 0 ]]; then usage @@ -89,6 +93,7 @@ do -p | --partition) partition=$2 ; shift 2 ;; -t | --time) time=$2 ; shift 2 ;; -m | --mem-per-cpu) mem_per_cpu=$2 ; shift 2 ;; + --dry-run) dry_run=true ; shift 1 ;; --) shift; break ;; *) >&2 echo Unsupported option: $1 usage ;; @@ -108,15 +113,23 @@ if [[ -z "$device" ]]; then fi slurm_out="out/pol-%A-$(basename ${policy})-$(basename ${device}).out" -mkdir -p out - -run_mmpol_cmd="./run-mmpol.sh -o ${outdir} -f ${outfile} -P ${policy} ${device}" - -sbatch \ - -N $nodes \ - -c $cores \ - -t $time \ - --mem-per-cpu=$mem_per_cpu \ - -p $partition \ - -o ${slurm_out} \ - "${run_mmpol_cmd} + +run_mmpol_cmd_base="./run-mmpol.sh -o ${outdir} -f ${outfile} -P ${policy}" + +if [[ -z "${dry_run}" ]]; then + mkdir -p out + + run_mmpol_cmd="${run_mmpol_cmd_base} ${device}" + + sbatch \ + -N $nodes \ + -c $cores \ + -t $time \ + --mem-per-cpu=$mem_per_cpu \ + -p $partition \ + -o ${slurm_out} \ + "${run_mmpol_cmd}" +else + run_mmpol_cmd="${run_mmpol_cmd_base} --dry-run ${device}" + ${run_mmpol_cmd} +fi \ No newline at end of file