Minimise User Submission Errors: Server JSV
From the SGE documenation: if jsv_url is set, then jsv_allowed_mod comes into play:
cluster configuration parameters:
jsv_allowed_mod
if there is a server JSV script defined with jsv_url parameter, then all qalter(1) or qmon(1) modification requests for jobs are rejected by the master daemon. With the jsv_allowed_mod parameter, an administrator has the possibility to allow a set of switches which can then be used with clients to
modify certain job attributes.
-- so e.g.,
qalter -l short <jobid>
will fail by default --- simply add "l_hard" via the config gui.
Extras?
-- put "-l" stuff into job ENV (e.g., in QSUB_OPTS or HRL --- hard resource list)
-- see
http://manpages.ubuntu.com/manpages/natty/man3/jsv_script_interface.3.html
specifically
jsv_add_env(variable_name, variable_value);
1. |
What We Have |
Correct at 2012 May 29:
#!/bin/bash
jsv_on_start() {
return
}
jsv_on_verify() {
# ------------------------------------------------------------------------------
# -- check some hard resource request combos:
l_inter_requested=$(jsv_sub_is_param l_hard interactive)
l_short_requested=$(jsv_sub_is_param l_hard short)
l_twoday_requested=$(jsv_sub_is_param l_hard twoday)
# if [ "$l_inter_requested" = "true" ] && [ "$l_twoday_requested" = "true" ]; then
# jsv_reject "Please specify only one of \"inter\" and \"twoday\" --- your job has been rejected"
# return
# fi
# if [ "$l_inter_requested" = "true" ] && [ "$l_short_requested" = "true" ]; then
# jsv_reject "Please specify only one of \"inter\" and \"short\" --- your job has been rejected"
# return
# fi
if [ "$l_twoday_requested" = "true" ] && [ "$l_short_requested" = "true" ]; then
jsv_reject "Please specify only one of \"twoday\" and \"short\" --- your job has been rejected"
return
fi
# ------------------------------------------------------------------------------
# -- interactive stuff:
q_M610x_GPU_interactive_requested=$(jsv_sub_is_param q_hard M610x-GPU-interactive.q)
q_C6100_GPU_interactive_requested=$(jsv_sub_is_param q_hard C6100-GPU-interactive.q)
if [ "$q_M610x_GPU_interactive_requested" = "true" ] && [ "$l_inter_requested" != "true" ]; then
jsv_reject "For interactive (qrsh) GPU jobs, please specify \"-l inter -l nvidia\". There is no need to specify a queue. Your job has been rejected"
return
fi
if [ "$q_C6100_GPU_interactive_requested" = "true" ] && [ "$l_inter_requested" != "true" ]; then
jsv_reject "For interactive (qrsh) GPU (IB-connected) jobs, please specify \"-l inter -l nvidia_ib\". There is no need to specify a queue. Your job has been rejected"
return
fi
# ------------------------------------------------------------------------------
# -- check some hard resource/queue combos:
q_C6100_STD_serial_requested=$(jsv_sub_is_param q_hard C6100-STD-serial.q)
q_C6100_STD_twoday_requested=$(jsv_sub_is_param q_hard C6100-STD-twoday.q)
q_C6100_STD_short_requested=$(jsv_sub_is_param q_hard C6100-STD-short.q)
q_R410_twoday_requested=$(jsv_sub_is_param q_hard R410-twoday.q)
q_R410_short_requested=$(jsv_sub_is_param q_hard R410-short.q)
if [ "$q_C6100_STD_serial_requested" = "true" ] && [ "$l_short_requested" = "true" ]; then
jsv_reject "Please specify only one of \"C6100-STD-serial.q\" and \"short\" --- your job has been rejected"
return
fi
if [ "$q_C6100_STD_serial_requested" = "true" ] && [ "$l_twoday_requested" = "true" ]; then
jsv_reject "Please specify only one of \"C6100-STD-serial.q\" and \"twoday\" --- your job has been rejected"
return
fi
if [ "$q_R410_twoday_requested" = "true" ] && [ "$l_short_requested" = "true" ]; then
jsv_reject "Please specify \"R410-twoday.q\" only if \"-l twoday\" is also set --- your job has been rejected"
return
fi
if [ "$q_R410_short_requested" = "true" ] && [ "$l_twoday_requested" = "true" ]; then
jsv_reject "Please specify \"R410-short.q\" only if \"-l short\" is also set --- your job has been rejected"
return
fi
if [ "$q_R410_twoday_requested" = "true" ] && [ "$l_twoday_requested" != "true" ]; then
jsv_reject "Please specify \"R410-twoday.q\" only if \"-l twoday\" is also set --- your job has been rejected"
return
fi
if [ "$q_R410_short_requested" = "true" ] && [ "$l_short_requested" != "true" ]; then
jsv_reject "Please specify \"R410-short.q\" only if \"-l short\" is also set --- your job has been rejected"
return
fi
# ------------------------------------------------------------------------------
pe=$(jsv_get_param pe_name)
case "$pe" in
orte-12.pe | orte-12-ib.pe )
slots_min=`jsv_get_param pe_min`
## jsv_log_warning "Example: slots=$slots_min//"
i=`echo "$slots_min % 12" | bc`
if [ $i -gt 0 ]; then
jsv_reject "Parallel job PE with orte-12(-ib).pe: number of processes must be a multiple of 12 slots"
return
fi
;;
orte-32-ib.pe )
slots_min=`jsv_get_param pe_min`
slots_max=`jsv_get_param pe_max`
# ...in case where a fixed, single figure is specced, not a range, both pe_min and pe_max are set to that single figure...
jsv_log_warning "Example: slots_min=$slots_min//slots_max=$slots_max//"
if [ $slots_min -gt 129 ]; then
jsv_reject "Parallel job PE with orte-32-ib.pe: number of processes must <= 128"
return
fi
if [ $slots_max -gt 129 ]; then
jsv_reject "Parallel job PE with orte-32-ib.pe: number of processes must <= 128"
return
fi
i=`echo "$slots_min % 32" | bc`
if [ $i -gt 0 ]; then
jsv_reject "Parallel job PE with orte-32-ib.pe: number of processes must be a multiple of 32 slots"
return
fi
;;
esac
# ------------------------------------------------------------------------------
# command=$(jsv_get_param CMDNAME)
# jsv_log_warning "CMDNAME: //$command//"
#
# workdir=$(jsv_get_param workdir)
# jsv_log_warning "WD: //$workdir//"
#
# workdir=$(jsv_get_param sge_o_workdir)
# jsv_log_warning "WD: //$workdir//"
#
# if [ `cat $command | egrep -c "abaqus|abq6101"` -gt 0 ]; then
# if [ `cat $command | egrep -c "interactive"` -eq 0 ]; then
# jsv_reject "Abaqus jobs must be interactive!"
# return
# fi
# fi
# ------------------------------------------------------------------------------
######## jsv_add_env "JSV_EXAMPLE" "jsv_value_33"
# ------------------------------------------------------------------------------
# jsv_log_warning "Example JSV script warning."
# jsv_log_warning "Example JSV script warning: $pe//."
# jsv_log_info "Example JSV script info."
jsv_accept "Job OK"
return
}
. ${SGE_ROOT}/util/resources/jsv/jsv_include.sh
jsv_main