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/tools/git-tag
CHANGED
data/tools/log-analysis.rb
CHANGED
@@ -22,20 +22,44 @@ module Fairy
|
|
22
22
|
|
23
23
|
def compile
|
24
24
|
@input.each{|line|
|
25
|
-
next unless line =~ /(START|FINISH)\s+(PROCESSING|EXPORT|IMPORT|STORE)/
|
26
25
|
line.chomp!
|
27
|
-
line =~
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
@events[uuid].push [$2, $1, abs_time]
|
26
|
+
if line =~ /(START|FINISH)\s+(PROCESSING|EXPORT|IMPORT|STORE|M\.STORE|M\.RESTORE)/
|
27
|
+
compile_stat(line)
|
28
|
+
elsif line =~ /PROCESS MONITOR:$/
|
29
|
+
compile_ps(line)
|
30
|
+
elsif line =~ /MONITOR: PS:/
|
31
|
+
compile_psdetail(line)
|
32
|
+
end
|
35
33
|
}
|
36
34
|
end
|
37
35
|
|
36
|
+
def compile_stat(line)
|
37
|
+
line =~ PAT
|
38
|
+
date, time, host, process, file, object, method, mes = $1, $2, $3, $4, $5, $6, $7, $8
|
39
|
+
uuid = [host, process, object].join(" ")
|
40
|
+
|
41
|
+
abs_time = Time.parse(date+" "+time)
|
42
|
+
mes =~ /(START|FINISH)\s+(PROCESSING|EXPORT|IMPORT|STORE|M\.STORE|M\.RESTORE)/
|
43
|
+
@events[[uuid, $2]] ||= []
|
44
|
+
@events[[uuid, $2]].push [$2, $1, abs_time]
|
45
|
+
end
|
46
|
+
|
47
|
+
def compile_ps(line)
|
48
|
+
line =~ PAT
|
49
|
+
date, time, host, process, file, object, method, mes = $1, $2, $3, $4, $5, $6, $7, $8
|
50
|
+
abs_time = Time.parse(date+" "+time)
|
51
|
+
@last_mon_datetime = [[host, process, object].join(" "), abs_time]
|
52
|
+
end
|
53
|
+
|
54
|
+
def compile_psdetail(line)
|
55
|
+
line =~ /([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9.]+)\s+([0-9.]+)\s+([0-9]+)\s+([0-9:]+)/
|
56
|
+
key = [@last_mon_datetime[0], "PS"]
|
57
|
+
@events[key] ||= []
|
58
|
+
@events[key].push ["PS", @last_mon_datetime[1], $1, $2, $3, $4, $5, $6, $7]
|
59
|
+
end
|
60
|
+
|
38
61
|
def analyze
|
62
|
+
#p @events
|
39
63
|
for k, values in @events
|
40
64
|
case values.first[0]
|
41
65
|
when "STORE"
|
@@ -43,13 +67,37 @@ module Fairy
|
|
43
67
|
values.each_slice(2) do |start, finish|
|
44
68
|
time += finish[2]-start[2]
|
45
69
|
end
|
46
|
-
puts "#{k}, #{values.first[0]}, , , #{time}"
|
70
|
+
puts "#{k.first}, #{values.first[0]}, , , #{time}"
|
71
|
+
|
72
|
+
when "M.STORE"
|
73
|
+
time = 0
|
74
|
+
values.each_slice(2) do |start, finish|
|
75
|
+
time += finish[2]-start[2]
|
76
|
+
end
|
77
|
+
puts "#{k.first}, #{values.first[0]}, , , #{time}"
|
78
|
+
|
79
|
+
when "M.RESTORE"
|
80
|
+
time = 0
|
81
|
+
values.each_slice(2) do |start, finish|
|
82
|
+
time += finish[2]-start[2]
|
83
|
+
end
|
84
|
+
puts "#{k.first}, #{values.first[0]}, , , #{time}"
|
47
85
|
|
86
|
+
when "PS"
|
87
|
+
values.each do |ps, datetime, *args|
|
88
|
+
#p ps, datetime
|
89
|
+
puts "#{k.first}, #{values.first[0]}, #{datetime}, #{args.join(', ')}"
|
90
|
+
end
|
48
91
|
else
|
49
92
|
st = values.find{|v| v[1] == "START"}
|
50
93
|
fn = values.find{|v| v[1] == "FINISH"}
|
51
94
|
|
52
|
-
|
95
|
+
begin
|
96
|
+
puts "#{k.first}, #{st[0]}, #{st[2]}, #{fn[2]}, #{fn[2] - st[2]}"
|
97
|
+
rescue
|
98
|
+
STDERR.puts "Warn: #{$!}"
|
99
|
+
STDERR.puts $@
|
100
|
+
end
|
53
101
|
end
|
54
102
|
end
|
55
103
|
end
|
metadata
CHANGED
@@ -1,13 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fairy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 6
|
9
|
-
- 0
|
10
|
-
version: 0.6.0
|
4
|
+
prerelease:
|
5
|
+
version: 0.6.5
|
11
6
|
platform: ruby
|
12
7
|
authors:
|
13
8
|
- Rakuten, Inc.
|
@@ -15,23 +10,17 @@ autorequire:
|
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
12
|
|
18
|
-
date:
|
19
|
-
default_executable: fairy
|
13
|
+
date: 2011-06-07 00:00:00 Z
|
20
14
|
dependencies:
|
21
15
|
- !ruby/object:Gem::Dependency
|
22
|
-
name:
|
16
|
+
name: xthread
|
23
17
|
prerelease: false
|
24
18
|
requirement: &id001 !ruby/object:Gem::Requirement
|
25
19
|
none: false
|
26
20
|
requirements:
|
27
21
|
- - ">="
|
28
22
|
- !ruby/object:Gem::Version
|
29
|
-
|
30
|
-
segments:
|
31
|
-
- 0
|
32
|
-
- 4
|
33
|
-
- 6
|
34
|
-
version: 0.4.06
|
23
|
+
version: 0.1.4.001
|
35
24
|
type: :runtime
|
36
25
|
version_requirements: *id001
|
37
26
|
- !ruby/object:Gem::Dependency
|
@@ -42,14 +31,20 @@ dependencies:
|
|
42
31
|
requirements:
|
43
32
|
- - ">="
|
44
33
|
- !ruby/object:Gem::Version
|
45
|
-
|
46
|
-
segments:
|
47
|
-
- 0
|
48
|
-
- 1
|
49
|
-
- 0
|
50
|
-
version: 0.1.0
|
34
|
+
version: 0.2.1
|
51
35
|
type: :runtime
|
52
36
|
version_requirements: *id002
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: DeepConnect
|
39
|
+
prerelease: false
|
40
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ">="
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 0.4.06
|
46
|
+
type: :runtime
|
47
|
+
version_requirements: *id003
|
53
48
|
description: |
|
54
49
|
fairy is a framework for distributed processing in Ruby, originally
|
55
50
|
designed at Rakuten Institute of Technology with Yukihiro Matsumoto,
|
@@ -70,8 +65,8 @@ executables:
|
|
70
65
|
- fairy-cat
|
71
66
|
- fairy-cp
|
72
67
|
- fairy-rm
|
73
|
-
extensions:
|
74
|
-
|
68
|
+
extensions:
|
69
|
+
- ext/extconf.rb
|
75
70
|
extra_rdoc_files: []
|
76
71
|
|
77
72
|
files:
|
@@ -234,8 +229,18 @@ files:
|
|
234
229
|
- bin/subcmd/inspector
|
235
230
|
- bin/subcmd/master
|
236
231
|
- bin/subcmd/processor
|
237
|
-
- ext/
|
238
|
-
- ext/
|
232
|
+
- ext/extconf.rb
|
233
|
+
- ext/fairy.c
|
234
|
+
- ext/p-group-by.c
|
235
|
+
- ext/simple-hash.c
|
236
|
+
- ext/xsized-queue.c
|
237
|
+
- ext/p-xgroup-by.c
|
238
|
+
- ext/xmarshaled-queue.c
|
239
|
+
- ext/string-buffer.c
|
240
|
+
- ext/fixnum-buffer.c
|
241
|
+
- ext/fiber_mon.h
|
242
|
+
- ext/fairy.h
|
243
|
+
- ext/xthread.h
|
239
244
|
- doc/programming-interface.rd
|
240
245
|
- doc/programming-interface.html
|
241
246
|
- spec/README
|
@@ -255,12 +260,12 @@ files:
|
|
255
260
|
- test/testc.rb
|
256
261
|
- tools/git-tag
|
257
262
|
- tools/svn-tags
|
263
|
+
- tools/fairy_conf_wizard.rb
|
258
264
|
- tools/log-analysis.rb
|
259
265
|
- tools/cap_recipe/cluster.yml.sample
|
260
266
|
- tools/cap_recipe/Capfile
|
261
267
|
- tools/fairy_perf_graph.rb
|
262
268
|
- tools/svn-ls-diff
|
263
|
-
has_rdoc: true
|
264
269
|
homepage: http://code.google.com/p/fairy-prj/
|
265
270
|
licenses: []
|
266
271
|
|
@@ -274,23 +279,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
274
279
|
requirements:
|
275
280
|
- - ">="
|
276
281
|
- !ruby/object:Gem::Version
|
277
|
-
hash: 3
|
278
|
-
segments:
|
279
|
-
- 0
|
280
282
|
version: "0"
|
281
283
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
282
284
|
none: false
|
283
285
|
requirements:
|
284
286
|
- - ">="
|
285
287
|
- !ruby/object:Gem::Version
|
286
|
-
hash: 3
|
287
|
-
segments:
|
288
|
-
- 0
|
289
288
|
version: "0"
|
290
289
|
requirements: []
|
291
290
|
|
292
291
|
rubyforge_project: fairy
|
293
|
-
rubygems_version: 1.
|
292
|
+
rubygems_version: 1.8.5
|
294
293
|
signing_key:
|
295
294
|
specification_version: 3
|
296
295
|
summary: fairy is a framework for distributed processing in Ruby, originally designed at Rakuten Institute of Technology with Yukihiro Matsumoto, the founder of Ruby.
|
data/ext/simple_hash/extconf.rb
DELETED
@@ -1,42 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
* Copyright (C) 2007-2010 Rakuten, Inc.
|
3
|
-
*/
|
4
|
-
|
5
|
-
#include <ruby.h>
|
6
|
-
|
7
|
-
#define MULTIPLIER 137
|
8
|
-
|
9
|
-
static VALUE simple_hash(VALUE self, VALUE vstr);
|
10
|
-
|
11
|
-
|
12
|
-
static VALUE mFairy;
|
13
|
-
static VALUE mSimpleHash;
|
14
|
-
|
15
|
-
|
16
|
-
static VALUE simple_hash(VALUE self, VALUE vstr) {
|
17
|
-
VALUE vh;
|
18
|
-
char *str;
|
19
|
-
int len;
|
20
|
-
char *p;
|
21
|
-
unsigned int h = 0;
|
22
|
-
|
23
|
-
str = StringValuePtr(vstr);
|
24
|
-
len = RSTRING_LEN(vstr);
|
25
|
-
|
26
|
-
for (p = str; p - str < len; p++) {
|
27
|
-
h = h * MULTIPLIER + *p;
|
28
|
-
}
|
29
|
-
|
30
|
-
/* vh = UINT2NUM(h); */
|
31
|
-
vh = INT2FIX(h);
|
32
|
-
return vh;
|
33
|
-
}
|
34
|
-
|
35
|
-
void Init_simple_hash(void) {
|
36
|
-
mFairy = rb_define_module("Fairy");
|
37
|
-
mSimpleHash = rb_define_module_under(mFairy, "SimpleHash");
|
38
|
-
|
39
|
-
rb_define_module_function(mSimpleHash, "hash", simple_hash, 1);
|
40
|
-
}
|
41
|
-
|
42
|
-
|