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.
Files changed (70) hide show
  1. data/Makefile +1 -0
  2. data/bin/fairy +35 -5
  3. data/ext/extconf.rb +3 -0
  4. data/ext/fairy.c +180 -0
  5. data/ext/fairy.h +94 -0
  6. data/ext/fiber_mon.h +32 -0
  7. data/ext/fixnum-buffer.c +483 -0
  8. data/ext/p-group-by.c +529 -0
  9. data/ext/p-xgroup-by.c +467 -0
  10. data/ext/simple-hash.c +44 -0
  11. data/ext/string-buffer.c +286 -0
  12. data/ext/xmarshaled-queue.c +699 -0
  13. data/ext/xsized-queue.c +528 -0
  14. data/ext/xthread.h +65 -0
  15. data/fairy.gemspec +5 -2
  16. data/lib/fairy.rb +10 -1
  17. data/lib/fairy/client/group-by.rb +57 -2
  18. data/lib/fairy/client/here.rb +2 -1
  19. data/lib/fairy/controller.rb +25 -4
  20. data/lib/fairy/master.rb +17 -3
  21. data/lib/fairy/master/c-basic-group-by.rb +4 -2
  22. data/lib/fairy/master/c-cat.rb +3 -2
  23. data/lib/fairy/master/c-direct-product.rb +5 -3
  24. data/lib/fairy/master/c-filter.rb +5 -3
  25. data/lib/fairy/master/c-group-by.rb +13 -0
  26. data/lib/fairy/master/c-junction.rb +3 -2
  27. data/lib/fairy/master/c-seg-join.rb +3 -1
  28. data/lib/fairy/master/c-seg-shuffle.rb +3 -2
  29. data/lib/fairy/master/c-seg-split.rb +1 -1
  30. data/lib/fairy/master/c-seg-zip.rb +3 -1
  31. data/lib/fairy/master/c-sort.rb +7 -2
  32. data/lib/fairy/master/c-wc.rb +5 -3
  33. data/lib/fairy/node.rb +13 -2
  34. data/lib/fairy/node/p-barrier.rb +1 -1
  35. data/lib/fairy/node/p-basic-group-by.rb +22 -12
  36. data/lib/fairy/node/p-direct-product.rb +4 -2
  37. data/lib/fairy/node/p-filter.rb +8 -7
  38. data/lib/fairy/node/p-find.rb +2 -1
  39. data/lib/fairy/node/p-group-by.rb +17 -6
  40. data/lib/fairy/node/p-inject.rb +3 -2
  41. data/lib/fairy/node/p-output-file.rb +1 -1
  42. data/lib/fairy/node/p-seg-join.rb +2 -1
  43. data/lib/fairy/node/p-seg-zip.rb +2 -1
  44. data/lib/fairy/node/p-single-exportable.rb +3 -1
  45. data/lib/fairy/node/p-sort.rb +4 -2
  46. data/lib/fairy/node/p-task.rb +1 -1
  47. data/lib/fairy/node/p-wc.rb +5 -2
  48. data/lib/fairy/processor.rb +25 -18
  49. data/lib/fairy/share/block-source.rb +12 -2
  50. data/lib/fairy/share/conf.rb +35 -5
  51. data/lib/fairy/share/hash-simple-hash.rb +1 -1
  52. data/lib/fairy/share/log.rb +11 -4
  53. data/lib/fairy/share/pool-dictionary.rb +2 -1
  54. data/lib/fairy/share/port-marshaled-queue.rb +8 -1
  55. data/lib/fairy/share/port.rb +55 -45
  56. data/lib/fairy/share/reference.rb +2 -1
  57. data/lib/fairy/share/varray.rb +3 -1
  58. data/lib/fairy/share/vfile.rb +4 -2
  59. data/lib/fairy/version.rb +1 -1
  60. data/sample/sort.rb +69 -3
  61. data/spec/fairy8_spec.rb +1 -1
  62. data/test/testc.rb +380 -2
  63. data/tools/cap_recipe/Capfile +3 -3
  64. data/tools/fairy_conf_wizard.rb +375 -0
  65. data/tools/fairy_perf_graph.rb +15 -3
  66. data/tools/git-tag +1 -0
  67. data/tools/log-analysis.rb +59 -11
  68. metadata +33 -34
  69. data/ext/simple_hash/extconf.rb +0 -4
  70. data/ext/simple_hash/simple_hash.c +0 -42
data/tools/git-tag CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/local/bin/ruby
2
+ # encoding: UTF-8
2
3
  #
3
4
  # svn-tags -
4
5
  # $Release Version: $
@@ -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 =~ PAT
28
- date, time, host, process, file, object, method, mes = $1, $2, $3, $4, $5, $6, $7, $8
29
- uuid = [host, process, object].join(" ")
30
-
31
- abs_time = Time.parse(date+" "+time)
32
- mes =~ /(START|FINISH)\s+(PROCESSING|EXPORT|IMPORT|STORE)/
33
- @events[uuid] ||= []
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
- puts "#{k}, #{st[0]}, #{st[2]}, #{fn[2]}, #{fn[2] - st[2]}"
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
- hash: 7
5
- prerelease: false
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: 2010-12-06 00:00:00 +09:00
19
- default_executable: fairy
13
+ date: 2011-06-07 00:00:00 Z
20
14
  dependencies:
21
15
  - !ruby/object:Gem::Dependency
22
- name: DeepConnect
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
- hash: 3
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
- hash: 27
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/simple_hash/extconf.rb
238
- - ext/simple_hash/simple_hash.c
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.3.7
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.
@@ -1,4 +0,0 @@
1
- require 'mkmf'
2
-
3
- create_makefile("simple_hash")
4
-
@@ -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
-