roma 0.8.2 → 0.8.10
Sign up to get free protection for your applications and to get access to all the features.
- 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
@@ -0,0 +1,61 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'roma/client/rclient'
|
3
|
+
require 'roma/messaging/con_pool'
|
4
|
+
require 'roma/config'
|
5
|
+
|
6
|
+
Roma::Client::RomaClient.class_eval{
|
7
|
+
def init_sync_routing_proc
|
8
|
+
end
|
9
|
+
}
|
10
|
+
|
11
|
+
class StorageErrorTest < Test::Unit::TestCase
|
12
|
+
include RomaTestUtils
|
13
|
+
|
14
|
+
def setup
|
15
|
+
path = File.expand_path('test/storage_error_storage.rb')
|
16
|
+
`ln -s #{path} lib/roma/storage`
|
17
|
+
start_roma 'config4storage_error.rb'
|
18
|
+
@rc=Roma::Client::RomaClient.new(["localhost_11211","localhost_11212"])
|
19
|
+
end
|
20
|
+
|
21
|
+
def teardown
|
22
|
+
`rm -f lib/roma/storage/storage_error_storage.rb`
|
23
|
+
stop_roma
|
24
|
+
Roma::Messaging::ConPool::instance.close_all
|
25
|
+
rescue => e
|
26
|
+
puts "#{e} #{$@}"
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_storage_error_get
|
30
|
+
con = Roma::Messaging::ConPool.instance.get_connection("localhost_11211")
|
31
|
+
con.write("get key\r\n")
|
32
|
+
ret = con.gets
|
33
|
+
con.close
|
34
|
+
assert( ret.start_with? 'SERVER_ERROR' )
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_storage_error_set
|
38
|
+
con = Roma::Messaging::ConPool.instance.get_connection("localhost_11211")
|
39
|
+
con.write("set key 0 0 5\r\nvalue\r\n")
|
40
|
+
ret = con.gets
|
41
|
+
con.close
|
42
|
+
assert( ret.start_with? 'SERVER_ERROR' )
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
class StorageErrorTestForceForward < StorageErrorTest
|
47
|
+
def setup
|
48
|
+
super
|
49
|
+
@rc.rttable.instance_eval{
|
50
|
+
undef search_node
|
51
|
+
|
52
|
+
def search_node(key); search_node2(key); end
|
53
|
+
|
54
|
+
def search_node2(key)
|
55
|
+
d = Digest::SHA1.hexdigest(key).hex % @hbits
|
56
|
+
@rd.v_idx[d & @search_mask][1]
|
57
|
+
end
|
58
|
+
}
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
@@ -0,0 +1,374 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# -*- coding: utf-8 -*-
|
3
|
+
require 'logger'
|
4
|
+
require 'stringio'
|
5
|
+
require 'roma/write_behind'
|
6
|
+
require 'roma/client/rclient'
|
7
|
+
require 'roma/messaging/con_pool'
|
8
|
+
require 'roma/client/plugin/alist'
|
9
|
+
require 'roma/client/plugin/map'
|
10
|
+
|
11
|
+
class FileWriterTest < Test::Unit::TestCase
|
12
|
+
|
13
|
+
def initialize(arg)
|
14
|
+
super(arg)
|
15
|
+
end
|
16
|
+
|
17
|
+
def setup
|
18
|
+
@stats = Roma::Stats.instance
|
19
|
+
@stats.address = 'roma0'
|
20
|
+
@stats.port = 11211
|
21
|
+
end
|
22
|
+
|
23
|
+
def teardown
|
24
|
+
system('rm -rf wb_test')
|
25
|
+
end
|
26
|
+
|
27
|
+
# 作成と write のテスト
|
28
|
+
def test_wb_write
|
29
|
+
system('rm -rf wb_test')
|
30
|
+
fw = Roma::WriteBehind::FileWriter.new("wb_test", 1024 * 1024, Logger.new(nil))
|
31
|
+
path = "wb_test/roma0_11211/roma/#{Time.now.strftime('%Y%m%d')}/"
|
32
|
+
|
33
|
+
assert(!File.exist?("#{path}/0.wb"))
|
34
|
+
100.times{|i|
|
35
|
+
fw.write('roma',i,"key-#{i}","val-#{i}")
|
36
|
+
}
|
37
|
+
assert(File.exist?("#{path}/0.wb"))
|
38
|
+
assert(!File.exist?("#{path}/1.wb"))
|
39
|
+
|
40
|
+
fw.rotate('roma')
|
41
|
+
|
42
|
+
i = 100
|
43
|
+
fw.write('roma',i,"key-#{i}","val-#{i}")
|
44
|
+
assert(File.exist?("#{path}/1.wb"))
|
45
|
+
|
46
|
+
fw.close_all
|
47
|
+
|
48
|
+
wb0 = read_wb("#{path}/0.wb")
|
49
|
+
assert_equal(100,wb0.length )
|
50
|
+
wb0.each{|last, cmd, key, val|
|
51
|
+
assert_equal( "key-#{cmd}",key)
|
52
|
+
assert_equal( "val-#{cmd}",val)
|
53
|
+
}
|
54
|
+
wb1 = read_wb("#{path}/1.wb")
|
55
|
+
assert_equal(1,wb1.length )
|
56
|
+
end
|
57
|
+
|
58
|
+
# サイズによるローテーションのテスト
|
59
|
+
def test_wb_rotation
|
60
|
+
system('rm -rf wb_test')
|
61
|
+
fw = Roma::WriteBehind::FileWriter.new("wb_test", 900, Logger.new(nil))
|
62
|
+
path = "wb_test/roma0_11211/roma/#{Time.now.strftime('%Y%m%d')}/"
|
63
|
+
|
64
|
+
100.times{|i|
|
65
|
+
fw.write('roma',0,
|
66
|
+
sprintf("key-%04d",i),
|
67
|
+
sprintf("val-%04d",i))
|
68
|
+
}
|
69
|
+
|
70
|
+
assert(File.exist?("#{path}/0.wb"))
|
71
|
+
assert(File.exist?("#{path}/1.wb"))
|
72
|
+
assert(File.exist?("#{path}/2.wb"))
|
73
|
+
assert(File.exist?("#{path}/3.wb"))
|
74
|
+
assert(!File.exist?("#{path}/4.wb"))
|
75
|
+
end
|
76
|
+
|
77
|
+
# 時間によるローテーションのテスト
|
78
|
+
def test_rotation2
|
79
|
+
system('rm -rf wb_test')
|
80
|
+
fw = Roma::WriteBehind::FileWriter.new("wb_test", 1024 * 1024, Logger.new(nil))
|
81
|
+
path = "wb_test/roma0_11211/roma/#{Time.now.strftime('%Y%m%d')}/"
|
82
|
+
|
83
|
+
# インスタンス生成直後の rottime の時分秒usecは何かの値を持っている
|
84
|
+
rt = fw.instance_eval{ @rottime }
|
85
|
+
assert_not_equal(0, rt.hour + rt.min + rt.sec+ rt.usec)
|
86
|
+
# 初期化は今日の日付で行われる
|
87
|
+
assert_equal(Time.now.day, rt.day)
|
88
|
+
# ファイルは存在しない
|
89
|
+
assert(!File.exist?("#{path}/0.wb"))
|
90
|
+
fw.write('roma',1,"key","val")
|
91
|
+
# 何かを書き込むとオープンされ、そのタイミングで rottime が更新される
|
92
|
+
rt = fw.instance_eval{ @rottime }
|
93
|
+
# この時、日付以下は 0 となる
|
94
|
+
assert_equal(0, rt.hour + rt.min + rt.sec+ rt.usec)
|
95
|
+
# 日付は明日になる
|
96
|
+
assert_not_equal(Time.now.day, rt.day)
|
97
|
+
10.times{|i|
|
98
|
+
fw.write('roma',i,"key-#{i}","val-#{i}")
|
99
|
+
}
|
100
|
+
# ファイルは1つ
|
101
|
+
assert(File.exist?("#{path}/0.wb"))
|
102
|
+
assert(!File.exist?("#{path}/1.wb"))
|
103
|
+
|
104
|
+
# ローテーションの時刻を強制的に今にする
|
105
|
+
fw.instance_eval{ @rottime=Time.now }
|
106
|
+
# rottime の変更を確認
|
107
|
+
assert_not_equal(rt, fw.instance_eval{ @rottime })
|
108
|
+
# 何かを書き込むとローテーションが発生する
|
109
|
+
fw.write('roma',1,"key","val")
|
110
|
+
assert(File.exist?("#{path}/1.wb"))
|
111
|
+
# テストは日をまたがないので rottime は元に戻る
|
112
|
+
assert_equal(rt, fw.instance_eval{ @rottime })
|
113
|
+
end
|
114
|
+
|
115
|
+
# 外部からローテーションするテスト
|
116
|
+
def test_wb_rotation3
|
117
|
+
system('rm -rf wb_test')
|
118
|
+
fw = Roma::WriteBehind::FileWriter.new("wb_test", 1024 * 1024, Logger.new(nil))
|
119
|
+
path = "wb_test/roma0_11211/roma/#{Time.now.strftime('%Y%m%d')}/"
|
120
|
+
|
121
|
+
# ファイルはない
|
122
|
+
assert(!File.exist?("#{path}/0.wb"))
|
123
|
+
10.times{|i|
|
124
|
+
fw.write('roma',i,"key-#{i}","val-#{i}")
|
125
|
+
}
|
126
|
+
# ファイルは1つ
|
127
|
+
assert(File.exist?("#{path}/0.wb"))
|
128
|
+
assert(!File.exist?("#{path}/1.wb"))
|
129
|
+
|
130
|
+
fw.rotate('roma')
|
131
|
+
10.times{|i|
|
132
|
+
fw.write('roma',i,"key-#{i}","val-#{i}")
|
133
|
+
}
|
134
|
+
# ファイルは2つ
|
135
|
+
assert(File.exist?("#{path}/0.wb"))
|
136
|
+
assert(File.exist?("#{path}/1.wb"))
|
137
|
+
assert(!File.exist?("#{path}/2.wb"))
|
138
|
+
|
139
|
+
# ローテーションの重複呼び出し
|
140
|
+
fw.rotate('roma')
|
141
|
+
fw.rotate('roma')
|
142
|
+
fw.rotate('roma')
|
143
|
+
# ファイルは2つで変化なし
|
144
|
+
assert(File.exist?("#{path}/0.wb"))
|
145
|
+
assert(File.exist?("#{path}/1.wb"))
|
146
|
+
assert(!File.exist?("#{path}/2.wb"))
|
147
|
+
10.times{|i|
|
148
|
+
fw.write('roma',i,"key-#{i}","val-#{i}")
|
149
|
+
}
|
150
|
+
# ファイルは3つ
|
151
|
+
assert(File.exist?("#{path}/0.wb"))
|
152
|
+
assert(File.exist?("#{path}/1.wb"))
|
153
|
+
assert(File.exist?("#{path}/2.wb"))
|
154
|
+
assert(!File.exist?("#{path}/3.wb"))
|
155
|
+
end
|
156
|
+
|
157
|
+
|
158
|
+
def test_wb_get_current_file_path
|
159
|
+
system('rm -rf wb_test')
|
160
|
+
fw = Roma::WriteBehind::FileWriter.new("wb_test", 900, Logger.new(nil))
|
161
|
+
|
162
|
+
assert_nil( fw.get_current_file_path('roma') )
|
163
|
+
|
164
|
+
fw.write('roma',0,"key","val")
|
165
|
+
|
166
|
+
path = File.expand_path("./wb_test/roma0_11211/roma/#{Time.now.strftime('%Y%m%d')}/")
|
167
|
+
assert_equal( File.join(path,"0.wb"), fw.get_current_file_path('roma'))
|
168
|
+
|
169
|
+
fw.rotate('roma')
|
170
|
+
assert_nil( fw.get_current_file_path('roma'))
|
171
|
+
|
172
|
+
fw.write('roma',0,"key","val")
|
173
|
+
assert_equal( File.join(path,"1.wb"), fw.get_current_file_path('roma') )
|
174
|
+
end
|
175
|
+
|
176
|
+
def test_wb_get_path
|
177
|
+
system('rm -rf wb_test')
|
178
|
+
fw = Roma::WriteBehind::FileWriter.new("wb_test", 900, Logger.new(nil))
|
179
|
+
path = File.expand_path("./wb_test/roma0_11211/roma")
|
180
|
+
assert_equal( path, fw.wb_get_path('roma'))
|
181
|
+
end
|
182
|
+
|
183
|
+
def read_wb(fname)
|
184
|
+
ret = []
|
185
|
+
open(fname,'rb'){|f|
|
186
|
+
until(f.eof?)
|
187
|
+
b1 = f.read(10)
|
188
|
+
last, cmd, klen = b1.unpack('NnN')
|
189
|
+
key = f.read(klen)
|
190
|
+
b2 = f.read(4)
|
191
|
+
vlen = b2.unpack('N')[0]
|
192
|
+
val = f.read(vlen)
|
193
|
+
ret << [last,cmd,key,val]
|
194
|
+
end
|
195
|
+
}
|
196
|
+
ret
|
197
|
+
end
|
198
|
+
|
199
|
+
end
|
200
|
+
|
201
|
+
|
202
|
+
class WriteBehindTest < FileWriterTest
|
203
|
+
include RomaTestUtils
|
204
|
+
|
205
|
+
def setup
|
206
|
+
start_roma
|
207
|
+
@rc=Roma::Client::RomaClient.new(["localhost_11211","localhost_11212"],
|
208
|
+
[Roma::Client::Plugin::Alist,
|
209
|
+
Roma::Client::Plugin::Map])
|
210
|
+
system('rm -rf wb')
|
211
|
+
end
|
212
|
+
|
213
|
+
def teardown
|
214
|
+
stop_roma
|
215
|
+
Roma::Messaging::ConPool::instance.close_all
|
216
|
+
rescue => e
|
217
|
+
puts "#{e} #{$@}"
|
218
|
+
end
|
219
|
+
|
220
|
+
def test_wb2_stat
|
221
|
+
ret = send_cmd("localhost_11211", "stat wb_command_map")
|
222
|
+
assert_equal("stats.wb_command_map {}\r\n", ret)
|
223
|
+
end
|
224
|
+
|
225
|
+
def test_wb2_command_map
|
226
|
+
send_cmd("localhost_11211", "wb_command_map {:set=>1}")
|
227
|
+
ret = send_cmd("localhost_11211", "stat wb_command_map")
|
228
|
+
assert_equal("stats.wb_command_map {:set=>1}\r\n", ret)
|
229
|
+
end
|
230
|
+
|
231
|
+
def test_wb2_set
|
232
|
+
send_cmd("localhost_11211", "wb_command_map {:set=>1}")
|
233
|
+
assert_equal("STORED", @rc.set("abc","value abc",0,true))
|
234
|
+
send_cmd("localhost_11211", "writebehind_rotate roma")
|
235
|
+
|
236
|
+
wb0 = read_wb("#{wb_path}/0.wb")
|
237
|
+
assert_equal(1, wb0.length)
|
238
|
+
wb0.each do |last, cmd, key, val|
|
239
|
+
assert_equal(1, cmd)
|
240
|
+
assert_equal("abc", key)
|
241
|
+
assert_equal("value abc", val)
|
242
|
+
end
|
243
|
+
end
|
244
|
+
|
245
|
+
def test_wb2_storage_commands
|
246
|
+
h = {:set=>1,:delete=>2,:add=>3,:replace=>4,:append=>5,:prepend=>6,:cas=>7,:incr=>8,:decr=>9,:set_expt=>10}
|
247
|
+
send_cmd("localhost_11211", "wb_command_map #{h}")
|
248
|
+
assert_equal("STORED", @rc.set("abc","1",0,true))
|
249
|
+
assert_equal("DELETED", @rc.delete("abc"))
|
250
|
+
assert_equal("STORED", @rc.add("abc","1",0,true))
|
251
|
+
assert_equal("STORED", @rc.replace("abc","2",0,true))
|
252
|
+
assert_equal("STORED", @rc.append("abc","3"))
|
253
|
+
assert_equal("STORED", @rc.prepend("abc","1"))
|
254
|
+
res = @rc.cas("abc", 0, true) do |v|
|
255
|
+
v = "128"
|
256
|
+
end
|
257
|
+
assert_equal("STORED", res)
|
258
|
+
assert_equal(129, @rc.incr("abc"))
|
259
|
+
assert_equal(128, @rc.decr("abc"))
|
260
|
+
## test for set_expt TODO
|
261
|
+
send_cmd("localhost_11211", "writebehind_rotate roma")
|
262
|
+
|
263
|
+
|
264
|
+
res = {1=>'1',2=>'1',3=>'1',4=>'2',5=>'23',6=>'123',7=>'128',8=>'129',9=>'128'}
|
265
|
+
wb0 = read_wb("#{wb_path}/0.wb")
|
266
|
+
assert_equal(9, wb0.length)
|
267
|
+
wb0.each do |last, cmd, key, val|
|
268
|
+
# puts "#{cmd} #{key} #{val.inspect}"
|
269
|
+
assert_equal(res[cmd], val)
|
270
|
+
end
|
271
|
+
end
|
272
|
+
|
273
|
+
def test_wb2_alist_commands
|
274
|
+
h = {
|
275
|
+
:alist_clear=>1,
|
276
|
+
:alist_delete=>2,
|
277
|
+
:alist_delete_at=>3,
|
278
|
+
:alist_insert=>4,
|
279
|
+
:alist_sized_insert=>5,
|
280
|
+
:alist_swap_and_insert=>6,
|
281
|
+
:alist_swap_and_sized_insert=>7,
|
282
|
+
:alist_expired_swap_and_insert=>8,
|
283
|
+
:alist_expired_swap_and_sized_insert=>9,
|
284
|
+
:alist_push=>10,
|
285
|
+
:alist_sized_push=>11,
|
286
|
+
:alist_swap_and_push=>12,
|
287
|
+
:alist_swap_and_sized_push=>13,
|
288
|
+
:alist_expired_swap_and_push=>14,
|
289
|
+
:alist_expired_swap_and_sized_push=>15,
|
290
|
+
:alist_update_at=>16
|
291
|
+
}
|
292
|
+
send_cmd("localhost_11211", "wb_command_map #{h}")
|
293
|
+
assert_equal('STORED', @rc.alist_push("abc","1")) # ['1']
|
294
|
+
assert_equal('STORED', @rc.alist_insert("abc",0,"2")) #['2','1']
|
295
|
+
assert_equal('STORED', @rc.alist_sized_insert("abc",5,"3")) #['3','2','1']
|
296
|
+
assert_equal('STORED', @rc.alist_swap_and_insert("abc","4")) #['4','3','2','1']
|
297
|
+
assert_equal('STORED', @rc.alist_swap_and_sized_insert("abc",5,"5")) #['5','4','3','2','1']
|
298
|
+
assert_equal('STORED', @rc.alist_expired_swap_and_insert("abc",100,"6")) #['6','5','4','3','2','1']
|
299
|
+
assert_equal('STORED', @rc.alist_expired_swap_and_sized_insert("abc",100,10,"7")) #['7','6','5','4','3','2','1']
|
300
|
+
assert_equal('STORED', @rc.alist_sized_push("abc",10,"8")) #['7','6','5','4','3','2','1','8']
|
301
|
+
assert_equal('STORED', @rc.alist_swap_and_push("abc","9")) #['7','6','5','4','3','2','1','8','9']
|
302
|
+
assert_equal('STORED', @rc.alist_swap_and_sized_push("abc",10,"10")) #['7','6','5','4','3','2','1','8','9','10']
|
303
|
+
assert_equal('STORED', @rc.alist_expired_swap_and_push("abc",100,"11")) #['7','6','5','4','3','2','1','8','9','10','11']
|
304
|
+
assert_equal('STORED', @rc.alist_expired_swap_and_sized_push("abc",100,12,"12")) #['7','6','5','4','3','2','1','8','9','10','12']
|
305
|
+
assert_equal('STORED', @rc.alist_update_at("abc",0,"13")) #['13','6','5','4','3','2','1','8','9','10','12']
|
306
|
+
assert_equal('DELETED', @rc.alist_delete("abc","3") ) #['13','6','5','4','2','1','8','9','10','12']
|
307
|
+
assert_equal('DELETED', @rc.alist_delete_at("abc",1)) #['13','5','4','2','1','8','9','10','12']
|
308
|
+
assert_equal('CLEARED', @rc.alist_clear("abc"))
|
309
|
+
send_cmd("localhost_11211", "writebehind_rotate roma")
|
310
|
+
|
311
|
+
res = {
|
312
|
+
10=>'1',4=>'2',5=>'3',6=>'4',7=>'5',8=>'6',9=>'7',11=>'8',12=>'9',
|
313
|
+
13=>'10',14=>'11',15=>'12',16=>'13',2=>'3',3=>'6',
|
314
|
+
1=>["13", "5", "4", "2", "1", "8", "9", "10", "11", "12"]}
|
315
|
+
wb0 = read_wb("#{wb_path}/0.wb")
|
316
|
+
assert_equal(16, wb0.length)
|
317
|
+
wb0.each do |last, cmd, key, val|
|
318
|
+
begin
|
319
|
+
val = Marshal.load(val)[0]
|
320
|
+
rescue
|
321
|
+
end
|
322
|
+
# puts "#{cmd} #{key} #{val.inspect}"
|
323
|
+
assert_equal(res[cmd], val)
|
324
|
+
end
|
325
|
+
end
|
326
|
+
|
327
|
+
def test_wb2_map_commands
|
328
|
+
h = {
|
329
|
+
:map_set=>1,
|
330
|
+
:map_delete=>2,
|
331
|
+
:map_clear=>3
|
332
|
+
}
|
333
|
+
send_cmd("localhost_11211", "wb_command_map #{h}")
|
334
|
+
assert_equal('STORED', @rc.map_set('abc','mapkey1','value1'))
|
335
|
+
assert_equal('DELETED', @rc.map_delete('abc', 'mapkey1'))
|
336
|
+
assert_equal('STORED', @rc.map_set('abc','mapkey1','value1'))
|
337
|
+
assert_equal('CLEARED', @rc.map_clear("abc"))
|
338
|
+
send_cmd("localhost_11211", "writebehind_rotate roma")
|
339
|
+
|
340
|
+
res = {1=>'value1',2=>{},3=>{}}
|
341
|
+
wb0 = read_wb("#{wb_path}/0.wb")
|
342
|
+
assert_equal(4, wb0.length)
|
343
|
+
wb0.each do |last, cmd, key, val|
|
344
|
+
begin
|
345
|
+
val = Marshal.load(val)
|
346
|
+
rescue
|
347
|
+
end
|
348
|
+
# puts "#{cmd} #{key} #{val.inspect}"
|
349
|
+
assert_equal(res[cmd], val)
|
350
|
+
end
|
351
|
+
end
|
352
|
+
|
353
|
+
def send_cmd(host, cmd)
|
354
|
+
con = Roma::Messaging::ConPool.instance.get_connection(host)
|
355
|
+
con.write("#{cmd}\r\n")
|
356
|
+
ret = con.gets
|
357
|
+
con.close
|
358
|
+
ret
|
359
|
+
end
|
360
|
+
|
361
|
+
def wb_path
|
362
|
+
path = "wb/#{wb_hostname}/roma/#{Time.now.strftime('%Y%m%d')}/"
|
363
|
+
end
|
364
|
+
|
365
|
+
def wb_hostname
|
366
|
+
if File.exist?("wb/localhost_11211")
|
367
|
+
"localhost_11211"
|
368
|
+
elsif File.exist?("wb/localhost_11212")
|
369
|
+
"localhost_11212"
|
370
|
+
else
|
371
|
+
nil
|
372
|
+
end
|
373
|
+
end
|
374
|
+
end
|
metadata
CHANGED
@@ -1,105 +1,167 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: roma
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 43
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 8
|
9
|
+
- 10
|
10
|
+
version: 0.8.10
|
5
11
|
platform: ruby
|
6
|
-
authors:
|
7
|
-
|
12
|
+
authors:
|
13
|
+
- Junji Torii
|
14
|
+
- Hiroki Matsue
|
8
15
|
autorequire:
|
9
|
-
bindir: bin
|
16
|
+
bindir: ruby/server/bin
|
10
17
|
cert_chain: []
|
11
18
|
|
12
|
-
date:
|
13
|
-
default_executable: romad
|
19
|
+
date: 2012-03-14 00:00:00 Z
|
14
20
|
dependencies:
|
15
21
|
- !ruby/object:Gem::Dependency
|
16
|
-
name:
|
17
|
-
|
18
|
-
|
19
|
-
|
22
|
+
name: eventmachine
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
20
26
|
requirements:
|
21
27
|
- - ">="
|
22
28
|
- !ruby/object:Gem::Version
|
29
|
+
hash: 3
|
30
|
+
segments:
|
31
|
+
- 0
|
23
32
|
version: "0"
|
24
|
-
|
33
|
+
type: :runtime
|
34
|
+
version_requirements: *id001
|
25
35
|
description: " ROMA server\n"
|
26
36
|
email:
|
27
37
|
executables:
|
38
|
+
- multi_commander
|
39
|
+
- mkconfig
|
40
|
+
- key_list
|
41
|
+
- roma_watcher
|
42
|
+
- recoverlost
|
28
43
|
- mkrecent
|
44
|
+
- chg_redundancy
|
45
|
+
- test-scenario
|
46
|
+
- recoverlost_alist
|
47
|
+
- recoverlost_alist_keys
|
29
48
|
- mkroute
|
49
|
+
- romad
|
50
|
+
- recoverlost_alist_all
|
30
51
|
- tribunus
|
31
|
-
- simple_bench
|
32
52
|
- ssroute
|
33
|
-
-
|
34
|
-
-
|
35
|
-
- recoverlost
|
53
|
+
- simple_bench
|
54
|
+
- key_access
|
36
55
|
extensions: []
|
37
56
|
|
38
57
|
extra_rdoc_files:
|
39
|
-
- README
|
58
|
+
- README
|
59
|
+
- CHANGELOG
|
40
60
|
files:
|
61
|
+
- README
|
41
62
|
- Rakefile
|
42
|
-
-
|
43
|
-
-
|
44
|
-
-
|
45
|
-
-
|
46
|
-
- bin/
|
47
|
-
- bin/
|
48
|
-
- bin/
|
49
|
-
- bin/
|
50
|
-
- bin/
|
51
|
-
- bin/
|
52
|
-
- bin/
|
53
|
-
- bin/
|
54
|
-
-
|
55
|
-
-
|
56
|
-
-
|
57
|
-
-
|
58
|
-
-
|
59
|
-
-
|
60
|
-
-
|
61
|
-
-
|
62
|
-
-
|
63
|
-
-
|
64
|
-
-
|
65
|
-
-
|
66
|
-
- lib/roma/
|
67
|
-
- lib/roma/
|
68
|
-
- lib/roma/
|
69
|
-
- lib/roma/
|
70
|
-
- lib/roma/command/
|
71
|
-
- lib/roma/command/
|
72
|
-
- lib/roma/command/
|
73
|
-
- lib/roma/command/
|
74
|
-
- lib/roma/command/
|
75
|
-
- lib/roma/
|
76
|
-
- lib/roma/
|
77
|
-
- lib/roma/
|
78
|
-
- lib/roma/
|
79
|
-
- lib/roma/
|
80
|
-
- lib/roma/
|
81
|
-
- lib/roma/
|
82
|
-
- lib/roma/
|
83
|
-
- lib/roma/
|
84
|
-
- lib/roma/
|
85
|
-
- lib/roma/
|
86
|
-
- lib/roma/
|
87
|
-
- lib/roma/
|
88
|
-
- lib/roma/
|
89
|
-
- lib/roma/
|
90
|
-
- lib/roma/
|
91
|
-
- lib/roma/
|
92
|
-
-
|
93
|
-
-
|
94
|
-
-
|
95
|
-
-
|
96
|
-
-
|
97
|
-
-
|
98
|
-
-
|
99
|
-
-
|
100
|
-
-
|
101
|
-
|
102
|
-
|
63
|
+
- CHANGELOG
|
64
|
+
- FETCH_HEAD
|
65
|
+
- LICENSE
|
66
|
+
- CHANG
|
67
|
+
- ruby/server/bin/multi_commander
|
68
|
+
- ruby/server/bin/mkconfig
|
69
|
+
- ruby/server/bin/key_list
|
70
|
+
- ruby/server/bin/roma_watcher
|
71
|
+
- ruby/server/bin/recoverlost
|
72
|
+
- ruby/server/bin/mkrecent
|
73
|
+
- ruby/server/bin/chg_redundancy
|
74
|
+
- ruby/server/bin/test-scenario
|
75
|
+
- ruby/server/bin/recoverlost_alist
|
76
|
+
- ruby/server/bin/recoverlost_alist_keys
|
77
|
+
- ruby/server/bin/mkroute
|
78
|
+
- ruby/server/bin/romad
|
79
|
+
- ruby/server/bin/recoverlost_alist_all
|
80
|
+
- ruby/server/bin/sample_watcher2
|
81
|
+
- ruby/server/bin/tribunus
|
82
|
+
- ruby/server/bin/ssroute
|
83
|
+
- ruby/server/bin/simple_bench
|
84
|
+
- ruby/server/bin/sample_watcher
|
85
|
+
- ruby/server/bin/sample_watcher3
|
86
|
+
- ruby/server/bin/key_access
|
87
|
+
- ruby/server/lib/roma/async_process.rb
|
88
|
+
- ruby/server/lib/roma/command/util_command_receiver.rb
|
89
|
+
- ruby/server/lib/roma/command/bg_command_receiver.rb
|
90
|
+
- ruby/server/lib/roma/command/receiver.rb
|
91
|
+
- ruby/server/lib/roma/command/rt_command_receiver.rb
|
92
|
+
- ruby/server/lib/roma/command/mh_command_receiver.rb
|
93
|
+
- ruby/server/lib/roma/command/command_definition.rb
|
94
|
+
- ruby/server/lib/roma/command/sys_command_receiver.rb
|
95
|
+
- ruby/server/lib/roma/command/vn_command_receiver.rb
|
96
|
+
- ruby/server/lib/roma/live_patch-20120302-001.rb
|
97
|
+
- ruby/server/lib/roma/version.rb
|
98
|
+
- ruby/server/lib/roma/logging/rlogger.rb
|
99
|
+
- ruby/server/lib/roma/romad.rb
|
100
|
+
- ruby/server/lib/roma/write_behind.rb
|
101
|
+
- ruby/server/lib/roma/messaging/con_pool.rb
|
102
|
+
- ruby/server/lib/roma/command_plugin.rb
|
103
|
+
- ruby/server/lib/roma/storage/tc_storage.rb
|
104
|
+
- ruby/server/lib/roma/storage/rh_storage.rb
|
105
|
+
- ruby/server/lib/roma/storage/basic_storage.rb
|
106
|
+
- ruby/server/lib/roma/storage/sqlite3_storage.rb
|
107
|
+
- ruby/server/lib/roma/storage/dummy_storage.rb
|
108
|
+
- ruby/server/lib/roma/storage/dbm_storage.rb
|
109
|
+
- ruby/server/lib/roma/routing/cb_rttable.rb
|
110
|
+
- ruby/server/lib/roma/routing/rttable.rb
|
111
|
+
- ruby/server/lib/roma/routing/merkle_tree.rb
|
112
|
+
- ruby/server/lib/roma/routing/routing_data.rb
|
113
|
+
- ruby/server/lib/roma/event/con_pool.rb
|
114
|
+
- ruby/server/lib/roma/event/handler.rb
|
115
|
+
- ruby/server/lib/roma/plugin/plugin_storage.rb
|
116
|
+
- ruby/server/lib/roma/plugin/plugin_alist.rb
|
117
|
+
- ruby/server/lib/roma/plugin/plugin_stub.rb
|
118
|
+
- ruby/server/lib/roma/plugin/plugin_mapcount.rb
|
119
|
+
- ruby/server/lib/roma/plugin/plugin_debug.rb
|
120
|
+
- ruby/server/lib/roma/plugin/plugin_map.rb
|
121
|
+
- ruby/server/lib/roma/plugin/plugin_test.rb
|
122
|
+
- ruby/server/lib/roma/stats.rb
|
123
|
+
- ruby/server/lib/roma/config.rb
|
124
|
+
- ruby/server/lib/roma/tools/recoverlost.rb
|
125
|
+
- ruby/server/lib/roma/tools/mkconfig.rb
|
126
|
+
- ruby/server/lib/roma/tools/chg_redundancy.rb
|
127
|
+
- ruby/server/lib/roma/tools/sample_watcher3.rb
|
128
|
+
- ruby/server/lib/roma/tools/key_list.rb
|
129
|
+
- ruby/server/lib/roma/tools/recoverlost_lib.rb
|
130
|
+
- ruby/server/lib/roma/tools/roma_watcher.rb
|
131
|
+
- ruby/server/lib/roma/tools/key_access.rb
|
132
|
+
- ruby/server/lib/roma/tools/simple_bench2.rb
|
133
|
+
- ruby/server/lib/roma/tools/simple_bench.rb
|
134
|
+
- ruby/server/lib/roma/tools/recoverlost_alist_all.rb
|
135
|
+
- ruby/server/lib/roma/tools/multi_commander.rb
|
136
|
+
- ruby/server/lib/roma/tools/sample_watcher2.rb
|
137
|
+
- ruby/server/lib/roma/tools/tribunus.rb
|
138
|
+
- ruby/server/lib/roma/tools/mkrecent.rb
|
139
|
+
- ruby/server/lib/roma/tools/roma_watcher_config.yml.example
|
140
|
+
- ruby/server/lib/roma/tools/ssroute.rb
|
141
|
+
- ruby/server/lib/roma/tools/recoverlost_alist_keys.rb
|
142
|
+
- ruby/server/lib/roma/tools/sample_watcher.rb
|
143
|
+
- ruby/server/lib/roma/tools/test-scenario.rb
|
144
|
+
- ruby/server/lib/roma/tools/recoverlost_alist.rb
|
145
|
+
- ruby/server/lib/roma/tools/mkroute.rb
|
146
|
+
- ruby/server/test/t_rclient.rb
|
147
|
+
- ruby/server/test/t_listplugin.rb
|
148
|
+
- ruby/server/test/t_command_definition.rb
|
149
|
+
- ruby/server/test/rcirb.rb
|
150
|
+
- ruby/server/test/config4storage_error.rb
|
151
|
+
- ruby/server/test/t_mapplugin.rb
|
152
|
+
- ruby/server/test/config4test.rb
|
153
|
+
- ruby/server/test/t_writebehind.rb
|
154
|
+
- ruby/server/test/t_cpdata.rb
|
155
|
+
- ruby/server/test/t_mapcountplugin.rb
|
156
|
+
- ruby/server/test/roma-test-utils.rb
|
157
|
+
- ruby/server/test/t_routing_data.rb
|
158
|
+
- ruby/server/test/run-test.rb
|
159
|
+
- ruby/server/test/config4mhash.rb
|
160
|
+
- ruby/server/test/storage_error_storage.rb
|
161
|
+
- ruby/server/test/t_storage.rb
|
162
|
+
- ruby/server/test/t_storage_error.rb
|
163
|
+
- ruby/server/test/t_mhash.rb
|
164
|
+
homepage: http://code.google.com/p/roma-prj/
|
103
165
|
licenses: []
|
104
166
|
|
105
167
|
post_install_message:
|
@@ -107,26 +169,32 @@ rdoc_options:
|
|
107
169
|
- --line-numbers
|
108
170
|
- --inline-source
|
109
171
|
- --main
|
110
|
-
- README
|
172
|
+
- README
|
111
173
|
- -c UTF-8
|
112
174
|
require_paths:
|
113
|
-
- lib
|
175
|
+
- ruby/server/lib
|
114
176
|
required_ruby_version: !ruby/object:Gem::Requirement
|
177
|
+
none: false
|
115
178
|
requirements:
|
116
179
|
- - ">="
|
117
180
|
- !ruby/object:Gem::Version
|
181
|
+
hash: 3
|
182
|
+
segments:
|
183
|
+
- 0
|
118
184
|
version: "0"
|
119
|
-
version:
|
120
185
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
186
|
+
none: false
|
121
187
|
requirements:
|
122
188
|
- - ">="
|
123
189
|
- !ruby/object:Gem::Version
|
190
|
+
hash: 3
|
191
|
+
segments:
|
192
|
+
- 0
|
124
193
|
version: "0"
|
125
|
-
version:
|
126
194
|
requirements: []
|
127
195
|
|
128
196
|
rubyforge_project:
|
129
|
-
rubygems_version: 1.
|
197
|
+
rubygems_version: 1.8.12
|
130
198
|
signing_key:
|
131
199
|
specification_version: 3
|
132
200
|
summary: ROMA server
|