Class: OodCore::Job::Adapter Abstract
- Inherits:
-
Object
- Object
- OodCore::Job::Adapter
- Defined in:
- lib/ood_core/job/adapter.rb
Overview
A class that handles the communication with a resource manager for submitting/statusing/holding/deleting jobs
Direct Known Subclasses
OodCore::Job::Adapters::CCQ, OodCore::Job::Adapters::Fujitsu_TCS, OodCore::Job::Adapters::Kubernetes, OodCore::Job::Adapters::LinuxHost, OodCore::Job::Adapters::LinuxSystemd, OodCore::Job::Adapters::Lsf, OodCore::Job::Adapters::PBSPro, OodCore::Job::Adapters::Sge, OodCore::Job::Adapters::Slurm, OodCore::Job::Adapters::Torque
Instance Method Summary collapse
-
#accounts ⇒ Array<AccountInfo>
Retrieve the accounts available to use for the current user.
-
#cluster_info ⇒ ClusterInfo
abstract
Retrieve the number of active and total cpus, nodes, and gpus.
-
#delete(id) ⇒ void
abstract
Delete the submitted job.
-
#directive_prefix ⇒ String
abstract
Return the scheduler-specific directive prefix.
-
#hold(id) ⇒ void
abstract
Put the submitted job on hold.
-
#info(id) ⇒ Info
abstract
Retrieve job info from the resource manager.
-
#info_all(attrs: nil) ⇒ Array<Info>
abstract
Retrieve info for all jobs from the resource manager.
-
#info_all_each(attrs: nil) {|Info| ... } ⇒ Enumerator
Iterate over each job Info object.
-
#info_where_owner(owner, attrs: nil) ⇒ Array<Info>
Retrieve info for all jobs for a given owner or owners from the resource manager.
-
#info_where_owner_each(owner, attrs: nil) {|Info| ... } ⇒ Enumerator
Iterate over each job Info object.
-
#job_name_illegal_chars ⇒ String
Illegal chars that should not be used in a job name A dash is assumed to be legal in job names in all batch schedulers.
-
#nodes ⇒ Array<NodeInfo>
Return the list of nodes for this scheduler.
-
#queues ⇒ Array<QueueInfo>
Return the list of queues for this scheduler.
-
#release(id) ⇒ void
abstract
Release the job that is on hold.
-
#sanitize_job_name(job_name) ⇒ String
Replace illegal chars in job name with a dash.
-
#status(id) ⇒ Status
abstract
Retrieve job status from resource manager.
-
#submit(script, after: [], afterok: [], afternotok: [], afterany: []) ⇒ String
abstract
Submit a job with the attributes defined in the job template instance.
-
#supports_job_arrays? ⇒ Boolean
Whether the adapter supports job arrays.
Instance Method Details
#accounts ⇒ Array<AccountInfo>
Retrieve the accounts available to use for the current user.
Subclasses that do not implement this will return empty arrays.
205 206 207 |
# File 'lib/ood_core/job/adapter.rb', line 205 def accounts [] end |
#cluster_info ⇒ ClusterInfo
Subclass is expected to implement #cluster_stats
Retrieve the number of active and total cpus, nodes, and gpus
41 42 43 |
# File 'lib/ood_core/job/adapter.rb', line 41 def cluster_info raise NotImplementedError, "subclass did not define #cluster_stats" end |
#delete(id) ⇒ void
Subclass is expected to implement #delete
This method returns an undefined value.
Delete the submitted job
166 167 168 |
# File 'lib/ood_core/job/adapter.rb', line 166 def delete(id) raise NotImplementedError, "subclass did not define #delete" end |
#directive_prefix ⇒ String
Subclass is expected to implement #directive_prefix
Return the scheduler-specific directive prefix
Examples of directive prefixes include #QSUB, #BSUB and allow placing what would otherwise be command line options inside the job launch script.
The method should return nil if the adapter does not support prefixes
180 181 182 |
# File 'lib/ood_core/job/adapter.rb', line 180 def directive_prefix raise NotImplementedError, "subclass did not define #directive_prefix" end |
#hold(id) ⇒ void
Subclass is expected to implement #hold
This method returns an undefined value.
Put the submitted job on hold
148 149 150 |
# File 'lib/ood_core/job/adapter.rb', line 148 def hold(id) raise NotImplementedError, "subclass did not define #hold" end |
#info(id) ⇒ Info
Subclass is expected to implement #info
Retrieve job info from the resource manager
129 130 131 |
# File 'lib/ood_core/job/adapter.rb', line 129 def info(id) raise NotImplementedError, "subclass did not define #info" end |
#info_all(attrs: nil) ⇒ Array<Info>
Subclass is expected to implement #info_all
Retrieve info for all jobs from the resource manager
56 57 58 |
# File 'lib/ood_core/job/adapter.rb', line 56 def info_all(attrs: nil) raise NotImplementedError, "subclass did not define #info_all" end |
#info_all_each(attrs: nil) {|Info| ... } ⇒ Enumerator
Iterate over each job Info object
90 91 92 93 94 95 96 |
# File 'lib/ood_core/job/adapter.rb', line 90 def info_all_each(attrs: nil) return to_enum(:info_all_each, attrs: attrs) unless block_given? info_all(attrs: attrs).each do |job| yield job end end |
#info_where_owner(owner, attrs: nil) ⇒ Array<Info>
Retrieve info for all jobs for a given owner or owners from the resource manager
71 72 73 74 75 76 77 78 |
# File 'lib/ood_core/job/adapter.rb', line 71 def info_where_owner(owner, attrs: nil) owner = Array.wrap(owner).map(&:to_s) # must at least have job_owner to filter by job_owner attrs = Array.wrap(attrs) | [:job_owner] unless attrs.nil? info_all(attrs: attrs).select { |info| owner.include? info.job_owner } end |
#info_where_owner_each(owner, attrs: nil) {|Info| ... } ⇒ Enumerator
Iterate over each job Info object
109 110 111 112 113 114 115 |
# File 'lib/ood_core/job/adapter.rb', line 109 def info_where_owner_each(owner, attrs: nil) return to_enum(:info_where_owner_each, owner, attrs: attrs) unless block_given? info_where_owner(owner, attrs: attrs).each do |job| yield job end end |
#job_name_illegal_chars ⇒ String
Illegal chars that should not be used in a job name A dash is assumed to be legal in job names in all batch schedulers
197 198 199 |
# File 'lib/ood_core/job/adapter.rb', line 197 def job_name_illegal_chars ENV["OOD_JOB_NAME_ILLEGAL_CHARS"].to_s end |
#nodes ⇒ Array<NodeInfo>
Return the list of nodes for this scheduler.
Subclasses that do not implement this will return empty arrays.
221 222 223 |
# File 'lib/ood_core/job/adapter.rb', line 221 def nodes [] end |
#queues ⇒ Array<QueueInfo>
Return the list of queues for this scheduler.
Subclasses that do not implement this will return empty arrays.
213 214 215 |
# File 'lib/ood_core/job/adapter.rb', line 213 def queues [] end |
#release(id) ⇒ void
Subclass is expected to implement #release
This method returns an undefined value.
Release the job that is on hold
157 158 159 |
# File 'lib/ood_core/job/adapter.rb', line 157 def release(id) raise NotImplementedError, "subclass did not define #release" end |
#sanitize_job_name(job_name) ⇒ String
Replace illegal chars in job name with a dash
187 188 189 190 191 |
# File 'lib/ood_core/job/adapter.rb', line 187 def sanitize_job_name(job_name) # escape ^ and omit - chars = job_name_illegal_chars.to_s.gsub("^", "\\^").gsub("-", "") job_name.tr(chars, "-") end |
#status(id) ⇒ Status
Subclass is expected to implement #status
Optimized slightly over retrieving complete job information from server
Retrieve job status from resource manager
139 140 141 |
# File 'lib/ood_core/job/adapter.rb', line 139 def status(id) raise NotImplementedError, "subclass did not define #status" end |
#submit(script, after: [], afterok: [], afternotok: [], afterany: []) ⇒ String
Subclass is expected to implement #submit
Submit a job with the attributes defined in the job template instance
32 33 34 |
# File 'lib/ood_core/job/adapter.rb', line 32 def submit(script, after: [], afterok: [], afternotok: [], afterany: []) raise NotImplementedError, "subclass did not define #submit" end |
#supports_job_arrays? ⇒ Boolean
Whether the adapter supports job arrays
120 121 122 |
# File 'lib/ood_core/job/adapter.rb', line 120 def supports_job_arrays? true end |