rbbt-util 5.21.5 → 5.21.6

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: 641642d8cd4871a267b75c1d4c9e41eb0ff5c81b
4
- data.tar.gz: 28b2ec23f29f39f04c618277058d7a691c17bc4c
3
+ metadata.gz: '08fc0e36be76ddc12da08a71a3866246380800e5'
4
+ data.tar.gz: 7e146e65ad2c37c8563b9d09b4d05f64f2cf467a
5
5
  SHA512:
6
- metadata.gz: 28bb8d81971d76843af4e9f38b20a31bb66c5bead0b6ecd7967711207ac67d69e723bf14d51e2dbfc454804e073d614f89bbaae5026008facdd93d4352b9cc42
7
- data.tar.gz: 88998bb05a0aa162e8cf6fb10a22fec38f4c78a8afaa83a2277d91060315346d55e46ce298e98c24862786e7e85020372940d7a9310f8a92822f670ee788cbbf
6
+ metadata.gz: 83141c8792d440fd891dd6a8ced6328cf92bd253545e8722c8cfc622a46071095b13a6eed0ce163f863aa5c8f09a3d1ba5e82c47b33f594dd5b692f3a58f6a6a
7
+ data.tar.gz: b2e711647c50de9ea09686872a35f23be5cb82fe1801b6b97942d2ad0cab0a17aa96dbf2e65d4f836d860438c6b892217a01e0b669bb2afd7f2848c6880ecd9e
@@ -11,8 +11,6 @@ module Entity
11
11
  base.annotation :format
12
12
  base.annotation :organism
13
13
 
14
-
15
-
16
14
  class << base
17
15
  attr_accessor :identifier_files, :formats, :default_format, :name_format, :description_format
18
16
  end
@@ -53,6 +53,20 @@ class WorkflowRESTClient
53
53
  new_params
54
54
  end
55
55
 
56
+ def self.clean_url(url, params = {})
57
+ params = params.merge({ :_format => 'json', :update => 'clean' })
58
+ params = fix_params params
59
+ res = capture_exception do
60
+ Misc.insist(2, 0.5) do
61
+ Log.debug{ "RestClient clean: #{ url } - #{Misc.fingerprint params}" }
62
+ res = RestClient.get(URI.encode(url), :params => params)
63
+ raise TryAgain if res.code == 202
64
+ res
65
+ end
66
+ end
67
+ res
68
+ end
69
+
56
70
  def self.get_raw(url, params = {})
57
71
  params = params.merge({ :_format => 'raw' })
58
72
  params = fix_params params
@@ -38,12 +38,6 @@ class WorkflowRESTClient
38
38
  exec(no_load)
39
39
  elsif no_load == :stream
40
40
  _run_job(:stream)
41
- #init_job
42
- #join
43
- #Misc.open_pipe do |sin|
44
- # body = get.body
45
- # sin.write body
46
- #end
47
41
  elsif no_load
48
42
  init_job
49
43
  nil
@@ -95,7 +89,20 @@ class WorkflowRESTClient
95
89
  end
96
90
 
97
91
  def abort
92
+ return self if status == :done
98
93
  WorkflowRESTClient.get_json(@url + '?_update=abort') if @url and @name
94
+ self
95
+ end
96
+
97
+ def dup_inputs
98
+ return if @dupped or ENV["RBBT_NO_STREAM"] == 'true'
99
+ Log.low "Dupping inputs for #{path}"
100
+ dupped_inputs = {}
101
+ @inputs.collect do |k,input|
102
+ dupped_inputs[k] = Step.dup_stream input
103
+ end
104
+ @inputs = dupped_inputs
105
+ @dupped = true
99
106
  end
100
107
 
101
108
  def name
@@ -113,12 +120,20 @@ class WorkflowRESTClient
113
120
  init_job
114
121
  (Array === @url ? @url.first : @url).split("/")[-2]
115
122
  end
123
+
124
+ def nopid?
125
+ false
126
+ end
116
127
 
117
128
  def info(check_lock=false)
118
129
  @done = @info && @info[:status] && @info[:status].to_sym == :done
119
130
  @info = Persist.memory("RemoteSteps Info", :url => @url, :persist => true, :update => !@done) do
120
131
  init_job unless @url
121
- info = WorkflowRESTClient.get_json(File.join(@url, 'info'))
132
+ info = begin
133
+ WorkflowRESTClient.get_json(File.join(@url, 'info'))
134
+ rescue
135
+ {}
136
+ end
122
137
  info = WorkflowRESTClient.fix_hash(info)
123
138
  info[:status] = info[:status].to_sym if String === info[:status]
124
139
  info
@@ -185,7 +200,7 @@ class WorkflowRESTClient
185
200
  WorkflowRESTClient.post_jobname(File.join(base_url, task.to_s), inputs.merge(other_params).merge(:jobname => @name||@base_name, :_cache_type => cache_type))
186
201
  end
187
202
  @url = File.join(base_url, task.to_s, @name)
188
- nil
203
+ self
189
204
  end
190
205
 
191
206
 
@@ -201,7 +216,7 @@ class WorkflowRESTClient
201
216
  if @url
202
217
  @url + '?_format=raw'
203
218
  else
204
- [base_url, task, Misc.fingerprint(inputs)] * "/"
219
+ [base_url, task, @base_name + '-' + Misc.fingerprint(inputs)] * "/"
205
220
  end
206
221
  end
207
222
 
@@ -225,12 +240,12 @@ class WorkflowRESTClient
225
240
  Misc.consume_stream(res, true)
226
241
  end
227
242
 
228
- if not self.done?
243
+ if not (self.done? || self.aborted? || self.error?)
229
244
  self.info
230
- return self if self.done?
231
- sleep 0.2 unless self.done?
232
- sleep 1 unless self.done?
233
- while not self.done?
245
+ return self if self.done? || self.aborted? || self.error?
246
+ sleep 0.2 unless self.done? || self.aborted? || self.error?
247
+ sleep 1 unless self.done? || self.aborted? || self.error?
248
+ while not (self.done? || self.aborted? || self.error?)
234
249
  sleep 3
235
250
  end
236
251
  end
@@ -283,6 +298,7 @@ class WorkflowRESTClient
283
298
  def load
284
299
  params = {}
285
300
  join unless done? or streaming?
301
+ raise get_exception if error? or aborted?
286
302
  load_res get
287
303
  end
288
304
 
@@ -295,6 +311,7 @@ class WorkflowRESTClient
295
311
  @done = nil
296
312
  @name = nil
297
313
  @started = nil
314
+ @aborted = nil
298
315
  new_inputs = {}
299
316
  inputs.each do |k,i|
300
317
  if File === i
@@ -320,11 +337,9 @@ class WorkflowRESTClient
320
337
  end
321
338
 
322
339
  def clean
323
- return
324
340
  begin
325
341
  params = {:_update => :clean}
326
- init_job(nil, params)
327
- WorkflowRESTClient.get_raw(url, params)
342
+ WorkflowRESTClient.clean_url(url, params) if @url
328
343
  _restart
329
344
  rescue Exception
330
345
  Log.exception $!
data/lib/rbbt/tsv/util.rb CHANGED
@@ -122,6 +122,8 @@ module TSV
122
122
  stream
123
123
  else
124
124
  file.join
125
+ raise "Aborted stream from Step #{file.path}" if file.aborted?
126
+ raise "Exception in stream from Step #{file.path}: #{file.messages.last}" if file.error?
125
127
  get_stream(file.path)
126
128
  end
127
129
  end
@@ -141,7 +141,7 @@ class Step
141
141
  def init_info
142
142
  return nil if @exec or info_file.nil?
143
143
  Open.lock(info_file, :lock => info_lock) do
144
- i = {:status => :init}
144
+ i = {:status => :init, :pid => Process.pid}
145
145
  @info_cache = i
146
146
  Misc.sensiblewrite(info_file, INFO_SERIALIAZER.dump(i), :force => true, :lock => false)
147
147
  @info_cache_time = Time.now
@@ -315,6 +315,25 @@ class Step
315
315
  self._abort
316
316
  end
317
317
 
318
+ def get_exception
319
+ if info[:exception].nil?
320
+ raise Aborted if aborted?
321
+ raise messages.last if error?
322
+ return false
323
+ else
324
+ ex_class, ex_message, ex_backtrace = info[:exception].values_at :class, :message, :backtrace
325
+ begin
326
+ klass = Kernel.const_get(ex_class)
327
+ ex = klass.new ex_message
328
+ #ex.set_backtrace ex_backtrace
329
+ ex
330
+ rescue
331
+ Log.exception $!
332
+ raise ex_message
333
+ end
334
+ end
335
+ end
336
+
318
337
  def recoverable_error?
319
338
  return true if aborted?
320
339
  return false unless error?
@@ -327,7 +346,7 @@ class Step
327
346
  end
328
347
 
329
348
  def started?
330
- Open.exists?(path) or Open.exists?(pid_file)
349
+ Open.exists?(path) or Open.exists?(pid_file) or Open.exists?(info_file)
331
350
  end
332
351
 
333
352
  def dirty?
@@ -342,11 +361,11 @@ class Step
342
361
  IO === @result or @saved_stream or status == :streaming
343
362
  end
344
363
 
364
+
345
365
  def running?
346
- return nil if not Open.exists? pid_file
347
- return nil if info[:pid].nil?
366
+ pid = info[:pid]
367
+ return nil if pid.nil?
348
368
 
349
- pid = @pid || info[:pid]
350
369
  if Misc.pid_exists?(pid)
351
370
  pid
352
371
  else
@@ -358,8 +377,13 @@ class Step
358
377
  status == :error
359
378
  end
360
379
 
380
+ def nopid?
381
+ pid = info[:pid]
382
+ pid.nil? && ! (status == :aborted || status == :done || status == :error)
383
+ end
384
+
361
385
  def aborted?
362
- @aborted || status == :aborted
386
+ status == :aborted || nopid?
363
387
  end
364
388
 
365
389
  # {{{ INFO
@@ -73,15 +73,20 @@ class Step
73
73
  end
74
74
 
75
75
  def self.prepare_for_execution(job)
76
- return if (job.done? and not job.dirty?) or
77
- (job.streaming? and job.running?) or
78
- (defined? WorkflowRESTClient and WorkflowRESTClient::RemoteStep === job and not (job.error? or job.aborted?))
76
+ return if job.done? && ! job.dirty?
79
77
 
80
- if job.error? or job.aborted? or (job.started? and not job.running? and not job.error?)
78
+ status = job.status.to_s
79
+ if defined? WorkflowRESTClient && WorkflowRESTClient::RemoteStep === job
80
+ return if ! (status == 'done' and status == 'error' and status == 'aborted')
81
+ else
82
+ return if status == 'streaming' && job.running?
83
+ end
84
+
85
+ if (status == 'error' || job.aborted?) && job.recoverable_error?
81
86
  job.clean
82
87
  end
83
88
 
84
- job.dup_inputs unless job.done? or job.started?
89
+ job.dup_inputs unless status == 'done' or job.started?
85
90
 
86
91
  raise DependencyError, job if job.error?
87
92
  end
@@ -208,9 +213,10 @@ class Step
208
213
  Misc.insist do
209
214
  begin
210
215
  dep.produce
211
- Log.warn "Error producing #{dep.path}: #{dep.messages.last}" if dep.error? or dep.aborted?
216
+ Log.warn "Error in bootstrap dependency #{dep.path}: #{dep.messages.last}" if dep.error? or dep.aborted?
212
217
  rescue Aborted
213
218
  dep.abort
219
+ Log.warn "Aborted bootstrap dependency #{dep.path}: #{dep.messages.last}" if dep.error? or dep.aborted?
214
220
  raise $!
215
221
  rescue Exception
216
222
  dep.exception $!
@@ -323,8 +329,13 @@ class Step
323
329
  end
324
330
 
325
331
  def stop_dependencies
332
+ return if dependencies.nil?
326
333
  dependencies.each do |dep|
327
- dep.abort unless dep.done? or dep.aborted?
334
+ begin
335
+ next if dep.done? or dep.aborted?
336
+ rescue
337
+ end
338
+ dep.abort
328
339
  end
329
340
  kill_children
330
341
  end
@@ -107,7 +107,6 @@ class Step
107
107
  log :setup, "#{Log.color :green, "Setup"} step #{Log.color :yellow, task.name.to_s || ""}"
108
108
 
109
109
  merge_info({
110
- :pid => Process.pid,
111
110
  :issued => (issue_time = Time.now),
112
111
  :name => name,
113
112
  :clean_name => clean_name,
@@ -361,7 +360,6 @@ class Step
361
360
  begin
362
361
  Log.medium "Aborting job stream #{stream.inspect} -- #{Log.color :blue, path}"
363
362
  stream.abort
364
- #stream.close unless stream.closed?
365
363
  rescue Aborted, Interrupt
366
364
  Log.medium "Aborting job stream #{stream.inspect} ABORTED RETRY -- #{Log.color :blue, path}"
367
365
  Log.exception $!
@@ -371,7 +369,7 @@ class Step
371
369
  end
372
370
 
373
371
  def _clean_finished
374
- if Open.exists? path
372
+ if Open.exists? path and not status == :done
375
373
  Log.warn "Aborted job had finished. Removing result -- #{ path }"
376
374
  begin
377
375
  Open.rm path
@@ -384,12 +382,12 @@ class Step
384
382
  def _abort
385
383
  return if @aborted
386
384
  @aborted = true
387
- return if done?
388
385
  Log.medium{"#{Log.color :red, "Aborting"} #{Log.color :blue, path}"}
389
386
  begin
387
+ return if done?
390
388
  stop_dependencies
391
389
  abort_stream
392
- abort_pid if defined? @forked and @forked and running?
390
+ abort_pid if running?
393
391
  rescue Aborted, Interrupt
394
392
  Log.medium{"#{Log.color :red, "Aborting ABORTED RETRY"} #{Log.color :blue, path}"}
395
393
  retry
@@ -402,6 +400,7 @@ class Step
402
400
  end
403
401
 
404
402
  def abort
403
+ return if done? and status == :done
405
404
  _abort
406
405
  log(:aborted, "Job aborted") unless aborted? or error?
407
406
  self
data/share/config.ru CHANGED
@@ -65,6 +65,9 @@ load_file Rbbt.etc['app.d/post.rb'].find_all
65
65
  #{{{ PRELOAD
66
66
  load_file Rbbt.etc['app.d/preload.rb'].find_all
67
67
 
68
+ #{{{ SINATRA
69
+ load_file Rbbt.lib['sinatra.rb'].find_all
70
+
68
71
  #{{{ RUN
69
72
  $title = app_name
70
73
  require 'rack'
@@ -88,11 +88,12 @@ jobs.each do |file,i|
88
88
 
89
89
  status = info[:status].to_s
90
90
  status = :missing if status == "done" and not File.exist? file
91
+ status = :nopid if status != "done" and pid.nil?
91
92
  status = :dead if status != "done" and pid and not Misc.pid_exists?(pid)
92
93
  status = :sync if status != "done" and File.exist? file
93
94
 
94
95
  status = status.to_s
95
- next unless status =~ /\berror$/ or status =~ /\bmissing$/ or status =~ /\baborted$/ or status =~ /\bdead$/ or status =~ /\bsync$/ or status == "" or (force and status == 'noinfo')
96
+ next unless status =~ /\bnopid/ or status =~ /\berror$/ or status =~ /\bmissing$/ or status =~ /\baborted$/ or status =~ /\bdead$/ or status =~ /\bsync$/ or status == "" or (force and status == 'noinfo')
96
97
  puts " Removing #{ file } - #{status}"
97
98
  Step.clean(file)
98
99
  end
@@ -71,7 +71,7 @@ exception = info[:exception]
71
71
  rest = info.keys - [:inputs, :dependencies, :status, :time_elapsed, :messages, :backtrace, :exception, :pid]
72
72
 
73
73
  puts Log.color(:magenta, "File") << ": " << step.path
74
- puts Log.color(:magenta, "Status") << ": " << status_msg(status)
74
+ puts Log.color(:magenta, "Status") << ": " << status_msg(status) << ((step.aborted? || step.error?) && step.recoverable_error? ? " (recoverable)" : "" )
75
75
  puts Log.color(:magenta, "Pid") << ": " << pid_msg(pid, status.to_s == "done")
76
76
  puts Log.color(:magenta, "Time") << ": " << time.to_i.to_s << " sec." if time
77
77
  puts Log.color(:magenta, "Total time") << ": " << total_time.to_i.to_s << " sec." if time
@@ -62,7 +62,7 @@ def report(step, offset = 0)
62
62
  info = step.info || {}
63
63
  path = step.path
64
64
  status = info[:status] || :missing
65
- status = :remote if Open.remote?(path)
65
+ status = "remote" if Open.remote?(path)
66
66
  name = info[:name] || File.basename(path)
67
67
  status = :unsync if status == :done and not File.exist? path
68
68
  str = " " * offset
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.21.5
4
+ version: 5.21.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miguel Vazquez
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-08-01 00:00:00.000000000 Z
11
+ date: 2016-08-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -484,82 +484,82 @@ signing_key:
484
484
  specification_version: 4
485
485
  summary: Utilities for the Ruby Bioinformatics Toolkit (rbbt)
486
486
  test_files:
487
- - test/rbbt/test_workflow.rb
487
+ - test/test_helper.rb
488
488
  - test/rbbt/resource/test_path.rb
489
- - test/rbbt/util/test_cmd.rb
490
- - test/rbbt/util/simpleopt/test_setup.rb
491
- - test/rbbt/util/simpleopt/test_get.rb
492
- - test/rbbt/util/simpleopt/test_parse.rb
493
- - test/rbbt/util/test_chain_methods.rb
494
- - test/rbbt/util/test_simpleDSL.rb
489
+ - test/rbbt/association/test_item.rb
490
+ - test/rbbt/association/test_database.rb
491
+ - test/rbbt/association/test_open.rb
492
+ - test/rbbt/association/test_index.rb
493
+ - test/rbbt/association/test_util.rb
494
+ - test/rbbt/util/test_concurrency.rb
495
495
  - test/rbbt/util/test_log.rb
496
+ - test/rbbt/util/test_chain_methods.rb
497
+ - test/rbbt/util/test_simpleopt.rb
498
+ - test/rbbt/util/simpleopt/test_parse.rb
499
+ - test/rbbt/util/simpleopt/test_get.rb
500
+ - test/rbbt/util/simpleopt/test_setup.rb
501
+ - test/rbbt/util/test_cmd.rb
502
+ - test/rbbt/util/test_semaphore.rb
503
+ - test/rbbt/util/concurrency/test_threads.rb
504
+ - test/rbbt/util/concurrency/processes/test_socket.rb
505
+ - test/rbbt/util/concurrency/test_processes.rb
506
+ - test/rbbt/util/test_tmpfile.rb
496
507
  - test/rbbt/util/test_open.rb
508
+ - test/rbbt/util/test_filecache.rb
509
+ - test/rbbt/util/R/test_eval.rb
510
+ - test/rbbt/util/R/test_model.rb
511
+ - test/rbbt/util/test_simpleDSL.rb
512
+ - test/rbbt/util/log/test_progress.rb
513
+ - test/rbbt/util/test_colorize.rb
514
+ - test/rbbt/util/test_R.rb
497
515
  - test/rbbt/util/misc/test_lock.rb
498
- - test/rbbt/util/misc/test_multipart_payload.rb
499
- - test/rbbt/util/misc/test_bgzf.rb
500
516
  - test/rbbt/util/misc/test_pipes.rb
517
+ - test/rbbt/util/misc/test_bgzf.rb
501
518
  - test/rbbt/util/misc/test_omics.rb
502
- - test/rbbt/util/test_concurrency.rb
503
- - test/rbbt/util/test_R.rb
504
- - test/rbbt/util/log/test_progress.rb
505
- - test/rbbt/util/test_colorize.rb
506
- - test/rbbt/util/test_simpleopt.rb
519
+ - test/rbbt/util/misc/test_multipart_payload.rb
507
520
  - test/rbbt/util/test_excel2tsv.rb
508
- - test/rbbt/util/test_filecache.rb
509
- - test/rbbt/util/concurrency/test_processes.rb
510
- - test/rbbt/util/concurrency/test_threads.rb
511
- - test/rbbt/util/concurrency/processes/test_socket.rb
512
- - test/rbbt/util/test_semaphore.rb
513
521
  - test/rbbt/util/test_misc.rb
514
- - test/rbbt/util/test_tmpfile.rb
515
- - test/rbbt/util/R/test_model.rb
516
- - test/rbbt/util/R/test_eval.rb
517
- - test/rbbt/test_packed_index.rb
518
- - test/rbbt/entity/test_identifiers.rb
519
- - test/rbbt/test_association.rb
520
- - test/rbbt/knowledge_base/test_traverse.rb
521
- - test/rbbt/knowledge_base/test_registry.rb
522
- - test/rbbt/knowledge_base/test_entity.rb
523
- - test/rbbt/knowledge_base/test_enrichment.rb
524
- - test/rbbt/knowledge_base/test_syndicate.rb
525
- - test/rbbt/knowledge_base/test_query.rb
526
- - test/rbbt/test_resource.rb
527
522
  - test/rbbt/test_entity.rb
528
- - test/rbbt/test_knowledge_base.rb
529
- - test/rbbt/annotations/test_util.rb
530
- - test/rbbt/association/test_index.rb
531
- - test/rbbt/association/test_item.rb
532
- - test/rbbt/association/test_open.rb
533
- - test/rbbt/association/test_util.rb
534
- - test/rbbt/association/test_database.rb
535
- - test/rbbt/test_tsv.rb
536
523
  - test/rbbt/workflow/step/test_dependencies.rb
537
- - test/rbbt/workflow/test_task.rb
538
- - test/rbbt/workflow/test_step.rb
539
524
  - test/rbbt/workflow/test_doc.rb
540
- - test/rbbt/test_monitor.rb
541
- - test/rbbt/test_persist.rb
542
- - test/rbbt/test_annotations.rb
543
- - test/rbbt/persist/test_tsv.rb
544
- - test/rbbt/persist/tsv/test_lmdb.rb
545
- - test/rbbt/persist/tsv/test_kyotocabinet.rb
546
- - test/rbbt/persist/tsv/test_sharder.rb
547
- - test/rbbt/persist/tsv/test_cdb.rb
548
- - test/rbbt/persist/tsv/test_tokyocabinet.rb
549
- - test/rbbt/persist/tsv/test_leveldb.rb
550
- - test/rbbt/tsv/test_field_index.rb
525
+ - test/rbbt/workflow/test_step.rb
526
+ - test/rbbt/workflow/test_task.rb
527
+ - test/rbbt/test_association.rb
528
+ - test/rbbt/test_knowledge_base.rb
529
+ - test/rbbt/tsv/parallel/test_traverse.rb
530
+ - test/rbbt/tsv/parallel/test_through.rb
551
531
  - test/rbbt/tsv/test_parallel.rb
552
- - test/rbbt/tsv/test_index.rb
553
- - test/rbbt/tsv/test_matrix.rb
532
+ - test/rbbt/tsv/test_accessor.rb
554
533
  - test/rbbt/tsv/test_change_id.rb
555
- - test/rbbt/tsv/test_parser.rb
556
534
  - test/rbbt/tsv/test_stream.rb
557
- - test/rbbt/tsv/test_util.rb
558
- - test/rbbt/tsv/test_accessor.rb
559
535
  - test/rbbt/tsv/test_filter.rb
536
+ - test/rbbt/tsv/test_matrix.rb
560
537
  - test/rbbt/tsv/test_attach.rb
561
538
  - test/rbbt/tsv/test_manipulate.rb
562
- - test/rbbt/tsv/parallel/test_through.rb
563
- - test/rbbt/tsv/parallel/test_traverse.rb
539
+ - test/rbbt/tsv/test_field_index.rb
540
+ - test/rbbt/tsv/test_index.rb
541
+ - test/rbbt/tsv/test_util.rb
542
+ - test/rbbt/tsv/test_parser.rb
543
+ - test/rbbt/test_packed_index.rb
544
+ - test/rbbt/test_persist.rb
564
545
  - test/rbbt/test_fix_width_table.rb
565
- - test/test_helper.rb
546
+ - test/rbbt/knowledge_base/test_traverse.rb
547
+ - test/rbbt/knowledge_base/test_entity.rb
548
+ - test/rbbt/knowledge_base/test_query.rb
549
+ - test/rbbt/knowledge_base/test_enrichment.rb
550
+ - test/rbbt/knowledge_base/test_syndicate.rb
551
+ - test/rbbt/knowledge_base/test_registry.rb
552
+ - test/rbbt/entity/test_identifiers.rb
553
+ - test/rbbt/test_monitor.rb
554
+ - test/rbbt/test_workflow.rb
555
+ - test/rbbt/test_annotations.rb
556
+ - test/rbbt/annotations/test_util.rb
557
+ - test/rbbt/test_resource.rb
558
+ - test/rbbt/persist/tsv/test_tokyocabinet.rb
559
+ - test/rbbt/persist/tsv/test_kyotocabinet.rb
560
+ - test/rbbt/persist/tsv/test_lmdb.rb
561
+ - test/rbbt/persist/tsv/test_leveldb.rb
562
+ - test/rbbt/persist/tsv/test_cdb.rb
563
+ - test/rbbt/persist/tsv/test_sharder.rb
564
+ - test/rbbt/persist/test_tsv.rb
565
+ - test/rbbt/test_tsv.rb