rbbt-util 5.33.18 → 5.33.21

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 972b137af2c124d5288389d49e188d3973246a912c0405c391cdb6b8a5987cae
4
- data.tar.gz: 4744dc8f03a8230ad8d5f61f1d15f14c4e5635d5e3798be584083217269b88a5
3
+ metadata.gz: 563841b942e1b0cf4a97bed6900bd51c96df63ec993d3a5280faadbf7b8eb753
4
+ data.tar.gz: c2cd78f5dfe5061f97021fd2121dd415d7b6c36c1fef2fc9f496c2cc985e4c4d
5
5
  SHA512:
6
- metadata.gz: 34f7cbdd329d23341cc6591bfe19f584a4c50862c8fae6c2ccd8d72bcd76fbb129acbaa3bbb03e08eb633aa475d5d0eacb1a015e667db169ebf1f09e588ab579
7
- data.tar.gz: 8110363114c606214d115ffb6475ce277dc3f605c1e8eafd97911a53cc259386ed6173d45cca4a5692b8e4ca0a89db71a77b6fb5eca69400b565b820a83a8d56
6
+ metadata.gz: 6382e73cdb35ff7ab7dcd3de894a192353c39edef06ddaeb030ec376089b638acb0f62f468153433dfb0e3b0242a44146bfaeb1770ef35ee7175200caeea5e12
7
+ data.tar.gz: '08b8ce8d556f25269c671b6307972669927b468975c77d188b572e2285627968989a2db68de7fa2983908cb7d4cf3a236f0908a78d3917ea46ad84f82c60f536'
@@ -555,7 +555,7 @@ env > #{batch_options[:fenv]}
555
555
 
556
556
  batch_job = run_template(batch_dir, dry_run)
557
557
 
558
- return batch_job unless tail
558
+ return [batch_job, batch_dir] unless tail
559
559
 
560
560
  t_monitor = Thread.new do
561
561
  self.follow_job(batch_dir, :STDERR)
@@ -570,8 +570,8 @@ env > #{batch_options[:fenv]}
570
570
  Open.ln path + '.info', job.path + '.info' if Open.exists?(path + '.info')
571
571
  Open.ln path + '.files', job.path + '.files' if Open.exists?(path + '.files')
572
572
  end
573
- batch_job
574
-
573
+
574
+ [batch_job, batch_dir]
575
575
  end
576
576
  end
577
577
 
@@ -49,6 +49,8 @@ module HPC
49
49
  Log.high "Compute #{batches.length} batches"
50
50
 
51
51
  batch_ids = {}
52
+ last_id = nil
53
+ last_dir = nil
52
54
  while batches.any?
53
55
  top = batches.select{|b| b[:deps].nil? || (b[:deps] - batch_ids.keys).empty? }.first
54
56
  raise "No batch without unmet dependencies" if top.nil?
@@ -87,10 +89,12 @@ module HPC
87
89
  puts Log.color(:yellow, "Options: ") + job_options.inspect
88
90
  batch_ids[top] = top[:top_level].task_signature
89
91
  else
90
- id = run_job(top[:top_level], job_options)
91
- batch_ids[top] = id
92
+ id, dir = run_job(top[:top_level], job_options)
93
+ last_id = batch_ids[top] = id
94
+ last_dir = dir
92
95
  end
93
96
  end
97
+ [last_id, last_dir]
94
98
  end
95
99
 
96
100
  end
@@ -92,7 +92,6 @@ module Misc
92
92
  ConcurrentStream.setup sout, :pids => [pid]
93
93
  else
94
94
 
95
-
96
95
  ConcurrentStream.setup sin, :pair => sout
97
96
  ConcurrentStream.setup sout, :pair => sin
98
97
 
@@ -782,4 +781,13 @@ module Misc
782
781
  ConcurrentStream.setup out, :threads => monitor_thread
783
782
  end
784
783
 
784
+ def self.open_gz_pipe
785
+ sout = Misc.open_pipe do |sin|
786
+ yield sin
787
+ sin.close
788
+ end
789
+
790
+ Open.gzip(sout)
791
+ end
792
+
785
793
  end
@@ -94,10 +94,10 @@ module Misc
94
94
  end
95
95
 
96
96
  def self.is_filename?(string, need_to_exists = true)
97
- return false if string.nil? or string.include? "\n"
97
+ return false if string.nil?
98
98
  return true if defined? Path and Path === string
99
99
  return true if string.respond_to? :exists
