Hi all,
I am trying to create a JSV that detects whenever a user submits a
QLOGIN job, and forces a h_rt timelimit if they requested none.
The JSV goes as follows:
---------------
# cat /opt/gridengine/default/common/jsv.pl
#!/bin/env perl
use strict;
use warnings;
no warnings qw/uninitialized/;
use Env qw(SGE_ROOT);
use lib "$SGE_ROOT/util/resources/jsv";
use JSV qw( :ALL jsv_show_params jsv_send_env jsv_log_info );
use Data::Dumper;
use Storable;
use POSIX qw(ceil);
jsv_on_start(sub {
jsv_send_env();
});
jsv_on_verify(sub {
jsv_log_warning ("INITIAL");
jsv_show_params();
# CHECK if is a QLOGIN and if it has defined a time limit. Force a
limit and show a message.
if (jsv_is_param('CLIENT') ) {
my $cli = jsv_get_param('CLIENT');
jsv_log_warning ("CLIENT = $cli");
if ($cli eq 'qlogin') {
jsv_log_warning ("QLOGIN");
if (!jsv_sub_is_param('l_hard','h_rt') &&
!jsv_sub_is_param('l_hard','s_rt')) {
jsv_sub_add_param('l_hard','h_rt','02:00:00');
jsv_log_warning ("\n");
jsv_log_warning
("\t\x1b\x5b1;31;49m#################################################\x1b\x5b0;39;49m");
jsv_log_warning ("\t\x1b\x5b1;31;49m#\t\t* W A R N I N G
*\t\t\x1b\x5b1;31;49m#\x1b\x5b0;39;49m");
jsv_log_warning
("\t\x1b\x5b1;31;49m#################################################\x1b\x5b0;39;49m");
blah, blah, blah
jsv_log_warning
("\t\x1b\x5b1;31;49m#################################################\x1b\x5b0;39;49m");
jsv_log_warning ("\n");
}
}
}
# check if requested a queue. If not, force -q all.q
if (!jsv_is_param('q_hard')) {
jsv_sub_add_param('q_hard','all.q');
}
# force core binding
my $binding=0;
if (jsv_is_param('pe_name')) {
if (jsv_is_param('pe_max')) {
$binding=jsv_get_param('pe_max');
} else{
$binding=1;
}
} else {
$binding=1;
}
jsv_set_param('binding_type','set');
jsv_set_param('binding_strategy','linear');
jsv_set_param('binding_amount',$binding);
# accept job
jsv_correct("");
});
jsv_main();
------------
Basically, the JSV checks the CLIENT parameter. If it is equal to
"qlogin", then checks if there is any h_rt, and sets a limit on 2h:10min
if there is none, while showing a colorful warning message to the user
so they know that there is a time limit.
Then, it also sets all.q as a hard queue if there is none (or *) and
also sets the core binding policy.
This works wonders when I run it as a client jsv by using "qlogin -jsv
/opt/gridengine/default/common/jsv.pl". The message appears, the limit
is set, and the job runs fine.
But, once I set this as a server JSV (by qconf -mconf global), the time
limit no longer applies.
As far as I've been able to find the following behaviours differ from
running it as client or server jsv:
- The 'CLIENT' parameter changed, from 'qlogin' to 'qmaster'. This skips
all my "if" in the jsv and stops checking for time limits. Can I trust
this? Why is this 'qmaster' appearing? Now both qsub's and qlogin's show
the same command. How can I distinguish them?
- The jsv_show_params() command shows nothing. Neither on stdout nor in
/opt/gridengine/default/spool/qmaster/messages This makes debugging
really cumbersome
- No message can be sent to the user. Being it info, warning or error.
The user won't know if I have set a time limit to his session
- The queue and binding parts work fine.
So, why is my 'client' parameter different? How can I debug it? How can
I send a message to the user?
Should I change any of the "use something" at the beginning of my jsv?
(I copied them from another perl jsv on the internet)
Thanks in advance,
Txema
_______________________________________________
users mailing list
[email protected]
https://gridengine.org/mailman/listinfo/users