rbbt-util 5.20.22 → 5.20.23

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: f2f08ffb6c3f5394b0349460d1c6bd9232bcaff2
4
+ data.tar.gz: 32688697499d69a24888527b903ebedebed94245
5
+ SHA512:
6
+ metadata.gz: 7edf42547f74103bf6df9abbb50f7371488adb0d4e4103e70983f791d0278b8cb4a8cfa8f46fcb12436705ac8ceffa5dd3a4454508fa5f06593f3a49f326ab7d
7
+ data.tar.gz: 31318b7facb960e7a0c6cd149afb3534674d424f9103afbf7b00452ec86a1c3e891a2bbf4c7da3303e20b14b229d4c07f85405757a3dc813beb024b9933888b2
data/lib/rbbt/persist.rb CHANGED
@@ -217,9 +217,14 @@ module Persist
217
217
  end
218
218
  end
219
219
  ConcurrentStream.setup(out, :threads => saver_thread, :filename => path)
220
+
220
221
  out.callback = callback
221
222
  out.abort_callback = abort_callback
222
223
  out.lockfile = stream.lockfile if stream.respond_to? :lockfile and stream.lockfile
224
+
225
+ stream.callback = callback
226
+ stream.abort_callback = abort_callback
227
+
223
228
  out
224
229
  end
225
230
 
@@ -239,8 +244,8 @@ module Persist
239
244
 
240
245
  # This is to avoid calling the callbacks twice, since they have been
241
246
  # moved to the new 'res' stream
242
- stream.callback = nil
243
- stream.abort_callback = nil
247
+ #stream.callback = nil
248
+ #stream.abort_callback = nil
244
249
 
245
250
  res = tee_stream(stream, path, type, callback, abort_callback, lockfile)
246
251
 
@@ -76,6 +76,9 @@ module TSV
76
76
  tsv.through options[:key_field], options[:fields] do |k,v|
77
77
  begin
78
78
  callback.call yield(k,v)
79
+ rescue Exception
80
+ Log.exception $!
81
+ raise $!
79
82
  ensure
80
83
  bar.tick if bar
81
84
  end
@@ -202,12 +205,19 @@ module TSV
202
205
 
203
206
  if callback
204
207
  bar.init if bar
208
+ exception = nil
209
+ begin
205
210
  TSV::Parser.traverse(io, options) do |k,v|
206
211
  begin
207
212
  callback.call yield k, v
208
- ensure
209
- bar.tick if bar
213
+ rescue Exception
214
+ exception = $!
215
+ raise $!
210
216
  end
217
+ bar.tick if bar
218
+ end
219
+ ensure
220
+ raise exception if exception
211
221
  end
212
222
  else
213
223
  options[:monitor] = bar
@@ -291,36 +301,24 @@ module TSV
291
301
  end
292
302
  rescue IOError
293
303
  Log.low{"IOError traversing #{stream_name(obj)}: #{$!.message}"}
294
- stream = obj_stream(obj)
295
- stream.abort if stream and stream.respond_to? :abort
296
- stream = obj_stream(options[:into])
297
- stream.abort if stream.respond_to? :abort
304
+ abort_stream obj
305
+ abort_stream options[:into], $!
298
306
  raise $!
299
307
  rescue Errno::EPIPE
300
308
  Log.low{"Pipe closed while traversing #{stream_name(obj)}: #{$!.message}"}
301
- stream = obj_stream(obj)
302
- stream.abort if stream and stream.respond_to? :abort
303
- stream = obj_stream(options[:into])
304
- stream.abort if stream.respond_to? :abort
309
+ abort_stream obj
310
+ abort_stream options[:into], $!
305
311
  raise $!
306
312
  rescue Aborted
307
313
  Log.low{"Aborted traversing #{stream_name(obj)}"}
308
- stream = obj_stream(obj)
309
- stream.abort if stream and stream.respond_to? :abort
310
- stream = obj_stream(options[:into])
311
- stream.abort if stream.respond_to? :abort
312
- Log.low{"Aborted traversing 2 #{stream_name(obj)}"}
314
+ abort_stream obj
315
+ abort_stream options[:into], $!
316
+ raise $!
313
317
  rescue Exception
314
318
  Log.low{"Exception traversing #{stream_name(obj)}"}
315
- begin
316
- stream = obj_stream(obj)
317
- stream.abort if stream and stream.respond_to? :abort
318
- stream = obj_stream(options[:into])
319
- stream.abort if stream.respond_to? :abort
320
- rescue Exception
321
- ensure
322
- raise $!
323
- end
319
+ abort_stream obj
320
+ abort_stream options[:into], $!
321
+ raise $!
324
322
  end
325
323
  end
326
324
 
@@ -437,12 +435,11 @@ module TSV
437
435
  true
438
436
  rescue Aborted, Interrupt
439
437
  Log.low "Aborted storing into #{Misc.fingerprint store}"
440
- stream = obj_stream(store)
441
- stream.abort if stream.respond_to? :abort
438
+ abort_stream(store, $!)
439
+ raise $!
442
440
  rescue Exception
443
441
  Log.low "Exception storing into #{Misc.fingerprint store}: #{$!.message}"
444
- stream = obj_stream(store)
445
- stream.abort if stream.respond_to? :abort
442
+ abort_stream(store, $!)
446
443
  raise $!
447
444
  end
448
445
  end
@@ -503,20 +500,19 @@ module TSV
503
500
  end
504
501
 
505
502
  def self.traverse_stream(obj, threads = nil, cpus = nil, options = {}, &block)
506
- into = options[:into]
503
+ into = options[:into]
504
+
507
505
  thread = Thread.new(Thread.current) do |parent|
508
506
  begin
509
507
  traverse_run(obj, threads, cpus, options, &block)
510
- into.close if into.respond_to?(:close) and not (into.respond_to? :closed? and into.closed?)
508
+ into.close if into.respond_to?(:close) and not (into.respond_to? :closed? and into.closed?)
511
509
  rescue Exception
512
- stream = obj_stream(obj)
513
- stream.abort if stream and stream.respond_to? :abort
514
- stream = obj_stream(into)
515
- stream.abort if stream and stream.respond_to? :abort
510
+ abort_stream obj
516
511
  parent.raise $!
517
512
  raise $!
518
513
  end
519
514
  end
515
+
520
516
  ConcurrentStream.setup(obj_stream(into), :threads => thread)
521
517
  end
522
518
 
@@ -529,8 +525,13 @@ module TSV
529
525
  begin
530
526
  traverse(obj, options.merge(:into => sin), &block)
531
527
  rescue Exception
