rbbt-util 5.25.8 → 5.25.9

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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/rbbt/hpc.rb +44 -25
  3. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3a8edeae60507177567648ab41bb5566d8707a31
4
- data.tar.gz: 9e5188a78754f01da5c96eee01e0448bebb34a1c
3
+ metadata.gz: f1eb2767b3e3f8adcb67bfc0fbc05d79000130a9
4
+ data.tar.gz: d3314ccd8960e4780887978e9b8745a31276b9f1
5
5
  SHA512:
6
- metadata.gz: 593de7cb23b2afd5562bc72cf44efc6d3a9138da692009aa8d15e54996ea31f3dfb9ac75cf0412b0e861c8014be62ff0f2b8ffd6ce74b28c1caa46e0dff53d83
7
- data.tar.gz: dd4f867fa4e20a6a8eaf8e53d8cdd8a782f5181e2fb5863004c028f1a8ce8bcf82c2d67b5469e5f8d9c3a437417af4a053a05c80db85f55b0db61a44a58dbd84
6
+ metadata.gz: 465aefada76bce2c950aa535098ef03652a2793fe7030c1532557f72d9cd0d856479511247339152ef8e8a2084abe0436662a9e8ba6fc9ba1bf8833fa50f3e50
7
+ data.tar.gz: 84827530eee0ed691bfadfd1e137f801921f96c071b7ef016a9542896190e3ba6ad0f24603188fd81eba4f8e070364ebde39f7f27f2b9aa20feb5742ef97c0c3
@@ -16,6 +16,7 @@ module Marenostrum
16
16
  copy_image = options.delete :copy_image
17
17
  exclusive = options.delete :exclusive
18
18
  highmem = options.delete :highmem
19
+ inputs_dir = options.delete :inputs_dir
19
20
 
20
21
  if contain_and_sync
21
22
  contain = "/scratch/tmp/rbbt" if contain.nil?
@@ -101,19 +102,35 @@ mkdir -p "$SINGULARITY_RUBY_INLINE"
101
102
 
102
103
  if contain
103
104
  env +=<<-EOF
105
+
106
+ # Prepare container dir
104
107
  CONTAINER_DIR="#{contain}"
105
108
  mkdir -p $CONTAINER_DIR/.rbbt/etc/
106
109
  for tmpd in persist_locks produce_locks R_sockets sensiblewrite sensiblewrite_locks step_info_locks tsv_open_locks; do
107
110
  mkdir -p $CONTAINER_DIR/.rbbt/tmp/$tmpd
108
111
  done
112
+
113
+ # Copy environment
109
114
  cp ~/.rbbt/etc/environment $CONTAINER_DIR/.rbbt/etc/
115
+
116
+ # Set search_paths
110
117
  echo "rbbt_user: /home/rbbt/.rbbt/{TOPLEVEL}/{SUBPATH}" > $CONTAINER_DIR/.rbbt/etc/search_paths
111
118
  echo "home: $CONTAINER_DIR/home/{TOPLEVEL}/{SUBPATH}" >> $CONTAINER_DIR/.rbbt/etc/search_paths
112
119
  echo "group_projects: $CONTAINER_DIR/projects/{PKGDIR}/{TOPLEVEL}/{SUBPATH}" >> $CONTAINER_DIR/.rbbt/etc/search_paths
113
120
  echo "group_scratch: $CONTAINER_DIR/scratch/{PKGDIR}/{TOPLEVEL}/{SUBPATH}" >> $CONTAINER_DIR/.rbbt/etc/search_paths
114
121
  echo "user_projects: $CONTAINER_DIR/projects/#{ENV['USER']}/{PKGDIR}/{TOPLEVEL}/{SUBPATH}" >> $CONTAINER_DIR/.rbbt/etc/search_paths
115
122
  echo "user_scratch: $CONTAINER_DIR/scratch/#{ENV['USER']}/{PKGDIR}/{TOPLEVEL}/{SUBPATH}" >> $CONTAINER_DIR/.rbbt/etc/search_paths
123
+ echo "/scratch/tmp/rbbt/projects/rbbt/workflows/" > $CONTAINER_DIR/.rbbt/etc/workflow_dir
116
124
  EOF
125
+
126
+ if inputs_dir
127
+ env +=<<-EOF
128
+
129
+ # Copy inputs
130
+ cp -R '#{inputs_dir}' $CONTAINER_DIR/inputs
131
+ EOF
132
+ rbbt_cmd = rbbt_cmd.sub(inputs_dir, "#{contain}/inputs")
133
+ end
117
134
 
118
135
  if copy_image
119
136
  env +=<<EOF
@@ -162,7 +179,7 @@ EOF
162
179
  #{cmd}
