rbbt-util 5.23.31 → 5.23.32

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
  SHA1:
3
- metadata.gz: 109bb2daf8846d12be60271835c62b41d57000ef
4
- data.tar.gz: 73fc3ca6821a320f3b8e6ff8e557aa3265183383
3
+ metadata.gz: b174e2fa2cbfa2a1548380710082c35a98e5d58e
4
+ data.tar.gz: 74066e9c626e51bd9c625ed741cff14a177a9ea2
5
5
  SHA512:
6
- metadata.gz: 0dddc6c05a96c78ea6fdb696e5a46c3ce4e29a02867c2a58f7d8751f34da99cfc40051ad3564bcf5d910929c9b61ae9dd3f65a13d14020793cc049d97e39f8b0
7
- data.tar.gz: 71c62ea2ef84428217180c01ea7b5b8c4207e3475cfad5f6deefee636c332cb82e05aa02c85de7ec496b8d179feedd634c9bf55fb61bfbf656527f7e7f7515a8
6
+ metadata.gz: 0f5757b41d2605ff9da15ec39716ab47170675380a9f83e7ed729d50e93f29d74af3f49d6b6dd25a8376922b993216aed0d3db1802339ee793560e21dcde7ee5
7
+ data.tar.gz: 80e8eab073f7704254b0358381bca50f0d2694b23e9af7e550ed3b75f511702e3a1a36a23f71bb27d2e84b6373379993bdbd8dd00ef40ab34ed95ce5a1fd46d8
@@ -129,7 +129,7 @@ module Path
129
129
  @path ||= {}
130
130
  rsearch_paths = (resource and resource.respond_to?(:search_paths)) ? resource.search_paths : nil
131
131
  key_elems = [where, caller_lib, rsearch_paths, paths]
132
- key = Misc.obj2digest(key_elems)
132
+ key = Misc.obj2digest(key_elems.inspect)
133
133
  self.sub!('~/', Etc.getpwuid.dir + '/') if self.include? "~"
134
134
 
135
135
  return @path[key] if @path[key]
data/lib/rbbt/util/log.rb CHANGED
@@ -272,6 +272,31 @@ module Log
272
272
  end
273
273
  end
274
274
 
275
+ def self.count_stack
276
+ if ! $count_stacks
277
+ Log.debug "Counting stacks at: " << caller.first
278
+ return
279
+ end
280
+ $stack_counts ||= {}
281
+ head = $count_stacks_head
282
+ stack = caller[1..head+1]
283
+ stack.reverse.each do |line,i|
284
+ $stack_counts[line] ||= 0
285
+ $stack_counts[line] += 1
286
+ end
287
+ end
288
+
289
+ def self.with_stack_counts(head = 10, total = 100)
290
+ $count_stacks_head = head
291
+ $count_stacks = true
292
+ $stack_counts = {}
293
+ res = yield
294
+ $count_stacks = false
295
+ Log.debug "STACK_COUNTS:\n" + $stack_counts.sort_by{|line,c| c}.reverse.collect{|line,c| [c, line] * " - "}[0..total] * "\n"
296
+ $stack_counts = {}
297
+ res
298
+ end
299
+
275
300
  case ENV['RBBT_LOG']
276
301
  when 'DEBUG'
277
302
  self.severity = DEBUG
data/lib/rbbt/workflow.rb CHANGED
@@ -9,6 +9,7 @@ require 'rbbt/workflow/archive'
9
9
  module Workflow
10
10
 
11
11
  STEP_CACHE = {}
12
+ LOAD_STEP_CACHE = {}
12
13
 
13
14
  class TaskNotFoundException < Exception
14
15
  def initialize(workflow, task = nil)
@@ -192,6 +193,7 @@ module Workflow
192
193
  attr_accessor :task_dependencies, :task_description, :last_task
193
194
  attr_accessor :stream_exports, :asynchronous_exports, :synchronous_exports, :exec_exports
194
195
  attr_accessor :step_cache
196
+ attr_accessor :load_step_cache
195
197
  attr_accessor :remote_tasks
196
198
 
197
199
  #{{{ ATTR DEFAULTS
@@ -230,6 +232,11 @@ module Workflow
230
232
  @step_cache ||= Workflow::STEP_CACHE
231
233
  end
232
234
 
235
+ def self.load_step_cache
236
+ @load_step_cache ||= Workflow::LOAD_STEP_CACHE
237
+ end
238
+
239
+
233
240
  def helpers
234
241
  @helpers ||= {}
235
242
  end
@@ -396,7 +403,11 @@ module Workflow
396
403
  Misc.insist do
397
404
  step.dependencies = step.info[:dependencies].collect do |task, job, path|
398
405
  next if job.nil?
399
- load_step(path)
406
+ if Open.exists?(path)
407
+ load_step(path)
408
+ else
409
+ Workflow.load_step(path)
410
+ end
400
411
  end
401
412
  end
402
413
  end
@@ -420,21 +431,6 @@ module Workflow
420
431
  step.inputs ||= input_values
421
432
  step.dependencies = dependencies if dependencies and (step.dependencies.nil? or step.dependencies.length < dependencies.length)
422
433
 
423
-
424
- step
425
- end
426
-
427
- def load_id(id)
428
- path = if Path === workdir
429
- workdir[id].find
430
- else
431
- File.join(workdir, id)
432
- end
433
- task = task_for path
434
- return remote_tasks[task].load_id(id) if remote_tasks and remote_tasks.include? task
435
- step = Step.new path, tasks[task.to_sym]
436
- step.load_inputs_from_info
437
- set_step_dependencies(step)
438
434
  step
439
435
  end
440
436
 
@@ -467,6 +463,21 @@ module Workflow
467
463
  File.join(sr - sl + so)
468
464
  end
469
465
 
466
+ def self.relocate_array(real, list)
467
+ preal = real.split(/\/+/)
468
+ prefix = preal[0..-4] * "/"
469
+ list.collect do |other|
470
+ pother = other.split(/\/+/)
471
+ end_part = pother[-3..-1] * "/"
472
+ new_path = prefix + "/" << end_part
473
+ if File.exists? new_path
474
+ new_path
475
+ else
476
+ Rbbt.var.jobs[end_part].find
477
+ end
478
+ end
479
+ end
480
+
470
481
  def self.relocate(real, other)
471
482
  preal = real.split(/\/+/)
472
483
  pother = other.split(/\/+/)
@@ -476,7 +487,8 @@ module Workflow
476
487
  Rbbt.var.jobs[end_part].find
477
488
  end
478
489
 
479
- def self.load_step(path)
490
+
491
+ def self.__load_step(path)
480
492
  step = Step.new path
481
493
  relocated = false
482
494
  step.dependencies = (step.info[:dependencies] || []).collect do |task,name,dep_path|
@@ -485,14 +497,45 @@ module Workflow
485
497
  else
486
498
  new_path = relocate(path, dep_path)
487
499
  relocated = true if Open.exists?(new_path)
488
- Workflow.load_step new_path
500
+ Workflow._load_step new_path
489
501
  end
490
502
  end
491
503
  step.relocated = relocated
504
+ step.load_inputs_from_info
492
505
 
493
506
  step
494
507
  end
495
508
 
509
+ def self._load_step(path)
510
+ Persist.memory("STEP", :path => path, :repo => load_step_cache) do
511
+ __load_step(path)
512
+ end
513
+ end
514
+
515
+ def self.load_step(path)
516
+ begin
517
+ _load_step(path)
518
+ ensure
519
+ load_step_cache.clear
520
+ end
521
+ end
522
+
523
+ def load_id(id)
524
+ path = if Path === workdir
525
+ workdir[id].find
526
+ else
527
+ File.join(workdir, id)
528
+ end
529
+ task = task_for path
530
+ return remote_tasks[task].load_id(id) if remote_tasks and remote_tasks.include? task
531
+ return Workflow.load_step path
532
+ #step = Step.new path, tasks[task.to_sym]
533
+ #step.load_inputs_from_info
534
+ #set_step_dependencies(step)
535
+ #step
536
+ end
537
+
538
+
496
539
  def load_name(task, name)
