Adding the full JSV script (Perl):

#!/usr/bin/perl
#
######################################################
#
# JSV code for grid engine at Dialog
#
# Manfred Selz - Dialog Semiconductor GmbH - 04/2012-03/2016
#
# (for reference see also "$SGE_ROOT/util/resources/jsv/jsv.pl")
#
# Usage examples:
# o qsub -jsv ...
# o $HOME/.sge_request
# o $SGE_ROOT/$SGE_CELL/common/sge_request
# Also see "man jsv"!
#
######################################################
#
# Tasks:
# ====================================================
# o handling of LM_PROJECT
# o OS control (RHEL4/RHEL5/RHEL6)
# o new: set -P <project> if applicable
# o new: set mmtq resource for mmtoken jobs
# o new: flexible handling of RHEL5|6
#
######################################################

use strict;
use warnings;
no warnings qw/uninitialized/;

use Env qw(SGE_ROOT);
use lib "$SGE_ROOT/util/resources/jsv";
use JSV qw( :DEFAULT jsv_send_env jsv_log_info );

# my $sge_root = $ENV{SGE_ROOT};
# my $sge_arch = qx{$sge_root/util/arch};

jsv_on_start(sub {
   # Leave this commented out...has problems on server-side JSV
   #jsv_send_env();
});

jsv_on_verify(sub {
   # setting of variables
   my %params = jsv_get_param_hash();
   my $do_ignore = 0;
   my $rhel4 = 4;
   my $rhel5 = 5;
   my $rhel6 = 6;
   my $rhel5or6 = '5|6';
   my $os = $ENV{"RHEL_VER"};
   my $myshort;
   my $lmproject;
   my $lmproject_first = ".";
   my $lmproject_rest = ".";
   my $project_defined;
   my $mmtoken_set = 0;
   my $incisive_set = 0;

   # correct issue with resource "short" (which is for some reason set to 
"short=0.000000", if set at all)
   if(exists $params{l_hard}{short}) {
     jsv_sub_del_param('l_hard', 'short');
     jsv_sub_add_param('l_hard', 'short', '1');
     #jsv_correct('Job was corrected - setting short to 1');
   }

   # test special resource for analog simulations
   # (set if mmtoken is set, but short is not set)
   if(exists $params{l_hard}{mmtoken}) {
     $mmtoken_set = 1;
     if(!exists $params{l_hard}{short}) {
       if(!exists $params{l_hard}{local_placeholder}) {
         jsv_sub_add_param('l_hard', 'mmtq', '1');
       }
     }
   }
   # test resource for digital simulations - incisive-xl resource
   if(exists $params{l_hard}{'incisive-xl'}) {
     $incisive_set = 1;
   }

   # if hard queue is defined, delete this (for default.q and short.q)
   jsv_sub_del_param('q_hard', 'default.q');
   jsv_sub_del_param('q_hard', 'short.q');
   jsv_sub_del_param('q_hard', 'shortnightly.q');
   jsv_sub_del_param('q_hard', 'local.q');

   # modify the env. var. $LM_PROJECT (if set at all)
   $lmproject = $ENV{"LM_PROJECT"};
#  if ($lmproject =~ m/[A-Z]_(\w+)+/) {
   if ($lmproject =~ m/[A-Z]_([a-zA-Z0-9\-]+)/) {
     $lmproject_rest = $1;
     $lmproject_first = substr($lmproject,0,1);
    jsv_del_env("LM_PROJECT");
     jsv_add_env("LM_PROJECT",$lmproject_first."SGE_".$lmproject_rest);
#    jsv_log_info("modified LM_PROJECT");
   }

   # modify the -P <project> parameter if applicable;
   # check if project is set (in LM_PROJECT) and available in SGE
   if ($lmproject_rest eq ".") {
#    jsv_log_info("LM_PROJECT not defined");
     jsv_sub_add_param('P', "defProj");
   } else {
#    jsv_log_info("LM_PROJECT is ${lmproject_rest}");
#    $project_defined = `qconf -sprjl | grep $lmproject_rest`;
     $project_defined = `qconf -sprjl | grep $lmproject_rest | head -1`;
     chomp($project_defined);
#    jsv_log_info("defined project is ${project_defined}");
     if ($lmproject_rest eq $project_defined) {
#      jsv_log_info("project found - adding -P setting now");
       jsv_sub_add_param('P', $project_defined);
     } else {
#      jsv_log_info("project not found");
       jsv_sub_add_param('P', "defProj");
     }
   }

   # check RHEL setting
   # (note that this is currently predefined in global "sge_request"!)
   if (exists $params{l_hard}{rhel}) {
     $do_ignore = 1;
   }

   # proceed only if RHEL version has not been explicity specified
   if ($do_ignore == 0) {
     if ($os == 5) {
       # if submission host OS is RHEL5:
#      if ($mmtoken_set == 1 || $incisive_set == 1) {
       if ($mmtoken_set == 1) {
         # specify execution host as RHEL5 or RHEL6 for analog simulations
         jsv_sub_add_param('l_hard','rhel',$rhel5or6);
         jsv_correct('Job was corrected - setting RHEL to 5|6 (analog 
simulation)');
       } else {
         # specify execution host as RHEL5 for all other jobs
         jsv_sub_add_param('l_hard','rhel',$rhel5);
         jsv_correct('Job was corrected - setting RHEL to 5');
       }
     } elsif ($os == 6) {
       # if submission host OS is RHEL6, specify execution host as RHEL5 or 
RHEL6
       jsv_sub_add_param('l_hard','rhel',$rhel5or6);
       jsv_correct('Job was corrected - setting RHEL to 5|6');
     } elsif ($os == 4) {
       # if submission host OS is RHEL4, specify that as execution host OS 
requirement
       jsv_sub_add_param('l_hard','rhel',$rhel4);
       jsv_correct('Job was corrected - setting RHEL to 4 according to submit 
host OS');
     } else {
       # if submission host OS is neither RHEL4 nor RHEL5 nor RHEL6, reject job
       jsv_reject_wait('Job rejected - unknown OS version!')
     }
   } else {
     jsv_accept('Job was accepted as it is');
   }

});

jsv_main();

From: Manfred Selz
Sent: Montag, 13. Juni 2016 10:03
To: 'users@gridengine.org'
Subject: JSV stderr when running jsv_set_param with parameter 'P'

Hello everybody,

I am having a very odd issue with a JSV script on SGE 6.2u5.
Since a long time ago, I have been running a standard server JSV script to 
check and set a few parameters, one of them being the project (parameter P).
What the server JSV script does, is (amongst lots of other stuff) to run this:

jsv_sub_add_param('P', "defProj");

(if not project is set)

While this still works fine, whenever I copy this script and run it manually on 
client side like this:

qsub -jsv $SGE_ROOT/$SGE_CELL/common/jsv.perl -b y -N test1 sleep 10

I get this message:

error: JSV stderr: Can't use string ("defProj") as a HASH ref while "strict 
refs" in use at /cad/eda/sge/6.2u5/util/resources/jsv/JSV.pm line 327, <> line 
15.
Unable to run job: JSV stderr: Can't use string ("defProj") as a HASH ref while 
"strict refs" in use at /cad/eda/sge/6.2u5/util/resources/jsv/JSV.pm line 327, 
<> line 15.
JSV stderr is - Can't use string ("defProj") as a HASH ref while "strict refs" 
in use at /cad/eda/sge/6.2u5/util/resources/jsv/JSV.pm line 327, <> line 15..
Exiting.

(I have tried to use different project names, existing and non existing ones)

Until a few days ago, this has also been working on client side, and this is 
how I usually test my JSV scripts.
I have been trying to replace "jsv_sub_add_param" with "jsv_set_param" like 
this:

jsv_set_param('P','cadtest');

with no success (same error message). Setting other parameters works fine, such 
as:

     jsv_set_param('N','cadtest');

Any ideas?

Best regards,
Manfred Selz



________________________________

Dialog Semiconductor GmbH
Neue Str. 95
D-73230 Kirchheim
Managing Directors: Dr. Jalal Bagherli, Carsten Dahl
Chairman of the Supervisory Board: Rich Beyer
Commercial register: Amtsgericht Stuttgart: HRB 231181
UST-ID-Nr. DE 811121668

Legal Disclaimer: This e-mail communication (and any attachment/s) is 
confidential and contains proprietary information, some or all of which may be 
legally privileged. It is intended solely for the use of the individual or 
entity to which it is addressed. Access to this email by anyone else is 
unauthorized. If you are not the intended recipient, any disclosure, copying, 
distribution or any action taken or omitted to be taken in reliance on it, is 
prohibited and may be unlawful.

Please consider the environment before printing this e-mail


_______________________________________________
users mailing list
users@gridengine.org
https://gridengine.org/mailman/listinfo/users

Reply via email to