163
180
 
164
181
  # Save exit status
165
- echo $? > #{fexit}
182
+ exit_status=$?
166
183
 
167
184
  # Clean job.id, since we are done
168
185
  rm #{fjob}
@@ -195,6 +212,12 @@ unset sync_es
195
212
  EOF
196
213
  end
197
214
  end
215
+ coda +=<<-EOF
216
+
217
+ # Write exit status to file
218
+ echo $exit_status > #{fexit}
219
+ unset exit_status
220
+ EOF
198
221
 
199
222
  template = [header, env, run, coda] * "\n"
200
223
 
@@ -281,7 +304,7 @@ EOF
281
304
  STDERR.puts Log.color(:magenta, "Output:")
282
305
  begin
283
306
  CMD.cmd("squeue --job #{job} > #{fstatus}")
284
- out = CMD.cmd("tail -f '#{fout}'", :pipe => true) if File.exists? fout
307
+ out = CMD.cmd("tail -f '#{fout}'", :pipe => true) if File.exists?(fout) and not tail == :STDERR
285
308
  err = CMD.cmd("tail -f '#{ferr}'", :pipe => true) if File.exists? ferr
286
309
 
287
310
  Misc.consume_stream(err, true, STDERR) if err
@@ -309,27 +332,8 @@ EOF
309
332
  fjob = File.join(workdir, 'job.id')
310
333
  job = Open.read(fjob) if Open.exists?(fjob)
311
334
 
312
- status_txt = CMD.cmd("squeue --job #{job}").read
313
- STDERR.puts Log.color(:magenta, "Status [#{job.to_i}]:")
314
- STDERR.puts status_txt
315
- lines = status_txt.split("\n").length
316
335
 
317
336
  while ! Open.exists?(fexit)
318
- STDERR.puts
319
- Log.clear_line(STDERR)
320
- STDERR.write Log.color(:magenta, "Waiting for end")
321
- 3.times do
322
- STDERR.write Log.color(:magenta, ".")
323
- sleep 1
324
- end
325
- status_txt = CMD.cmd("squeue --job #{job}").read
326
- lines.times do
327
- Log.clear_line(STDERR)
328
- end
329
- Log.clear_line(STDERR)
330
- STDERR.puts Log.color(:magenta, "Status [#{job.to_i}]:")
331
- STDERR.puts status_txt
332
- lines = status_txt.split("\n").length
333
337
  sleep time
334
338
  end
335
339
  end
@@ -338,18 +342,33 @@ EOF
338
342
  workflow = job.workflow
339
343
  task = job.task_name
340
344
  name = job.clean_name
341
- TmpFile.with_file(nil, false) do |tmp_directory|
345
+ keep_workdir = options.delete :keep_SLURM_workdir
346
+ TmpFile.with_file(nil, !keep_workdir) do |tmp_directory|
342
347
  workdir = options[:workdir] ||= File.join(tmp_directory, 'workdir')
343
348
  inputs_dir = File.join(tmp_directory, 'inputs_dir')
344
349
  Step.save_job_inputs(job, inputs_dir)
350
+ options[:inputs_dir] = inputs_dir
345
351
  cmd = ['workflow', 'task', workflow.to_s, task.to_s, '-pf', '-jn', name, '--load_inputs', inputs_dir, '--log', (options[:log] || Log.severity).to_s]
352
+
353
+ %w(workflows requires remote_workflow_tasks override_deps).each do |key|
354
+ next unless options[key]
355
+ cmd += ["--#{key.to_s}", options[key]]
356
+ end
357
+
346
358
  template = self.template(cmd, options)
347
359
  self.issue_template(template, options)
360
+ t_monitor = Thread.new do
361
+ self.follow_job(workdir, :STDERR)
362
+ end
348
363
  self.wait_for_job(workdir)
349
- path = Open.read(File.join(workdir, 'std.out'))
350
- if job.path != path
351
- Log.medium "Path of SLURM job #{path} is different from original job #{job.path}. Stablishing link."
364
+ t_monitor.raise Aborted
365
+ return unless Open.read(File.join(workdir, 'exit.status')).strip == '0'
366
+ path = Open.read(File.join(workdir, 'std.out')).strip
367
+ if Open.exists?(path) && job.path != path
368
+ Log.info "Path of SLURM job #{path} is different from original job #{job.path}. Stablishing link."
352
369
  Open.ln path, job.path
370
+ Open.ln path + '.info', job.path + '.info' if Open.exists?(path + '.info')
371
+ Open.ln path + '.files', job.path + '.files' if Open.exists?(path + '.files')
353
372
  end
354
373
  end
355
374
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbbt-util
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.25.8
4
+ version: 5.25.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miguel Vazquez