100
- return true if String === string and string.split("/").select{|p| p.length > 265}.empty? and (! need_to_exists || File.exist?(string))
100
+ return true if String === string and ! string.include?("\n") and string.split("/").select{|p| p.length > 265}.empty? and (! need_to_exists || File.exist?(string))
101
101
  return false
102
102
  end
103
103
 
@@ -748,6 +748,7 @@ module Open
748
748
  raise $!
749
749
  end
750
750
  content.close
751
+ content.join if content.respond_to? :join
751
752
  end
752
753
  end
753
754
 
@@ -100,11 +100,13 @@ class Step
100
100
  step.dependencies.each do |dep|
101
101
  if dep.input_dependencies.any?
102
102
  dep.input_dependencies.each do |id|
103
- input_name = dep.recursive_inputs.fields.zip(dep.recursive_inputs).select{|f,d|
103
+ input_name, _dep = dep.recursive_inputs.fields.zip(dep.recursive_inputs).select{|f,d|
104
104
  d == id || (String === d && d.start_with?(id.files_dir)) || (Array === d && d.include?(id))
105
- }.last.first
106
- input_dependencies[id] ||= []
107
- input_dependencies[id] << [dep, input_name]
105
+ }.last
106
+ if input_name
107
+ input_dependencies[id] ||= []
108
+ input_dependencies[id] << [dep, input_name]
109
+ end
108
110
  end
109
111
  end
110
112
  end
data/lib/rbbt/workflow.rb CHANGED
@@ -414,7 +414,7 @@ module Workflow
414
414
  end if task.required_inputs
415
415
 
416
416
  if missing_inputs.length == 1
417
- raise ParameterException, "Input #{missing_inputs.first} is required but was not provided or is nil"
417
+ raise ParameterException, "Input '#{missing_inputs.first}' is required but was not provided or is nil"
418
418
  end
419
419
 
420
420
  if missing_inputs.length > 1
@@ -193,7 +193,11 @@ workdir.glob("**/command.batch").sort_by{|f| File.mtime(f)}.each do |fcmd|
193
193
  if different_system
194
194
  status = exit_status ? (exit_status == 0 ? Log.color(:green, "Done") : Log.color(:red, "Error")) + " (#{ id })" : Log.color(:green, id)
195
195
  else
196
- status = exit_status ? (exit_status == 0 ? Log.color(:green, "Done") : Log.color(:red, "Error")) + " (#{ id })" : (running_jobs.include?(id) || $norunningjobs ? Log.color(:green, id) : Log.color(:red, id) )
196
+ #status = exit_status ? (exit_status == 0 ? Log.color(:green, "Done") : Log.color(:red, "Error")) + " (#{ id })" : (running_jobs.include?(id) || $norunningjobs ? Log.color(:green, id) : Log.color(:red, id) )
197
+ status = exit_status ? (exit_status == 0 ? Log.color(:green, "Done") : Log.color(:red, "Error")) + " (#{ id })" :
198
+ (running_jobs.include?(id) || $norunningjobs ?
199
+ (is_running ? Log.color(:green, id) : Log.color(:yellow, id) ) :
200
+ Log.color(:red, id) )
197
201
  end
198
202
  prog_rep = []
199
203
  if options[:progress]
@@ -204,7 +208,7 @@ workdir.glob("**/command.batch").sort_by{|f| File.mtime(f)}.each do |fcmd|
204
208
  step = Step.new step_path
205
209
  step.load_dependencies_from_info
206
210
  has_bar = false
207
- (step.rec_dependencies + [step]).reverse.each do |j|
211
+ [step].reverse.each do |j|
208
212
  next if j.done?
209
213
  if j.file(:progress).exists?
210
214
  bar = Log::ProgressBar.new
@@ -352,5 +356,5 @@ workdir.glob("**/command.batch").sort_by{|f| File.mtime(f)}.each do |fcmd|
352
356
  end
353
357
 
354
358
  puts
355
- puts "Found #{count} jobs"
359
+ puts Log.color :clear, "Found #{count} jobs"
356
360
 
@@ -49,17 +49,27 @@ HPC::BATCH_MODULE = HPC.batch_system batch_system
49
49
  raise ParameterException.new("Could not detect batch_system: #{Misc.fingerprint batch_system}") if HPC::BATCH_MODULE.nil?
50
50
 
51
51
  class Step
