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
@@ -1,19 +0,0 @@
|
|
1
|
-
|
2
|
-
module Roma
|
3
|
-
module CommandPlugin
|
4
|
-
|
5
|
-
module PluginOperation
|
6
|
-
include ::Roma::CommandPlugin
|
7
|
-
|
8
|
-
# DANGER!!
|
9
|
-
def ev_eval(s)
|
10
|
-
cmd = s[1..-1].join(' ')
|
11
|
-
@log.debug("eval(#{cmd})")
|
12
|
-
send_data("#{eval(cmd)}\r\n")
|
13
|
-
rescue =>e
|
14
|
-
send_data("#{e}\r\n")
|
15
|
-
end
|
16
|
-
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
@@ -1,217 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# -*- coding: utf-8 -*-
|
3
|
-
#
|
4
|
-
# usage:recoverlost address port storage-path [yyyymmddhhmmss]
|
5
|
-
#
|
6
|
-
require 'roma/client/sender'
|
7
|
-
require 'roma/messaging/con_pool'
|
8
|
-
require 'roma/routing/routing_data'
|
9
|
-
|
10
|
-
module Roma
|
11
|
-
module Storage
|
12
|
-
end
|
13
|
-
Storage::autoload(:TCStorage,'roma/storage/tc_storage')
|
14
|
-
Storage::autoload(:DbmStorage,'roma/storage/dbm_storage')
|
15
|
-
Storage::autoload(:SQLite3Storage,'roma/storage/sqlite3_storage')
|
16
|
-
|
17
|
-
class RecoverLost
|
18
|
-
|
19
|
-
def initialize(pname, pushv_cmd, argv)
|
20
|
-
if argv.length < 3
|
21
|
-
puts "usage:#{pname} address port storage-path [yyyymmddhhmmss]"
|
22
|
-
exit
|
23
|
-
end
|
24
|
-
|
25
|
-
@addr = argv[0]
|
26
|
-
@port = argv[1]
|
27
|
-
@strgpath = argv[2]
|
28
|
-
@ymdhms = argv[3]
|
29
|
-
|
30
|
-
if @port =~ /\D/
|
31
|
-
STDERR.puts "port was not numeric."
|
32
|
-
exit
|
33
|
-
end
|
34
|
-
|
35
|
-
if @ymdhms && (@ymdhms.length != 14 || @ymdhms =~ /\D/)
|
36
|
-
STDERR.puts "yyyymmddhhmmss format mismatch."
|
37
|
-
exit
|
38
|
-
end
|
39
|
-
@pushv_cmd = pushv_cmd
|
40
|
-
@nodeid = "#{@addr}_#{@port}"
|
41
|
-
@stream_copy_wait_param = 0.0001
|
42
|
-
end
|
43
|
-
|
44
|
-
def suite
|
45
|
-
@rd = get_routing_data(@nodeid)
|
46
|
-
@lost_vnodes = get_lost_vnodes(@rd,@ymdhms)
|
47
|
-
puts "#{@lost_vnodes.length} vnodes where data was lost."
|
48
|
-
|
49
|
-
exit if @lost_vnodes.length == 0
|
50
|
-
|
51
|
-
each_hash(@strgpath){|hname,dir|
|
52
|
-
puts "#{hname} #{dir}"
|
53
|
-
@storage = open_storage(dir,@lost_vnodes)
|
54
|
-
start_recover(hname)
|
55
|
-
@storage.closedb
|
56
|
-
}
|
57
|
-
end
|
58
|
-
|
59
|
-
def each_hash(path)
|
60
|
-
Dir::glob("#{path}/*").each{|dir|
|
61
|
-
next unless File::directory?(dir)
|
62
|
-
hname = dir[dir.rindex('/')+1..-1]
|
63
|
-
yield hname,dir
|
64
|
-
}
|
65
|
-
end
|
66
|
-
|
67
|
-
def get_routing_data(nid)
|
68
|
-
sender = Roma::Client::Sender.new
|
69
|
-
sender.send_routedump_command(nid)
|
70
|
-
end
|
71
|
-
|
72
|
-
def get_lost_vnodes(rd,ymdhms)
|
73
|
-
ret = rd.get_lost_vnodes
|
74
|
-
if ymdhms
|
75
|
-
ret |= get_history_of_lost(rd.nodes[0],ymdhms)
|
76
|
-
end
|
77
|
-
ret
|
78
|
-
end
|
79
|
-
|
80
|
-
def get_history_of_lost(nid,ymdhms)
|
81
|
-
ret = []
|
82
|
-
con = Roma::Messaging::ConPool.instance.get_connection(nid)
|
83
|
-
con.write("history_of_lost #{ymdhms}\r\n")
|
84
|
-
while((buf = con.gets) != "END\r\n")
|
85
|
-
ret << buf.chomp.to_i
|
86
|
-
end
|
87
|
-
Roma::Messaging::ConPool.instance.return_connection(nid, con)
|
88
|
-
ret
|
89
|
-
end
|
90
|
-
|
91
|
-
def open_storage(path,vn_list)
|
92
|
-
unless File::directory?(path)
|
93
|
-
STDERR.puts "#{path} dose not found."
|
94
|
-
return nil
|
95
|
-
end
|
96
|
-
|
97
|
-
# get a file extension
|
98
|
-
ext = File::extname(Dir::glob("#{path}/0.*")[0])[1..-1]
|
99
|
-
# count a number of divided files
|
100
|
-
divnum = Dir::glob("#{path}/*.#{ext}").length
|
101
|
-
|
102
|
-
st = new_storage(ext)
|
103
|
-
st.divnum = divnum
|
104
|
-
st.vn_list = vn_list
|
105
|
-
st.storage_path = path
|
106
|
-
st.opendb
|
107
|
-
st
|
108
|
-
end
|
109
|
-
|
110
|
-
def new_storage(ext)
|
111
|
-
case(ext)
|
112
|
-
when 'tc'
|
113
|
-
return ::Roma::Storage::TCStorage.new
|
114
|
-
when 'dbm'
|
115
|
-
return Roma::Storage::DbmStorage.new
|
116
|
-
when 'sql3'
|
117
|
-
return Roma::Storage::SQLite3Storage.new
|
118
|
-
else
|
119
|
-
return nil
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
|
-
def start_recover(hname)
|
124
|
-
@lost_vnodes.each{|vn|
|
125
|
-
nodes = @rd.v_idx[vn]
|
126
|
-
if nodes == nil || nodes.length == 0
|
127
|
-
nid = @rd.nodes[rand(@rd.nodes.length)]
|
128
|
-
puts "#{vn} assign to #{nid}"
|
129
|
-
else
|
130
|
-
nid = nodes[0]
|
131
|
-
puts "#{vn} was auto assirned at #{nid}"
|
132
|
-
end
|
133
|
-
|
134
|
-
if push_a_vnode_stream(hname, vn, nid)!="STORED"
|
135
|
-
STDERR.puts "push_a_vnode_stream aborted in #{vn}"
|
136
|
-
exit
|
137
|
-
end
|
138
|
-
|
139
|
-
if nodes == nil || nodes.length == 0
|
140
|
-
cmd = "setroute #{vn} #{@rd.v_clk[vn]} #{nid}\r\n"
|
141
|
-
exit unless send_cmd(nid ,cmd)
|
142
|
-
broadcast_cmd(cmd, nid)
|
143
|
-
end
|
144
|
-
}
|
145
|
-
end
|
146
|
-
|
147
|
-
def push_a_vnode(hname, vn, nid)
|
148
|
-
dmp = @storage.dump(vn)
|
149
|
-
return true unless dmp
|
150
|
-
con = Roma::Messaging::ConPool.instance.get_connection(nid) unless con
|
151
|
-
con.write("pushv #{hname} #{vn}\r\n")
|
152
|
-
res = con.gets
|
153
|
-
con.write("#{dmp.length}\r\n#{dmp}\r\nEND\r\n")
|
154
|
-
res = con.gets
|
155
|
-
con.close
|
156
|
-
res.chomp! if res
|
157
|
-
res
|
158
|
-
rescue =>e
|
159
|
-
STDERR.puts "#{e}\n#{$@}"
|
160
|
-
nil
|
161
|
-
end
|
162
|
-
|
163
|
-
def push_a_vnode_stream(hname, vn, nid)
|
164
|
-
con = Roma::Messaging::ConPool.instance.get_connection(nid)
|
165
|
-
|
166
|
-
# con.write("spushv #{hname} #{vn}\r\n")
|
167
|
-
con.write("#{@pushv_cmd} #{hname} #{vn}\r\n")
|
168
|
-
|
169
|
-
res = con.gets # READY\r\n or error string
|
170
|
-
if res != "READY\r\n"
|
171
|
-
con.close
|
172
|
-
return res.chomp
|
173
|
-
end
|
174
|
-
|
175
|
-
@storage.each_vn_dump(vn){|data|
|
176
|
-
con.write(data)
|
177
|
-
sleep @stream_copy_wait_param
|
178
|
-
}
|
179
|
-
con.write("\0"*20) # end of steram
|
180
|
-
|
181
|
-
res = con.gets # STORED\r\n or error string
|
182
|
-
Roma::Messaging::ConPool.instance.return_connection(nid,con)
|
183
|
-
res.chomp! if res
|
184
|
-
res
|
185
|
-
rescue =>e
|
186
|
-
STDERR.puts "#{e}\n#{$@}"
|
187
|
-
nil
|
188
|
-
end
|
189
|
-
|
190
|
-
def broadcast_cmd(cmd,without_nids=nil)
|
191
|
-
without_nids=[] unless without_nids
|
192
|
-
res = {}
|
193
|
-
@rd.nodes.each{ |nid|
|
194
|
-
res[nid] = send_cmd(nid,cmd) unless without_nids.include?(nid)
|
195
|
-
}
|
196
|
-
res
|
197
|
-
rescue => e
|
198
|
-
STDERR.puts("#{e}\n#{$@}")
|
199
|
-
nil
|
200
|
-
end
|
201
|
-
|
202
|
-
def send_cmd(nid, cmd)
|
203
|
-
con = Roma::Messaging::ConPool.instance.get_connection(nid)
|
204
|
-
con.write(cmd)
|
205
|
-
res = con.gets
|
206
|
-
Roma::Messaging::ConPool.instance.return_connection(nid, con)
|
207
|
-
if res
|
208
|
-
res.chomp!
|
209
|
-
end
|
210
|
-
res
|
211
|
-
rescue => e
|
212
|
-
STDERR.puts("#{__FILE__}:#{__LINE__}:Send command failed that node-id is #{nid},command is #{cmd}.")
|
213
|
-
nil
|
214
|
-
end
|
215
|
-
|
216
|
-
end # class RecoverLost
|
217
|
-
end # module Roma
|
data/lib/roma/version.rb
DELETED
data/test/t_rclient.rb
DELETED
@@ -1,318 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# -*- coding: utf-8 -*-
|
3
|
-
|
4
|
-
require 'roma/client/rclient'
|
5
|
-
|
6
|
-
Roma::Client::RomaClient.class_eval{
|
7
|
-
def init_sync_routing_proc
|
8
|
-
end
|
9
|
-
}
|
10
|
-
|
11
|
-
class RClientTest < Test::Unit::TestCase
|
12
|
-
include RomaTestUtils
|
13
|
-
|
14
|
-
def setup
|
15
|
-
start_roma
|
16
|
-
@rc=Roma::Client::RomaClient.new(["localhost_11211","localhost_11212"])
|
17
|
-
end
|
18
|
-
|
19
|
-
def teardown
|
20
|
-
stop_roma
|
21
|
-
Roma::Messaging::ConPool::instance.close_all
|
22
|
-
end
|
23
|
-
|
24
|
-
def test_set_get_delete
|
25
|
-
@rc.delete("abc")
|
26
|
-
assert_nil( @rc.get("abc") )
|
27
|
-
assert_equal("STORED", @rc.set("abc","value abc"))
|
28
|
-
assert_equal("value abc", @rc.get("abc"))
|
29
|
-
assert_equal("STORED", @rc.set("abc","value abc")) # 上書きは成功する
|
30
|
-
assert_equal("DELETED", @rc.delete("abc"))
|
31
|
-
assert_nil( @rc.get("abc"))
|
32
|
-
assert_equal("NOT_FOUND", @rc.delete("abc"))
|
33
|
-
end
|
34
|
-
|
35
|
-
def test_set_get
|
36
|
-
10.times{|i|
|
37
|
-
s = i.to_s * 1024000
|
38
|
-
assert_equal("STORED", @rc.set("abc", s))
|
39
|
-
assert(s == @rc.get("abc"))
|
40
|
-
}
|
41
|
-
end
|
42
|
-
|
43
|
-
def test_set_gets
|
44
|
-
keys = []
|
45
|
-
assert_equal(@rc.gets(["key-1","key-2"]).length,0)
|
46
|
-
10.times{|i|
|
47
|
-
assert_equal("STORED", @rc.set("key-#{i}", "value-#{i}"))
|
48
|
-
keys << "key-#{i}"
|
49
|
-
}
|
50
|
-
ret = @rc.gets(keys)
|
51
|
-
assert_equal(ret.length,10)
|
52
|
-
ret.each_pair{|k,v|
|
53
|
-
assert_equal(k[-1],v[-1])
|
54
|
-
assert_equal(k[0..3],"key-")
|
55
|
-
assert_equal(v[0..5],"value-")
|
56
|
-
}
|
57
|
-
keys << "key-99"
|
58
|
-
ret = @rc.gets(keys)
|
59
|
-
assert_equal(ret.length,10)
|
60
|
-
|
61
|
-
assert_equal("DELETED", @rc.delete("key-5"))
|
62
|
-
ret = @rc.gets(keys)
|
63
|
-
assert_equal(ret.length,9)
|
64
|
-
end
|
65
|
-
|
66
|
-
def test_out
|
67
|
-
# 本当に消す
|
68
|
-
@rc.out("key-out")
|
69
|
-
# 本当にない場合は NOT_DELETED
|
70
|
-
assert_equal("NOT_DELETED", @rc.out("key-out"))
|
71
|
-
assert_equal("STORED", @rc.set("key-out","value out"))
|
72
|
-
assert_equal("DELETED", @rc.out("key-out"))
|
73
|
-
assert_equal("STORED", @rc.set("key-out","value out"))
|
74
|
-
# 削除マークをつける
|
75
|
-
assert_equal("DELETED", @rc.delete("key-out"))
|
76
|
-
# delete してもマークを消すので DELETED
|
77
|
-
assert_equal("DELETED", @rc.out("key-out"))
|
78
|
-
end
|
79
|
-
|
80
|
-
def test_add
|
81
|
-
assert_nil( @rc.get("add") )
|
82
|
-
assert_equal("STORED", @rc.add("add","value add"))
|
83
|
-
assert_equal("NOT_STORED", @rc.add("add","value add")) # 上書きは失敗する
|
84
|
-
assert_equal("DELETED", @rc.delete("add"))
|
85
|
-
assert_equal("STORED", @rc.add("add","value add")) # delete 後の add の成功を確認
|
86
|
-
assert_equal("DELETED", @rc.delete("add"))
|
87
|
-
end
|
88
|
-
|
89
|
-
def test_replace
|
90
|
-
assert_nil( @rc.get("replace") )
|
91
|
-
assert_equal("NOT_STORED", @rc.replace("replace","value replace"))
|
92
|
-
assert_nil( @rc.get("replace") )
|
93
|
-
assert_equal("STORED", @rc.add("replace","value add"))
|
94
|
-
assert_equal("STORED", @rc.replace("replace","value replace"))
|
95
|
-
assert_equal("DELETED", @rc.delete("replace"))
|
96
|
-
end
|
97
|
-
|
98
|
-
def test_append
|
99
|
-
assert_nil( @rc.get("append") )
|
100
|
-
assert_equal("NOT_STORED", @rc.append("append","append"))
|
101
|
-
assert_equal("STORED", @rc.set("append","set"))
|
102
|
-
assert_equal("set", @rc.get("append"))
|
103
|
-
assert_equal("STORED", @rc.append("append","append"))
|
104
|
-
assert_equal("setappend", @rc.get("append"))
|
105
|
-
assert_equal("DELETED", @rc.delete("append"))
|
106
|
-
end
|
107
|
-
|
108
|
-
def test_prepend
|
109
|
-
assert_nil( @rc.get("prepend"))
|
110
|
-
assert_equal("NOT_STORED", @rc.prepend("prepend","prepend"))
|
111
|
-
assert_equal("STORED", @rc.set("prepend","set"))
|
112
|
-
assert_equal("set", @rc.get("prepend"))
|
113
|
-
assert_equal("STORED", @rc.prepend("prepend","prepend"))
|
114
|
-
assert_equal("prependset", @rc.get("prepend"))
|
115
|
-
assert_equal("DELETED", @rc.delete("prepend"))
|
116
|
-
end
|
117
|
-
|
118
|
-
def test_incr
|
119
|
-
assert_nil( @rc.get("incr"))
|
120
|
-
assert_equal("NOT_FOUND", @rc.incr("incr"))
|
121
|
-
assert_equal("STORED", @rc.set("incr","100"))
|
122
|
-
assert_equal(101, @rc.incr("incr"))
|
123
|
-
assert_equal(102, @rc.incr("incr"))
|
124
|
-
assert_equal("DELETED", @rc.delete("incr"))
|
125
|
-
end
|
126
|
-
|
127
|
-
def test_decr
|
128
|
-
assert_nil( @rc.get("decr") )
|
129
|
-
assert_equal("NOT_FOUND", @rc.decr("decr"))
|
130
|
-
assert_equal("STORED", @rc.set("decr","100"))
|
131
|
-
assert_equal(99, @rc.decr("decr"))
|
132
|
-
assert_equal(98, @rc.decr("decr"))
|
133
|
-
assert_equal("DELETED", @rc.delete("decr"))
|
134
|
-
end
|
135
|
-
|
136
|
-
def test_createhash
|
137
|
-
con = Roma::Messaging::ConPool.instance.get_connection("localhost_11211")
|
138
|
-
con.write("hashlist\r\n")
|
139
|
-
ret = con.gets
|
140
|
-
assert_equal("roma", ret.chomp )
|
141
|
-
|
142
|
-
con.write("createhash test\r\n")
|
143
|
-
ret = con.gets
|
144
|
-
assert_equal("{\"localhost_11212\"=>\"CREATED\", \"localhost_11211\"=>\"CREATED\"}", ret.chomp )
|
145
|
-
|
146
|
-
con.write("hashlist\r\n")
|
147
|
-
ret = con.gets
|
148
|
-
assert_equal("roma test", ret.chomp )
|
149
|
-
|
150
|
-
assert_equal("STORED", @rc.set("roma","hname=roma"))
|
151
|
-
assert_equal("hname=roma", @rc.get("roma"))
|
152
|
-
@rc.default_hash_name='test'
|
153
|
-
assert_nil( @rc.get("roma") )
|
154
|
-
assert_equal("STORED", @rc.set("roma","hname=test"))
|
155
|
-
assert_equal("hname=test", @rc.get("roma"))
|
156
|
-
@rc.default_hash_name='roma'
|
157
|
-
assert_equal("hname=roma", @rc.get("roma"))
|
158
|
-
assert_equal("DELETED", @rc.delete("roma"))
|
159
|
-
|
160
|
-
@rc.default_hash_name='not_exist_hash' # 存在しないハッシュへのアクセス
|
161
|
-
begin
|
162
|
-
@rc.get("roma")
|
163
|
-
assert(false)
|
164
|
-
rescue =>e
|
165
|
-
assert_equal('SERVER_ERROR not_exist_hash dose not exists.',e.message)
|
166
|
-
end
|
167
|
-
|
168
|
-
begin
|
169
|
-
@rc.set("roma","hname=roma")
|
170
|
-
assert(false)
|
171
|
-
rescue =>e
|
172
|
-
assert_equal('SERVER_ERROR not_exist_hash dose not exists.',e.message)
|
173
|
-
end
|
174
|
-
|
175
|
-
begin
|
176
|
-
@rc.delete("roma")
|
177
|
-
assert(false)
|
178
|
-
rescue =>e
|
179
|
-
assert_equal('SERVER_ERROR not_exist_hash dose not exists.',e.message)
|
180
|
-
end
|
181
|
-
|
182
|
-
begin
|
183
|
-
@rc.add("add","value add")
|
184
|
-
assert(false)
|
185
|
-
rescue =>e
|
186
|
-
assert_equal('SERVER_ERROR not_exist_hash dose not exists.',e.message)
|
187
|
-
end
|
188
|
-
|
189
|
-
begin
|
190
|
-
@rc.replace("replace","value replace")
|
191
|
-
assert(false)
|
192
|
-
rescue =>e
|
193
|
-
assert_equal('SERVER_ERROR not_exist_hash dose not exists.',e.message)
|
194
|
-
end
|
195
|
-
|
196
|
-
begin
|
197
|
-
@rc.append("append","append")
|
198
|
-
assert(false)
|
199
|
-
rescue =>e
|
200
|
-
assert_equal('SERVER_ERROR not_exist_hash dose not exists.', e.message)
|
201
|
-
end
|
202
|
-
|
203
|
-
begin
|
204
|
-
@rc.prepend("prepend","prepend")
|
205
|
-
assert(false)
|
206
|
-
rescue =>e
|
207
|
-
assert_equal('SERVER_ERROR not_exist_hash dose not exists.',e.message)
|
208
|
-
end
|
209
|
-
|
210
|
-
begin
|
211
|
-
@rc.incr("incr")
|
212
|
-
assert(false)
|
213
|
-
rescue =>e
|
214
|
-
assert_equal('SERVER_ERROR not_exist_hash dose not exists.',e.message)
|
215
|
-
end
|
216
|
-
|
217
|
-
begin
|
218
|
-
@rc.decr("decr")
|
219
|
-
assert(false)
|
220
|
-
rescue =>e
|
221
|
-
assert_equal('SERVER_ERROR not_exist_hash dose not exists.',e.message)
|
222
|
-
end
|
223
|
-
|
224
|
-
con.write("deletehash test\r\n")
|
225
|
-
ret = con.gets
|
226
|
-
assert_equal( "{\"localhost_11212\"=>\"DELETED\", \"localhost_11211\"=>\"DELETED\"}", ret.chomp )
|
227
|
-
|
228
|
-
con.close
|
229
|
-
end
|
230
|
-
|
231
|
-
def test_createhash2
|
232
|
-
# test ハッシュを追加し終了する
|
233
|
-
con = Roma::Messaging::ConPool.instance.get_connection("localhost_11211")
|
234
|
-
con.write("hashlist\r\n")
|
235
|
-
ret = con.gets
|
236
|
-
assert_equal("roma", ret.chomp)
|
237
|
-
|
238
|
-
con.write("createhash test\r\n")
|
239
|
-
ret = con.gets
|
240
|
-
assert_equal("{\"localhost_11212\"=>\"CREATED\", \"localhost_11211\"=>\"CREATED\"}", ret.chomp )
|
241
|
-
|
242
|
-
assert_equal("STORED", @rc.set("roma","hname=roma"))
|
243
|
-
assert_equal("hname=roma", @rc.get("roma"))
|
244
|
-
@rc.default_hash_name='test'
|
245
|
-
assert_equal("STORED", @rc.set("roma","hname=test"))
|
246
|
-
assert_equal("hname=test", @rc.get("roma"))
|
247
|
-
con.write("balse\r\n")
|
248
|
-
con.gets
|
249
|
-
con.write "yes\r\n"
|
250
|
-
ret = con.gets
|
251
|
-
con.close
|
252
|
-
|
253
|
-
|
254
|
-
# 再起動
|
255
|
-
ruby_path = File.join(RbConfig::CONFIG["bindir"],
|
256
|
-
RbConfig::CONFIG["ruby_install_name"])
|
257
|
-
path = File.dirname(File.expand_path($PROGRAM_NAME))
|
258
|
-
sh = Shell.new
|
259
|
-
sh.system(ruby_path,"#{path}/../bin/romad","localhost","-p","11211","-d","--verbose")
|
260
|
-
sh.system(ruby_path,"#{path}/../bin/romad","localhost","-p","11212","-d","--verbose")
|
261
|
-
sleep 2
|
262
|
-
Roma::Messaging::ConPool.instance.close_all
|
263
|
-
|
264
|
-
@rc=Roma::Client::RomaClient.new(["localhost_11211","localhost_11212"])
|
265
|
-
@rc.default_hash_name='test'
|
266
|
-
con = Roma::Messaging::ConPool.instance.get_connection("localhost_11211")
|
267
|
-
con.write("hashlist\r\n")
|
268
|
-
ret = con.gets
|
269
|
-
|
270
|
-
#
|
271
|
-
# for file storage
|
272
|
-
#
|
273
|
-
|
274
|
-
# 停止前のデータが残っていることを確認
|
275
|
-
#assert_equal("hname=test", @rc.get("roma"))
|
276
|
-
|
277
|
-
# test ハッシュを削除
|
278
|
-
#con.write("deletehash test\r\n")
|
279
|
-
#ret = con.gets
|
280
|
-
#assert_equal("{\"localhost_11212\"=>\"DELETED\", \"localhost_11211\"=>\"DELETED\"}", ret.chomp )
|
281
|
-
|
282
|
-
# デフォルトハッシュに残ったテストデータを削除
|
283
|
-
#@rc.default_hash_name='roma'
|
284
|
-
#assert_equal('DELETED', @rc.delete("roma"))
|
285
|
-
|
286
|
-
end
|
287
|
-
|
288
|
-
def test_createhash3
|
289
|
-
con = Roma::Messaging::ConPool.instance.get_connection("localhost_11211")
|
290
|
-
|
291
|
-
# 存在しないハッシュを削除
|
292
|
-
con.write("deletehash test\r\n")
|
293
|
-
ret = con.gets
|
294
|
-
assert_equal("{\"localhost_11212\"=>\"SERVER_ERROR test dose not exists.\", \"localhost_11211\"=>\"SERVER_ERROR test dose not exists.\"}", ret.chomp )
|
295
|
-
|
296
|
-
# デフォルトハッシュを削除
|
297
|
-
con.write("deletehash roma\r\n")
|
298
|
-
ret = con.gets
|
299
|
-
assert_equal("{\"localhost_11212\"=>\"SERVER_ERROR the hash name of 'roma' can't delete.\", \"localhost_11211\"=>\"SERVER_ERROR the hash name of 'roma' can't delete.\"}", ret.chomp )
|
300
|
-
end
|
301
|
-
end
|
302
|
-
|
303
|
-
class RClientTestForceForward < RClientTest
|
304
|
-
def setup
|
305
|
-
super
|
306
|
-
@rc.rttable.instance_eval{
|
307
|
-
undef search_node
|
308
|
-
|
309
|
-
def search_node(key); search_node2(key); end
|
310
|
-
|
311
|
-
def search_node2(key)
|
312
|
-
d = Digest::SHA1.hexdigest(key).hex % @hbits
|
313
|
-
@rd.v_idx[d & @search_mask][1]
|
314
|
-
end
|
315
|
-
}
|
316
|
-
end
|
317
|
-
|
318
|
-
end
|