roma 0.8.2 → 0.8.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (114) hide show
  1. data/CHANG +326 -0
  2. data/CHANGELOG +132 -0
  3. data/{README.rdoc → FETCH_HEAD} +0 -0
  4. data/{LICENSE.rdoc → LICENSE} +0 -1
  5. data/README +17 -0
  6. data/Rakefile +33 -18
  7. data/ruby/server/bin/chg_redundancy +10 -0
  8. data/ruby/server/bin/key_access +7 -0
  9. data/ruby/server/bin/key_list +7 -0
  10. data/ruby/server/bin/mkconfig +19 -0
  11. data/{bin → ruby/server/bin}/mkrecent +0 -1
  12. data/{bin → ruby/server/bin}/mkroute +0 -1
  13. data/ruby/server/bin/multi_commander +19 -0
  14. data/ruby/server/bin/recoverlost +10 -0
  15. data/ruby/server/bin/recoverlost_alist +10 -0
  16. data/ruby/server/bin/recoverlost_alist_all +10 -0
  17. data/ruby/server/bin/recoverlost_alist_keys +10 -0
  18. data/{bin/recoverlost → ruby/server/bin/roma_watcher} +1 -2
  19. data/ruby/server/bin/romad +36 -0
  20. data/{bin → ruby/server/bin}/sample_watcher +0 -1
  21. data/{bin → ruby/server/bin}/sample_watcher2 +0 -1
  22. data/{bin/simple_bench → ruby/server/bin/sample_watcher3} +1 -2
  23. data/ruby/server/bin/simple_bench +26 -0
  24. data/{bin → ruby/server/bin}/ssroute +0 -1
  25. data/ruby/server/bin/test-scenario +11 -0
  26. data/{bin → ruby/server/bin}/tribunus +0 -1
  27. data/{lib → ruby/server/lib}/roma/async_process.rb +67 -15
  28. data/{lib → ruby/server/lib}/roma/command/bg_command_receiver.rb +1 -1
  29. data/ruby/server/lib/roma/command/command_definition.rb +422 -0
  30. data/ruby/server/lib/roma/command/mh_command_receiver.rb +127 -0
  31. data/ruby/server/lib/roma/command/receiver.rb +64 -0
  32. data/{lib → ruby/server/lib}/roma/command/rt_command_receiver.rb +6 -1
  33. data/ruby/server/lib/roma/command/sys_command_receiver.rb +609 -0
  34. data/{lib → ruby/server/lib}/roma/command/util_command_receiver.rb +15 -5
  35. data/{lib → ruby/server/lib}/roma/command/vn_command_receiver.rb +12 -4
  36. data/{lib → ruby/server/lib}/roma/command_plugin.rb +0 -0
  37. data/ruby/server/lib/roma/config.rb +84 -0
  38. data/{lib → ruby/server/lib}/roma/event/con_pool.rb +12 -1
  39. data/ruby/server/lib/roma/event/handler.rb +256 -0
  40. data/ruby/server/lib/roma/live_patch-20120302-001.rb +107 -0
  41. data/ruby/server/lib/roma/logging/rlogger.rb +163 -0
  42. data/ruby/server/lib/roma/messaging/con_pool.rb +92 -0
  43. data/{lib → ruby/server/lib}/roma/plugin/plugin_alist.rb +118 -240
  44. data/ruby/server/lib/roma/plugin/plugin_debug.rb +31 -0
  45. data/ruby/server/lib/roma/plugin/plugin_map.rb +177 -0
  46. data/ruby/server/lib/roma/plugin/plugin_mapcount.rb +185 -0
  47. data/{lib/roma/command/st_command_receiver.rb → ruby/server/lib/roma/plugin/plugin_storage.rb} +170 -146
  48. data/ruby/server/lib/roma/plugin/plugin_stub.rb +283 -0
  49. data/{lib → ruby/server/lib}/roma/plugin/plugin_test.rb +0 -0
  50. data/{lib → ruby/server/lib}/roma/romad.rb +221 -94
  51. data/{lib → ruby/server/lib}/roma/routing/cb_rttable.rb +4 -6
  52. data/{lib → ruby/server/lib}/roma/routing/merkle_tree.rb +0 -0
  53. data/ruby/server/lib/roma/routing/routing_data.rb +307 -0
  54. data/{lib → ruby/server/lib}/roma/routing/rttable.rb +4 -0
  55. data/{lib → ruby/server/lib}/roma/stats.rb +19 -3
  56. data/{lib → ruby/server/lib}/roma/storage/basic_storage.rb +25 -26
  57. data/{lib → ruby/server/lib}/roma/storage/dbm_storage.rb +1 -23
  58. data/{lib → ruby/server/lib}/roma/storage/dummy_storage.rb +0 -0
  59. data/{lib → ruby/server/lib}/roma/storage/rh_storage.rb +0 -0
  60. data/{lib → ruby/server/lib}/roma/storage/sqlite3_storage.rb +0 -0
  61. data/{lib → ruby/server/lib}/roma/storage/tc_storage.rb +62 -2
  62. data/ruby/server/lib/roma/tools/chg_redundancy.rb +36 -0
  63. data/ruby/server/lib/roma/tools/key_access.rb +105 -0
  64. data/ruby/server/lib/roma/tools/key_list.rb +94 -0
  65. data/ruby/server/lib/roma/tools/mkconfig.rb +535 -0
  66. data/{lib → ruby/server/lib}/roma/tools/mkrecent.rb +0 -0
  67. data/{lib → ruby/server/lib}/roma/tools/mkroute.rb +0 -0
  68. data/ruby/server/lib/roma/tools/multi_commander.rb +45 -0
  69. data/{lib → ruby/server/lib}/roma/tools/recoverlost.rb +0 -0
  70. data/{lib → ruby/server/lib}/roma/tools/recoverlost_alist.rb +0 -0
  71. data/ruby/server/lib/roma/tools/recoverlost_alist_all.rb +8 -0
  72. data/ruby/server/lib/roma/tools/recoverlost_alist_keys.rb +16 -0
  73. data/ruby/server/lib/roma/tools/recoverlost_lib.rb +349 -0
  74. data/ruby/server/lib/roma/tools/roma_watcher.rb +150 -0
  75. data/ruby/server/lib/roma/tools/roma_watcher_config.yml.example +20 -0
  76. data/{lib → ruby/server/lib}/roma/tools/sample_watcher.rb +3 -1
  77. data/{lib → ruby/server/lib}/roma/tools/sample_watcher2.rb +3 -1
  78. data/ruby/server/lib/roma/tools/sample_watcher3.rb +49 -0
  79. data/{lib → ruby/server/lib}/roma/tools/simple_bench.rb +2 -0
  80. data/ruby/server/lib/roma/tools/simple_bench2.rb +78 -0
  81. data/{lib → ruby/server/lib}/roma/tools/ssroute.rb +0 -0
  82. data/ruby/server/lib/roma/tools/test-scenario.rb +327 -0
  83. data/{lib → ruby/server/lib}/roma/tools/tribunus.rb +0 -0
  84. data/ruby/server/lib/roma/version.rb +4 -0
  85. data/{lib → ruby/server/lib}/roma/write_behind.rb +1 -0
  86. data/ruby/server/test/config4mhash.rb +68 -0
  87. data/ruby/server/test/config4storage_error.rb +69 -0
  88. data/{lib/roma/config.rb → ruby/server/test/config4test.rb} +6 -3
  89. data/{test → ruby/server/test}/rcirb.rb +0 -1
  90. data/{test → ruby/server/test}/roma-test-utils.rb +21 -8
  91. data/{test → ruby/server/test}/run-test.rb +3 -2
  92. data/ruby/server/test/storage_error_storage.rb +37 -0
  93. data/ruby/server/test/t_command_definition.rb +326 -0
  94. data/{test → ruby/server/test}/t_cpdata.rb +9 -3
  95. data/{test → ruby/server/test}/t_listplugin.rb +48 -12
  96. data/ruby/server/test/t_mapcountplugin.rb +231 -0
  97. data/ruby/server/test/t_mapplugin.rb +131 -0
  98. data/ruby/server/test/t_mhash.rb +222 -0
  99. data/ruby/server/test/t_rclient.rb +199 -0
  100. data/{test → ruby/server/test}/t_routing_data.rb +56 -0
  101. data/{test → ruby/server/test}/t_storage.rb +107 -111
  102. data/ruby/server/test/t_storage_error.rb +61 -0
  103. data/ruby/server/test/t_writebehind.rb +374 -0
  104. metadata +150 -82
  105. data/bin/recoverlost_alist +0 -8
  106. data/bin/romad +0 -7
  107. data/lib/roma/command/mh_command_receiver.rb +0 -117
  108. data/lib/roma/command/receiver.rb +0 -287
  109. data/lib/roma/event/handler.rb +0 -159
  110. data/lib/roma/plugin/plugin_debug.rb +0 -19
  111. data/lib/roma/tools/recoverlost_lib.rb +0 -217
  112. data/lib/roma/version.rb +0 -4
  113. data/test/t_rclient.rb +0 -318
  114. data/test/t_writebehind.rb +0 -200
