roma 0.8.2 → 0.8.10
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/CHANG +326 -0
- data/CHANGELOG +132 -0
- data/{README.rdoc → FETCH_HEAD} +0 -0
- data/{LICENSE.rdoc → LICENSE} +0 -1
- data/README +17 -0
- data/Rakefile +33 -18
- data/ruby/server/bin/chg_redundancy +10 -0
- data/ruby/server/bin/key_access +7 -0
- data/ruby/server/bin/key_list +7 -0
- data/ruby/server/bin/mkconfig +19 -0
- data/{bin → ruby/server/bin}/mkrecent +0 -1
- data/{bin → ruby/server/bin}/mkroute +0 -1
- data/ruby/server/bin/multi_commander +19 -0
- data/ruby/server/bin/recoverlost +10 -0
- data/ruby/server/bin/recoverlost_alist +10 -0
- data/ruby/server/bin/recoverlost_alist_all +10 -0
- data/ruby/server/bin/recoverlost_alist_keys +10 -0
- data/{bin/recoverlost → ruby/server/bin/roma_watcher} +1 -2
- data/ruby/server/bin/romad +36 -0
- data/{bin → ruby/server/bin}/sample_watcher +0 -1
- data/{bin → ruby/server/bin}/sample_watcher2 +0 -1
- data/{bin/simple_bench → ruby/server/bin/sample_watcher3} +1 -2
- data/ruby/server/bin/simple_bench +26 -0
- data/{bin → ruby/server/bin}/ssroute +0 -1
- data/ruby/server/bin/test-scenario +11 -0
- data/{bin → ruby/server/bin}/tribunus +0 -1
- data/{lib → ruby/server/lib}/roma/async_process.rb +67 -15
- data/{lib → ruby/server/lib}/roma/command/bg_command_receiver.rb +1 -1
- data/ruby/server/lib/roma/command/command_definition.rb +422 -0
- data/ruby/server/lib/roma/command/mh_command_receiver.rb +127 -0
- data/ruby/server/lib/roma/command/receiver.rb +64 -0
- data/{lib → ruby/server/lib}/roma/command/rt_command_receiver.rb +6 -1
- data/ruby/server/lib/roma/command/sys_command_receiver.rb +609 -0
- data/{lib → ruby/server/lib}/roma/command/util_command_receiver.rb +15 -5
- data/{lib → ruby/server/lib}/roma/command/vn_command_receiver.rb +12 -4
- data/{lib → ruby/server/lib}/roma/command_plugin.rb +0 -0
- data/ruby/server/lib/roma/config.rb +84 -0
- data/{lib → ruby/server/lib}/roma/event/con_pool.rb +12 -1
- data/ruby/server/lib/roma/event/handler.rb +256 -0
- data/ruby/server/lib/roma/live_patch-20120302-001.rb +107 -0
- data/ruby/server/lib/roma/logging/rlogger.rb +163 -0
- data/ruby/server/lib/roma/messaging/con_pool.rb +92 -0
- data/{lib → ruby/server/lib}/roma/plugin/plugin_alist.rb +118 -240
- data/ruby/server/lib/roma/plugin/plugin_debug.rb +31 -0
- data/ruby/server/lib/roma/plugin/plugin_map.rb +177 -0
- data/ruby/server/lib/roma/plugin/plugin_mapcount.rb +185 -0
- data/{lib/roma/command/st_command_receiver.rb → ruby/server/lib/roma/plugin/plugin_storage.rb} +170 -146
- data/ruby/server/lib/roma/plugin/plugin_stub.rb +283 -0
- data/{lib → ruby/server/lib}/roma/plugin/plugin_test.rb +0 -0
- data/{lib → ruby/server/lib}/roma/romad.rb +221 -94
- data/{lib → ruby/server/lib}/roma/routing/cb_rttable.rb +4 -6
- data/{lib → ruby/server/lib}/roma/routing/merkle_tree.rb +0 -0
- data/ruby/server/lib/roma/routing/routing_data.rb +307 -0
- data/{lib → ruby/server/lib}/roma/routing/rttable.rb +4 -0
- data/{lib → ruby/server/lib}/roma/stats.rb +19 -3
- data/{lib → ruby/server/lib}/roma/storage/basic_storage.rb +25 -26
- data/{lib → ruby/server/lib}/roma/storage/dbm_storage.rb +1 -23
- data/{lib → ruby/server/lib}/roma/storage/dummy_storage.rb +0 -0
- data/{lib → ruby/server/lib}/roma/storage/rh_storage.rb +0 -0
- data/{lib → ruby/server/lib}/roma/storage/sqlite3_storage.rb +0 -0
- data/{lib → ruby/server/lib}/roma/storage/tc_storage.rb +62 -2
- data/ruby/server/lib/roma/tools/chg_redundancy.rb +36 -0
- data/ruby/server/lib/roma/tools/key_access.rb +105 -0
- data/ruby/server/lib/roma/tools/key_list.rb +94 -0
- data/ruby/server/lib/roma/tools/mkconfig.rb +535 -0
- data/{lib → ruby/server/lib}/roma/tools/mkrecent.rb +0 -0
- data/{lib → ruby/server/lib}/roma/tools/mkroute.rb +0 -0
- data/ruby/server/lib/roma/tools/multi_commander.rb +45 -0
- data/{lib → ruby/server/lib}/roma/tools/recoverlost.rb +0 -0
- data/{lib → ruby/server/lib}/roma/tools/recoverlost_alist.rb +0 -0
- data/ruby/server/lib/roma/tools/recoverlost_alist_all.rb +8 -0
- data/ruby/server/lib/roma/tools/recoverlost_alist_keys.rb +16 -0
- data/ruby/server/lib/roma/tools/recoverlost_lib.rb +349 -0
- data/ruby/server/lib/roma/tools/roma_watcher.rb +150 -0
- data/ruby/server/lib/roma/tools/roma_watcher_config.yml.example +20 -0
- data/{lib → ruby/server/lib}/roma/tools/sample_watcher.rb +3 -1
- data/{lib → ruby/server/lib}/roma/tools/sample_watcher2.rb +3 -1
- data/ruby/server/lib/roma/tools/sample_watcher3.rb +49 -0
- data/{lib → ruby/server/lib}/roma/tools/simple_bench.rb +2 -0
- data/ruby/server/lib/roma/tools/simple_bench2.rb +78 -0
- data/{lib → ruby/server/lib}/roma/tools/ssroute.rb +0 -0
- data/ruby/server/lib/roma/tools/test-scenario.rb +327 -0
- data/{lib → ruby/server/lib}/roma/tools/tribunus.rb +0 -0
- data/ruby/server/lib/roma/version.rb +4 -0
- data/{lib → ruby/server/lib}/roma/write_behind.rb +1 -0
- data/ruby/server/test/config4mhash.rb +68 -0
- data/ruby/server/test/config4storage_error.rb +69 -0
- data/{lib/roma/config.rb → ruby/server/test/config4test.rb} +6 -3
- data/{test → ruby/server/test}/rcirb.rb +0 -1
- data/{test → ruby/server/test}/roma-test-utils.rb +21 -8
- data/{test → ruby/server/test}/run-test.rb +3 -2
- data/ruby/server/test/storage_error_storage.rb +37 -0
- data/ruby/server/test/t_command_definition.rb +326 -0
- data/{test → ruby/server/test}/t_cpdata.rb +9 -3
- data/{test → ruby/server/test}/t_listplugin.rb +48 -12
- data/ruby/server/test/t_mapcountplugin.rb +231 -0
- data/ruby/server/test/t_mapplugin.rb +131 -0
- data/ruby/server/test/t_mhash.rb +222 -0
- data/ruby/server/test/t_rclient.rb +199 -0
- data/{test → ruby/server/test}/t_routing_data.rb +56 -0
- data/{test → ruby/server/test}/t_storage.rb +107 -111
- data/ruby/server/test/t_storage_error.rb +61 -0
- data/ruby/server/test/t_writebehind.rb +374 -0
- metadata +150 -82
- data/bin/recoverlost_alist +0 -8
- data/bin/romad +0 -7
- data/lib/roma/command/mh_command_receiver.rb +0 -117
- data/lib/roma/command/receiver.rb +0 -287
- data/lib/roma/event/handler.rb +0 -159
- data/lib/roma/plugin/plugin_debug.rb +0 -19
- data/lib/roma/tools/recoverlost_lib.rb +0 -217
- data/lib/roma/version.rb +0 -4
- data/test/t_rclient.rb +0 -318
- data/test/t_writebehind.rb +0 -200
File without changes
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'roma/storage/rh_storage'
|
2
|
+
require 'roma/storage/tc_storage'
|
3
|
+
|
4
|
+
module Roma
|
5
|
+
|
6
|
+
module Config
|
7
|
+
DEFAULT_PORT = 12000
|
8
|
+
DEFAULT_NAME = 'ROMA'
|
9
|
+
|
10
|
+
# :no_action | :auto_assign | :shutdown
|
11
|
+
DEFAULT_LOST_ACTION = :auto_assign
|
12
|
+
|
13
|
+
# log setting
|
14
|
+
LOG_SHIFT_AGE = 10
|
15
|
+
LOG_SHIFT_SIZE = 1024 * 1024 * 10
|
16
|
+
LOG_PATH = '.'
|
17
|
+
# :debug | :info | :warn | :error
|
18
|
+
LOG_LEVEL = :debug
|
19
|
+
|
20
|
+
# routing setting
|
21
|
+
RTTABLE_PATH = '.'
|
22
|
+
|
23
|
+
# connection setting
|
24
|
+
# like a MaxStartups spec in the sshd_config
|
25
|
+
# 'start:rate:full'
|
26
|
+
CONNECTION_CONTINUOUS_LIMIT = '200:30:300'
|
27
|
+
|
28
|
+
# storage setting
|
29
|
+
STORAGE_CLASS = Storage::TCStorage
|
30
|
+
STORAGE_DIVNUM = 10
|
31
|
+
STORAGE_PATH = '.'
|
32
|
+
STORAGE_DUMP_PATH = '/tmp'
|
33
|
+
STORAGE_OPTION = ''
|
34
|
+
|
35
|
+
# 5 days ago
|
36
|
+
STORAGE_DELMARK_EXPTIME = 60 * 60 * 24 * 5
|
37
|
+
|
38
|
+
# data copy setting
|
39
|
+
DATACOPY_STREAM_COPY_WAIT_PARAM = 0.0001
|
40
|
+
|
41
|
+
# plugin setting
|
42
|
+
PLUGIN_FILES = ['plugin_storage.rb','plugin_alist.rb']
|
43
|
+
|
44
|
+
# write-behind setting
|
45
|
+
WRITEBEHIND_PATH = './wb'
|
46
|
+
WRITEBEHIND_SHIFT_SIZE = 1024 * 1024 * 10
|
47
|
+
|
48
|
+
# redundant setting
|
49
|
+
REDUNDANT_ZREDUNDANT_SIZE = 0
|
50
|
+
|
51
|
+
def self.get_stat
|
52
|
+
ret = {}
|
53
|
+
ret['config.DEFAULT_LOST_ACTION'] = DEFAULT_LOST_ACTION
|
54
|
+
ret['config.LOG_SHIFT_AGE'] = LOG_SHIFT_AGE
|
55
|
+
ret['config.LOG_SHIFT_SIZE'] = LOG_SHIFT_SIZE
|
56
|
+
ret['config.LOG_PATH'] = File.expand_path(LOG_PATH)
|
57
|
+
ret['config.RTTABLE_PATH'] = File.expand_path(RTTABLE_PATH)
|
58
|
+
ret['config.STORAGE_DELMARK_EXPTIME'] = STORAGE_DELMARK_EXPTIME
|
59
|
+
ret['config.DATACOPY_STREAM_COPY_WAIT_PARAM'] = DATACOPY_STREAM_COPY_WAIT_PARAM
|
60
|
+
ret['config.PLUGIN_FILES'] = PLUGIN_FILES.inspect
|
61
|
+
ret['config.WRITEBEHIND_PATH'] = File.expand_path(WRITEBEHIND_PATH)
|
62
|
+
ret['config.WRITEBEHIND_SHIFT_SIZE'] = WRITEBEHIND_SHIFT_SIZE
|
63
|
+
ret
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
require 'roma/storage/rh_storage'
|
2
|
+
require 'roma/storage/storage_error_storage'
|
3
|
+
|
4
|
+
module Roma
|
5
|
+
|
6
|
+
module Config
|
7
|
+
DEFAULT_PORT = 12000
|
8
|
+
DEFAULT_NAME = 'ROMA'
|
9
|
+
|
10
|
+
# :no_action | :auto_assign | :shutdown
|
11
|
+
DEFAULT_LOST_ACTION = :auto_assign
|
12
|
+
|
13
|
+
# log setting
|
14
|
+
LOG_SHIFT_AGE = 10
|
15
|
+
LOG_SHIFT_SIZE = 1024 * 1024 * 10
|
16
|
+
LOG_PATH = '.'
|
17
|
+
# :debug | :info | :warn | :error
|
18
|
+
LOG_LEVEL = :debug
|
19
|
+
|
20
|
+
# routing setting
|
21
|
+
RTTABLE_PATH = '.'
|
22
|
+
|
23
|
+
# connection setting
|
24
|
+
# like a MaxStartups spec in the sshd_config
|
25
|
+
# 'start:rate:full'
|
26
|
+
CONNECTION_CONTINUOUS_LIMIT = '200:30:300'
|
27
|
+
|
28
|
+
# storage setting
|
29
|
+
# STORAGE_CLASS = Roma::Storage::RubyHashStorage
|
30
|
+
STORAGE_CLASS = Storage::StorageErrorStorage
|
31
|
+
STORAGE_DIVNUM = 10
|
32
|
+
STORAGE_PATH = '.'
|
33
|
+
STORAGE_DUMP_PATH = '/tmp'
|
34
|
+
STORAGE_OPTION = ''
|
35
|
+
|
36
|
+
# 5 days ago
|
37
|
+
STORAGE_DELMARK_EXPTIME = 60 * 60 * 24 * 5
|
38
|
+
|
39
|
+
# data copy setting
|
40
|
+
DATACOPY_STREAM_COPY_WAIT_PARAM = 0.0001
|
41
|
+
|
42
|
+
# plugin setting
|
43
|
+
PLUGIN_FILES = ['plugin_storage.rb','plugin_alist.rb','plugin_map.rb']
|
44
|
+
|
45
|
+
# write-behind setting
|
46
|
+
WRITEBEHIND_PATH = './wb'
|
47
|
+
WRITEBEHIND_SHIFT_SIZE = 1024 * 1024 * 10
|
48
|
+
|
49
|
+
# redundant setting
|
50
|
+
REDUNDANT_ZREDUNDANT_SIZE = 0
|
51
|
+
|
52
|
+
def self.get_stat
|
53
|
+
ret = {}
|
54
|
+
ret['config.DEFAULT_LOST_ACTION'] = DEFAULT_LOST_ACTION
|
55
|
+
ret['config.LOG_SHIFT_AGE'] = LOG_SHIFT_AGE
|
56
|
+
ret['config.LOG_SHIFT_SIZE'] = LOG_SHIFT_SIZE
|
57
|
+
ret['config.LOG_PATH'] = File.expand_path(LOG_PATH)
|
58
|
+
ret['config.RTTABLE_PATH'] = File.expand_path(RTTABLE_PATH)
|
59
|
+
ret['config.STORAGE_DELMARK_EXPTIME'] = STORAGE_DELMARK_EXPTIME
|
60
|
+
ret['config.DATACOPY_STREAM_COPY_WAIT_PARAM'] = DATACOPY_STREAM_COPY_WAIT_PARAM
|
61
|
+
ret['config.PLUGIN_FILES'] = PLUGIN_FILES.inspect
|
62
|
+
ret['config.WRITEBEHIND_PATH'] = File.expand_path(WRITEBEHIND_PATH)
|
63
|
+
ret['config.WRITEBEHIND_SHIFT_SIZE'] = WRITEBEHIND_SHIFT_SIZE
|
64
|
+
ret
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'roma/routing/rttable'
|
2
|
-
require 'roma/routing/cb_rttable'
|
3
1
|
require 'roma/storage/rh_storage'
|
4
2
|
|
5
3
|
module Roma
|
@@ -21,6 +19,11 @@ module Roma
|
|
21
19
|
# routing setting
|
22
20
|
RTTABLE_PATH = '.'
|
23
21
|
|
22
|
+
# connection setting
|
23
|
+
# like a MaxStartups spec in the sshd_config
|
24
|
+
# 'start:rate:full'
|
25
|
+
CONNECTION_CONTINUOUS_LIMIT = '200:30:300'
|
26
|
+
|
24
27
|
# storage setting
|
25
28
|
STORAGE_CLASS = Roma::Storage::RubyHashStorage
|
26
29
|
STORAGE_DIVNUM = 10
|
@@ -35,7 +38,7 @@ module Roma
|
|
35
38
|
DATACOPY_STREAM_COPY_WAIT_PARAM = 0.0001
|
36
39
|
|
37
40
|
# plugin setting
|
38
|
-
PLUGIN_FILES = []
|
41
|
+
PLUGIN_FILES = ['plugin_storage.rb','plugin_alist.rb','plugin_map.rb','plugin_mapcount.rb']
|
39
42
|
|
40
43
|
# write-behind setting
|
41
44
|
WRITEBEHIND_PATH = './wb'
|
@@ -1,8 +1,9 @@
|
|
1
1
|
require 'shell'
|
2
|
-
|
3
2
|
require 'pathname'
|
4
3
|
require 'fileutils'
|
5
4
|
require 'rbconfig'
|
5
|
+
require 'roma/config'
|
6
|
+
require 'roma/messaging/con_pool'
|
6
7
|
|
7
8
|
module RomaTestUtils
|
8
9
|
module_function
|
@@ -18,6 +19,10 @@ module RomaTestUtils
|
|
18
19
|
server_base_dir + "bin"
|
19
20
|
end
|
20
21
|
|
22
|
+
def server_test_dir
|
23
|
+
server_base_dir + "test"
|
24
|
+
end
|
25
|
+
|
21
26
|
def mkroute_path
|
22
27
|
(server_bin_dir + "mkroute").to_s
|
23
28
|
end
|
@@ -31,23 +36,30 @@ module RomaTestUtils
|
|
31
36
|
RbConfig::CONFIG["ruby_install_name"])
|
32
37
|
end
|
33
38
|
|
34
|
-
def start_roma
|
39
|
+
def start_roma conf='config4test.rb'
|
35
40
|
sh = Shell.new
|
36
41
|
sh.transact do
|
37
42
|
Dir.glob("localhost_1121?.*").each{|f| rm f }
|
38
43
|
end
|
39
|
-
FileUtils.rm_rf("localhost_11211")
|
40
|
-
FileUtils.rm_rf("localhost_11212")
|
44
|
+
FileUtils.rm_rf("#{Roma::Config::STORAGE_PATH}/localhost_11211")
|
45
|
+
FileUtils.rm_rf("#{Roma::Config::STORAGE_PATH}/localhost_11212")
|
41
46
|
sleep 0.1
|
42
47
|
|
43
48
|
sh.system(ruby_path, mkroute_path,
|
44
49
|
"localhost_11211","localhost_11212",
|
45
50
|
"-d","3",
|
46
51
|
"--enabled_repeathost")
|
47
|
-
sleep 0.
|
48
|
-
|
49
|
-
|
50
|
-
|
52
|
+
sleep 0.2
|
53
|
+
do_command_romad conf
|
54
|
+
sleep 1
|
55
|
+
end
|
56
|
+
|
57
|
+
def do_command_romad conf
|
58
|
+
sh = Shell.new
|
59
|
+
sh.system(ruby_path,romad_path,"localhost","-p","11211","-d","--verbose",
|
60
|
+
"--disabled_cmd_protect","--config","#{server_test_dir}/#{conf}")
|
61
|
+
sh.system(ruby_path,romad_path,"localhost","-p","11212","-d","--verbose",
|
62
|
+
"--disabled_cmd_protect","--config","#{server_test_dir}/#{conf}")
|
51
63
|
end
|
52
64
|
|
53
65
|
def stop_roma
|
@@ -59,6 +71,7 @@ module RomaTestUtils
|
|
59
71
|
conn.gets
|
60
72
|
conn.close
|
61
73
|
end
|
74
|
+
Roma::Client::ConPool.instance.close_all
|
62
75
|
rescue =>e
|
63
76
|
puts "#{e} #{$@}"
|
64
77
|
end
|
@@ -5,10 +5,11 @@ require 'pathname'
|
|
5
5
|
|
6
6
|
base_path = Pathname(__FILE__).dirname.parent.parent.expand_path
|
7
7
|
$LOAD_PATH.unshift("#{base_path}/server/lib")
|
8
|
-
$LOAD_PATH.unshift("#{base_path}/client/lib")
|
9
|
-
$LOAD_PATH.unshift("#{base_path}/commons/lib")
|
10
8
|
$LOAD_PATH.unshift("#{base_path}/server/test")
|
11
9
|
|
10
|
+
client_base_path = Pathname(__FILE__).dirname.parent.parent.parent.parent.expand_path
|
11
|
+
$LOAD_PATH.unshift("#{client_base_path}/roma-ruby-client/lib")
|
12
|
+
|
12
13
|
require 'roma-test-utils'
|
13
14
|
|
14
15
|
Dir["#{base_path}/server/test/t_*.rb"].each do |test_file|
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'roma/storage/basic_storage'
|
2
|
+
|
3
|
+
module Roma
|
4
|
+
module Storage
|
5
|
+
|
6
|
+
class Dummy
|
7
|
+
def put(k,v)
|
8
|
+
raise StorageException, "error:get"
|
9
|
+
end
|
10
|
+
def get(k)
|
11
|
+
raise StorageException, "error:get"
|
12
|
+
end
|
13
|
+
def out(k)
|
14
|
+
true
|
15
|
+
end
|
16
|
+
def rnum
|
17
|
+
0
|
18
|
+
end
|
19
|
+
def each
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
class StorageErrorStorage < BasicStorage
|
24
|
+
|
25
|
+
def opendb
|
26
|
+
create_div_hash
|
27
|
+
@divnum.times{ |i|
|
28
|
+
@hdb[i] = Dummy.new
|
29
|
+
}
|
30
|
+
end
|
31
|
+
|
32
|
+
def close_db(hdb); end
|
33
|
+
|
34
|
+
end # class StorageErrorStorage
|
35
|
+
|
36
|
+
end # module Storage
|
37
|
+
end # module Roma
|
@@ -0,0 +1,326 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'roma/command/command_definition'
|
3
|
+
require 'digest/sha1'
|
4
|
+
require 'test/unit'
|
5
|
+
|
6
|
+
module CommandModuleTest1
|
7
|
+
include Roma::Command::Definition
|
8
|
+
|
9
|
+
def_command_with_relay :balse do |s|
|
10
|
+
command_argument_validation_num s, 3
|
11
|
+
case s[2]
|
12
|
+
when 'ex_runtime'
|
13
|
+
raise s[1]
|
14
|
+
when 'ex_client'
|
15
|
+
raise Roma::Command::Definition::ClientErrorException, s[1]
|
16
|
+
when 'ex_server'
|
17
|
+
raise Roma::Command::Definition::ServerErrorException, s[1]
|
18
|
+
end
|
19
|
+
s
|
20
|
+
end
|
21
|
+
|
22
|
+
def_read_command_with_key :rget, :no_forward do |ctx|
|
23
|
+
ctx
|
24
|
+
end
|
25
|
+
|
26
|
+
def_write_command_with_key :wget, :no_forward do |ctx|
|
27
|
+
ctx
|
28
|
+
end
|
29
|
+
|
30
|
+
def_command_with_key :get, :no_forward do |ctx|
|
31
|
+
case ctx.argv[2]
|
32
|
+
when 'ex_runtime'
|
33
|
+
raise ctx.argv[1]
|
34
|
+
when 'ex_client'
|
35
|
+
raise Roma::Command::Definition::ClientErrorException, ctx.argv[1]
|
36
|
+
when 'ex_server'
|
37
|
+
raise Roma::Command::Definition::ServerErrorException, ctx.argv[1]
|
38
|
+
end
|
39
|
+
ctx
|
40
|
+
end
|
41
|
+
|
42
|
+
def_write_command_with_key_value :wset, 4, :no_forward do |ctx|
|
43
|
+
ctx
|
44
|
+
end
|
45
|
+
|
46
|
+
def_read_command_with_key_value :rset, 4, :no_forward do |ctx|
|
47
|
+
ctx
|
48
|
+
end
|
49
|
+
|
50
|
+
def_command_with_key_value :set, 4, :no_forward do |ctx|
|
51
|
+
case ctx.argv[2]
|
52
|
+
when 'ex_runtime'
|
53
|
+
raise ctx.argv[1]
|
54
|
+
when 'ex_client'
|
55
|
+
raise Roma::Command::Definition::ClientErrorException, ctx.argv[1]
|
56
|
+
when 'ex_server'
|
57
|
+
raise Roma::Command::Definition::ServerErrorException, ctx.argv[1]
|
58
|
+
end
|
59
|
+
ctx
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
module CommandModuleTest2
|
64
|
+
include Roma::Command::Definition
|
65
|
+
|
66
|
+
def_command_with_relay :runtimeexception do |s|
|
67
|
+
raise
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
module CommandModuleTest3
|
72
|
+
include Roma::Command::Definition
|
73
|
+
|
74
|
+
def_command_with_relay :balse do |s|
|
75
|
+
"override"
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
class DefCmdTest
|
80
|
+
include Roma::Command::Definition
|
81
|
+
include CommandModuleTest1
|
82
|
+
include CommandModuleTest2
|
83
|
+
|
84
|
+
#
|
85
|
+
# define stub for test
|
86
|
+
#
|
87
|
+
|
88
|
+
class RtStub
|
89
|
+
attr_reader :hbits
|
90
|
+
|
91
|
+
def initialize
|
92
|
+
@hbits = 10
|
93
|
+
end
|
94
|
+
|
95
|
+
def get_vnode_id(d) 1 end
|
96
|
+
def search_nodes_for_write(vn) ['roma0','roma1'] end
|
97
|
+
end
|
98
|
+
|
99
|
+
class LogStub
|
100
|
+
def warn str
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
class StorageStub
|
105
|
+
def get_raw(*arg)
|
106
|
+
nil
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
def initialize
|
111
|
+
@stats = Struct.new(:ap_str).new(:ap_str)
|
112
|
+
@rttable = RtStub.new
|
113
|
+
@defhash = 'roma'
|
114
|
+
@log = LogStub.new
|
115
|
+
@storages = Hash.new(StorageStub.new)
|
116
|
+
end
|
117
|
+
|
118
|
+
def send_data str
|
119
|
+
str
|
120
|
+
end
|
121
|
+
|
122
|
+
def broadcast_cmd str
|
123
|
+
{:broadcast_cmd=>str}
|
124
|
+
end
|
125
|
+
|
126
|
+
def read_bytes n
|
127
|
+
ret = 'a'
|
128
|
+
(n - 1).times{ ret += ret[-1].succ }
|
129
|
+
ret
|
130
|
+
end
|
131
|
+
|
132
|
+
def command_argument_validation_num s, num
|
133
|
+
raise ClientErrorException, "number of arguments (#{s.length - 1} for #{num - 1})" if s.length != num
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
class DefineCommandTest < Test::Unit::TestCase
|
138
|
+
|
139
|
+
def setup
|
140
|
+
@obj = DefCmdTest.new
|
141
|
+
end
|
142
|
+
|
143
|
+
def teardown
|
144
|
+
end
|
145
|
+
|
146
|
+
def test_defcmd
|
147
|
+
# normal case
|
148
|
+
res = @obj.ev_balse ['balse','arg1','arg2']
|
149
|
+
res = eval res.chomp
|
150
|
+
assert_equal ['balse','arg1','arg2'], res[:ap_str]
|
151
|
+
assert_equal "rbalse arg1 arg2\r\n", res[:broadcast_cmd]
|
152
|
+
|
153
|
+
res = @obj.ev_rbalse ['balse','arg1','arg2']
|
154
|
+
res = eval res.chomp
|
155
|
+
assert_equal ['balse','arg1','arg2'], res
|
156
|
+
|
157
|
+
# case of argument error
|
158
|
+
res = @obj.ev_balse ['balse','arg1']
|
159
|
+
assert_equal "CLIENT_ERROR number of arguments (1 for 2)\r\n", res
|
160
|
+
res = @obj.ev_balse ['balse','arg1', 'arg2', 'arg3']
|
161
|
+
assert_equal "CLIENT_ERROR number of arguments (3 for 2)\r\n", res
|
162
|
+
|
163
|
+
# case of exception occur
|
164
|
+
assert_raise RuntimeError do
|
165
|
+
res = @obj.ev_balse ['balse','arg1','ex_runtime']
|
166
|
+
end
|
167
|
+
res = @obj.ev_balse ['balse','arg1','ex_client']
|
168
|
+
assert_equal "CLIENT_ERROR arg1\r\n", res
|
169
|
+
res = @obj.ev_balse ['balse','arg2','ex_server']
|
170
|
+
assert_equal "SERVER_ERROR arg2\r\n", res
|
171
|
+
end
|
172
|
+
|
173
|
+
def test_defcmd2
|
174
|
+
# define a command in DefCmdTest class is not define yet
|
175
|
+
DefCmdTest.class_eval do
|
176
|
+
def_command_with_relay :balse2 do |s|
|
177
|
+
"#{s.join(' ')} #{@stats.ap_str}"
|
178
|
+
end
|
179
|
+
end
|
180
|
+
assert true
|
181
|
+
|
182
|
+
# define the duplicated command in DefCmdTest scope
|
183
|
+
assert_raise RuntimeError do
|
184
|
+
DefCmdTest.class_eval do
|
185
|
+
def_command_with_relay :balse do |s|
|
186
|
+
"#{s.join(' ')} #{@stats.ap_str}"
|
187
|
+
end
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
191
|
+
# define the duplicated command in CommandModuleTest3 scope
|
192
|
+
# RuntimeError is nothing to occur
|
193
|
+
DefCmdTest.class_eval do
|
194
|
+
include CommandModuleTest3
|
195
|
+
end
|
196
|
+
|
197
|
+
res = @obj.ev_balse ['balse','arg1','arg2']
|
198
|
+
robj = eval res.chomp # String -> Hash
|
199
|
+
assert_equal "override", robj[:ap_str]
|
200
|
+
assert_equal "rbalse arg1 arg2\r\n", robj[:broadcast_cmd]
|
201
|
+
|
202
|
+
res = @obj.ev_rbalse ['balse','arg1','arg2']
|
203
|
+
assert_equal "override\r\n", res
|
204
|
+
|
205
|
+
# test for exception occured in a command
|
206
|
+
assert_raise RuntimeError do
|
207
|
+
@obj.ev_runtimeexception ['balse']
|
208
|
+
end
|
209
|
+
end
|
210
|
+
|
211
|
+
def test_defcmd_k
|
212
|
+
# normal case
|
213
|
+
ctx = @obj.ev_get ['get','arg1']
|
214
|
+
assert_equal ['get','arg1'], ctx.argv
|
215
|
+
assert_equal 'arg1', ctx.params.key
|
216
|
+
assert_equal 'roma', ctx.params.hash_name
|
217
|
+
assert_equal Digest::SHA1.hexdigest('arg1').hex % 10, ctx.params.digest
|
218
|
+
assert_equal 1, ctx.params.vn
|
219
|
+
assert_equal ['roma0','roma1'], ctx.params.nodes
|
220
|
+
|
221
|
+
ctx = @obj.ev_get ['get',"arg2\eruby"]
|
222
|
+
assert_equal ['get',"arg2\eruby"], ctx.argv
|
223
|
+
assert_equal 'arg2', ctx.params.key
|
224
|
+
assert_equal 'ruby', ctx.params.hash_name
|
225
|
+
assert_equal 1, ctx.params.vn
|
226
|
+
assert_equal Digest::SHA1.hexdigest('arg2').hex % 10, ctx.params.digest
|
227
|
+
assert_equal ['roma0','roma1'], ctx.params.nodes
|
228
|
+
|
229
|
+
# case of argument error
|
230
|
+
res = @obj.ev_get ['get']
|
231
|
+
assert_equal "CLIENT_ERROR dose not find key\r\n", res
|
232
|
+
res = @obj.ev_get []
|
233
|
+
assert_equal "CLIENT_ERROR dose not find key\r\n", res
|
234
|
+
|
235
|
+
# case of exception occur
|
236
|
+
assert_raise RuntimeError do
|
237
|
+
res = @obj.ev_get ['get','arg1','ex_runtime']
|
238
|
+
end
|
239
|
+
res = @obj.ev_get ['get','arg1','ex_client']
|
240
|
+
assert_equal "CLIENT_ERROR arg1\r\n", res
|
241
|
+
res = @obj.ev_get ['get','arg2','ex_server']
|
242
|
+
assert_equal "SERVER_ERROR arg2\r\n", res
|
243
|
+
end
|
244
|
+
|
245
|
+
def test_defcmd_kv
|
246
|
+
# normal case
|
247
|
+
ctx = @obj.ev_set ['set','arg1', '0', '0', '5']
|
248
|
+
assert_equal ['set','arg1', '0', '0', '5'], ctx.argv
|
249
|
+
assert_equal 'arg1', ctx.params.key
|
250
|
+
assert_equal 'roma', ctx.params.hash_name
|
251
|
+
assert_equal Digest::SHA1.hexdigest('arg1').hex % 10, ctx.params.digest
|
252
|
+
assert_equal 1, ctx.params.vn
|
253
|
+
assert_equal ['roma0','roma1'], ctx.params.nodes
|
254
|
+
assert_equal 'abcde', ctx.params.value
|
255
|
+
|
256
|
+
ctx = @obj.ev_set ['set',"arg2\eruby", '0', '0', '5']
|
257
|
+
assert_equal ['set',"arg2\eruby", '0', '0', '5'], ctx.argv
|
258
|
+
assert_equal 'arg2', ctx.params.key
|
259
|
+
assert_equal 'ruby', ctx.params.hash_name
|
260
|
+
assert_equal Digest::SHA1.hexdigest('arg2').hex % 10, ctx.params.digest
|
261
|
+
assert_equal 1, ctx.params.vn
|
262
|
+
assert_equal ['roma0','roma1'], ctx.params.nodes
|
263
|
+
assert_equal 'abcde', ctx.params.value
|
264
|
+
|
265
|
+
# case of argument error
|
266
|
+
res = @obj.ev_set ['set']
|
267
|
+
assert_equal "CLIENT_ERROR dose not find key\r\n", res
|
268
|
+
res = @obj.ev_set []
|
269
|
+
assert_equal "CLIENT_ERROR dose not find key\r\n", res
|
270
|
+
|
271
|
+
# case of exception occur
|
272
|
+
assert_raise RuntimeError do
|
273
|
+
res = @obj.ev_set ['set','arg1','ex_runtime']
|
274
|
+
end
|
275
|
+
res = @obj.ev_set ['set','arg1','ex_client']
|
276
|
+
assert_equal "CLIENT_ERROR arg1\r\n", res
|
277
|
+
res = @obj.ev_set ['set','arg2','ex_server']
|
278
|
+
assert_equal "SERVER_ERROR arg2\r\n", res
|
279
|
+
end
|
280
|
+
end
|
281
|
+
|
282
|
+
class DefCmdTestNoHash < DefCmdTest
|
283
|
+
def initialize
|
284
|
+
super
|
285
|
+
@storages = {}
|
286
|
+
end
|
287
|
+
end
|
288
|
+
|
289
|
+
class DefineCommandNoHashTest < Test::Unit::TestCase
|
290
|
+
def setup
|
291
|
+
@obj = DefCmdTestNoHash.new
|
292
|
+
end
|
293
|
+
|
294
|
+
def teardown
|
295
|
+
end
|
296
|
+
|
297
|
+
def test_rcwk
|
298
|
+
ret = @obj.ev_rget ['get',"arg1\eno_hash_name"]
|
299
|
+
assert_equal "SERVER_ERROR no_hash_name dose not exists.\r\n", ret
|
300
|
+
end
|
301
|
+
|
302
|
+
def test_wcwk
|
303
|
+
ret = @obj.ev_wget ['get',"arg1\eno_hash_name"]
|
304
|
+
assert_equal "SERVER_ERROR no_hash_name dose not exists.\r\n", ret
|
305
|
+
end
|
306
|
+
|
307
|
+
def test_cwk
|
308
|
+
ret = @obj.ev_get ['get',"arg1\eno_hash_name"]
|
309
|
+
assert_equal "SERVER_ERROR no_hash_name dose not exists.\r\n", ret
|
310
|
+
end
|
311
|
+
|
312
|
+
def test_rcwkv
|
313
|
+
ret = @obj.ev_rset ['set',"arg1\eno_hash_name", '0', '0', '5']
|
314
|
+
assert_equal "SERVER_ERROR no_hash_name dose not exists.\r\n", ret
|
315
|
+
end
|
316
|
+
|
317
|
+
def test_wcwkv
|
318
|
+
ret = @obj.ev_wset ['set',"arg1\eno_hash_name", '0', '0', '5']
|
319
|
+
assert_equal "SERVER_ERROR no_hash_name dose not exists.\r\n", ret
|
320
|
+
end
|
321
|
+
|
322
|
+
def test_cwkv
|
323
|
+
ret = @obj.ev_set ['set',"arg1\eno_hash_name", '0', '0', '5']
|
324
|
+
assert_equal "SERVER_ERROR no_hash_name dose not exists.\r\n", ret
|
325
|
+
end
|
326
|
+
end
|