52
- def run(*args)
53
- if done?
54
- self.load
52
+ def join
53
+ HPC::BATCH_MODULE.wait_for_job(@batch_job_dir)
54
+ end
55
+
56
+ def run(no_load = true)
57
+ if done?
58
+ self.load
59
+ else
60
+ begin
61
+ Log.debug "Issuing SLURM job for #{self.path}"
62
+ @batch_job_id, @batch_job_dir = HPC::BATCH_MODULE.orchestrate_job(self, SOPT::GOT_OPTIONS.merge($slurm_options))
63
+ if no_load
64
+ self
55
65
  else
56
- begin
57
- Log.debug "Issuing SLURM job for #{self.path}"
58
- HPC::BATCH_MODULE.orchestrate_job(self, SOPT::GOT_OPTIONS.merge($slurm_options))
59
- rescue HPC::SBATCH
60
- end
66
+ join
67
+ self.load
61
68
  end
69
+ rescue HPC::SBATCH
70
+ end
62
71
  end
72
+ end
63
73
  end
64
74
 
65
75
  ARGV.concat ['--detach']
@@ -47,17 +47,18 @@ HPC::BATCH_MODULE = HPC.batch_system batch_system
47
47
  raise ParameterException.new("Could not detect batch_system: #{Misc.fingerprint batch_system}") if HPC::BATCH_MODULE.nil?
48
48
 
49
49
  class Step
50
- def run(*args)
51
- if done?
52
- self.load
53
- else
54
- begin
55
- Log.debug "Issuing SLURM job for #{self.path}"
56
- HPC::BATCH_MODULE.run_job(self, SOPT::GOT_OPTIONS.merge($slurm_options))
57
- rescue HPC::SBATCH
58
- end
59
- end
50
+
51
+ def run(*args)
52
+ if done?
53
+ self.load
54
+ else
55
+ begin
56
+ Log.debug "Issuing SLURM job for #{self.path}"
57
+ HPC::BATCH_MODULE.run_job(self, SOPT::GOT_OPTIONS.merge($slurm_options))
58
+ rescue HPC::SBATCH
59
+ end
60
60
  end
61
+ end
61
62
  end
62
63
 
63
64
  ARGV.concat ["-W", $slurm_options[:workflows]] if $slurm_options[:workflows]
@@ -193,7 +193,11 @@ workdir.glob("**/command.batch").sort_by{|f| File.mtime(f)}.each do |fcmd|
193
193
  if different_system
194
194
  status = exit_status ? (exit_status == 0 ? Log.color(:green, "Done") : Log.color(:red, "Error")) + " (#{ id })" : Log.color(:green, id)
195
195
  else
196
- status = exit_status ? (exit_status == 0 ? Log.color(:green, "Done") : Log.color(:red, "Error")) + " (#{ id })" : (running_jobs.include?(id) || $norunningjobs ? Log.color(:green, id) : Log.color(:red, id) )
196
+ #status = exit_status ? (exit_status == 0 ? Log.color(:green, "Done") : Log.color(:red, "Error")) + " (#{ id })" : (running_jobs.include?(id) || $norunningjobs ? Log.color(:green, id) : Log.color(:red, id) )
197
+ status = exit_status ? (exit_status == 0 ? Log.color(:green, "Done") : Log.color(:red, "Error")) + " (#{ id })" :
198
+ (running_jobs.include?(id) || $norunningjobs ?
199
+ (is_running ? Log.color(:green, id) : Log.color(:yellow, id) ) :
200
+ Log.color(:red, id) )
197
201
  end
198
202
  prog_rep = []
199
203
  if options[:progress]
@@ -204,7 +208,7 @@ workdir.glob("**/command.batch").sort_by{|f| File.mtime(f)}.each do |fcmd|
204
208
  step = Step.new step_path
205
209
  step.load_dependencies_from_info
206
210
  has_bar = false
207
- (step.rec_dependencies + [step]).reverse.each do |j|
211
+ [step].reverse.each do |j|
208
212
  next if j.done?
209
213
  if j.file(:progress).exists?
210
214
  bar = Log::ProgressBar.new
@@ -352,5 +356,5 @@ workdir.glob("**/command.batch").sort_by{|f| File.mtime(f)}.each do |fcmd|
352
356
  end
353
357
 
354
358
  puts
355
- puts "Found #{count} jobs"
359
+ puts Log.color :clear, "Found #{count} jobs"
356
360
 
@@ -49,17 +49,27 @@ HPC::BATCH_MODULE = HPC.batch_system batch_system
49
49
  raise ParameterException.new("Could not detect batch_system: #{Misc.fingerprint batch_system}") if HPC::BATCH_MODULE.nil?
50
50
 
51
51
  class Step
52
- def run(*args)
53
- if done?
54
- self.load
52
+ def join
53
+ HPC::BATCH_MODULE.wait_for_job(@batch_job_dir)
54
+ end
55
+
56
+ def run(no_load = true)
57
+ if done?
58
+ self.load
59
+ else
60
+ begin
61
+ Log.debug "Issuing SLURM job for #{self.path}"
62
+ @batch_job_id, @batch_job_dir = HPC::BATCH_MODULE.orchestrate_job(self, SOPT::GOT_OPTIONS.merge($slurm_options))
63
+ if no_load
64
+ self
55
65
  else
56
- begin
57
- Log.debug "Issuing SLURM job for #{self.path}"
58
- HPC::BATCH_MODULE.orchestrate_job(self, SOPT::GOT_OPTIONS.merge($slurm_options))
59
- rescue HPC::SBATCH
60
- end
66
+ join
67
+ self.load
61
68
  end
69
+ rescue HPC::SBATCH
70
+ end
62
71
  end
72
+ end
63
73
  end
64
74
 
65
75
  ARGV.concat ['--detach']
@@ -47,17 +47,18 @@ HPC::BATCH_MODULE = HPC.batch_system batch_system
47
47
  raise ParameterException.new("Could not detect batch_system: #{Misc.fingerprint batch_system}") if HPC::BATCH_MODULE.nil?
48
48
 
49
49
  class Step
50
- def run(*args)
51
- if done?
52
- self.load
53
- else
54
- begin
55
- Log.debug "Issuing SLURM job for #{self.path}"
56
- HPC::BATCH_MODULE.run_job(self, SOPT::GOT_OPTIONS.merge($slurm_options))
57
- rescue HPC::SBATCH
58
- end
59
- end
50
+
51
+ def run(*args)
52
+ if done?
53
+ self.load
54
+ else
55
+ begin
56
+ Log.debug "Issuing SLURM job for #{self.path}"
57
+ HPC::BATCH_MODULE.run_job(self, SOPT::GOT_OPTIONS.merge($slurm_options))
58
+ rescue HPC::SBATCH
59
+ end
60
60
  end
61
+ end
61
62
  end
62
63
 
63
64
  ARGV.concat ["-W", $slurm_options[:workflows]] if $slurm_options[:workflows]
@@ -193,7 +193,11 @@ workdir.glob("**/command.batch").sort_by{|f| File.mtime(f)}.each do |fcmd|
193
193
  if different_system
194
194
  status = exit_status ? (exit_status == 0 ? Log.color(:green, "Done") : Log.color(:red, "Error")) + " (#{ id })" : Log.color(:green, id)
195
195
  else
196
- status = exit_status ? (exit_status == 0 ? Log.color(:green, "Done") : Log.color(:red, "Error")) + " (#{ id })" : (running_jobs.include?(id) || $norunningjobs ? Log.color(:green, id) : Log.color(:red, id) )
196
+ #status = exit_status ? (exit_status == 0 ? Log.color(:green, "Done") : Log.color(:red, "Error")) + " (#{ id })" : (running_jobs.include?(id) || $norunningjobs ? Log.color(:green, id) : Log.color(:red, id) )
197
+ status = exit_status ? (exit_status == 0 ? Log.color(:green, "Done") : Log.color(:red, "Error")) + " (#{ id })" :
198
+ (running_jobs.include?(id) || $norunningjobs ?
199
+ (is_running ? Log.color(:green, id) : Log.color(:yellow, id) ) :
200
+ Log.color(:red, id) )
197
201
  end
198
202
  prog_rep = []
199
203
  if options[:progress]
@@ -204,7 +208,7 @@ workdir.glob("**/command.batch").sort_by{|f| File.mtime(f)}.each do |fcmd|
204
208
  step = Step.new step_path
205
209
  step.load_dependencies_from_info
206
210
  has_bar = false
207
- (step.rec_dependencies + [step]).reverse.each do |j|
211
+ [step].reverse.each do |j|
208
212
  next if j.done?
209
213
  if j.file(:progress).exists?
210
214
  bar = Log::ProgressBar.new
@@ -352,5 +356,5 @@ workdir.glob("**/command.batch").sort_by{|f| File.mtime(f)}.each do |fcmd|
352
356
  end
353
357
 
354
358
  puts
355
- puts "Found #{count} jobs"
359
+ puts Log.color :clear, "Found #{count} jobs"
356
360
 
