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.
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