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
@@ -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
- version: 0.8.2
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: 2010-02-19 00:00:00 +09:00
13
- default_executable: romad
19
+ date: 2012-03-14 00:00:00 Z
14
20
  dependencies:
15
21
  - !ruby/object:Gem::Dependency
16
- name: roma-commons
17
- type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
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
- version:
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
- - recoverlost_alist
34
- - romad
35
- - recoverlost
53
+ - simple_bench
54
+ - key_access
36
55
  extensions: []
37
56
 
38
57
  extra_rdoc_files:
39
- - README.rdoc
58
+ - README
59
+ - CHANGELOG
40
60
  files:
61
+ - README
41
62
  - Rakefile
42
- - README.rdoc
43
- - LICENSE.rdoc
44
- - bin/mkrecent
45
- - bin/mkroute
46
- - bin/tribunus
47
- - bin/simple_bench
48
- - bin/sample_watcher
49
- - bin/ssroute
50
- - bin/recoverlost_alist
51
- - bin/sample_watcher2
52
- - bin/romad
53
- - bin/recoverlost
54
- - lib/roma/tools/mkrecent.rb
55
- - lib/roma/tools/sample_watcher.rb
56
- - lib/roma/tools/simple_bench.rb
57
- - lib/roma/tools/recoverlost_alist.rb
58
- - lib/roma/tools/mkroute.rb
59
- - lib/roma/tools/ssroute.rb
60
- - lib/roma/tools/tribunus.rb
61
- - lib/roma/tools/sample_watcher2.rb
62
- - lib/roma/tools/recoverlost_lib.rb
63
- - lib/roma/tools/recoverlost.rb
64
- - lib/roma/storage/rh_storage.rb
65
- - lib/roma/storage/dummy_storage.rb
66
- - lib/roma/storage/basic_storage.rb
67
- - lib/roma/storage/sqlite3_storage.rb
68
- - lib/roma/storage/dbm_storage.rb
69
- - lib/roma/storage/tc_storage.rb
70
- - lib/roma/command/st_command_receiver.rb
71
- - lib/roma/command/vn_command_receiver.rb
72
- - lib/roma/command/bg_command_receiver.rb
73
- - lib/roma/command/rt_command_receiver.rb
74
- - lib/roma/command/util_command_receiver.rb
75
- - lib/roma/command/mh_command_receiver.rb
76
- - lib/roma/command/receiver.rb
77
- - lib/roma/write_behind.rb
78
- - lib/roma/version.rb
79
- - lib/roma/command_plugin.rb
80
- - lib/roma/config.rb
81
- - lib/roma/routing/merkle_tree.rb
82
- - lib/roma/routing/rttable.rb
83
- - lib/roma/routing/cb_rttable.rb
84
- - lib/roma/plugin/plugin_test.rb
85
- - lib/roma/plugin/plugin_debug.rb
86
- - lib/roma/plugin/plugin_alist.rb
87
- - lib/roma/event/con_pool.rb
88
- - lib/roma/event/handler.rb
89
- - lib/roma/romad.rb
90
- - lib/roma/stats.rb
91
- - lib/roma/async_process.rb
92
- - test/rcirb.rb
93
- - test/roma-test-utils.rb
94
- - test/run-test.rb
95
- - test/t_routing_data.rb
96
- - test/t_writebehind.rb
97
- - test/t_listplugin.rb
98
- - test/t_cpdata.rb
99
- - test/t_rclient.rb
100
- - test/t_storage.rb
101
- has_rdoc: true
102
- homepage:
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.rdoc
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.3.5
197
+ rubygems_version: 1.8.12
130
198
  signing_key:
131
199
  specification_version: 3
132
200
  summary: ROMA server