497
540
  return remote_tasks[task].load_step(path) if remote_tasks and remote_tasks.include? task
498
541
  task = tasks[task.to_sym] if String === task or Symbol === task
@@ -652,8 +652,9 @@ module Workflow
652
652
  name = name.to_sym
653
653
  task = tasks[name]
654
654
  raise "No '#{name}' task in '#{self.to_s}' Workflow" if task.nil?
655
- @@task_info ||= {}
656
- @@task_info[name] ||= begin description = task.description
655
+ id = File.join(self.to_s, name.to_s)
656
+ @task_info ||= {}
657
+ @task_info[id] ||= begin description = task.description
657
658
  result_description = task.result_description
658
659
  result_type = task.result_type
659
660
  inputs = rec_inputs(name).uniq
@@ -675,9 +676,8 @@ module Workflow
675
676
  :none
676
677
  end
677
678
 
678
-
679
679
  dependencies = task_dependencies[name].select{|dep| String === dep or Symbol === dep}
680
- { :id => File.join(self.to_s, name.to_s),
680
+ info = { :id => id,
681
681
  :description => description,
682
682
  :export => export,
683
683
  :inputs => inputs,
@@ -98,13 +98,20 @@ class Step
98
98
  else
99
99
  i = {}
100
100
  end
101
- dependencies.each do |dep|
102
- di = dep.recursive_inputs
103
- next unless NamedArray === di
104
- di.fields.zip(di).each do |k,v|
105
- i[k] = v unless i.include? k
101
+ rec_dependencies.each do |dep|
102
+ next unless NamedArray === dep.inputs
103
+ dep.inputs.zip(dep.inputs.fields).each do |v,f|
104
+ next if i.include?(f)
105
+ i[f] = v
106
106
  end
107
107
  end
108
+ #dependencies.each do |dep|
109
+ # di = dep.recursive_inputs
110
+ # next unless NamedArray === di
111
+ # di.fields.zip(di).each do |k,v|
112
+ # i[k] = v unless i.include? k
113
+ # end
114
+ #end
108
115
  v = i.values
109
116
  NamedArray.setup v, i.keys
110
117
  v
@@ -302,25 +302,30 @@ class Step
302
302
  def canfail_paths
303
303
  return Set.new if done? && ! Open.exists?(info_file)
304
304
 
305
- if !relocated && info[:canfail]
306
- Set.new(info[:canfail])
307
- else
308
- canfail_paths = Set.new
309
- all_deps = dependencies
310
- all_deps.each do |dep|
311
- next if canfail_paths.include? dep.path
312
- canfail_paths += dep.canfail_paths
313
- next unless ComputeDependency === dep && dep.canfail?
314
- canfail_paths << dep.path
315
- canfail_paths += dep.rec_dependencies.collect{|d| d.path }
316
- end
317
- canfail_paths
318
- begin
319
- set_info :canfail, canfail_paths.to_a
320
- rescue Errno::EROFS
321
- end
322
- canfail_paths
323
- end
305
+ @canfail_paths ||= begin
306
+ if info[:canfail]
307
+ paths = info[:canfail].uniq
308
+ paths = Workflow.relocate_array self.path, paths if relocated
309
+ Set.new(paths)
310
+ else
311
+ canfail_paths = Set.new
312
+ all_deps = dependencies
313
+ all_deps.each do |dep|
314
+ next if canfail_paths.include? dep.path
315
+ canfail_paths += dep.canfail_paths
316
+ next unless ComputeDependency === dep && dep.canfail?
317
+ canfail_paths << dep.path
318
+ iii dep.path
319
+ canfail_paths += dep.rec_dependencies.collect{|d| d.path }
320
+ end
321
+ canfail_paths
322
+ begin
323
+ set_info :canfail, canfail_paths.to_a
324
+ rescue Errno::EROFS
325
+ end
326
+ canfail_paths
327
+ end
328
+ end
324
329
  end
325
330
 
326
331
  def run_dependencies
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.23.31
4
+ version: 5.23.32
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miguel Vazquez
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-11-22 00:00:00.000000000 Z
11
+ date: 2018-11-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake