rbbt-util 5.23.31 → 5.23.32

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
  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