This file is indexed.

/usr/lib/oar/oarhold is in oar-user 2.5.2-4.1.

This file is owned by root:root, with mode 0o755.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#!/usr/bin/perl
# $Id$
#Hold a job --> it will not be scheduled

use strict;
use warnings;
use Data::Dumper;
use DBI();
use OAR::IO;
use OAR::Conf qw(init_conf dump_conf get_conf is_conf);
use OAR::Tools;
use Getopt::Long;
use OAR::Version;

my $Old_umask = sprintf("%lo",umask());
umask(oct("022"));

sub usage {
    print <<EOS;
Usage: $0 [--array][job_ids][--sql "sql syntax"][-r][-V][-h]
Ask OAR to not schedule job_id until oarresume command will be executed.
  -r, --running manage not only Waiting jobs but also Running one
                (can suspend the job)
      --array   hold array job(s) passed as parameter (all the sub-jobs)
      --sql     hold jobs which respond to the SQL where clause on the table
                jobs (ex: "project = 'p1'")
  -h, --help    show this help screen
  -V, --version print OAR version number
EOS
}

my $Help;
my $Version;
my $Suspend_running;
my $Sql_property;
my $array;
GetOptions ("help|h" => \$Help,
            "version|V" => \$Version,
            "array" => \$array,
            "sql=s"   => \$Sql_property,
            "running|r" => \$Suspend_running
           );

if (defined($Help)){
    usage();
    exit(0);
}

if (defined($Version)){
    print("OAR version : ".OAR::Version::get_version()."\n");
    exit(0);
}

init_conf($ENV{OARCONFFILE});
my $remote_host = get_conf("SERVER_HOSTNAME");
my $remote_port = get_conf("SERVER_PORT");

my $Cpuset_field = get_conf("JOB_RESOURCE_MANAGER_PROPERTY_DB_FIELD");

if ((@ARGV < 1) and (!defined($Sql_property))){
    usage();
    exit(1);
}

my @job_ids;
my $exit_code = 0;

foreach my $j (@ARGV){
    if ($j =~ m/^\d+$/m){
        #if defined --array, delete all the sub-jobs
        if(defined($array)){
             my $db = OAR::IO::connect_ro();
             my @tmp_jobs = OAR::IO::get_array_job_ids($db,$j);
            if(scalar @tmp_jobs == 0){
                warn("[ERROR] \"$j\" is not a valid array job\n");
                $exit_code = 2;
            }else{
                foreach my $j (@tmp_jobs){
                    push(@job_ids, $j);
                 }
            }
            OAR::IO::disconnect($db);
        }else{
            push(@job_ids, $j);
        }
    }else{
        if(defined($array)){
            warn("[ERROR] \"$j\" is not a valid job array identifier\n");
        }else{
            warn("[ERROR] \"$j\" is not a valid job identifier\n");
        }
        $exit_code = 2;
    }
}


if (defined($Sql_property)){
    my $db = OAR::IO::connect_ro();
    foreach my $j (OAR::IO::get_jobs_with_given_properties($db,$Sql_property)){
        push(@job_ids, $j->{job_id});
    }
    OAR::IO::disconnect($db);
}

my $base = OAR::IO::connect();
foreach my $j (@job_ids){
    my $err_job = 0;
    if (defined($Suspend_running)){
        my $types = OAR::IO::get_current_job_types($base,$j);
        if (!defined($Cpuset_field)){
            warn("CPUSET tag is not configured in the oar.conf.\n");
            $err_job = 2;
        }elsif (defined($types->{cosystem})){
            warn("This job is of the cosystem type. We cannot suspend this kind of jobs.\n");
            $err_job = 3;
        }elsif (defined($types->{deploy})){
            warn("This job is of the deploy type. We cannot suspend this kind of jobs.\n");
            $err_job = 4;
        }
    }
    if ($err_job == 0){
        my $err = OAR::IO::hold_job($base,$j,$Suspend_running);

        if ($err != 0) {
            my $str = "/!\\ Cannot hold $j :";
            if ($err == -1){
                warn("$str this job does not exist.\n");
            }elsif ($err == -2){
                warn("$str you are not the right user.\n");
            }elsif ($err == -3){
                warn("$str the job is not in the right state (try '-r' option).\n");
            }elsif ($err == -4){
                warn("$str only oar or root users can use '-r' option.\n");
            }else{
                warn("$str unknown reason.\n");
            }
            $exit_code = 1;
        }else{
            print("[$j] Hold request was sent to the OAR server.\n");
        }
    }else{
        $exit_code = 2;
    }
}

OAR::IO::disconnect($base);



#Signal Almigthy
OAR::Tools::notify_tcp_socket($remote_host,$remote_port,"ChState");

exit($exit_code);