fairy 0.6.0 → 0.6.5
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.
- data/Makefile +1 -0
- data/bin/fairy +35 -5
- data/ext/extconf.rb +3 -0
- data/ext/fairy.c +180 -0
- data/ext/fairy.h +94 -0
- data/ext/fiber_mon.h +32 -0
- data/ext/fixnum-buffer.c +483 -0
- data/ext/p-group-by.c +529 -0
- data/ext/p-xgroup-by.c +467 -0
- data/ext/simple-hash.c +44 -0
- data/ext/string-buffer.c +286 -0
- data/ext/xmarshaled-queue.c +699 -0
- data/ext/xsized-queue.c +528 -0
- data/ext/xthread.h +65 -0
- data/fairy.gemspec +5 -2
- data/lib/fairy.rb +10 -1
- data/lib/fairy/client/group-by.rb +57 -2
- data/lib/fairy/client/here.rb +2 -1
- data/lib/fairy/controller.rb +25 -4
- data/lib/fairy/master.rb +17 -3
- data/lib/fairy/master/c-basic-group-by.rb +4 -2
- data/lib/fairy/master/c-cat.rb +3 -2
- data/lib/fairy/master/c-direct-product.rb +5 -3
- data/lib/fairy/master/c-filter.rb +5 -3
- data/lib/fairy/master/c-group-by.rb +13 -0
- data/lib/fairy/master/c-junction.rb +3 -2
- data/lib/fairy/master/c-seg-join.rb +3 -1
- data/lib/fairy/master/c-seg-shuffle.rb +3 -2
- data/lib/fairy/master/c-seg-split.rb +1 -1
- data/lib/fairy/master/c-seg-zip.rb +3 -1
- data/lib/fairy/master/c-sort.rb +7 -2
- data/lib/fairy/master/c-wc.rb +5 -3
- data/lib/fairy/node.rb +13 -2
- data/lib/fairy/node/p-barrier.rb +1 -1
- data/lib/fairy/node/p-basic-group-by.rb +22 -12
- data/lib/fairy/node/p-direct-product.rb +4 -2
- data/lib/fairy/node/p-filter.rb +8 -7
- data/lib/fairy/node/p-find.rb +2 -1
- data/lib/fairy/node/p-group-by.rb +17 -6
- data/lib/fairy/node/p-inject.rb +3 -2
- data/lib/fairy/node/p-output-file.rb +1 -1
- data/lib/fairy/node/p-seg-join.rb +2 -1
- data/lib/fairy/node/p-seg-zip.rb +2 -1
- data/lib/fairy/node/p-single-exportable.rb +3 -1
- data/lib/fairy/node/p-sort.rb +4 -2
- data/lib/fairy/node/p-task.rb +1 -1
- data/lib/fairy/node/p-wc.rb +5 -2
- data/lib/fairy/processor.rb +25 -18
- data/lib/fairy/share/block-source.rb +12 -2
- data/lib/fairy/share/conf.rb +35 -5
- data/lib/fairy/share/hash-simple-hash.rb +1 -1
- data/lib/fairy/share/log.rb +11 -4
- data/lib/fairy/share/pool-dictionary.rb +2 -1
- data/lib/fairy/share/port-marshaled-queue.rb +8 -1
- data/lib/fairy/share/port.rb +55 -45
- data/lib/fairy/share/reference.rb +2 -1
- data/lib/fairy/share/varray.rb +3 -1
- data/lib/fairy/share/vfile.rb +4 -2
- data/lib/fairy/version.rb +1 -1
- data/sample/sort.rb +69 -3
- data/spec/fairy8_spec.rb +1 -1
- data/test/testc.rb +380 -2
- data/tools/cap_recipe/Capfile +3 -3
- data/tools/fairy_conf_wizard.rb +375 -0
- data/tools/fairy_perf_graph.rb +15 -3
- data/tools/git-tag +1 -0
- data/tools/log-analysis.rb +59 -11
- metadata +33 -34
- data/ext/simple_hash/extconf.rb +0 -4
- data/ext/simple_hash/simple_hash.c +0 -42
data/ext/xthread.h
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
/**********************************************************************
|
2
|
+
|
3
|
+
xthread.h -
|
4
|
+
|
5
|
+
Copyright (C) 2011 Keiju Ishitsuka
|
6
|
+
Copyright (C) 2011 Penta Advanced Laboratories, Inc.
|
7
|
+
|
8
|
+
**********************************************************************/
|
9
|
+
|
10
|
+
|
11
|
+
#define XTHREAD_VERSION "0.1.2"
|
12
|
+
|
13
|
+
RUBY_EXTERN VALUE rb_mXThread;
|
14
|
+
RUBY_EXTERN VALUE rb_cXThreadFifo;
|
15
|
+
RUBY_EXTERN VALUE rb_cXThreadConditionVariable;
|
16
|
+
RUBY_EXTERN VALUE rb_cXThreadQueue;
|
17
|
+
RUBY_EXTERN VALUE rb_cXThreadSizedQueue;
|
18
|
+
RUBY_EXTERN VALUE rb_cXThreadMonitor;
|
19
|
+
RUBY_EXTERN VALUE rb_cXThreadMonitorCond;
|
20
|
+
|
21
|
+
|
22
|
+
RUBY_EXTERN VALUE rb_xthread_fifo_new(void);
|
23
|
+
RUBY_EXTERN VALUE rb_xthread_fifo_empty_p(VALUE);
|
24
|
+
RUBY_EXTERN VALUE rb_xthread_fifo_push(VALUE, VALUE);
|
25
|
+
RUBY_EXTERN VALUE rb_xthread_fifo_pop(VALUE);
|
26
|
+
RUBY_EXTERN VALUE rb_xthread_fifo_clear(VALUE);
|
27
|
+
RUBY_EXTERN VALUE rb_xthread_fifo_length(VALUE);
|
28
|
+
|
29
|
+
RUBY_EXTERN VALUE rb_xthread_cond_new(void);
|
30
|
+
RUBY_EXTERN VALUE rb_xthread_cond_signal(VALUE);
|
31
|
+
RUBY_EXTERN VALUE rb_xthread_cond_broadcast(VALUE);
|
32
|
+
RUBY_EXTERN VALUE rb_xthread_cond_wait(VALUE, VALUE, VALUE);
|
33
|
+
|
34
|
+
RUBY_EXTERN VALUE rb_xthread_queue_new(void);
|
35
|
+
RUBY_EXTERN VALUE rb_xthread_queue_push(VALUE, VALUE);
|
36
|
+
RUBY_EXTERN VALUE rb_xthread_queue_pop(VALUE);
|
37
|
+
RUBY_EXTERN VALUE rb_xthread_queue_pop_non_block(VALUE);
|
38
|
+
RUBY_EXTERN VALUE rb_xthread_queue_empty_p(VALUE);
|
39
|
+
RUBY_EXTERN VALUE rb_xthread_queue_clear(VALUE);
|
40
|
+
RUBY_EXTERN VALUE rb_xthread_queue_length(VALUE);
|
41
|
+
|
42
|
+
RUBY_EXTERN VALUE rb_xthread_sized_queue_new(long);
|
43
|
+
RUBY_EXTERN VALUE rb_xthread_sized_queue_max(VALUE);
|
44
|
+
RUBY_EXTERN VALUE rb_xthread_sized_queue_set_max(VALUE, VALUE);
|
45
|
+
RUBY_EXTERN VALUE rb_xthread_sized_queue_push(VALUE, VALUE);
|
46
|
+
RUBY_EXTERN VALUE rb_xthread_sized_queue_pop(VALUE);
|
47
|
+
RUBY_EXTERN VALUE rb_xthread_sized_queue_pop_non_block(VALUE);
|
48
|
+
|
49
|
+
RUBY_EXTERN VALUE rb_xthread_monitor_new(void);
|
50
|
+
RUBY_EXTERN VALUE rb_xthread_monitor_try_enter(VALUE);
|
51
|
+
RUBY_EXTERN VALUE rb_xthread_monitor_enter(VALUE);
|
52
|
+
RUBY_EXTERN VALUE rb_xthread_monitor_exit(VALUE);
|
53
|
+
RUBY_EXTERN VALUE rb_xthread_monitor_synchronize(VALUE, VALUE (*)(VALUE), VALUE);
|
54
|
+
RUBY_EXTERN VALUE rb_xthread_monitor_new_cond(VALUE);
|
55
|
+
|
56
|
+
RUBY_EXTERN VALUE rb_xthread_monitor_cond_new(VALUE);
|
57
|
+
RUBY_EXTERN VALUE rb_xthread_monitor_cond_wait(VALUE, VALUE);
|
58
|
+
RUBY_EXTERN VALUE rb_xthread_monitor_cond_wait_while(VALUE);
|
59
|
+
RUBY_EXTERN VALUE rb_xthread_monitor_cond_wait_until(VALUE);
|
60
|
+
RUBY_EXTERN VALUE rb_xthread_monitor_cond_signal(VALUE);
|
61
|
+
RUBY_EXTERN VALUE rb_xthread_monitor_cond_broadcast(VALUE self);
|
62
|
+
|
63
|
+
|
64
|
+
|
65
|
+
|
data/fairy.gemspec
CHANGED
@@ -27,15 +27,18 @@ Gem::Specification.new do |s|
|
|
27
27
|
s.files.concat ["etc/fairy.conf.tmpl"]
|
28
28
|
s.files.concat Dir.glob("bin/{#{s.executables.grep(/.*[a-z]$/).join(",")}}")
|
29
29
|
s.files.concat Dir.glob("bin/subcmd/*[A-Za-z]")
|
30
|
-
s.files.concat Dir.glob("ext
|
30
|
+
s.files.concat Dir.glob("ext/{*.rb,*.c,*.h}")
|
31
31
|
s.files.concat Dir.glob("doc/*.{rd,html}")
|
32
32
|
s.files.concat Dir.glob("spec/{README,*.rb,run_all.sh}")
|
33
33
|
s.files.concat Dir.glob("sample/*.rb")
|
34
34
|
s.files.concat ["test/testc.rb"]
|
35
35
|
s.files.concat Dir.glob("tools/**/*[a-z]")
|
36
36
|
|
37
|
+
s.add_dependency("xthread", ">= 0.1.4.001")
|
38
|
+
s.add_dependency("fiber-mon", ">= 0.2.1")
|
37
39
|
s.add_dependency("DeepConnect", ">= 0.4.06")
|
38
|
-
|
40
|
+
|
41
|
+
s.extensions = ["ext/extconf.rb"]
|
39
42
|
|
40
43
|
s.description = <<EOF
|
41
44
|
fairy is a framework for distributed processing in Ruby, originally
|
data/lib/fairy.rb
CHANGED
@@ -4,6 +4,8 @@
|
|
4
4
|
#
|
5
5
|
|
6
6
|
require "thread"
|
7
|
+
require "xthread"
|
8
|
+
require "fiber-mon"
|
7
9
|
|
8
10
|
require "deep-connect"
|
9
11
|
|
@@ -88,6 +90,14 @@ module Fairy
|
|
88
90
|
Log::info self, "\tfairy version: #{Version}"
|
89
91
|
Log::info(self, "\t[Powered By #{RUBY_DESCRIPTION}]")
|
90
92
|
|
93
|
+
|
94
|
+
begin
|
95
|
+
require "fairy.so"
|
96
|
+
Log::warn self, "\t Load fairy.so"
|
97
|
+
rescue LoadError
|
98
|
+
Log::warn self, "Can't load fairy.so. Can't use this feature"
|
99
|
+
end
|
100
|
+
|
91
101
|
@stdout_mutex = Mutex.new
|
92
102
|
|
93
103
|
if CONF.DEBUG_MONITOR_ON
|
@@ -203,4 +213,3 @@ require "fairy/client/filter"
|
|
203
213
|
require "fairy/client/input"
|
204
214
|
|
205
215
|
require "fairy/client/addins"
|
206
|
-
|
@@ -11,17 +11,30 @@ module Fairy
|
|
11
11
|
|
12
12
|
module Interface
|
13
13
|
def group_by(hash_block, opts = nil)
|
14
|
+
|
15
|
+
klass_name = opts[:group_by] if opts
|
16
|
+
klass_name ||= CONF.GROUP_BY
|
17
|
+
klass = ::Fairy::const_get(klass_name)
|
18
|
+
|
14
19
|
hash_block = BlockSource.new(hash_block)
|
15
|
-
mod_group_by =
|
20
|
+
mod_group_by = klass.new(@fairy, opts, hash_block)
|
16
21
|
mod_group_by.input = self
|
17
22
|
mod_group_by
|
18
23
|
end
|
24
|
+
|
25
|
+
def xgroup_by(hash_block, opts = nil)
|
26
|
+
hash_block = BlockSource.new(hash_block)
|
27
|
+
xgroup_by = XGroupBy.new(@fairy, opts, hash_block)
|
28
|
+
xgroup_by.input = self
|
29
|
+
xgroup_by
|
30
|
+
end
|
19
31
|
end
|
20
32
|
Fairy::def_filter_interface Interface
|
21
33
|
::Fairy::def_post_initialize{post_initialize}
|
22
34
|
|
23
35
|
UnhandleMethods = [
|
24
36
|
:post_mod_group_by_filter,
|
37
|
+
:post_mod_xgroup_by_filter,
|
25
38
|
:post_merge_group_by_filter
|
26
39
|
]
|
27
40
|
def self.post_initialize
|
@@ -90,6 +103,49 @@ module Fairy
|
|
90
103
|
# end
|
91
104
|
|
92
105
|
end
|
106
|
+
|
107
|
+
class XGroupBy<GroupBy
|
108
|
+
def backend_class_name
|
109
|
+
"CXGroupBy"
|
110
|
+
end
|
111
|
+
|
112
|
+
UnhandleMethods = [
|
113
|
+
:post_mod_group_by_filter,
|
114
|
+
:post_mod_xgroup_by_filter,
|
115
|
+
:post_merge_group_by_filter
|
116
|
+
]
|
117
|
+
def self.post_initialize
|
118
|
+
for interface in ::Fairy::FilterInterfaces
|
119
|
+
for m in interface.instance_methods
|
120
|
+
m = m.intern if m.kind_of?(String)
|
121
|
+
next if UnhandleMethods.include?(m)
|
122
|
+
|
123
|
+
m = m.id2name
|
124
|
+
XGroupBy::module_eval %{
|
125
|
+
def #{m}(*argv, &block)
|
126
|
+
post_mod_xgroup_by_filter(@block_source, @opts).#{m}(*argv, &block)
|
127
|
+
end
|
128
|
+
}
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
132
|
+
::Fairy::def_post_initialize{post_initialize}
|
133
|
+
|
134
|
+
class PostFilter<GroupBy::PostFilter
|
135
|
+
module Interface
|
136
|
+
def post_mod_xgroup_by_filter(hash_block, opts = nil)
|
137
|
+
post_mod_xgroup_by_filter = XGroupBy::PostFilter.new(@fairy, opts, hash_block)
|
138
|
+
post_mod_xgroup_by_filter.input = self
|
139
|
+
post_mod_xgroup_by_filter
|
140
|
+
end
|
141
|
+
Fairy::def_filter_interface Interface
|
142
|
+
end
|
143
|
+
|
144
|
+
def backend_class_name
|
145
|
+
"CXGroupBy::CPostFilter"
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
93
149
|
end
|
94
150
|
|
95
151
|
|
@@ -190,5 +246,4 @@ Fairy.def_filter(:mod_group_by3) do |fairy, input, block_source, opts = {}|
|
|
190
246
|
},
|
191
247
|
:postqueuing_policy => {:queuing_class => :OnMemoryQueue}
|
192
248
|
)
|
193
|
-
|
194
249
|
end
|
data/lib/fairy/client/here.rb
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
#
|
3
3
|
# Copyright (C) 2007-2010 Rakuten, Inc.
|
4
4
|
#
|
5
|
+
require "xthread"
|
5
6
|
|
6
7
|
require "fairy/client/io-filter"
|
7
8
|
require "fairy/share/port"
|
@@ -34,7 +35,7 @@ module Fairy
|
|
34
35
|
def each(&block)
|
35
36
|
policy = @opts[:prequeuing_policy]
|
36
37
|
|
37
|
-
imports = Queue.new
|
38
|
+
imports = XThread::Queue.new
|
38
39
|
|
39
40
|
parent_thread = Thread.current
|
40
41
|
|
data/lib/fairy/controller.rb
CHANGED
@@ -6,6 +6,9 @@
|
|
6
6
|
require "thread"
|
7
7
|
require "forwardable"
|
8
8
|
|
9
|
+
require "xthread"
|
10
|
+
require "fiber-mon"
|
11
|
+
|
9
12
|
require "deep-connect.rb"
|
10
13
|
|
11
14
|
require "fairy/version"
|
@@ -55,20 +58,23 @@ module Fairy
|
|
55
58
|
|
56
59
|
@create_processor_mutex = Mutex.new
|
57
60
|
|
61
|
+
# deepspace -> processor_id
|
62
|
+
@deepspace2processor_id = {}
|
63
|
+
|
58
64
|
# processor -> no of reserve
|
59
65
|
@reserves = {}
|
60
66
|
@reserves_mutex = Mutex.new
|
61
|
-
@reserves_cv = ConditionVariable.new
|
67
|
+
@reserves_cv = XThread::ConditionVariable.new
|
62
68
|
|
63
69
|
# bjob -> [processor, ...]
|
64
70
|
@bjob2processors = {}
|
65
71
|
@bjob2processors_mutex = Mutex.new
|
66
|
-
@bjob2processors_cv = ConditionVariable.new
|
72
|
+
@bjob2processors_cv = XThread::ConditionVariable.new
|
67
73
|
|
68
74
|
# processor -> no of active ntasks
|
69
75
|
@no_active_ntasks = {}
|
70
76
|
@no_active_ntasks_mutex = Mutex.new
|
71
|
-
@no_active_ntasks_cv = ConditionVariable.new
|
77
|
+
@no_active_ntasks_cv = XThread::ConditionVariable.new
|
72
78
|
|
73
79
|
@pool_dict = PoolDictionary.new
|
74
80
|
end
|
@@ -108,6 +114,13 @@ module Fairy
|
|
108
114
|
Log::info(self, "\tfairy version: #{Version}")
|
109
115
|
Log::info(self, "\t[Powered by #{RUBY_DESCRIPTION}")
|
110
116
|
|
117
|
+
begin
|
118
|
+
require "fairy.so"
|
119
|
+
Log::warn self, "\t Load fairy.so"
|
120
|
+
rescue LoadError
|
121
|
+
Log::warn self, "Can't load fairy.so. Can't use this feature"
|
122
|
+
end
|
123
|
+
|
111
124
|
@master.register_controller(self)
|
112
125
|
|
113
126
|
end
|
@@ -182,6 +195,7 @@ Log::debug(self, "TERMINATE: #2.5.1")
|
|
182
195
|
Log::debug(self, "TERMINATE: #2.5.1")
|
183
196
|
begin
|
184
197
|
Log::debug(self, "TERMINATE: #2.5.2")
|
198
|
+
@deepspace2processor_id[p.deepspace] += "(terminated)"
|
185
199
|
p.node.terminate_processor(p)
|
186
200
|
Log::debug(self, "TERMINATE: #2.5.3")
|
187
201
|
rescue
|
@@ -274,6 +288,11 @@ Log::debug(self, "TERMINATE: #5")
|
|
274
288
|
# クライアントがおなくなりになったら, こっちも死ぬよ
|
275
289
|
@master.terminate_controller(self)
|
276
290
|
end
|
291
|
+
|
292
|
+
if @deepspace2processor_id[deepspace]
|
293
|
+
Log::info(self, "CONTROLLER: processor disconected(#{@deepspace2processor_id[deepspace]})")
|
294
|
+
@deepspace2processor_id.delete(deepspace)
|
295
|
+
end
|
277
296
|
end
|
278
297
|
|
279
298
|
#
|
@@ -340,7 +359,9 @@ Log::debug(self, "Processor[#{processor.id}] => #{no_active_ntasks}")
|
|
340
359
|
def create_processor(node, bjob, &block)
|
341
360
|
@create_processor_mutex.synchronize do
|
342
361
|
processor = node.create_processor
|
343
|
-
processor.connect_controller(self, CONF)
|
362
|
+
proc_id = processor.connect_controller(self, CONF)
|
363
|
+
@deepspace2processor_id[processor.deepspace] = proc_id
|
364
|
+
|
344
365
|
@reserves_mutex.synchronize do
|
345
366
|
@reserves[processor] = 1
|
346
367
|
end
|
data/lib/fairy/master.rb
CHANGED
@@ -7,6 +7,10 @@ require "thread"
|
|
7
7
|
require "resolv"
|
8
8
|
require "ipaddr"
|
9
9
|
|
10
|
+
require "xthread"
|
11
|
+
require "fiber-mon"
|
12
|
+
|
13
|
+
|
10
14
|
require "deep-connect"
|
11
15
|
#DeepConnect::Organizer.immutable_classes.push Array
|
12
16
|
|
@@ -21,14 +25,14 @@ module Fairy
|
|
21
25
|
|
22
26
|
# @clients = {}
|
23
27
|
# @clients_mutex = Mutex.new
|
24
|
-
# @clients_cv = ConditionVariable.new
|
28
|
+
# @clients_cv = XThread::ConditionVariable.new
|
25
29
|
|
26
30
|
@controller_seq = -1
|
27
31
|
@controller_seq_mutex = Mutex.new
|
28
32
|
|
29
33
|
@controllers = {}
|
30
34
|
@controllers_mutex = Mutex.new
|
31
|
-
@controllers_cv = ConditionVariable.new
|
35
|
+
@controllers_cv = XThread::ConditionVariable.new
|
32
36
|
|
33
37
|
# @clientds2controller = {}
|
34
38
|
|
@@ -41,7 +45,7 @@ module Fairy
|
|
41
45
|
|
42
46
|
@no_of_active_processors = {}
|
43
47
|
@no_of_active_processors_mutex = Mutex.new
|
44
|
-
@no_of_active_processors_cv = ConditionVariable.new
|
48
|
+
@no_of_active_processors_cv = XThread::ConditionVariable.new
|
45
49
|
|
46
50
|
end
|
47
51
|
|
@@ -74,6 +78,13 @@ module Fairy
|
|
74
78
|
Log.info(self, "Master Service Start")
|
75
79
|
Log::info(self, "\tfairy version: #{Version}")
|
76
80
|
Log::info(self, "\t[Powerd By #{RUBY_DESCRIPTION}]")
|
81
|
+
|
82
|
+
begin
|
83
|
+
require "fairy.so"
|
84
|
+
Log::warn self, "\t Load fairy.so"
|
85
|
+
rescue LoadError
|
86
|
+
Log::warn self, "Can't load fairy.so. Can't use this feature"
|
87
|
+
end
|
77
88
|
end
|
78
89
|
|
79
90
|
def when_disconnected(deepspace, opts)
|
@@ -327,3 +338,6 @@ Log::debug(self, "LAISURED NODE E:")
|
|
327
338
|
end
|
328
339
|
end
|
329
340
|
end
|
341
|
+
|
342
|
+
|
343
|
+
|
@@ -3,6 +3,8 @@
|
|
3
3
|
# Copyright (C) 2007-2010 Rakuten, Inc.
|
4
4
|
#
|
5
5
|
|
6
|
+
require "xthread"
|
7
|
+
|
6
8
|
require "fairy/master/c-io-filter"
|
7
9
|
require "fairy/master/c-inputtable"
|
8
10
|
|
@@ -19,10 +21,10 @@ module Fairy
|
|
19
21
|
# key -> [export, ...]
|
20
22
|
@exports = {}
|
21
23
|
@exports_mutex = Mutex.new
|
22
|
-
@exports_cv = ConditionVariable.new
|
24
|
+
@exports_cv = XThread::ConditionVariable.new
|
23
25
|
|
24
26
|
# @pre_exports_queue = Queue.new
|
25
|
-
@exports_queue = Queue.new
|
27
|
+
@exports_queue = XThread::Queue.new
|
26
28
|
|
27
29
|
@each_export_by_thread = nil
|
28
30
|
@each_export_by_thread_mutex = Mutex.new
|
data/lib/fairy/master/c-cat.rb
CHANGED
@@ -6,6 +6,7 @@
|
|
6
6
|
require "delegate"
|
7
7
|
|
8
8
|
require "thread"
|
9
|
+
require "xthread"
|
9
10
|
|
10
11
|
require "fairy/master/c-filter"
|
11
12
|
require "fairy/master/c-io-filter"
|
@@ -22,7 +23,7 @@ module Fairy
|
|
22
23
|
@others = others
|
23
24
|
@export_node_pairs_queues = nil
|
24
25
|
@export_node_pairs_queues_mutex = Mutex.new
|
25
|
-
@export_node_pairs_queues_cv = ConditionVariable.new
|
26
|
+
@export_node_pairs_queues_cv = XThread::ConditionVariable.new
|
26
27
|
|
27
28
|
@main_precat = CPreCat.new(controller, opts)
|
28
29
|
|
@@ -115,7 +116,7 @@ module Fairy
|
|
115
116
|
|
116
117
|
# def start_get_exports
|
117
118
|
# @export_node_pairs_queues = [@input, *@others].collect{|input|
|
118
|
-
# export_node_pairs = Queue.new
|
119
|
+
# export_node_pairs = XThread::Queue.new
|
119
120
|
# Thread.start do
|
120
121
|
# input.each_export do |*export_node_pair|
|
121
122
|
# export_node_pairs.push export_node_pair
|
@@ -5,6 +5,8 @@
|
|
5
5
|
|
6
6
|
require "forwardable"
|
7
7
|
|
8
|
+
require "xthread"
|
9
|
+
|
8
10
|
require "deep-connect"
|
9
11
|
|
10
12
|
require "fairy/master/c-io-filter"
|
@@ -35,7 +37,7 @@ module Fairy
|
|
35
37
|
|
36
38
|
@prefilter_no_nodes = {}
|
37
39
|
@prefilter_no_nodes_mutex = Mutex.new
|
38
|
-
@prefilter_no_nodes_cv = ConditionVariable.new
|
40
|
+
@prefilter_no_nodes_cv = XThread::ConditionVariable.new
|
39
41
|
end
|
40
42
|
|
41
43
|
attr_reader :other_prefilters
|
@@ -94,11 +96,11 @@ module Fairy
|
|
94
96
|
@no = 0
|
95
97
|
@exports = {}
|
96
98
|
@exports_mutex = Mutex.new
|
97
|
-
# @exports_cv = ConditionVariable.new
|
99
|
+
# @exports_cv = XThread::ConditionVariable.new
|
98
100
|
|
99
101
|
@products = nil
|
100
102
|
@products_mutex = Mutex.new
|
101
|
-
@products_cv = ConditionVariable.new
|
103
|
+
@products_cv = XThread::ConditionVariable.new
|
102
104
|
end
|
103
105
|
|
104
106
|
def main=(main)
|
@@ -3,6 +3,8 @@
|
|
3
3
|
# Copyright (C) 2007-2010 Rakuten, Inc.
|
4
4
|
#
|
5
5
|
|
6
|
+
require "xthread"
|
7
|
+
|
6
8
|
module Fairy
|
7
9
|
class CFilter
|
8
10
|
Controller.def_export self
|
@@ -29,16 +31,16 @@ module Fairy
|
|
29
31
|
|
30
32
|
@number_of_nodes = nil
|
31
33
|
# @number_of_nodes_mutex = Mutex.new
|
32
|
-
# @number_of_nodes_cv = ConditionVariable.new
|
34
|
+
# @number_of_nodes_cv = XThread::ConditionVariable.new
|
33
35
|
|
34
36
|
@nodes = []
|
35
37
|
@nodes_for_next_filters = []
|
36
38
|
@nodes_mutex = Mutex.new
|
37
|
-
@nodes_cv = ConditionVariable.new
|
39
|
+
@nodes_cv = XThread::ConditionVariable.new
|
38
40
|
|
39
41
|
@nodes_status = {}
|
40
42
|
@nodes_status_mutex = Mutex.new
|
41
|
-
@nodes_status_cv = ConditionVariable.new
|
43
|
+
@nodes_status_cv = XThread::ConditionVariable.new
|
42
44
|
|
43
45
|
@controller.register_bjob(self)
|
44
46
|
|