rbbt-util 5.33.19 → 5.34.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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