rbbt-util 5.13.31 → 5.13.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 +4 -4
- data/bin/rbbt +11 -0
- data/lib/rbbt/monitor.rb +152 -10
- data/lib/rbbt/persist/tsv/adapter.rb +109 -0
- data/lib/rbbt/persist/tsv/kyotocabinet.rb +3 -77
- data/lib/rbbt/persist/tsv/lmdb.rb +1 -88
- data/lib/rbbt/persist/tsv/tokyocabinet.rb +126 -93
- data/lib/rbbt/persist/tsv.rb +2 -0
- data/lib/rbbt/persist.rb +21 -91
- data/lib/rbbt/tsv/parallel/traverse.rb +9 -5
- data/lib/rbbt/util/cmd.rb +1 -1
- data/lib/rbbt/util/log.rb +7 -6
- data/lib/rbbt/util/misc/concurrent_stream.rb +2 -1
- data/lib/rbbt/util/misc/development.rb +23 -0
- data/lib/rbbt/util/misc/lock.rb +18 -13
- data/lib/rbbt/util/misc/pipes.rb +23 -11
- data/lib/rbbt/util/open.rb +5 -5
- data/lib/rbbt/util/simpleopt/doc.rb +1 -1
- data/lib/rbbt/workflow/step/run.rb +3 -2
- data/lib/rbbt/workflow/step.rb +7 -1
- data/lib/rbbt/workflow.rb +18 -11
- data/share/rbbt_commands/system/clean +57 -58
- data/share/rbbt_commands/system/status +59 -40
- data/share/rbbt_commands/tsv/info +1 -1
- data/test/rbbt/test_monitor.rb +13 -0
- data/test/rbbt/tsv/parallel/test_traverse.rb +44 -22
- data/test/rbbt/util/test_misc.rb +10 -0
- data/test/rbbt/util/test_open.rb +16 -0
- metadata +5 -2
data/lib/rbbt/workflow/step.rb
CHANGED
@@ -130,7 +130,9 @@ class Step
|
|
130
130
|
exec
|
131
131
|
end
|
132
132
|
|
133
|
-
def clean
|
133
|
+
def self.clean(path)
|
134
|
+
info_file = Step.info_file path
|
135
|
+
files_dir = Step.files_dir path
|
134
136
|
if Open.exists?(path) or Open.exists?(info_file)
|
135
137
|
begin
|
136
138
|
self.abort if self.running?
|
@@ -148,6 +150,10 @@ class Step
|
|
148
150
|
Open.rm_rf files_dir if Open.exists? files_dir
|
149
151
|
end
|
150
152
|
end
|
153
|
+
end
|
154
|
+
|
155
|
+
def clean
|
156
|
+
Step.clean(path)
|
151
157
|
self
|
152
158
|
end
|
153
159
|
|
data/lib/rbbt/workflow.rb
CHANGED
@@ -233,22 +233,28 @@ module Workflow
|
|
233
233
|
end
|
234
234
|
end
|
235
235
|
|
236
|
+
def step_module
|
237
|
+
@_m ||= begin
|
238
|
+
m = Module.new
|
239
|
+
|
240
|
+
helpers.each do |name,block|
|
241
|
+
m.class.send(:define_method, name, &block)
|
242
|
+
end
|
243
|
+
|
244
|
+
m
|
245
|
+
end
|
246
|
+
@_m
|
247
|
+
end
|
248
|
+
|
236
249
|
def get_job_step(step_path, task = nil, input_values = nil, dependencies = nil)
|
237
250
|
step_path = step_path.call if Proc === step_path
|
238
251
|
persist = input_values.nil? ? false : true
|
239
252
|
persist = false
|
240
253
|
key = Path === step_path ? step_path.find : step_path
|
241
|
-
step = Persist.memory("Step", :key => key, :repo => step_cache, :persist => persist) do
|
242
254
|
step = Step.new step_path, task, input_values, dependencies
|
243
255
|
|
244
|
-
helpers.each do |name, block|
|
245
|
-
(class << step; self; end).instance_eval do
|
246
|
-
define_method name, &block
|
247
|
-
end
|
248
|
-
end
|
249
256
|
|
250
|
-
|
251
|
-
end
|
257
|
+
step.extend step_module
|
252
258
|
|
253
259
|
step.task ||= task
|
254
260
|
step.inputs ||= input_values
|
@@ -268,12 +274,13 @@ module Workflow
|
|
268
274
|
|
269
275
|
Workflow.resolve_locals(inputs)
|
270
276
|
|
271
|
-
dependencies = real_dependencies(task, jobname, inputs, task_dependencies[taskname] || [])
|
272
|
-
|
273
|
-
real_inputs = {}
|
274
277
|
task_inputs = task_info(taskname)[:inputs]
|
275
278
|
defaults = task_info(taskname)[:input_defaults]
|
276
279
|
|
280
|
+
dependencies = real_dependencies(task, jobname, defaults.merge(inputs), task_dependencies[taskname] || [])
|
281
|
+
|
282
|
+
real_inputs = {}
|
283
|
+
|
277
284
|
inputs.each do |k,v|
|
278
285
|
real_inputs[k] = v if (task_inputs.include?(k.to_sym) or task_inputs.include?(k.to_s)) and (defaults[k].to_s != v.to_s and not (FalseClass === v and defaults[k].nil?))
|
279
286
|
end
|
@@ -9,88 +9,87 @@ $0 = "rbbt #{$previous_commands*""} #{ File.basename(__FILE__) }" if $previous_c
|
|
9
9
|
|
10
10
|
options = SOPT.setup <<EOF
|
11
11
|
|
12
|
-
Clean
|
12
|
+
Clean orphaned files
|
13
13
|
|
14
|
-
$ rbbt system clean
|
14
|
+
$ rbbt system clean <workflow> <task>
|
15
15
|
|
16
|
+
-a--all Print all jobs, not only uncompleted
|
17
|
+
-f--force Remove regardless of been active
|
16
18
|
-h--help Print this help
|
17
19
|
EOF
|
18
20
|
rbbt_usage and exit 0 if options[:help]
|
19
21
|
|
20
|
-
|
22
|
+
workflow, task = ARGV
|
23
|
+
|
24
|
+
workflow = workflow.split "," if workflow
|
25
|
+
task = task.split "," if task
|
26
|
+
|
27
|
+
all = options.delete :all
|
28
|
+
force = options.delete :force
|
21
29
|
|
22
30
|
puts Log.color(:magenta, "# System clean")
|
23
|
-
|
31
|
+
|
32
|
+
locks = Rbbt.lock_info
|
24
33
|
if locks.any?
|
25
|
-
puts
|
26
|
-
|
27
|
-
|
28
|
-
if
|
29
|
-
puts " Removing #{
|
30
|
-
|
34
|
+
puts
|
35
|
+
puts Log.color(:magenta, "Locks:")
|
36
|
+
locks.each do |file,info|
|
37
|
+
if force or (info[:pid] and Misc.pid_exists? info[:pid])
|
38
|
+
puts " Removing #{ file }"
|
39
|
+
File.unlink file
|
31
40
|
end
|
32
41
|
end
|
33
|
-
puts
|
34
42
|
end
|
35
43
|
|
36
|
-
persists = Rbbt.
|
44
|
+
persists = Rbbt.persist_info
|
37
45
|
if persists.any?
|
38
|
-
puts
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
FileUtils.rm persists if File.exists? persists
|
45
|
-
FileUtils.rm lf if File.exists? lf
|
46
|
+
puts
|
47
|
+
puts Log.color(:magenta, "Persist:")
|
48
|
+
persists.each do |file,info|
|
49
|
+
if force or (info[:pid] and Misc.pid_exists? info[:pid])
|
50
|
+
puts " Removing #{ file }"
|
51
|
+
File.unlink file
|
46
52
|
end
|
47
53
|
end
|
48
|
-
puts
|
49
54
|
end
|
50
55
|
|
51
|
-
sensiblewrites = Rbbt.
|
56
|
+
sensiblewrites = Rbbt.sensiblewrite_info
|
52
57
|
if sensiblewrites.any?
|
53
|
-
puts
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
FileUtils.rm sensiblewrite if File.exists? sensiblewrite
|
60
|
-
FileUtils.rm lf if File.exists? lf
|
58
|
+
puts
|
59
|
+
puts Log.color(:magenta, "Writes:")
|
60
|
+
sensiblewrites.each do |file,info|
|
61
|
+
if force or (info[:pid] and Misc.pid_exists? info[:pid])
|
62
|
+
puts " Removing #{ file }"
|
63
|
+
File.unlink file
|
61
64
|
end
|
62
65
|
end
|
63
|
-
puts
|
64
66
|
end
|
65
67
|
|
66
|
-
|
67
|
-
|
68
|
+
puts
|
68
69
|
puts Log.color(:magenta, "# Workflow clean")
|
69
70
|
puts
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
end
|
94
|
-
end
|
71
|
+
|
72
|
+
jobs = Rbbt.job_info workflow, task
|
73
|
+
workflows = {}
|
74
|
+
|
75
|
+
jobs.each do |file,i|
|
76
|
+
next if i[:done]
|
77
|
+
info = begin
|
78
|
+
Open.open(i[:info_file]) do |f|
|
79
|
+
Marshal.load(f)
|
80
|
+
end
|
81
|
+
rescue
|
82
|
+
{:status => :noinfo}
|
83
|
+
end
|
84
|
+
|
85
|
+
pid = info[:pid]
|
86
|
+
|
87
|
+
status = info[:status]
|
88
|
+
status = :missing if status == :done and not File.exists? file
|
89
|
+
status = :dead if status != "done" and pid and not Misc.pid_exists?(pid)
|
90
|
+
|
91
|
+
status = status.to_s
|
92
|
+
puts " Removing #{ file } - #{status}"
|
93
|
+
Step.clean(file) if status =~ /\berror$/ or status =~ /\bmissing$/ or status =~ /\baborted$/ or status =~ /\bdead$/ or status == ""
|
95
94
|
end
|
96
95
|
|
@@ -11,13 +11,18 @@ options = SOPT.setup <<EOF
|
|
11
11
|
|
12
12
|
Report the status of the system
|
13
13
|
|
14
|
-
$ rbbt system status
|
14
|
+
$ rbbt system status <workflow> <task>
|
15
15
|
|
16
16
|
-a--all Print all jobs, not only uncompleted
|
17
17
|
-h--help Print this help
|
18
18
|
EOF
|
19
19
|
rbbt_usage and exit 0 if options[:help]
|
20
20
|
|
21
|
+
workflow, task = ARGV
|
22
|
+
|
23
|
+
workflow = workflow.split "," if workflow
|
24
|
+
task = task.split "," if task
|
25
|
+
|
21
26
|
all = options.delete :all
|
22
27
|
|
23
28
|
def pid_msg(pid)
|
@@ -27,15 +32,15 @@ def pid_msg(pid)
|
|
27
32
|
:red
|
28
33
|
end
|
29
34
|
if pid.nil?
|
30
|
-
|
35
|
+
""
|
31
36
|
else
|
32
37
|
Log.color(color, pid)
|
33
38
|
end
|
34
39
|
end
|
35
40
|
|
36
41
|
def status_msg(status)
|
37
|
-
color = case status
|
38
|
-
when :error, :aborted, :missing
|
42
|
+
color = case status.to_sym
|
43
|
+
when :error, :aborted, :missing, :dead
|
39
44
|
:red
|
40
45
|
when :streaming, :started
|
41
46
|
:yellow
|
@@ -54,37 +59,33 @@ end
|
|
54
59
|
puts Log.color(:magenta, "# System report")
|
55
60
|
puts
|
56
61
|
|
57
|
-
locks = Rbbt.
|
62
|
+
locks = Rbbt.lock_info
|
58
63
|
if locks.any?
|
59
64
|
puts Log.color(:magenta, "Locks:")
|
60
|
-
locks.sort_by{|f|
|
61
|
-
|
62
|
-
|
63
|
-
time = File.exists?(lock) ? File.ctime(lock) : Time.now
|
64
|
-
puts " " << lock + Log.color(:blue, " -- time: #{Misc.format_seconds(Time.now - time)}; ppid: #{ppid}; pid: #{pid_msg pid}")
|
65
|
+
locks.sort_by{|f,i| i[:ctime] }.each do |file,info|
|
66
|
+
elapsed, pid, ppid = info.values_at :elapsed, :pid, :ppid
|
67
|
+
puts " " << file + Log.color(:blue, " -- time: #{Misc.format_seconds elapsed}; ppid: #{ppid}; pid: #{pid_msg pid}")
|
65
68
|
end
|
66
69
|
puts
|
67
70
|
end
|
68
71
|
|
69
|
-
|
72
|
+
|
73
|
+
persists = Rbbt.persist_info
|
70
74
|
if persists.any?
|
71
75
|
puts Log.color(:magenta, "Persist:")
|
72
|
-
persists.sort_by{|f|
|
73
|
-
|
74
|
-
|
75
|
-
puts " " << persist + Log.color(:blue, " -- time: #{Misc.format_seconds(Time.now - time)})")
|
76
|
+
persists.sort_by{|f,i| i[:ctime] }.each do |file,info|
|
77
|
+
elapsed = info[:elapsed]
|
78
|
+
puts " " << file + Log.color(:blue, " -- time: #{Misc.format_seconds elapsed}")
|
76
79
|
end
|
77
80
|
puts
|
78
81
|
end
|
79
82
|
|
80
|
-
sensiblewrites = Rbbt.
|
83
|
+
sensiblewrites = Rbbt.sensiblewrite_info
|
81
84
|
if sensiblewrites.any?
|
82
85
|
puts Log.color(:magenta, "Writing:")
|
83
|
-
sensiblewrites.sort_by{|f|
|
84
|
-
|
85
|
-
|
86
|
-
time = File.exists?(sensiblewrite) ? File.ctime(sensiblewrite) : Time.now
|
87
|
-
puts " " << sensiblewrite + Log.color(:blue, " -- time: #{Misc.format_seconds(Time.now - time)}; ppid: #{ppid}; pid: #{pid_msg pid}")
|
86
|
+
sensiblewrites.sort_by{|f,i| i[:ctime] }.each do |file,info|
|
87
|
+
elapsed = info[:elapsed]
|
88
|
+
puts " " << file + Log.color(:blue, " -- time: #{Misc.format_seconds elapsed}")
|
88
89
|
end
|
89
90
|
puts
|
90
91
|
end
|
@@ -92,26 +93,44 @@ end
|
|
92
93
|
|
93
94
|
puts Log.color(:magenta, "# Workflows")
|
94
95
|
|
95
|
-
jobs = Rbbt.
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
96
|
+
jobs = Rbbt.job_info workflow, task
|
97
|
+
workflows = {}
|
98
|
+
|
99
|
+
jobs.each do |file,info|
|
100
|
+
next unless all or not info[:done]
|
101
|
+
workflow = info[:workflow]
|
102
|
+
task = info[:task]
|
103
|
+
workflows[workflow] ||= {}
|
104
|
+
workflows[workflow][task] ||= {}
|
105
|
+
workflows[workflow][task][file] ||= info
|
106
|
+
end
|
107
|
+
|
108
|
+
workflows.sort.each do |workflow,tasks|
|
109
|
+
tasks.sort.each do |task,jobs|
|
110
|
+
puts "* " << Log.color(:magenta, workflow) << "#" << Log.color(:yellow, task) << ": " << Log.color(:blue, jobs.length.to_s)
|
111
|
+
|
112
|
+
files_txt = jobs.collect do |file, i|
|
113
|
+
info = begin
|
114
|
+
Open.open(i[:info_file]) do |f|
|
115
|
+
Marshal.load(f)
|
116
|
+
end
|
117
|
+
rescue
|
118
|
+
Log.exception $!
|
119
|
+
{:status => :noinfo}
|
120
|
+
end
|
121
|
+
|
122
|
+
pid = info[:pid]
|
123
|
+
status = info[:status]
|
124
|
+
status = :missing if status == :done and not File.exists? file
|
125
|
+
status = status.to_s
|
126
|
+
status << Log.color(:red, " (dead)") if status != "done" and pid and not Misc.pid_exists?(pid)
|
127
|
+
str = file.dup
|
128
|
+
str << " #{ status_msg status }"
|
129
|
+
str << "; #{pid_msg pid}" unless status == "done"
|
130
|
+
str
|
108
131
|
end
|
109
|
-
|
110
|
-
|
111
|
-
other.each do |status, list|
|
112
|
-
files_txt = list.collect{|f,p| p.nil? ? f : (f + " (#{pid_msg p})") }
|
113
|
-
puts " " << status_msg(status) << ": " << (files_txt * ", ")
|
132
|
+
files_txt.each do |f|
|
133
|
+
puts " " << f
|
114
134
|
end
|
115
135
|
end
|
116
136
|
end
|
117
|
-
|
@@ -53,7 +53,7 @@ else
|
|
53
53
|
puts " - #{Log.color :cyan, i + 1}: " << Log.color(:yellow, f)
|
54
54
|
end
|
55
55
|
end
|
56
|
-
puts "Rows: #{Log.color :blue, `wc -l #{ file }|cut -f 1 -d' '`}" unless Open.remote? file
|
56
|
+
puts "Rows: #{Log.color :blue, `wc -l '#{ file }'|cut -f 1 -d' '`}" unless Open.remote? file
|
57
57
|
parts = []
|
58
58
|
header.first_line.split(header.sep).each_with_index{|p,i| parts << (Log.color(:cyan, "(#{i}) ") << p.strip) }
|
59
59
|
puts parts * "\t"
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require File.join(File.expand_path(File.dirname(__FILE__)), '..', 'test_helper.rb')
|
2
|
+
require 'rbbt/monitor'
|
3
|
+
|
4
|
+
class TestMonitor < Test::Unit::TestCase
|
5
|
+
def _test_locks
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
if __FILE__ == $0
|
10
|
+
jobs = Rbbt.jobs("Structure", "annotate")
|
11
|
+
|
12
|
+
end
|
13
|
+
|
@@ -6,7 +6,7 @@ class StopException < StandardError; end
|
|
6
6
|
|
7
7
|
class TestTSVParallelThrough < Test::Unit::TestCase
|
8
8
|
|
9
|
-
def
|
9
|
+
def _test_traverse_tsv
|
10
10
|
require 'rbbt/sources/organism'
|
11
11
|
|
12
12
|
head = 100
|
@@ -25,7 +25,7 @@ class TestTSVParallelThrough < Test::Unit::TestCase
|
|
25
25
|
assert_equal head, res.keys.compact.sort.length
|
26
26
|
end
|
27
27
|
|
28
|
-
def
|
28
|
+
def _test_traverse_tsv_cpus
|
29
29
|
require 'rbbt/sources/organism'
|
30
30
|
|
31
31
|
head = 100
|
@@ -47,7 +47,7 @@ class TestTSVParallelThrough < Test::Unit::TestCase
|
|
47
47
|
assert res.values.compact.flatten.uniq.length > 0
|
48
48
|
end
|
49
49
|
|
50
|
-
def
|
50
|
+
def _test_traverse_stream
|
51
51
|
require 'rbbt/sources/organism'
|
52
52
|
|
53
53
|
head = 1000
|
@@ -61,7 +61,7 @@ class TestTSVParallelThrough < Test::Unit::TestCase
|
|
61
61
|
assert_equal head, res.keys.compact.sort.length
|
62
62
|
end
|
63
63
|
|
64
|
-
def
|
64
|
+
def _test_traverse_stream_cpus
|
65
65
|
require 'rbbt/sources/organism'
|
66
66
|
|
67
67
|
head = 1000
|
@@ -75,7 +75,7 @@ class TestTSVParallelThrough < Test::Unit::TestCase
|
|
75
75
|
assert_equal head, res.keys.compact.sort.length
|
76
76
|
end
|
77
77
|
|
78
|
-
def
|
78
|
+
def _test_traverse_stream_keys
|
79
79
|
require 'rbbt/sources/organism'
|
80
80
|
|
81
81
|
head = 1000
|
@@ -99,7 +99,7 @@ class TestTSVParallelThrough < Test::Unit::TestCase
|
|
99
99
|
assert_equal res.sort, Organism.identifiers("Hsa").tsv(:head => head).keys.sort
|
100
100
|
end
|
101
101
|
|
102
|
-
def
|
102
|
+
def _test_traverse_array
|
103
103
|
require 'rbbt/sources/organism'
|
104
104
|
|
105
105
|
array = []
|
@@ -121,7 +121,7 @@ class TestTSVParallelThrough < Test::Unit::TestCase
|
|
121
121
|
assert_equal array, res
|
122
122
|
end
|
123
123
|
|
124
|
-
def
|
124
|
+
def _test_traverse_array_threads
|
125
125
|
require 'rbbt/sources/organism'
|
126
126
|
|
127
127
|
array = []
|
@@ -142,7 +142,7 @@ class TestTSVParallelThrough < Test::Unit::TestCase
|
|
142
142
|
assert_equal array.sort, res.sort
|
143
143
|
end
|
144
144
|
|
145
|
-
def
|
145
|
+
def _test_traverse_array_cpus
|
146
146
|
require 'rbbt/sources/organism'
|
147
147
|
|
148
148
|
array = []
|
@@ -157,7 +157,7 @@ class TestTSVParallelThrough < Test::Unit::TestCase
|
|
157
157
|
assert_equal array.sort, res.sort
|
158
158
|
end
|
159
159
|
|
160
|
-
def
|
160
|
+
def _test_traverse_benchmark
|
161
161
|
require 'rbbt/sources/organism'
|
162
162
|
|
163
163
|
head = 2_000
|
@@ -179,7 +179,7 @@ class TestTSVParallelThrough < Test::Unit::TestCase
|
|
179
179
|
end
|
180
180
|
end
|
181
181
|
|
182
|
-
def
|
182
|
+
def _test_traverse_into_dumper
|
183
183
|
require 'rbbt/sources/organism'
|
184
184
|
|
185
185
|
head = 2_000
|
@@ -197,7 +197,7 @@ class TestTSVParallelThrough < Test::Unit::TestCase
|
|
197
197
|
assert_equal head, res.size
|
198
198
|
end
|
199
199
|
|
200
|
-
def
|
200
|
+
def _test_traverse_into_dumper_threads
|
201
201
|
require 'rbbt/sources/organism'
|
202
202
|
|
203
203
|
head = 2_000
|
@@ -217,7 +217,7 @@ class TestTSVParallelThrough < Test::Unit::TestCase
|
|
217
217
|
assert_equal head, res.size
|
218
218
|
end
|
219
219
|
|
220
|
-
def
|
220
|
+
def _test_traverse_into_dumper_cpus
|
221
221
|
require 'rbbt/sources/organism'
|
222
222
|
|
223
223
|
head = 2_000
|
@@ -238,7 +238,7 @@ class TestTSVParallelThrough < Test::Unit::TestCase
|
|
238
238
|
|
239
239
|
#{{{ TRAVERSE DUMPER
|
240
240
|
|
241
|
-
def
|
241
|
+
def _test_traverse_dumper
|
242
242
|
require 'rbbt/sources/organism'
|
243
243
|
|
244
244
|
head = 2_000
|
@@ -259,14 +259,16 @@ class TestTSVParallelThrough < Test::Unit::TestCase
|
|
259
259
|
assert_equal head, res.size
|
260
260
|
end
|
261
261
|
|
262
|
-
def
|
262
|
+
def _test_traverse_dumper_threads
|
263
263
|
require 'rbbt/sources/organism'
|
264
264
|
|
265
265
|
head = 2_000
|
266
266
|
threads = 3
|
267
267
|
|
268
268
|
tsv = TSV::Parser.new Organism.identifiers("Hsa").open, :head => head
|
269
|
+
|
269
270
|
dumper = TSV::Dumper.new tsv.options
|
271
|
+
dumper.init
|
270
272
|
|
271
273
|
TSV.traverse tsv, :head => head, :threads => threads, :into => dumper do |k,v|
|
272
274
|
k = k.first
|
@@ -281,7 +283,7 @@ class TestTSVParallelThrough < Test::Unit::TestCase
|
|
281
283
|
assert_equal head, res.size
|
282
284
|
end
|
283
285
|
|
284
|
-
def
|
286
|
+
def _test_traverse_dumper_cpus
|
285
287
|
require 'rbbt/sources/organism'
|
286
288
|
|
287
289
|
head = 10_000
|
@@ -303,6 +305,26 @@ class TestTSVParallelThrough < Test::Unit::TestCase
|
|
303
305
|
assert_equal head, res.size
|
304
306
|
end
|
305
307
|
|
308
|
+
def _test_traverse_dumper_exception
|
309
|
+
require 'rbbt/sources/organism'
|
310
|
+
|
311
|
+
head = 2_000
|
312
|
+
|
313
|
+
Log.info Log.color :red, "TRAVERSE EXCEPTION"
|
314
|
+
stream = Organism.identifiers("Hsa/jun2011").open
|
315
|
+
dumper = TSV::Dumper.new Organism.identifiers("Hsa/jun2011").tsv_options
|
316
|
+
dumper.init
|
317
|
+
|
318
|
+
assert_raise StopException do
|
319
|
+
TSV.traverse stream, :head => head, :into => dumper do |k,v|
|
320
|
+
k = k.first
|
321
|
+
raise StopException if rand(100) < 20
|
322
|
+
[k,v]
|
323
|
+
end
|
324
|
+
dumper.stream.join
|
325
|
+
end
|
326
|
+
end
|
327
|
+
|
306
328
|
def test_traverse_dumper_cpus_exception
|
307
329
|
require 'rbbt/sources/organism'
|
308
330
|
|
@@ -314,17 +336,17 @@ class TestTSVParallelThrough < Test::Unit::TestCase
|
|
314
336
|
dumper = TSV::Dumper.new Organism.identifiers("Hsa/jun2011").tsv_options
|
315
337
|
dumper.init
|
316
338
|
|
317
|
-
assert_raise
|
318
|
-
TSV.traverse stream, :head => head, :
|
339
|
+
assert_raise ProcessFailed do
|
340
|
+
TSV.traverse stream, :head => head, :cpus => cpus, :into => dumper do |k,v|
|
319
341
|
k = k.first
|
320
|
-
raise StopException if rand(100) <
|
342
|
+
raise StopException if rand(100) < 20
|
321
343
|
[k,v]
|
322
344
|
end
|
323
|
-
|
345
|
+
dumper.stream.join
|
324
346
|
end
|
325
347
|
end
|
326
348
|
|
327
|
-
def
|
349
|
+
def _test_traverse_into_stream
|
328
350
|
size = 100
|
329
351
|
array = (1..size).to_a.collect{|n| n.to_s}
|
330
352
|
stream = TSV.traverse array, :into => :stream do |e|
|
@@ -333,7 +355,7 @@ class TestTSVParallelThrough < Test::Unit::TestCase
|
|
333
355
|
assert_equal size, stream.read.split("\n").length
|
334
356
|
end
|
335
357
|
|
336
|
-
def
|
358
|
+
def _test_traverse_progress
|
337
359
|
size = 1000
|
338
360
|
array = (1..size).to_a.collect{|n| n.to_s}
|
339
361
|
stream = TSV.traverse array, :bar => {:max => size, :desc => "Array"}, :cpus => 5, :into => :stream do |e|
|
@@ -367,7 +389,7 @@ class TestTSVParallelThrough < Test::Unit::TestCase
|
|
367
389
|
assert_equal size, stream.read.split("\n").length
|
368
390
|
end
|
369
391
|
|
370
|
-
def
|
392
|
+
def _test_store_multiple
|
371
393
|
size = 1000
|
372
394
|
array = (1..size).to_a.collect{|n| n.to_s}
|
373
395
|
stream = TSV.traverse array, :bar => {:max => size, :desc => "Array"}, :cpus => 5, :into => :stream do |e|
|
data/test/rbbt/util/test_misc.rb
CHANGED
@@ -6,6 +6,16 @@ require 'rbbt/entity'
|
|
6
6
|
|
7
7
|
class TestMisc < Test::Unit::TestCase
|
8
8
|
|
9
|
+
def test_object_delta
|
10
|
+
a = []
|
11
|
+
b = nil
|
12
|
+
d = Misc.object_delta(String) do
|
13
|
+
a << rand.to_s
|
14
|
+
end
|
15
|
+
assert_equal 1, a.length
|
16
|
+
assert_match /^0\.\d+$/, a.first
|
17
|
+
end
|
18
|
+
|
9
19
|
def test_format_seconds
|
10
20
|
t = 61.3232
|
11
21
|
assert_equal "00:01:01", Misc.format_seconds(t)
|
data/test/rbbt/util/test_open.rb
CHANGED
@@ -132,5 +132,21 @@ class TestOpen < Test::Unit::TestCase
|
|
132
132
|
end
|
133
133
|
end
|
134
134
|
|
135
|
+
def test_repo_dir
|
136
|
+
TmpFile.with_file do |tmpdir|
|
137
|
+
tmpdir = "/home/mvazquezg/tmp/repo_dir"
|
138
|
+
repo = File.join(tmpdir, 'repo')
|
139
|
+
|
140
|
+
Open.repository_dirs.push(repo)
|
141
|
+
|
142
|
+
obj = { :a => "???a"}
|
143
|
+
filename = "file" << (rand * 100).to_i.to_s
|
144
|
+
Open.write(File.join(repo, filename), Marshal.dump(obj))
|
145
|
+
dump = Open.read(File.join(repo, filename))
|
146
|
+
obj_cp = Marshal.load(dump)
|
147
|
+
assert_equal obj, obj_cp
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
135
151
|
end
|
136
152
|
|