File without changes
@@ -1,4 +1,3 @@
1
- = LICENSE
2
1
  GNU GENERAL PUBLIC LICENSE
3
2
  Version 3, 29 June 2007
4
3
 
data/README ADDED
@@ -0,0 +1,17 @@
1
+ ================================================================
2
+ ROMA: A Distributed Key-Value Store in Ruby
3
+ Copyright (C) 2009 Rakuten, Inc.
4
+ ================================================================
5
+
6
+ ROMA is one of the data storing systems for distributed key-value
7
+ stores. It is a completely decentralized distributed system that
8
+ consists of multiple processes, called nodes, on several machines. It
9
+ is based on pure P2P architecture like a distributed hash table, thus
10
+ it provides high availability and scalability.
11
+
12
+ ROMA is written in Ruby. However, following choices are available to
13
+ access to ROMA.
14
+
15
+ * Client libraries of Ruby and Java are available.
16
+ * ROMA protocol is compatible with memcached text-based one so that
17
+ any memcached client libraries allows users to interact with ROMA.
data/Rakefile CHANGED
@@ -1,31 +1,44 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  require 'rubygems'
3
3
  require 'rake'
4
- require 'rake/gempackagetask'
5
- require 'rake/rdoctask'
4
+
5
+ begin
6
+ require 'rubygems/package_task'
7
+ PackageTask = Gem::PackageTask
8
+ rescue LoadError
9
+ require 'rake/gempackagetask'
10
+ PackageTask = Rake::GemPackageTask
11
+ end
12
+
13
+ begin
14
+ require 'rdoc/task'
15
+ rescue LoadError
16
+ require 'rake/rdoctask'
17
+ end
6
18
 