@@ -49,17 +49,27 @@ HPC::BATCH_MODULE = HPC.batch_system batch_system
49
49
  raise ParameterException.new("Could not detect batch_system: #{Misc.fingerprint batch_system}") if HPC::BATCH_MODULE.nil?
50
50
 
51
51
  class Step
52
- def run(*args)
53
- if done?
54
- self.load
52
+ def join
53
+ HPC::BATCH_MODULE.wait_for_job(@batch_job_dir)
54
+ end
55
+
56
+ def run(no_load = true)
57
+ if done?
58
+ self.load
59
+ else
60
+ begin
61
+ Log.debug "Issuing SLURM job for #{self.path}"
62
+ @batch_job_id, @batch_job_dir = HPC::BATCH_MODULE.orchestrate_job(self, SOPT::GOT_OPTIONS.merge($slurm_options))
63
+ if no_load
64
+ self
55
65
  else
56
- begin
57
- Log.debug "Issuing SLURM job for #{self.path}"
58
- HPC::BATCH_MODULE.orchestrate_job(self, SOPT::GOT_OPTIONS.merge($slurm_options))
59
- rescue HPC::SBATCH
60
- end
66
+ join
67
+ self.load
61
68
  end
69
+ rescue HPC::SBATCH
70
+ end
62
71
  end
72
+ end
63
73
  end
64
74
 
65
75
  ARGV.concat ['--detach']
@@ -47,17 +47,18 @@ HPC::BATCH_MODULE = HPC.batch_system batch_system
47
47
  raise ParameterException.new("Could not detect batch_system: #{Misc.fingerprint batch_system}") if HPC::BATCH_MODULE.nil?
48
48
 
49
49
  class Step
50
- def run(*args)
51
- if done?
52
- self.load
53
- else
54
- begin
55
- Log.debug "Issuing SLURM job for #{self.path}"
56
- HPC::BATCH_MODULE.run_job(self, SOPT::GOT_OPTIONS.merge($slurm_options))
57
- rescue HPC::SBATCH
58
- end
59
- end
50
+
51
+ def run(*args)
52
+ if done?
53
+ self.load
54
+ else
55
+ begin
56
+ Log.debug "Issuing SLURM job for #{self.path}"
57
+ HPC::BATCH_MODULE.run_job(self, SOPT::GOT_OPTIONS.merge($slurm_options))
58
+ rescue HPC::SBATCH
59
+ end
60
60
  end
61
+ end
61
62
  end
62
63
 
63
64
  ARGV.concat ["-W", $slurm_options[:workflows]] if $slurm_options[:workflows]
@@ -469,7 +469,7 @@ begin
469
469
  end
470
470
 
471
471
  if options.delete(:printpath)
472
- job.join
472
+ job.join if job.running?
473
473
  raise job.messages.last if (job.error? || job.aborted?) && job.messages
474
474
  if Open.remote? job.path
475
475
  puts job.url + Log.color(:blue, "?_format=raw")
@@ -284,4 +284,41 @@ line4
284
284
  end
285
285
  end
286
286
  end
287
+
288
+ def test_gz_pipe
289
+ text =<<-EOF
290
+ line1
291
+ line2
292
+ line3
293
+ line4
294
+ EOF
295
+
296
+ TmpFile.with_file nil, :extension => 'txt.gz' do |file|
297
+ sout = Misc.open_gz_pipe do |sin|
298
+ text.split("\n").each do |line|
299
+ sin.puts line
300
+ end
301
+ end
302
+
303
+ Open.mkdir File.basename(file)
304
+ thr1 = Misc.consume_stream(sout, true, file)
305
+ thr1.join
306
+ assert Open.gzip?(file)
307
+ assert_equal text, Open.read(file)
308
+ end
309
+ end
310
+
311
+ def test_open_pipe_error
312
+ sout = Misc.open_pipe do |sin|
313
+ 10.times do |i|
314
+ sin.puts "line #{i}"
315
+ end
316
+ raise
317
+ end
318
+
319
+ TmpFile.with_file do |tmp|
320
+ #Misc.consume_stream(sout, false, tmp)
321
+ Open.write(tmp, sout)
322
+ end
323
+ end
287
324
  end
@@ -186,6 +186,6 @@ class TestOpen < Test::Unit::TestCase
186
186
  end
187
187
 
188
188
  end
189
-
189
+
190
190
  end
191
191
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbbt-util
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.33.18
4
+ version: 5.33.21
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miguel Vazquez
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-05-25 00:00:00.000000000 Z
11
+ date: 2022-06-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake