rbbt-util 5.33.19 → 5.34.0

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: 54df9c32ce443c2f2742391738139cc97d38cdfe343058149056ad942e35b4a0
4
- data.tar.gz: a603395d628ed6b4ca776c45b377b75bafb4e9d76d009d45636008017efd83b3
3
+ metadata.gz: d612eb753e090f1221cd4d3b2c17e13e0e87f4cea7bc76c920717ba8055cbe8b
4
+ data.tar.gz: 9bea5062d3d73982ef5a35526c39ca3208fae9b817233344045144cbd0619920
5
5
  SHA512:
6
- metadata.gz: 16cfe134071945ab0d8fd16060fc9633c8b7dbbf8189246b3736d24ced7803ff13f33b89071939c16bdff2828d8f588612ecfbb7d5481ea4f46c451be233368b
7
- data.tar.gz: 9142954e50c256485563b7147117c35c97e87d2c6aebf4fd28500f28369323b597ba0f7f07393d1c186116744af1200884c0bfa527afdf0c5dee8033b904daa8
6
+ metadata.gz: 2d1e5c3fe701bb42049ab34bbe74fddb3e9a0a29d292cc8c8fbfc93049b0004be5b449aa83939de8924f2cdf19a720c044ea7491aacc96037e1acd549bd1201f
7
+ data.tar.gz: 54abc57de1a43b04337d8f9ad27668af2d07db21dbac7ee925728d6058dee280624385ef5b40280c0ec2439b6d80ed350bc136c9bef15116ba56292532d5e210
@@ -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
@@ -56,7 +56,8 @@ module Misc
56
56
  ":" << obj.to_s
57
57
  when String
58
58
  if obj.length > 100
59
- "'" << obj.slice(0,30) << "<...#{obj.length}...>" << obj.slice(-10,30)<< "'"
59
+ digest = Misc.digest(obj)
60
+ "'" << obj.slice(0,30) << "<...#{obj.length} - #{digest[0..4]}...>" << obj.slice(-10,30)<< "'"
60
61
  else
61
62
  "'" << obj << "'"
62
63
  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
@@ -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.19
4
+ version: 5.34.0
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-26 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