7
19
  RDOC_OPTIONS = [
8
20
  '--line-numbers',
9
21
  '--inline-source',
10
- "--main", "README.rdoc",
22
+ "--main", "README",
11
23
  "-c UTF-8",
12
24
  ]
13
25
 
14
26
  # gem tasks
27
+ base = 'ruby/server/'
15
28
  PKG_FILES = FileList[
16
29
  '[A-Z]*',
17
- 'bin/**/*',
18
- 'lib/**/*.rb',
19
- 'test/**/*.rb',
20
- 'spec/**/*.rb',
21
- 'doc/**/*',
22
- 'examples/**/*',
30
+ base + 'bin/**/*',
31
+ base + 'lib/**/*',
32
+ base + 'test/**/*.rb',
33
+ base + 'spec/**/*.rb',
34
+ base + 'doc/**/*',
35
+ base + 'examples/**/*',
23
36
  ]
24
37
 
25
- EXEC_TABLE = Dir.entries('bin').reject{ |d| d =~ /^\.+$/ || d =~ /^sample_/ }
26
-
38
+ EXEC_TABLE = Dir.entries(base + 'bin').reject{ |d| d =~ /^\.+$/ || d =~ /^sample_/ }
27
39
 
28
- VER_NUM = `ruby -Ilib -e 'require "roma/version"; puts Roma::VERSION'`
40
+ require File.expand_path(File.join('ruby', 'server', 'lib', 'roma', 'version'), File.dirname(__FILE__))
41
+ VER_NUM = Roma::VERSION
29
42
 
30
43
  if VER_NUM =~ /([0-9.]+)$/
31
44
  CURRENT_VERSION = $1
@@ -34,6 +47,8 @@ else
34
47
  end
35
48
 
36
49
  SPEC = Gem::Specification.new do |s|
50
+ s.authors = ["Junji Torii", "Hiroki Matsue"]
51
+ s.homepage = 'http://code.google.com/p/roma-prj/'
37
52
  s.name = "roma"
38
53
  s.version = CURRENT_VERSION
39
54
  s.summary = "ROMA server"
@@ -43,21 +58,21 @@ SPEC = Gem::Specification.new do |s|
43
58
  s.files = PKG_FILES.to_a
44
59
 
45
60
  # Use these for libraries.
46
- s.require_path = 'lib'
61
+ s.require_path = base + 'lib'
47
62
 
48
63
  # Use these for applications.
49
- s.bindir = "bin"
64
+ s.bindir = base + "bin"
50
65
  s.executables = EXEC_TABLE
51
66
  s.default_executable = "romad"
52
67
 
53
68
  s.has_rdoc = true
54
69
  s.rdoc_options.concat RDOC_OPTIONS
55
- s.extra_rdoc_files = ["README.rdoc"]
70
+ s.extra_rdoc_files = ["README", "CHANGELOG"]
56
71
 
57
- s.add_dependency('roma-commons')
72
+ s.add_dependency('eventmachine')
58
73
  end
59
74
 
60
- package_task = Rake::GemPackageTask.new(SPEC) do |pkg|
75
+ package_task = PackageTask.new(SPEC) do |pkg|
61
76
  end
62
77
 
63
78
 
@@ -66,5 +81,5 @@ Rake::RDocTask.new("doc") { |rdoc|
66
81
  rdoc.title = "ROMA documents"
67
82
  rdoc.options.concat RDOC_OPTIONS
68
83
  rdoc.rdoc_files.include('lib/**/*.rb')
69
- rdoc.rdoc_files.include("README.rdoc")
84
+ rdoc.rdoc_files.include("README")
70
85
  }
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+ require 'pathname'
3
+
4
+ base_path = Pathname(__FILE__).dirname.parent.parent.expand_path
5
+ $LOAD_PATH.unshift("#{base_path}/server/lib")
6
+
7
+ client_base_path = Pathname(__FILE__).dirname.parent.parent.parent.parent.expand_path
8
+ $LOAD_PATH.unshift("#{client_base_path}/roma-ruby-client/lib")
9
+
10
+ require 'roma/tools/chg_redundancy'
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+ require 'pathname'
3
+
4
+ base_path = Pathname(__FILE__).dirname.parent.parent.expand_path
5
+ $LOAD_PATH.unshift("#{base_path}/server/lib")
6
+
7
+ require 'roma/tools/key_access'
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+ require 'pathname'
3
+
4
+ base_path = Pathname(__FILE__).dirname.parent.parent.expand_path
5
+ $LOAD_PATH.unshift("#{base_path}/server/lib")
6
+
7
+ require 'roma/tools/key_list'
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $:.unshift(File.expand_path(File.join('..', 'lib'), File.dirname(__FILE__)))
4
+
5
+ require 'optparse'
6
+ require 'roma/tools/mkconfig'
7
+
8
+ opt = OptionParser.new
9
+ opt.on("-m","--with_menu", "Show menu to setup configurations individually.") { |v| Roma::Mkconfig.new(:with_menu)}
10
+
11
+ if ARGV.count == 0
12
+ Roma::Mkconfig.new
13
+ elsif
14
+ begin
15
+ opt.parse!(ARGV)
16
+ rescue OptionParser::InvalidOption
17
+ puts opt.help
18
+ end
19
+ end
@@ -2,6 +2,5 @@
2
2
 
3
3
  path = File.dirname(File.expand_path($PROGRAM_NAME))
4
4
  $LOAD_PATH << path + "/../lib"
5
- $LOAD_PATH << path + "/../../commons/lib"
6
5
 
7
6
  require 'roma/tools/mkrecent'
@@ -2,6 +2,5 @@
2
2
 
3
3
  path = File.dirname(File.expand_path($PROGRAM_NAME))
4
4
  $LOAD_PATH << path + "/../lib"
5
- $LOAD_PATH << path + "/../../commons/lib"
6
5
 
7
6
  require 'roma/tools/mkroute'
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env ruby
2
+ require 'pathname'
3
+
4
+ base_path = Pathname(__FILE__).dirname.parent.parent.expand_path
5
+ $LOAD_PATH.unshift("#{base_path}/server/lib")
6
+
7
+ client_base_path = Pathname(__FILE__).dirname.parent.parent.parent.parent.expand_path
8
+ $LOAD_PATH.unshift("#{client_base_path}/roma-ruby-client/lib")
9
+
10
+ require 'roma/tools/multi_commander'
11
+
12
+ if ARGV.length < 2
13
+ STDERR.puts "usage:#{File.basename($0)} addr_port command args..."
14
+ exit
15
+ end
16
+
17
+ w = Roma::MultiCommander.new(ARGV[0])
18
+ STDOUT.puts w.send_cmd_all(ARGV[1..-1].join(' '))
19
+
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+ require 'pathname'
3
+
4
+ base_path = Pathname(__FILE__).dirname.parent.parent.expand_path
5
+ $LOAD_PATH.unshift("#{base_path}/server/lib")
6
+
7
+ client_base_path = Pathname(__FILE__).dirname.parent.parent.parent.parent.expand_path
8
+ $LOAD_PATH.unshift("#{client_base_path}/roma-ruby-client/lib")
9
+
10
+ require 'roma/tools/recoverlost'
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+ require 'pathname'
3
+
4
+ base_path = Pathname(__FILE__).dirname.parent.parent.expand_path
5
+ $LOAD_PATH.unshift("#{base_path}/server/lib")
6
+
7
+ client_base_path = Pathname(__FILE__).dirname.parent.parent.parent.parent.expand_path
8
+ $LOAD_PATH.unshift("#{client_base_path}/roma-ruby-client/lib")
9
+
10
+ require 'roma/tools/recoverlost_alist'
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+ require 'pathname'
3
+
4
+ base_path = Pathname(__FILE__).dirname.parent.parent.expand_path
5
+ $LOAD_PATH.unshift("#{base_path}/server/lib")
6
+
7
+ client_base_path = Pathname(__FILE__).dirname.parent.parent.parent.parent.expand_path
8
+ $LOAD_PATH.unshift("#{client_base_path}/roma-ruby-client/lib")
9
+
10
+ require 'roma/tools/recoverlost_alist_all'
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+ require 'pathname'
3
+
4
+ base_path = Pathname(__FILE__).dirname.parent.parent.expand_path
5
+ $LOAD_PATH.unshift("#{base_path}/server/lib")
6
+
7
+ client_base_path = Pathname(__FILE__).dirname.parent.parent.parent.parent.expand_path
8
+ $LOAD_PATH.unshift("#{client_base_path}/roma-ruby-client/lib")
9
+
10
+ require 'roma/tools/recoverlost_alist_keys'
@@ -2,7 +2,6 @@
2
2
 
3
3
  path = File.dirname(File.expand_path($PROGRAM_NAME))
4
4
  $LOAD_PATH << path + "/../lib"
5
- $LOAD_PATH << path + "/../../commons/lib"
6
5
  $LOAD_PATH << path + "/../../client/lib"
7
6
 
8
- require 'roma/tools/recoverlost'
7
+ require 'roma/tools/roma_watcher'
@@ -0,0 +1,36 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ path = File.dirname(File.expand_path($PROGRAM_NAME))
4
+ $LOAD_PATH << path + "/../lib"
5
+
6
+ require 'roma/romad'
7
+
8
+ def daemonize
9
+ p = Process.fork {
10
+ pid=Process.setsid
11
+ Signal.trap(:INT){
12
+ exit! 0
13
+ }
14
+ Signal.trap(:TERM){
15
+ exit! 0
16
+ }
17
+ Signal.trap(:HUP){
18
+ exit! 0
19
+ }
20
+ File.open("/dev/null","r+"){|f|
21
+ STDIN.reopen f
22
+ STDOUT.reopen f
23
+ STDERR.reopen f
24
+ }
25
+ yield
26
+ }
27
+ $stderr.puts p
28
+ exit! 0
29
+ end
30
+
31
+ $roma = Roma::Romad.new(ARGV)
32
+ if $roma.daemon?
33
+ daemonize{ $roma.start }
34
+ else
35
+ $roma.start
36
+ end
@@ -2,7 +2,6 @@
2
2
 
3
3
  path = File.dirname(File.expand_path($PROGRAM_NAME))
4
4
  $LOAD_PATH << path + "/../lib"
5
- $LOAD_PATH << path + "/../../commons/lib"
6
5
  $LOAD_PATH << path + "/../../client/lib"
7
6
 
8
7
  require 'roma/tools/sample_watcher'
@@ -2,7 +2,6 @@
2
2
 
3
3
  path = File.dirname(File.expand_path($PROGRAM_NAME))
4
4
  $LOAD_PATH << path + "/../lib"
5
- $LOAD_PATH << path + "/../../commons/lib"
6
5
  $LOAD_PATH << path + "/../../client/lib"
7
6
 
8
7
  require 'roma/tools/sample_watcher2'
@@ -2,7 +2,6 @@
2
2
 
3
3
  path = File.dirname(File.expand_path($PROGRAM_NAME))
4
4
  $LOAD_PATH << path + "/../lib"
5
- $LOAD_PATH << path + "/../../commons/lib"
6
5
  $LOAD_PATH << path + "/../../client/lib"
7
6
 
8
- require 'roma/tools/simple_bench'
7
+ require 'roma/tools/sample_watcher3'
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env ruby
2
+ require 'pathname'
3
+
4
+ base_path = Pathname(__FILE__).dirname.parent.parent.expand_path
5
+ $LOAD_PATH.unshift("#{base_path}/server/lib")
6
+
7
+ client_base_path = Pathname(__FILE__).dirname.parent.parent.parent.parent.expand_path
8
+ $LOAD_PATH.unshift("#{client_base_path}/roma-ruby-client/lib")
9
+
10
+ require 'roma/tools/simple_bench'
11
+
12
+ if ARGV.length == 0
13
+ STDERR.puts "usage:simple_bench addr:port"
14
+ exit
15
+ end
16
+
17
+ tn=10
18
+ t=[]
19
+ tn.times{
20
+ t << Thread.new{
21
+ random_rquest_sender(ARGV)
22
+ }
23
+ }
24
+
25
+ t[0].join
26
+
@@ -2,6 +2,5 @@
2
2
 
3
3
  path = File.dirname(File.expand_path($PROGRAM_NAME))
4
4
  $LOAD_PATH << path + "/../lib"
5
- $LOAD_PATH << path + "/../../commons/lib"
6
5
 
7
6
  require 'roma/tools/ssroute'
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env ruby
2
+ require 'pathname'
3
+
4
+ base_path = Pathname(__FILE__).dirname.parent.parent.expand_path
5
+ $LOAD_PATH.unshift("#{base_path}/server/lib")
6
+
7
+ client_base_path = Pathname(__FILE__).dirname.parent.parent.parent.parent.expand_path
8
+ $LOAD_PATH.unshift("#{client_base_path}/roma-ruby-client/lib")
9
+
10
+ require 'roma/tools/test-scenario'
11
+
@@ -2,6 +2,5 @@
2
2
 
3
3
  path = File.dirname(File.expand_path($PROGRAM_NAME))
4
4
  $LOAD_PATH << path + "/../lib"
5
- $LOAD_PATH << path + "/../../commons/lib"
6
5
 
7
6
  require 'roma/tools/tribunus'
@@ -1,3 +1,4 @@
1
+
1
2
  # -*- coding: utf-8 -*-
2
3
  require 'thread'
3
4
  require 'digest/sha1'
@@ -43,6 +44,7 @@ module Roma
43
44
  @async_thread = Thread.new{
44
45
  async_process_loop
45
46
  }
47
+ @async_thread[:name] = __method__
46
48
  rescue =>e
47
49
  @log.error("#{e}\n#{$@}")
48
50
  end
@@ -65,11 +67,12 @@ module Roma
65
67
  msg.callback.call(msg,true) if msg.callback
66
68
  else
67
69
  if msg.retry?
68
- Thread.new{
70
+ t = Thread.new{
69
71
  msg.wait
70
72
  msg.incr_count
71
73
  @@async_queue.push(msg)
72
74
  }
75
+ t[:name] = __method__
73
76
  else
74
77
  @log.error("async process retry out:#{msg.inspect}")
75
78
  msg.callback.call(msg,false) if msg.callback
@@ -85,9 +88,10 @@ module Roma
85
88
  def asyncev_broadcast_cmd(args)
86
89
  @log.debug("asyncev_broadcast_cmd #{args.inspect}")
87
90
  cmd, nids, tout = args
88
- Thread::new{
91
+ t = Thread::new{
89
92
  async_broadcast_cmd("#{cmd}\r\n", nids, tout)
90
93
  }
94
+ t[:name] = __method__
91
95
  true
92
96
  end
93
97
 
@@ -98,7 +102,7 @@ module Roma
98
102
  return true
99
103
  end
100
104
  @stats.run_acquire_vnodes = true
101
- Thread::new{
105
+ t = Thread::new{
102
106
  begin
103
107
  acquire_vnodes_process
104
108
  rescue =>e
@@ -108,6 +112,7 @@ module Roma
108
112
  @stats.join_ap = nil
109
113
  end
110
114
  }
115
+ t[:name] = __method__
111
116
  true
112
117
  end
113
118
 
@@ -115,7 +120,7 @@ module Roma
115
120
  @log.debug("asyncev_start_dumpfile_process #{args.inspect}")
116
121
  key, path, cmd = args
117
122
  path = Roma::Config::STORAGE_DUMP_PATH + '/' + path
118
- Thread.new{
123
+ t = Thread.new{
119
124
  begin
120
125
  except_vnh = {}
121
126
  @rttable.each_vnode{|vn,nids|
@@ -138,6 +143,7 @@ module Roma
138
143
  @log.error("#{e}\n#{$@}")
139
144
  end
140
145
  }
146
+ t[:name] = __method__
141
147
  true
142
148
  end
143
149
 
@@ -176,7 +182,7 @@ module Roma
176
182
  return true # no retry
177
183
  end
178
184
  res = async_send_cmd(nid,"rset #{k}\e#{hname} #{d} #{clk} #{expt} #{v.length}\r\n#{v}\r\n",10)
179
- unless res
185
+ if res == nil || res.start_with?("ERROR")
180
186
  @log.warn("async redundant failed:#{k}\e#{hname} #{d} #{clk} #{expt} #{v.length} -> #{nid}")
181
187
  return false # retry
182
188
  end
@@ -191,27 +197,43 @@ module Roma
191
197
  return true # no retry
192
198
  end
193
199
  res = async_send_cmd(nid,"rzset #{k}\e#{hname} #{d} #{clk} #{expt} #{zv.length}\r\n#{zv}\r\n",10)
194
- unless res
200
+ if res == nil || res.start_with?("ERROR")
195
201
  @log.warn("async zredundant failed:#{k}\e#{hname} #{d} #{clk} #{expt} #{v.length} -> #{nid}")
196
202
  return false # retry
197
203
  end
198
204
  true
199
205
  end
200
206
 
207
+ def asyncev_rdelete(args)
208
+ nid,hname,k,clk = args
209
+ @log.debug("asyncev_rdelete #{args.inspect}")
210
+ unless @rttable.nodes.include?(nid)
211
+ @log.warn("async rdelete failed:#{nid} dose not found in routing table.#{k}\e#{hname} #{clk}")
212
+ return true # no retry
213
+ end
214
+ res = async_send_cmd(nid,"rdelete #{k}\e#{hname} #{clk}\r\n",10)
215
+ unless res
216
+ @log.warn("async redundant failed:#{k}\e#{hname} #{clk} -> #{nid}")
217
+ return false # retry
218
+ end
219
+ true
220
+ end
221
+
201
222
  def asyncev_reqpushv(args)
202
223
  vn, nid, p = args
203
224
  @log.debug("asyncev_reqpushv #{args.inspect}")
204
- Thread::new{
225
+ t = Thread::new{
205
226
  sync_a_vnode(vn.to_i, nid, p == 'true')
206
227
  }
228
+ t[:name] = __method__
207
229
  end
208
230
 
209
231
  def asyncev_start_recover_process(args)
210
232
  @log.debug("asyncev_start_recover_process #{args.inspect}")
211
233
  @stats.run_recover = true
212
- Thread::new{
234
+ t = Thread::new{
213
235
  begin
214
- if args != nil
236
+ if args == nil || args.length == 0
215
237
  acquired_recover_process
216
238
  elsif args[0] == '-s'
217
239
  recover_process
@@ -225,12 +247,13 @@ module Roma
225
247
  end
226
248
  @stats.run_recover = false
227
249
  }
250
+ t[:name] = __method__
228
251
  end
229
252
 
230
253
  def asyncev_start_release_process(args)
231
254
  @log.debug("asyncev_start_release_process #{args}")
232
255
  @stats.run_release = true
233
- Thread::new{
256
+ t = Thread::new{
234
257
  begin
235
258
  release_process
236
259
  rescue => e
@@ -238,15 +261,17 @@ module Roma
238
261
  end
239
262
  @stats.run_relase = false
240
263
  }
264
+ t[:name] = __method__
241
265
  end
242
266
 
243
267
  def asyncev_start_sync_process(args)
244
268
  @log.debug("asyncev_start_sync_process")
245
269
  @stats.run_recover = true
246
- Thread::new{
270
+ t = Thread::new{
247
271
  sync_process(args)
248
272
  @stats.run_recover = false
249
273
  }
274
+ t[:name] = __method__
250
275
  end
251
276
 
252
277
  def sync_process(st)
@@ -354,9 +379,13 @@ module Roma
354
379
  def req_push_a_vnode(vn, src_nid, is_primary)
355
380
  con = Roma::Messaging::ConPool.instance.get_connection(src_nid)
356
381
  con.write("reqpushv #{vn} #{@stats.ap_str} #{is_primary}\r\n")
357
- res = con.gets # receive 'PUSHED\r\n' | 'REJECTED\r\n'
382
+ res = con.gets # receive 'PUSHED\r\n' | 'REJECTED\r\n' | 'ERROR\r\n'
358
383
  if res == "REJECTED\r\n"
359
384
  @log.warn("req_push_a_vnode:request was rejected from #{src_nid}.")
385
+ Roma::Messaging::ConPool.instance.return_connection(src_nid,con)
386
+ return :rejected
387
+ elsif res.start_with?("ERROR")
388
+ @log.warn("req_push_a_vnode:#{src_nid} busy.")
360
389
  return :rejected
361
390
  end
362
391
  Roma::Messaging::ConPool.instance.return_connection(src_nid,con)
@@ -606,9 +635,24 @@ module Roma
606
635
 
607
636
  def push_a_vnode_stream(hname, vn, nid)
608
637
  @stats.run_iterate_storage = true
609
- @log.info("push_a_vnode_stream:hname=#{hname} vn=#{vn} nid=#{nid}")
638
+ @log.info("#{__method__}:hname=#{hname} vn=#{vn} nid=#{nid}")
639
+
640
+ while(@stats.run_storage_clean_up)
641
+ @log.info("#{__method__}:stop clean up storage process")
642
+ @storages.each_value{|st| st.stop_clean_up}
643
+ sleep 0.1
644
+ end
645
+
610
646
  con = Roma::Messaging::ConPool.instance.get_connection(nid)
611
647
 
648
+ @do_push_a_vnode_stream = true
649
+
650
+ while(@stats.run_storage_clean_up)
651
+ @log.info("#{__method__}:stop_clean_up")
652
+ @storages.each_value{|st| st.stop_clean_up}
653
+ sleep 0.5
654
+ end
655
+
612
656
  con.write("spushv #{hname} #{vn}\r\n")
613
657
 
614
658
  res = con.gets # READY\r\n or error string
@@ -618,6 +662,13 @@ module Roma
618
662
  end
619
663
 
620
664
  @storages[hname].each_vn_dump(vn){|data|
665
+
666
+ unless @do_push_a_vnode_stream
667
+ con.close
668
+ @log.error("#{__method__}:canceled in hname=#{hname} vn=#{vn} nid=#{nid}")
669
+ return "CANCELED"
670
+ end
671
+
621
672
  @stats.run_iterate_storage = true
622
673
  con.write(data)
623
674
  sleep @stats.stream_copy_wait_param
@@ -643,7 +694,7 @@ module Roma
643
694
  return
644
695
  end
645
696
  @stats.run_storage_clean_up = true
646
- Thread::new{
697
+ t = Thread::new{
647
698
  begin
648
699
  storage_clean_up_process
649
700
  rescue =>e
@@ -652,6 +703,7 @@ module Roma
652
703
  @stats.run_storage_clean_up = false
653
704
  end
654
705
  }
706
+ t[:name] = __method__
655
707
  end
656
708
 
657
709
  def storage_clean_up_process
@@ -675,7 +727,7 @@ module Roma
675
727
  @stats.out_count += 1
676
728
  # @log.debug("#{__method__}:key=#{key} vn=#{vn}")
677
729
  nodes = @rttable.search_nodes_for_write(vn)
678
- next if(nodes.length <= 1)
730
+ next if(nodes == nil || nodes.length <= 1)
679
731
  nodes[1..-1].each{|nid|
680
732
  res = async_send_cmd(nid,"out #{key}\e#{hname} #{vn}\r\n")
681
733
  unless res