532
- sout.abort if sout.respond_to? :abort
533
- sout.join if sout.respond_to? :join
528
+ Log.exception $!
529
+ begin
530
+ sout.abort if sout.respond_to? :abort
531
+ sout.join if sout.respond_to? :join
532
+ ensure
533
+ raise $!
534
+ end
534
535
  end
535
536
  end
536
537
  return sout
@@ -598,15 +599,11 @@ module TSV
598
599
  store_into into, e
599
600
  rescue Aborted
600
601
  Log.low "Aborted callback #{stream_name(obj)} #{Log.color :green, "->"} #{stream_name(options[:into])}"
601
- stream = nil
602
- stream = get_stream obj
603
- stream.abort if stream.respond_to? :abort
602
+ abort_stream(into, $!)
604
603
  raise $!
605
604
  rescue Exception
606
605
  Log.low "Exception callback #{stream_name(obj)} #{Log.color :green, "->"} #{stream_name(options[:into])}"
607
- stream = nil
608
- stream = get_stream obj
609
- stream.abort if stream.respond_to? :abort
606
+ abort_stream(into, $!)
610
607
  raise $!
611
608
  ensure
612
609
  bar.tick if bar
@@ -614,12 +611,17 @@ module TSV
614
611
  end
615
612
 
616
613
  bar.init if bar
617
- case into
618
- when TSV::Dumper, IO
619
- traverse_stream(obj, threads, cpus, options, &block)
620
- else
621
- traverse_run(obj, threads, cpus, options, &block)
622
- into.close if into.respond_to?(:close) and not (into.respond_to? :closed and into.closed?)
614
+ begin
615
+ case into
616
+ when TSV::Dumper, IO
617
+ traverse_stream(obj, threads, cpus, options, &block)
618
+ else
619
+ traverse_run(obj, threads, cpus, options, &block)
620
+ end
621
+ rescue Exception
622
+ Log.exception $!
623
+ abort_stream(into, $!)
624
+ raise $!
623
625
  end
624
626
 
625
627
  into
data/lib/rbbt/tsv/util.rb CHANGED
@@ -58,6 +58,23 @@ module TSV
58
58
  end
59
59
  end
60
60
 
61
+ def self.abort_stream(file, exception = nil)
62
+ return if file.nil?
63
+ if Step === file
64
+ if exception
65
+ file.exception exception
66
+ else
67
+ if not (file.aborted? or file.done?)
68
+ file.abort
69
+ end
70
+ end
71
+ else
72
+ stream = get_stream(file)
73
+ stream.abort(exception) if stream.respond_to? :abort
74
+ stream.extend AbortedStream
75
+ end
76
+ end
77
+
61
78
  def self.get_stream(file, open_options = {})
62
79
  case file
63
80
  when Zlib::GzipReader
data/lib/rbbt/util/cmd.rb CHANGED
@@ -3,80 +3,6 @@ require 'stringio'
3
3
 
4
4
  module CMD
5
5
 
6
- #module SmartIO
7
- # attr_accessor :pid, :cmd, :post, :in, :out, :err, :log
8
- # def self.tie(io, pid = nil, cmd = "", post = nil, sin = nil, out = nil, err = nil, log = true)
9
- # io.extend SmartIO
10
- # io.pid = pid
11
- # io.cmd = cmd
12
- # io.in = sin
13
- # io.out = out
14
- # io.err = err
15
- # io.post = post
16
- # io.log = log
17
-
18
- # io.class.send(:alias_method, :original_close, :close)
19
- # io.class.send(:alias_method, :original_read, :read)
20
- # io
21
- # end
22
-
23
- # def wait_and_status
24
- # if @pid
25
- # begin
26
- # Process.waitpid(@pid)
27
- # rescue
28
- # end
29
-
30
- # Log.debug{"Process #{ cmd } succeded" if $? and $?.success? and log}
31
-
32
- # if $? and not $?.success?
33
- # Log.debug{"Raising exception" if log}
34
- # exception = ProcessFailed.new "Command [#{@pid}] '#{@cmd}' failed with error status #{$?.exitstatus}"
35
- # begin
36
- # original_close
37
- # ensure
38
- # raise exception
39
- # end
40
- # end
41
- # end
42
- # end
43
-
44
- # def close
45
- # self.original_read unless self.closed? or self.eof?
46
-
47
- # wait_and_status
48
-
49
- # @post.call if @post
50
-
51
- # original_close unless self.closed?
52
- # end
53
-
54
- # def force_close
55
- # if @pid
56
- # Log.debug{"Forcing close by killing '#{@pid}'" if log}
57
- # begin
58
- # Process.kill("KILL", @pid)
59
- # Process.waitpid(@pid)
60
- # rescue
61
- # Log.low{"Exception in forcing close of command [#{ @pid }, #{cmd}]: #{$!.message}"}
62
- # end
63
- # end
64
-
65
- # @post.call if @post
66
-
67
- # original_close unless self.closed?
68
- # end
69
-
70
- # def read(*args)
71
- # data = original_read(*args) unless self.closed? #or self.eof?
72
-
73
- # self.close if not self.closed? and self.eof?
74
-
75
- # data #|| ""
76
- # end
77
- #end
78
-
79
-
80
6
  def self.process_cmd_options(options = {})
81
7
  string = ""
82
8
  options.each do |option, value|
@@ -201,7 +127,7 @@ module CMD
201
127
  end
202
128
 
203
129
  #SmartIO.tie sout, pid, cmd, post, in_content, sin, serr
204
- ConcurrentStream.setup sout, :pids => [pid], :autojoin => true, :no_fail => no_fail unless no_wait
130
+ ConcurrentStream.setup sout, :pids => [pid], :autojoin => no_wait, :no_fail => no_fail
205
131
 
206
132
  sout
207
133
  else
@@ -213,7 +139,7 @@ module CMD
213
139
  serr.close
214
140
  end
215
141
 
216
- ConcurrentStream.setup sout, :pids => [pid], :autojoin => true, :no_fail => no_fail
142
+ ConcurrentStream.setup sout, :pids => [pid], :autojoin => no_wait, :no_fail => no_fail
217
143
  out = StringIO.new sout.read
218
144
  sout.close unless sout.closed?
219
145
 
@@ -18,6 +18,7 @@ module Log
18
18
  @depth = depth
19
19
  @desc = desc.nil? ? "Progress" : desc.gsub(/\n/,' ')
20
20
  @file = file
21
+ @bytes = bytes
21
22
  end
22
23
 
23
24
  def percent
@@ -1,8 +1,17 @@
1
+ module AbortedStream
2
+ attr_accessor :exception
3
+ def self.setup(obj, exception = nil)
4
+ obj.extend AbortedStream
5
+ obj.exception = exception
6
+ end
7
+ end
8
+
1
9
  module ConcurrentStream
2
- attr_accessor :threads, :pids, :callback, :abort_callback, :filename, :joined, :aborted, :autojoin, :lockfile, :no_fail
10
+ attr_accessor :threads, :pids, :callback, :abort_callback, :filename, :joined, :aborted, :autojoin, :lockfile, :no_fail, :pair, :thread
3
11
 
4
12
  def self.setup(stream, options = {}, &block)
5
- threads, pids, callback, filename, autojoin, lockfile, no_fail = Misc.process_options options, :threads, :pids, :callback, :filename, :autojoin, :lockfile, :no_fail
13
+
14
+ threads, pids, callback, abort_callback, filename, autojoin, lockfile, no_fail, pair = Misc.process_options options, :threads, :pids, :callback, :abort_callback, :filename, :autojoin, :lockfile, :no_fail, :pair
6
15
  stream.extend ConcurrentStream unless ConcurrentStream === stream
7
16
 
8
17
  stream.threads ||= []
@@ -12,21 +21,39 @@ module ConcurrentStream
12
21
  stream.autojoin = autojoin
13
22
  stream.no_fail = no_fail
14
23
 
24
+ stream.pair = pair if pair
25
+
15
26
  callback = block if block_given?
16
- if stream.callback and callback
17
- old_callback = stream.callback
18
- stream.callback = Proc.new do
19
- old_callback.call
20
- callback.call
27
+ if callback
28
+ if stream.callback
29
+ old_callback = stream.callback
30
+ stream.callback = Proc.new do
31
+ old_callback.call
32
+ callback.call
33
+ end
34
+ else
35
+ stream.callback = callback
36
+ end
37
+ end
38
+
39
+ if abort_callback
40
+ if stream.abort_callback
41
+ old_abort_callback = stream.abort_callback
42
+ stream.abort_callback = Proc.new do
43
+ old_abort_callback.call
44
+ abort_callback.call
45
+ end
46
+ else
47
+ stream.abort_callback = abort_callback
21
48
  end
22
- else
23
- stream.callback = callback
24
49
  end
25
50
 
26
51
  stream.filename = filename unless filename.nil?
27
52
 
28
53
  stream.lockfile = lockfile if lockfile
29
54
 
55
+ stream.aborted = false
56
+
30
57
  stream
31
58
  end
32
59
 
@@ -52,7 +79,6 @@ module ConcurrentStream
52
79
  @threads.each do |t|
53
80
  next if t == Thread.current
54
81
  begin
55
- #t.join if t.status == 'run'
56
82
  t.join unless FalseClass === t.status
57
83
  rescue Exception
58
84
  Log.warn "Exception joining thread in ConcurrenStream: #{filename}"
@@ -97,12 +123,11 @@ module ConcurrentStream
97
123
  end
98
124
 
99
125
  def abort_threads(exception)
100
- Log.medium "Aborting threads (#{Thread.current.inspect}) #{@threads.collect{|t| t.inspect } * ", "}"
126
+ Log.low "Aborting threads (#{Thread.current.inspect}) #{@threads.collect{|t| t.inspect } * ", "}"
101
127
 
102
128
  @threads.each do |t|
103
- @aborted = false if t == Thread.current
104
129
  next if t == Thread.current
105
- Log.medium "Aborting thread #{t.inspect}"
130
+ Log.low "Aborting thread #{t.inspect}"
106
131
  t.raise exception ? exception : Aborted.new
107
132
  end if @threads
108
133
 
@@ -112,18 +137,17 @@ module ConcurrentStream
112
137
  if t.alive?
113
138
  sleep 1 unless sleeped
114
139
  sleeped = true
115
- Log.medium "Kill thread #{t.inspect}"
140
+ Log.low "Kill thread #{t.inspect}"
116
141
  t.kill
117
142
  end
118
143
  begin
119
- Log.medium "Join thread #{t.inspect}"
144
+ Log.low "Join thread #{t.inspect}"
120
145
  t.join unless t == Thread.current
121
146
  rescue Aborted
122
147
  rescue Exception
123
- Log.exception $!
148
+ Log.warn "Thread exception: #{$!.message}"
124
149
  end
125
150
  end
126
- Log.medium "Aborted threads (#{Thread.current.inspect}) #{@threads.collect{|t| t.inspect } * ", "}"
127
151
  end
128
152
 
129
153
  def abort_pids
@@ -137,21 +161,31 @@ module ConcurrentStream
137
161
  end
138
162
 
139
163
  def abort(exception = nil)
140
- return if @aborted
141
- Log.medium "Aborting stream #{Misc.fingerprint self} -- #{@abort_callback} [#{@aborted}]"
164
+ if @aborted
165
+ Log.medium "YET aborted stream #{Misc.fingerprint self} [#{@aborted}]"
166
+ return
167
+ else
168
+ Log.medium "Aborting stream #{Misc.fingerprint self} [#{@aborted}]"
169
+ end
170
+ AbortedStream.setup(self, exception)
142
171
  @aborted = true
143
172
  begin
144
- @callback = nil
145
- @abort_callback.call if @abort_callback
146
- @abort_callback = nil
147
- close unless closed?
173
+ @abort_callback.call exception if @abort_callback
148
174
 
149
175
  abort_threads(exception)
150
176
  abort_pids
177
+
178
+ @callback = nil
179
+ @abort_callback = nil
180
+
181
+ @pair.abort exception if @pair
182
+
183
+ close unless closed?
151
184
  ensure
152
- lockfile.unlock if lockfile and lockfile.locked?
185
+ if lockfile and lockfile.locked?
186
+ lockfile.unlock
187
+ end
153
188
  end
154
- Log.medium "Aborted stream #{Misc.fingerprint self} -- #{@abort_callback} [#{@aborted}]"
155
189
  end
156
190
 
157
191
  def super(*args)
@@ -74,22 +74,30 @@ module Misc
74
74
 
75
75
  ConcurrentStream.setup sout, :pids => [pid]
76
76
  else
77
+
78
+
79
+ ConcurrentStream.setup sin, :pair => sout
80
+
77
81
  thread = Thread.new(Thread.current) do |parent|
78
82
  begin
79
83
 
80
84
  yield sin
81
- sin.close if close and not sin.closed?
85
+
86
+ sin.close if close and not sin.closed? and not sin.aborted?
82
87
 
83
88
  rescue Aborted
84
89
  Log.medium "Aborted open_pipe: #{$!.message}"
85
90
  rescue Exception
86
91
  Log.medium "Exception in open_pipe: #{$!.message}"
92
+ Log.exception $!
87
93
  parent.raise $!
88
94
  raise $!
89
95
  end
90
96
  end
91
97
 
92
- ConcurrentStream.setup sout, :threads => [thread]
98
+
99
+ sin.threads = [thread]
100
+ ConcurrentStream.setup sout, :threads => [thread], :pair => sin
93
101
  end
94
102
 
95
103
  sout
@@ -171,7 +179,7 @@ module Misc
171
179
  skip[i] = true
172
180
  end unless skip[i]
173
181
  end
174
- end
182
+ end
175
183
  rescue IOError
176
184
  end
177
185
 
@@ -201,6 +209,12 @@ module Misc
201
209
  ConcurrentStream.setup sout, :threads => splitter_thread, :filename => filename
202
210
  end
203
211
 
212
+ abort_callback = Proc.new do
213
+ out_pipes.each do |s|
214
+ s.abort if s.respond_to? :abort
215
+ end
216
+ end
217
+
204
218
  out_pipes
205
219
  end
206
220
 
@@ -261,7 +275,7 @@ module Misc
261
275
 
262
276
  begin
263
277
  into = into.find if Path === into
264
- into = Open.open(into, :mode => 'w') if String === into
278
+ into_path, into = into, Open.open(into, :mode => 'w') if String === into
265
279
  into.sync = true if IO === into
266
280
  into_close = false unless into.respond_to? :close
267
281
  io.sync = true
@@ -281,11 +295,13 @@ module Misc
281
295
  rescue Aborted
282
296
  Log.medium "Consume stream aborted #{Misc.fingerprint io}"
283
297
  io.abort if io.respond_to? :abort
284
- io.close unless io.closed?
298
+ #io.close unless io.closed?
299
+ FileUtils.rm into_path if into_path and File.exists? into_path
285
300
  rescue Exception
286
301
  Log.medium "Exception consuming stream: #{Misc.fingerprint io}: #{$!.message}"
287
- io.abort if io.respond_to? :abort
288
- io.close unless io.closed?
302
+ io.abort $! if io.respond_to? :abort
303
+ #io.close unless io.closed?
304
+ FileUtils.rm into_path if into_path and File.exists? into_path
289
305
  raise $!
290
306
  end
291
307
  end
@@ -372,7 +388,6 @@ module Misc
372
388
  Open.rm path if File.exist? path
373
389
  rescue Exception
374
390
  Log.medium "Exception in sensiblewrite: [#{Process.pid}] #{$!.message} -- #{ Log.color :blue, path }"
375
- Log.exception $!
376
391
  content.abort if content.respond_to? :abort
377
392
  Open.rm path if File.exist? path
378
393
  raise $!
@@ -126,13 +126,14 @@ module Open
126
126
  # Grep
127
127
 
128
128
  def self.grep(stream, grep, invert = false)
129
+ grep_cmd = 'egrep'
129
130
  case
130
131
  when Array === grep
131
132
  TmpFile.with_file(grep * "\n", false) do |f|
132
- CMD.cmd("grep #{invert ? '-v' : ''}", "-w" => true, "-f" => f, :in => stream, :pipe => true, :post => proc{FileUtils.rm f})
133
+ CMD.cmd("#{grep_cmd} #{invert ? '-v' : ''}", "-w" => true, "-f" => f, :in => stream, :pipe => true, :post => proc{FileUtils.rm f})
133
134
  end
134
135
  else
135
- CMD.cmd("grep #{invert ? '-v ' : ''} '#{grep}' -", :in => stream, :pipe => true, :post => proc{begin stream.force_close; rescue Exception; end if stream.respond_to?(:force_close)})
136
+ CMD.cmd("#{grep_cmd} #{invert ? '-v ' : ''} '#{grep}' -", :in => stream, :pipe => true, :post => proc{begin stream.force_close; rescue Exception; end if stream.respond_to?(:force_close)})
136
137
  end
137
138
  end
138
139
 
@@ -293,7 +294,6 @@ module Open
293
294
  end
294
295
 
295
296
  def self.gunzip(stream)
296
- #Zlib::GzipReader.new(stream)
297
297
  CMD.cmd('zcat', :in => stream, :pipe => true, :no_fail => true, :no_wait => true)
298
298
  end
299
299
 
@@ -304,7 +304,6 @@ class Step
304
304
  end
305
305
 
306
306
  def exception(ex, msg = nil)
307
- self._abort
308
307
  ex_class = ex.class.to_s
309
308
  set_info :backtrace, ex.backtrace
310
309
  set_info :exception, {:class => ex_class, :message => ex.message, :backtrace => ex.backtrace}
@@ -313,6 +312,7 @@ class Step
313
312
  else
314
313
  log :error, "#{msg} -- #{ex.message}"
315
314
  end
315
+ self._abort
316
316
  end
317
317
 
318
318
  def started?
@@ -678,7 +678,8 @@ module Workflow
678
678
  if rec_dependency.streaming? and rec_dependency.running?
679
679
  _inputs[i] = rec_dependency.join.load
680
680
  else
681
- rec_dependency.run(true).join
681
+ rec_dependency.run(true)
682
+ rec_dependency.join
682
683
  _inputs[i] = rec_dependency.load
683
684
  end
684
685
  end
@@ -202,10 +202,13 @@ class Step
202
202
  Misc.bootstrap(list, cpus, :bar => "Bootstrapping dependencies for #{path}", :respawn => :always) do |dep|
203
203
  Misc.insist do
204
204
  begin
205
- dep.produce
206
- rescue
205
+ dep.produce
206
+ rescue Aborted
207
207
  dep.abort
208
208
  raise $!
209
+ rescue Exception
210
+ dep.exception $!
211
+ raise $!
209
212
  end
210
213
  end
211
214
  nil
@@ -315,7 +318,7 @@ class Step
315
318
 
316
319
  def stop_dependencies
317
320
  dependencies.each do |dep|
318
- dep.abort
321
+ dep.abort unless dep.done? or dep.aborted?
319
322
  end
320
323
  kill_children
321
324
  end
@@ -159,7 +159,15 @@ class Step
159
159
 
160
160
  if stream
161
161
  log :streaming, "Streaming step #{Log.color :yellow, task.name.to_s || ""}"
162
- ConcurrentStream.setup stream do
162
+
163
+ callback = Proc.new do
164
+ if AbortedStream === stream
165
+ if stream.exception
166
+ raise stream.exception
167
+ else
168
+ raise Aborted
169
+ end
170
+ end
163
171
  begin
164
172
  if status != :done
165
173
  Misc.insist do
@@ -177,15 +185,30 @@ class Step
177
185
  FileUtils.rm pid_file if File.exist?(pid_file)
178
186
  end
179
187
  end
180
- stream.abort_callback = Proc.new do
188
+
189
+ abort_callback = Proc.new do |exception|
181
190
  begin
182
- log :aborted, "#{Log.color :red, "Aborted"} step #{Log.color :yellow, task.name.to_s || ""}" if status == :streaming
191
+ if exception
192
+ self.exception exception
193
+ else
194
+ log :aborted, "#{Log.color :red, "Aborted"} step #{Log.color :yellow, task.name.to_s || ""}" if status == :streaming
195
+ end
196
+ _clean_finished
183
197
  rescue
184
198
  Log.exception $!
185
199
  stop_dependencies
186
200
  FileUtils.rm pid_file if File.exist?(pid_file)
187
201
  end
188
202
  end
203
+
204
+ ConcurrentStream.setup stream, :callback => callback, :abort_callback => abort_callback
205
+
206
+ if AbortedStream === stream
207
+ exception = stream.exception || Aborted
208
+ self.exception exception
209
+ _clean_finished
210
+ raise exception
211
+ end
189
212
  else
190
213
  set_info :done, (done_time = Time.now)
191
214
  set_info :total_time_elapsed, (total_time_elapsed = done_time - issue_time)
@@ -314,8 +337,7 @@ class Step
314
337
  end
315
338
 
316
339
  def abort_stream
317
- stream = get_stream if @result
318
- stream ||= @saved_stream
340
+ stream = @result if IO === @result
319
341
  @saved_stream = nil
320
342
  if stream and stream.respond_to? :abort and not stream.aborted?
321
343
  begin
@@ -330,6 +352,17 @@ class Step
330
352
  end
331
353
  end
332
354
 
355
+ def _clean_finished
356
+ if Open.exists? path
357
+ Log.warn "Aborted job had finished. Removing result -- #{ path }"
358
+ begin
359
+ Open.rm path
360
+ rescue Exception
361
+ Log.warn "Exception removing result of aborted job: #{$!.message}"
362
+ end
363
+ end
364
+ end
365
+
333
366
  def _abort
334
367
  return if @aborted
335
368
  @aborted = true
@@ -346,14 +379,7 @@ class Step
346
379
  Log.exception $!
347
380
  retry
348
381
  ensure
349
- if Open.exists? path
350
- Log.warn "Aborted job had finished. Removing result -- #{ path }"
351
- begin
352
- Open.rm path
353
- rescue Exception
354
- Log.warn "Exception removing result of aborted job: #{$!.message}"
355
- end
356
- end
382
+ _clean_finished
357
383
  end
358
384
  end
359
385
 
@@ -371,9 +397,8 @@ class Step
371
397
  Misc.consume_stream stream
372
398
  stream.join if stream.respond_to? :join
373
399
  rescue Exception
374
- stream.abort
400
+ stream.abort $!
375
401
  self._abort
376
- raise $!
377
402
  end
378
403
  end
379
404
  end
@@ -403,6 +428,7 @@ class Step
403
428
  return self if not Open.exists? info_file
404
429
 
405
430
  return self if info[:joined]
431
+
406
432
  pid = @pid
407
433
 
408
434
  Misc.insist [0.1, 0.2, 0.5, 1] do
@@ -410,6 +436,7 @@ class Step
410
436
  end
411
437
 
412
438
  begin
439
+
413
440
  if pid.nil? or Process.pid == pid
414
441
  dependencies.each{|dep| dep.join }
415
442
  else
@@ -422,7 +449,9 @@ class Step
422
449
  pid = nil
423
450
  dependencies.each{|dep| dep.join }
424
451
  end
452
+
425
453
  sleep 1 until path.exists? or error? or aborted?
454
+
426
455
  self
427
456
  ensure
428
457
  set_info :joined, true
metadata CHANGED
@@ -1,174 +1,153 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbbt-util
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.20.22
5
- prerelease:
4
+ version: 5.20.23
6
5
  platform: ruby
7
6
  authors:
8
7
  - Miguel Vazquez
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2016-07-12 00:00:00.000000000 Z
11
+ date: 2016-07-18 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: rake
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - ">="
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - ">="
28
25
  - !ruby/object:Gem::Version
29
26
  version: '0'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: progress-monitor
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - ">="
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - ">="
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: lockfile
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - ">="
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0'
54
48
  type: :runtime
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - ">="
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0'
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: spreadsheet
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
- - - ! '>='
59
+ - - ">="
68
60
  - !ruby/object:Gem::Version
69
61
  version: '0'
70
62
  type: :runtime
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
- - - ! '>='
66
+ - - ">="
76
67
  - !ruby/object:Gem::Version
77
68
  version: '0'
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: highline
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
- - - ! '>='
73
+ - - ">="
84
74
  - !ruby/object:Gem::Version
85
75
  version: '0'
86
76
  type: :runtime
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
- - - ! '>='
80
+ - - ">="
92
81
  - !ruby/object:Gem::Version
93
82
  version: '0'
94
83
  - !ruby/object:Gem::Dependency
95
84
  name: bio-bgzf
96
85
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
86
  requirements:
99
- - - ! '>='
87
+ - - ">="
100
88
  - !ruby/object:Gem::Version
101
89
  version: '0'
102
90
  type: :runtime
103
91
  prerelease: false
104
92
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
93
  requirements:
107
- - - ! '>='
94
+ - - ">="
108
95
  - !ruby/object:Gem::Version
109
96
  version: '0'
110
97
  - !ruby/object:Gem::Dependency
111
98
  name: term-ansicolor
112
99
  requirement: !ruby/object:Gem::Requirement
113
- none: false
114
100
  requirements:
115
- - - ! '>='
101
+ - - ">="
116
102
  - !ruby/object:Gem::Version
117
103
  version: '0'
118
104
  type: :runtime
119
105
  prerelease: false
120
106
  version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
107
  requirements:
123
- - - ! '>='
108
+ - - ">="
124
109
  - !ruby/object:Gem::Version
125
110
  version: '0'
126
111
  - !ruby/object:Gem::Dependency
127
112
  name: rest-client
128
113
  requirement: !ruby/object:Gem::Requirement
129
- none: false
130
114
  requirements:
131
- - - ! '>='
115
+ - - ">="
132
116
  - !ruby/object:Gem::Version
133
117
  version: '0'
134
118
  type: :runtime
135
119
  prerelease: false
136
120
  version_requirements: !ruby/object:Gem::Requirement
137
- none: false
138
121
  requirements:
139
- - - ! '>='
122
+ - - ">="
140
123
  - !ruby/object:Gem::Version
141
124
  version: '0'
142
125
  - !ruby/object:Gem::Dependency
143
126
  name: to_regexp
144
127
  requirement: !ruby/object:Gem::Requirement
145
- none: false
146
128
  requirements:
147
- - - ! '>='
129
+ - - ">="
148
130
  - !ruby/object:Gem::Version
149
131
  version: '0'
150
132
  type: :runtime
151
133
  prerelease: false
152
134
  version_requirements: !ruby/object:Gem::Requirement
153
- none: false
154
135
  requirements:
155
- - - ! '>='
136
+ - - ">="
156
137
  - !ruby/object:Gem::Version
157
138
  version: '0'
158
139
  - !ruby/object:Gem::Dependency
159
140
  name: nakayoshi_fork
160
141
  requirement: !ruby/object:Gem::Requirement
161
- none: false
162
142
  requirements:
163
- - - ! '>='
143
+ - - ">="
164
144
  - !ruby/object:Gem::Version
165
145
  version: '0'
166
146
  type: :runtime
167
147
  prerelease: false
168
148
  version_requirements: !ruby/object:Gem::Requirement
169
- none: false
170
149
  requirements:
171
- - - ! '>='
150
+ - - ">="
172
151
  - !ruby/object:Gem::Version
173
152
  version: '0'
174
153
  description: Utilities for handling tsv files, caches, etc
@@ -185,6 +164,12 @@ extra_rdoc_files:
185
164
  - README.rdoc
186
165
  files:
187
166
  - LICENSE
167
+ - README.rdoc
168
+ - bin/rbbt
169
+ - bin/rbbt_Rutil.rb
170
+ - bin/rbbt_dangling_locks.rb
171
+ - bin/rbbt_exec.rb
172
+ - bin/rbbt_query.rb
188
173
  - etc/app.d/base.rb
189
174
  - etc/app.d/entities.rb
190
175
  - etc/app.d/finder.rb
@@ -392,193 +377,186 @@ files:
392
377
  - share/rbbt_commands/workflow/task
393
378
  - share/unicorn.rb
394
379
  - share/workflow_config.ru
395
- - README.rdoc
396
- - test/test_helper.rb
397
- - test/rbbt/resource/test_path.rb
398
- - test/rbbt/association/test_item.rb
380
+ - test/rbbt/annotations/test_util.rb
399
381
  - test/rbbt/association/test_database.rb
400
- - test/rbbt/association/test_open.rb
401
382
  - test/rbbt/association/test_index.rb
383
+ - test/rbbt/association/test_item.rb
384
+ - test/rbbt/association/test_open.rb
402
385
  - test/rbbt/association/test_util.rb
403
- - test/rbbt/util/test_concurrency.rb
404
- - test/rbbt/util/test_log.rb
405
- - test/rbbt/util/test_chain_methods.rb
406
- - test/rbbt/util/test_simpleopt.rb
407
- - test/rbbt/util/simpleopt/test_parse.rb
408
- - test/rbbt/util/simpleopt/test_get.rb
409
- - test/rbbt/util/simpleopt/test_setup.rb
410
- - test/rbbt/util/test_cmd.rb
411
- - test/rbbt/util/test_semaphore.rb
412
- - test/rbbt/util/concurrency/test_threads.rb
413
- - test/rbbt/util/concurrency/processes/test_socket.rb
414
- - test/rbbt/util/concurrency/test_processes.rb
415
- - test/rbbt/util/test_tmpfile.rb
416
- - test/rbbt/util/test_open.rb
417
- - test/rbbt/util/test_filecache.rb
386
+ - test/rbbt/entity/test_identifiers.rb
387
+ - test/rbbt/knowledge_base/test_enrichment.rb
388
+ - test/rbbt/knowledge_base/test_entity.rb
389
+ - test/rbbt/knowledge_base/test_query.rb
390
+ - test/rbbt/knowledge_base/test_registry.rb
391
+ - test/rbbt/knowledge_base/test_syndicate.rb
392
+ - test/rbbt/knowledge_base/test_traverse.rb
393
+ - test/rbbt/persist/test_tsv.rb
394
+ - test/rbbt/persist/tsv/test_cdb.rb
395
+ - test/rbbt/persist/tsv/test_kyotocabinet.rb
396
+ - test/rbbt/persist/tsv/test_leveldb.rb
397
+ - test/rbbt/persist/tsv/test_lmdb.rb
398
+ - test/rbbt/persist/tsv/test_sharder.rb
399
+ - test/rbbt/persist/tsv/test_tokyocabinet.rb
400
+ - test/rbbt/resource/test_path.rb
401
+ - test/rbbt/test_annotations.rb
402
+ - test/rbbt/test_association.rb
403
+ - test/rbbt/test_entity.rb
404
+ - test/rbbt/test_fix_width_table.rb
405
+ - test/rbbt/test_knowledge_base.rb
406
+ - test/rbbt/test_monitor.rb
407
+ - test/rbbt/test_packed_index.rb
408
+ - test/rbbt/test_persist.rb
409
+ - test/rbbt/test_resource.rb
410
+ - test/rbbt/test_tsv.rb
411
+ - test/rbbt/test_workflow.rb
412
+ - test/rbbt/tsv/parallel/test_through.rb
413
+ - test/rbbt/tsv/parallel/test_traverse.rb
414
+ - test/rbbt/tsv/test_accessor.rb
415
+ - test/rbbt/tsv/test_attach.rb
416
+ - test/rbbt/tsv/test_change_id.rb
417
+ - test/rbbt/tsv/test_field_index.rb
418
+ - test/rbbt/tsv/test_filter.rb
419
+ - test/rbbt/tsv/test_index.rb
420
+ - test/rbbt/tsv/test_manipulate.rb
421
+ - test/rbbt/tsv/test_matrix.rb
422
+ - test/rbbt/tsv/test_parallel.rb
423
+ - test/rbbt/tsv/test_parser.rb
424
+ - test/rbbt/tsv/test_stream.rb
425
+ - test/rbbt/tsv/test_util.rb
418
426
  - test/rbbt/util/R/test_eval.rb
419
427
  - test/rbbt/util/R/test_model.rb
420
- - test/rbbt/util/test_simpleDSL.rb
428
+ - test/rbbt/util/concurrency/processes/test_socket.rb
429
+ - test/rbbt/util/concurrency/test_processes.rb
430
+ - test/rbbt/util/concurrency/test_threads.rb
421
431
  - test/rbbt/util/log/test_progress.rb
422
- - test/rbbt/util/test_colorize.rb
423
- - test/rbbt/util/test_R.rb
424
- - test/rbbt/util/misc/test_lock.rb
425
- - test/rbbt/util/misc/test_pipes.rb
426
432
  - test/rbbt/util/misc/test_bgzf.rb
427
- - test/rbbt/util/misc/test_omics.rb
433
+ - test/rbbt/util/misc/test_lock.rb
428
434
  - test/rbbt/util/misc/test_multipart_payload.rb
435
+ - test/rbbt/util/misc/test_omics.rb
436
+ - test/rbbt/util/misc/test_pipes.rb
437
+ - test/rbbt/util/simpleopt/test_get.rb
438
+ - test/rbbt/util/simpleopt/test_parse.rb
439
+ - test/rbbt/util/simpleopt/test_setup.rb
440
+ - test/rbbt/util/test_R.rb
441
+ - test/rbbt/util/test_chain_methods.rb
442
+ - test/rbbt/util/test_cmd.rb
443
+ - test/rbbt/util/test_colorize.rb
444
+ - test/rbbt/util/test_concurrency.rb
429
445
  - test/rbbt/util/test_excel2tsv.rb
446
+ - test/rbbt/util/test_filecache.rb
447
+ - test/rbbt/util/test_log.rb
430
448
  - test/rbbt/util/test_misc.rb
431
- - test/rbbt/test_entity.rb
449
+ - test/rbbt/util/test_open.rb
450
+ - test/rbbt/util/test_semaphore.rb
451
+ - test/rbbt/util/test_simpleDSL.rb
452
+ - test/rbbt/util/test_simpleopt.rb
453
+ - test/rbbt/util/test_tmpfile.rb
432
454
  - test/rbbt/workflow/step/test_dependencies.rb
433
455
  - test/rbbt/workflow/test_doc.rb
434
456
  - test/rbbt/workflow/test_step.rb
435
457
  - test/rbbt/workflow/test_task.rb
436
- - test/rbbt/test_association.rb
437
- - test/rbbt/test_knowledge_base.rb
438
- - test/rbbt/tsv/parallel/test_traverse.rb
439
- - test/rbbt/tsv/parallel/test_through.rb
440
- - test/rbbt/tsv/test_parallel.rb
441
- - test/rbbt/tsv/test_accessor.rb
442
- - test/rbbt/tsv/test_change_id.rb
443
- - test/rbbt/tsv/test_stream.rb
444
- - test/rbbt/tsv/test_filter.rb
445
- - test/rbbt/tsv/test_matrix.rb
446
- - test/rbbt/tsv/test_attach.rb
447
- - test/rbbt/tsv/test_manipulate.rb
448
- - test/rbbt/tsv/test_field_index.rb
449
- - test/rbbt/tsv/test_index.rb
450
- - test/rbbt/tsv/test_util.rb
451
- - test/rbbt/tsv/test_parser.rb
452
- - test/rbbt/test_packed_index.rb
453
- - test/rbbt/test_persist.rb
454
- - test/rbbt/test_fix_width_table.rb
455
- - test/rbbt/knowledge_base/test_traverse.rb
456
- - test/rbbt/knowledge_base/test_entity.rb
457
- - test/rbbt/knowledge_base/test_query.rb
458
- - test/rbbt/knowledge_base/test_enrichment.rb
459
- - test/rbbt/knowledge_base/test_syndicate.rb
460
- - test/rbbt/knowledge_base/test_registry.rb
461
- - test/rbbt/entity/test_identifiers.rb
462
- - test/rbbt/test_monitor.rb
463
- - test/rbbt/test_workflow.rb
464
- - test/rbbt/test_annotations.rb
465
- - test/rbbt/annotations/test_util.rb
466
- - test/rbbt/test_resource.rb
467
- - test/rbbt/persist/tsv/test_tokyocabinet.rb
468
- - test/rbbt/persist/tsv/test_kyotocabinet.rb
469
- - test/rbbt/persist/tsv/test_lmdb.rb
470
- - test/rbbt/persist/tsv/test_leveldb.rb
471
- - test/rbbt/persist/tsv/test_cdb.rb
472
- - test/rbbt/persist/tsv/test_sharder.rb
473
- - test/rbbt/persist/test_tsv.rb
474
- - test/rbbt/test_tsv.rb
475
- - bin/rbbt_query.rb
476
- - bin/rbbt_exec.rb
477
- - bin/rbbt_Rutil.rb
478
- - bin/rbbt
479
- - bin/rbbt_dangling_locks.rb
458
+ - test/test_helper.rb
480
459
  homepage: http://github.com/mikisvaz/rbbt-util
481
460
  licenses:
482
461
  - MIT
462
+ metadata: {}
483
463
  post_install_message:
484
464
  rdoc_options: []
485
465
  require_paths:
486
466
  - lib
487
467
  required_ruby_version: !ruby/object:Gem::Requirement
488
- none: false
489
468
  requirements:
490
- - - ! '>='
469
+ - - ">="
491
470
  - !ruby/object:Gem::Version
492
471
  version: '0'
493
472
  required_rubygems_version: !ruby/object:Gem::Requirement
494
- none: false
495
473
  requirements:
496
- - - ! '>='
474
+ - - ">="
497
475
  - !ruby/object:Gem::Version
498
476
  version: '0'
499
477
  requirements: []
500
478
  rubyforge_project:
501
- rubygems_version: 1.8.23
479
+ rubygems_version: 2.4.6
502
480
  signing_key:
503
- specification_version: 3
481
+ specification_version: 4
504
482
  summary: Utilities for the Ruby Bioinformatics Toolkit (rbbt)
505
483
  test_files:
506
- - test/test_helper.rb
484
+ - test/rbbt/test_workflow.rb
507
485
  - test/rbbt/resource/test_path.rb
508
- - test/rbbt/association/test_item.rb
509
- - test/rbbt/association/test_database.rb
510
- - test/rbbt/association/test_open.rb
511
- - test/rbbt/association/test_index.rb
512
- - test/rbbt/association/test_util.rb
513
- - test/rbbt/util/test_concurrency.rb
514
- - test/rbbt/util/test_log.rb
515
- - test/rbbt/util/test_chain_methods.rb
516
- - test/rbbt/util/test_simpleopt.rb
517
- - test/rbbt/util/simpleopt/test_parse.rb
518
- - test/rbbt/util/simpleopt/test_get.rb
519
- - test/rbbt/util/simpleopt/test_setup.rb
520
486
  - test/rbbt/util/test_cmd.rb
521
- - test/rbbt/util/test_semaphore.rb
522
- - test/rbbt/util/concurrency/test_threads.rb
523
- - test/rbbt/util/concurrency/processes/test_socket.rb
524
- - test/rbbt/util/concurrency/test_processes.rb
525
- - test/rbbt/util/test_tmpfile.rb
526
- - test/rbbt/util/test_open.rb
527
- - test/rbbt/util/test_filecache.rb
528
- - test/rbbt/util/R/test_eval.rb
529
- - test/rbbt/util/R/test_model.rb
487
+ - test/rbbt/util/simpleopt/test_setup.rb
488
+ - test/rbbt/util/simpleopt/test_get.rb
489
+ - test/rbbt/util/simpleopt/test_parse.rb
490
+ - test/rbbt/util/test_chain_methods.rb
530
491
  - test/rbbt/util/test_simpleDSL.rb
531
- - test/rbbt/util/log/test_progress.rb
532
- - test/rbbt/util/test_colorize.rb
533
- - test/rbbt/util/test_R.rb
492
+ - test/rbbt/util/test_log.rb
493
+ - test/rbbt/util/test_open.rb
534
494
  - test/rbbt/util/misc/test_lock.rb
535
- - test/rbbt/util/misc/test_pipes.rb
495
+ - test/rbbt/util/misc/test_multipart_payload.rb
536
496
  - test/rbbt/util/misc/test_bgzf.rb
497
+ - test/rbbt/util/misc/test_pipes.rb
537
498
  - test/rbbt/util/misc/test_omics.rb
538
- - test/rbbt/util/misc/test_multipart_payload.rb
499
+ - test/rbbt/util/test_concurrency.rb
500
+ - test/rbbt/util/test_R.rb
501
+ - test/rbbt/util/log/test_progress.rb
502
+ - test/rbbt/util/test_colorize.rb
503
+ - test/rbbt/util/test_simpleopt.rb
539
504
  - test/rbbt/util/test_excel2tsv.rb
505
+ - test/rbbt/util/test_filecache.rb
506
+ - test/rbbt/util/concurrency/test_processes.rb
507
+ - test/rbbt/util/concurrency/test_threads.rb
508
+ - test/rbbt/util/concurrency/processes/test_socket.rb
509
+ - test/rbbt/util/test_semaphore.rb
540
510
  - test/rbbt/util/test_misc.rb
511
+ - test/rbbt/util/test_tmpfile.rb
512
+ - test/rbbt/util/R/test_model.rb
513
+ - test/rbbt/util/R/test_eval.rb
514
+ - test/rbbt/test_packed_index.rb
515
+ - test/rbbt/entity/test_identifiers.rb
516
+ - test/rbbt/test_association.rb
517
+ - test/rbbt/knowledge_base/test_traverse.rb
518
+ - test/rbbt/knowledge_base/test_registry.rb
519
+ - test/rbbt/knowledge_base/test_entity.rb
520
+ - test/rbbt/knowledge_base/test_enrichment.rb
521
+ - test/rbbt/knowledge_base/test_syndicate.rb
522
+ - test/rbbt/knowledge_base/test_query.rb
523
+ - test/rbbt/test_resource.rb
541
524
  - test/rbbt/test_entity.rb
525
+ - test/rbbt/test_knowledge_base.rb
526
+ - test/rbbt/annotations/test_util.rb
527
+ - test/rbbt/association/test_index.rb
528
+ - test/rbbt/association/test_item.rb
529
+ - test/rbbt/association/test_open.rb
530
+ - test/rbbt/association/test_util.rb
531
+ - test/rbbt/association/test_database.rb
532
+ - test/rbbt/test_tsv.rb
542
533
  - test/rbbt/workflow/step/test_dependencies.rb
543
- - test/rbbt/workflow/test_doc.rb
544
- - test/rbbt/workflow/test_step.rb
545
534
  - test/rbbt/workflow/test_task.rb
546
- - test/rbbt/test_association.rb
547
- - test/rbbt/test_knowledge_base.rb
548
- - test/rbbt/tsv/parallel/test_traverse.rb
549
- - test/rbbt/tsv/parallel/test_through.rb
535
+ - test/rbbt/workflow/test_step.rb
536
+ - test/rbbt/workflow/test_doc.rb
537
+ - test/rbbt/test_monitor.rb
538
+ - test/rbbt/test_persist.rb
539
+ - test/rbbt/test_annotations.rb
540
+ - test/rbbt/persist/test_tsv.rb
541
+ - test/rbbt/persist/tsv/test_lmdb.rb
542
+ - test/rbbt/persist/tsv/test_kyotocabinet.rb
543
+ - test/rbbt/persist/tsv/test_sharder.rb
544
+ - test/rbbt/persist/tsv/test_cdb.rb
545
+ - test/rbbt/persist/tsv/test_tokyocabinet.rb
546
+ - test/rbbt/persist/tsv/test_leveldb.rb
547
+ - test/rbbt/tsv/test_field_index.rb
550
548
  - test/rbbt/tsv/test_parallel.rb
551
- - test/rbbt/tsv/test_accessor.rb
549
+ - test/rbbt/tsv/test_index.rb
550
+ - test/rbbt/tsv/test_matrix.rb
552
551
  - test/rbbt/tsv/test_change_id.rb
552
+ - test/rbbt/tsv/test_parser.rb
553
553
  - test/rbbt/tsv/test_stream.rb
554
+ - test/rbbt/tsv/test_util.rb
555
+ - test/rbbt/tsv/test_accessor.rb
554
556
  - test/rbbt/tsv/test_filter.rb
555
- - test/rbbt/tsv/test_matrix.rb
556
557
  - test/rbbt/tsv/test_attach.rb
557
558
  - test/rbbt/tsv/test_manipulate.rb
558
- - test/rbbt/tsv/test_field_index.rb
559
- - test/rbbt/tsv/test_index.rb
560
- - test/rbbt/tsv/test_util.rb
561
- - test/rbbt/tsv/test_parser.rb
562
- - test/rbbt/test_packed_index.rb
563
- - test/rbbt/test_persist.rb
559
+ - test/rbbt/tsv/parallel/test_through.rb
560
+ - test/rbbt/tsv/parallel/test_traverse.rb
564
561
  - test/rbbt/test_fix_width_table.rb
565
- - test/rbbt/knowledge_base/test_traverse.rb
566
- - test/rbbt/knowledge_base/test_entity.rb
567
- - test/rbbt/knowledge_base/test_query.rb
568
- - test/rbbt/knowledge_base/test_enrichment.rb
569
- - test/rbbt/knowledge_base/test_syndicate.rb
570
- - test/rbbt/knowledge_base/test_registry.rb
571
- - test/rbbt/entity/test_identifiers.rb
572
- - test/rbbt/test_monitor.rb
573
- - test/rbbt/test_workflow.rb
574
- - test/rbbt/test_annotations.rb
575
- - test/rbbt/annotations/test_util.rb
576
- - test/rbbt/test_resource.rb
577
- - test/rbbt/persist/tsv/test_tokyocabinet.rb
578
- - test/rbbt/persist/tsv/test_kyotocabinet.rb
579
- - test/rbbt/persist/tsv/test_lmdb.rb
580
- - test/rbbt/persist/tsv/test_leveldb.rb
581
- - test/rbbt/persist/tsv/test_cdb.rb
582
- - test/rbbt/persist/tsv/test_sharder.rb
583
- - test/rbbt/persist/test_tsv.rb
584
- - test/rbbt/test_tsv.rb
562
+ - test/test_helper.rb