roma 0.8.12 → 0.8.13p1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +34 -1
- data/Gemfile +17 -0
- data/Rakefile +2 -3
- data/ruby/server/lib/roma/async_process.rb +158 -20
- data/ruby/server/lib/roma/command/bg_command_receiver.rb +3 -4
- data/ruby/server/lib/roma/command/rt_command_receiver.rb +133 -5
- data/ruby/server/lib/roma/command/sys_command_receiver.rb +353 -0
- data/ruby/server/lib/roma/command/vn_command_receiver.rb +9 -3
- data/ruby/server/lib/roma/config.rb +6 -0
- data/ruby/server/lib/roma/dns_cache.rb +40 -0
- data/ruby/server/lib/roma/event/con_pool.rb +3 -1
- data/ruby/server/lib/roma/event/handler.rb +18 -3
- data/ruby/server/lib/roma/messaging/con_pool.rb +3 -1
- data/ruby/server/lib/roma/romad.rb +19 -3
- data/ruby/server/lib/roma/routing/cb_rttable.rb +22 -1
- data/ruby/server/lib/roma/routing/random_balancer.rb +76 -0
- data/ruby/server/lib/roma/routing/routing_data.rb +16 -2
- data/ruby/server/lib/roma/routing/rttable.rb +55 -8
- data/ruby/server/lib/roma/stats.rb +32 -0
- data/ruby/server/lib/roma/storage/sqlite3_storage.rb +9 -3
- data/ruby/server/lib/roma/tools/mkconfig.rb +135 -73
- data/ruby/server/lib/roma/tools/mkrecent.rb +3 -4
- data/ruby/server/lib/roma/tools/mkroute.rb +6 -7
- data/ruby/server/lib/roma/tools/multi_commander.rb +3 -4
- data/ruby/server/lib/roma/tools/recoverlost.rb +0 -1
- data/ruby/server/lib/roma/tools/recoverlost_alist.rb +0 -1
- data/ruby/server/lib/roma/tools/recoverlost_lib.rb +10 -11
- data/ruby/server/lib/roma/tools/roma_watcher.rb +0 -1
- data/ruby/server/lib/roma/tools/sample_watcher.rb +3 -4
- data/ruby/server/lib/roma/tools/sample_watcher2.rb +3 -4
- data/ruby/server/lib/roma/tools/sample_watcher3.rb +0 -1
- data/ruby/server/lib/roma/tools/simple_bench.rb +3 -3
- data/ruby/server/lib/roma/tools/simple_bench2.rb +1 -2
- data/ruby/server/lib/roma/tools/ssroute.rb +0 -1
- data/ruby/server/lib/roma/tools/tribunus.rb +5 -6
- data/ruby/server/lib/roma/version.rb +1 -1
- data/ruby/server/lib/roma/write_behind.rb +4 -1
- data/ruby/server/test/rcirb.rb +0 -1
- data/ruby/server/test/t_cpdata.rb +8 -9
- data/ruby/server/test/t_rclient.rb +1 -2
- data/ruby/server/test/t_routing_data.rb +13 -14
- data/ruby/server/test/t_storage.rb +1 -1
- data/ruby/server/test/t_writebehind.rb +29 -30
- metadata +25 -24
@@ -18,7 +18,7 @@ Thread.new do
|
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
|
-
def
|
21
|
+
def random_request_sender(ini_nodes, n)
|
22
22
|
puts __method__
|
23
23
|
rc=Roma::Client::RomaClient.new(ini_nodes)
|
24
24
|
|
@@ -80,7 +80,7 @@ opts.banner = "usage:#{File.basename($0)} [options] addr:port"
|
|
80
80
|
opts.on("-s", "--set", "set request"){|v| param[:set] = v }
|
81
81
|
opts.on("-g", "--get", "get request"){|v| param[:get] = v }
|
82
82
|
opts.on("-r", "--rand", "random request"){|v| param[:rand] = v }
|
83
|
-
opts.on("-n", "--num [num]", "number of
|
83
|
+
opts.on("-n", "--num [num]", "number of keys"){|v| param[:num] = v.to_i }
|
84
84
|
opts.on("-t", "--threads [num]", "number of threads"){|v| param[:th] = v.to_i }
|
85
85
|
opts.parse!(ARGV)
|
86
86
|
|
@@ -99,7 +99,7 @@ param[:th].times do |i|
|
|
99
99
|
t << Thread.new do
|
100
100
|
get_sequence(ARGV, param[:num]) if param.key?(:get)
|
101
101
|
set_sequence(ARGV, param[:num]) if param.key?(:set)
|
102
|
-
|
102
|
+
random_request_sender(ARGV, param[:num]) if param.key?(:rand)
|
103
103
|
end
|
104
104
|
end
|
105
105
|
|
@@ -1,5 +1,4 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
# -*- coding: utf-8 -*-
|
3
2
|
require 'date'
|
4
3
|
require 'roma/client/rclient'
|
5
4
|
|
@@ -52,7 +51,7 @@ module Roma
|
|
52
51
|
end
|
53
52
|
|
54
53
|
|
55
|
-
def
|
54
|
+
def random_request_sender(ini_nodes)
|
56
55
|
rc=Roma::Client::RomaClient.new(ini_nodes)
|
57
56
|
|
58
57
|
n=10000
|
@@ -1,5 +1,4 @@
|
|
1
1
|
#!/usr/bin/ruby
|
2
|
-
# encoding: utf-8
|
3
2
|
require 'socket'
|
4
3
|
require 'ipaddr'
|
5
4
|
require 'optparse'
|
@@ -46,7 +45,7 @@ class Tribunus
|
|
46
45
|
@remote_servers={} #ipaddr => RomadHost
|
47
46
|
|
48
47
|
end
|
49
|
-
|
48
|
+
|
50
49
|
def from_remote?(ipaddr)
|
51
50
|
from_remote= !Socket.ip_address_list.any?{|addr|addr.ip_address==ipaddr}
|
52
51
|
end
|
@@ -67,7 +66,7 @@ class Tribunus
|
|
67
66
|
if(Process.waitpid2(pid)[1].to_i!=0)
|
68
67
|
raise "failed to make route"
|
69
68
|
end
|
70
|
-
|
69
|
+
|
71
70
|
@local_romad_host.ports.each do|port|
|
72
71
|
pid=Process.spawn(@ruby_command_name,*RUBY_COMMAND_OPTIONS,ROMAD_PATH,*ROMAD_OPTIONS,"-p",port.to_s,@local_romad_host.hostname, :chdir=>@romad_work_dir)
|
73
72
|
@romads[port]=pid
|
@@ -163,7 +162,7 @@ class Tribunus
|
|
163
162
|
end
|
164
163
|
|
165
164
|
|
166
|
-
|
165
|
+
|
167
166
|
|
168
167
|
sleep(HEARTBEAT_LOOP_INTERVAL)
|
169
168
|
end
|
@@ -288,10 +287,10 @@ if ports.size >100
|
|
288
287
|
end
|
289
288
|
|
290
289
|
tri=Tribunus.new(hostname,ports,conf)
|
291
|
-
case conf[:mode]
|
290
|
+
case conf[:mode]
|
292
291
|
when:new_ring
|
293
292
|
tri.start_new_ring
|
294
|
-
when :join
|
293
|
+
when :join
|
295
294
|
tri.start_join(conf[:joining_node][0],conf[:joining_node][1])
|
296
295
|
else
|
297
296
|
tri.start_discover
|
@@ -7,6 +7,8 @@ module Roma
|
|
7
7
|
|
8
8
|
class FileWriter
|
9
9
|
|
10
|
+
attr_accessor :shift_size
|
11
|
+
|
10
12
|
def initialize(path, shift_size, log)
|
11
13
|
@stats = Roma::Stats.instance
|
12
14
|
path.chop! if path[-1]=='/'
|
@@ -43,6 +45,7 @@ module Roma
|
|
43
45
|
fd = @fdh[hname]
|
44
46
|
unless fd
|
45
47
|
fd = openfile(hname)
|
48
|
+
@log.info("WriteBehind file has been created: [#{@fnh[hname]}]")
|
46
49
|
@total_size[hname] = 0
|
47
50
|
end
|
48
51
|
klen = key.length
|
@@ -66,7 +69,7 @@ module Roma
|
|
66
69
|
@fnh.delete(hname)
|
67
70
|
sleep 0.01 while @do_write
|
68
71
|
fd_old.close
|
69
|
-
@log.info("WriteBehind:rotate
|
72
|
+
@log.info("WriteBehind:rotate succeed")
|
70
73
|
true
|
71
74
|
end
|
72
75
|
|
data/ruby/server/test/rcirb.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
# -*- coding: utf-8 -*-
|
3
2
|
|
4
3
|
require 'roma/client/rclient'
|
5
4
|
require 'roma/messaging/con_pool'
|
@@ -83,7 +82,7 @@ rescue =>e
|
|
83
82
|
false
|
84
83
|
end
|
85
84
|
|
86
|
-
# vnode
|
85
|
+
# test of copying vnode
|
87
86
|
class CopyDataTest < Test::Unit::TestCase
|
88
87
|
include RomaTestUtils
|
89
88
|
|
@@ -98,10 +97,10 @@ class CopyDataTest < Test::Unit::TestCase
|
|
98
97
|
@th.kill
|
99
98
|
$gs.close
|
100
99
|
Roma::Messaging::ConPool::instance.close_all
|
101
|
-
end
|
100
|
+
end
|
102
101
|
|
103
102
|
def test_spushv
|
104
|
-
# vn = 0
|
103
|
+
# key wihch's vn = 0
|
105
104
|
keys = []
|
106
105
|
n = 1000
|
107
106
|
n.times{|i|
|
@@ -124,7 +123,7 @@ class CopyDataTest < Test::Unit::TestCase
|
|
124
123
|
def push_a_vnode_stream(hname, vn, nid, keys)
|
125
124
|
con = Roma::Messaging::ConPool.instance.get_connection(nid)
|
126
125
|
con.write("spushv #{hname} #{vn}\r\n")
|
127
|
-
|
126
|
+
|
128
127
|
res = con.gets # READY\r\n or error string
|
129
128
|
if res != "READY\r\n"
|
130
129
|
con.close
|
@@ -137,7 +136,7 @@ class CopyDataTest < Test::Unit::TestCase
|
|
137
136
|
con.write(data)
|
138
137
|
}
|
139
138
|
con.write("\0"*20) # end of steram
|
140
|
-
|
139
|
+
|
141
140
|
res = con.gets # STORED\r\n or error string
|
142
141
|
Roma::Messaging::ConPool.instance.return_connection(nid,con)
|
143
142
|
res.chomp! if res
|
@@ -155,7 +154,7 @@ class CopyDataTest < Test::Unit::TestCase
|
|
155
154
|
dat[0] = reqpushv('roma',0)
|
156
155
|
assert_not_nil( dat[0] )
|
157
156
|
dat[0] = reqpushv('roma',0)
|
158
|
-
assert_not_nil( dat[0] ) #
|
157
|
+
assert_not_nil( dat[0] ) # confirming twice access to same node
|
159
158
|
|
160
159
|
dat[1] = reqpushv('roma',536870912)
|
161
160
|
assert_not_nil( dat[1] )
|
@@ -184,7 +183,7 @@ class CopyDataTest < Test::Unit::TestCase
|
|
184
183
|
$dat[vn]
|
185
184
|
end
|
186
185
|
|
187
|
-
#
|
186
|
+
# set dummy data of n count
|
188
187
|
def make_dummy(n)
|
189
188
|
n.times{|i|
|
190
189
|
assert( @rc.set(i.to_s,i.to_s)=="STORED" )
|
@@ -230,5 +229,5 @@ class CopyDataTest < Test::Unit::TestCase
|
|
230
229
|
@log.error("#{e}\n#{$@}")
|
231
230
|
false
|
232
231
|
end
|
233
|
-
|
232
|
+
|
234
233
|
end
|
@@ -1,5 +1,4 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
# -*- coding: utf-8 -*-
|
3
2
|
|
4
3
|
require 'roma/client/rclient'
|
5
4
|
require 'roma/messaging/con_pool'
|
@@ -194,6 +193,6 @@ class RClientTestForceForward < RClientTest
|
|
194
193
|
@rd.v_idx[d & @search_mask][1]
|
195
194
|
end
|
196
195
|
}
|
197
|
-
end
|
196
|
+
end
|
198
197
|
|
199
198
|
end
|
@@ -1,5 +1,4 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
# -*- coding: utf-8 -*-
|
3
2
|
|
4
3
|
require 'roma/routing/routing_data'
|
5
4
|
require 'yaml'
|
@@ -15,7 +14,7 @@ class RoutingDataTest < Test::Unit::TestCase
|
|
15
14
|
GC.start
|
16
15
|
n=0
|
17
16
|
ObjectSpace.each_object{|o| n+=1 }
|
18
|
-
n
|
17
|
+
n
|
19
18
|
end
|
20
19
|
|
21
20
|
def test_object_count
|
@@ -64,12 +63,12 @@ class RoutingDataTest < Test::Unit::TestCase
|
|
64
63
|
end
|
65
64
|
|
66
65
|
def test_create
|
67
|
-
#
|
68
|
-
#
|
69
|
-
#
|
70
|
-
#
|
66
|
+
# digest bit count 32
|
67
|
+
# vn bit count 8
|
68
|
+
# redundancy 1
|
69
|
+
# array of node ID [roma0_3300]
|
71
70
|
rd=Roma::Routing::RoutingData.create(32,8,1,['roma0_3300'])
|
72
|
-
|
71
|
+
|
73
72
|
assert( rd.v_idx.length==256 )
|
74
73
|
assert( rd.nodes.length==1 )
|
75
74
|
assert( rd.search_mask==0xff000000 )
|
@@ -77,10 +76,10 @@ class RoutingDataTest < Test::Unit::TestCase
|
|
77
76
|
assert( rd.div_bits==8 )
|
78
77
|
assert( rd.rn==1 )
|
79
78
|
|
80
|
-
#
|
81
|
-
#
|
82
|
-
#
|
83
|
-
#
|
79
|
+
# digest bit count 32
|
80
|
+
# vn bit count 16
|
81
|
+
# redundancy 2
|
82
|
+
# array of node ID ['roma0_3300','roma1_3300','roma2_3300']
|
84
83
|
rd=Roma::Routing::RoutingData.create(32,16,2,['roma0_3300','roma1_3300','roma2_3300'])
|
85
84
|
|
86
85
|
assert( rd.v_idx.length==65536 )
|
@@ -101,14 +100,14 @@ class RoutingDataTest < Test::Unit::TestCase
|
|
101
100
|
c2+=1
|
102
101
|
end
|
103
102
|
}
|
104
|
-
#
|
103
|
+
# confirming dispersion is lower than 10%
|
105
104
|
assert( (c0-c1).abs < rd.v_idx.length/10 )
|
106
105
|
assert( (c1-c2).abs < rd.v_idx.length/10 )
|
107
106
|
end
|
108
107
|
|
109
108
|
def test_dump_binary
|
110
109
|
rd=Roma::Routing::RoutingData.create(32,9,2,['roma0_3300','roma1_3300'])
|
111
|
-
# set to a bummy clock
|
110
|
+
# set to a bummy clock
|
112
111
|
(2**rd.div_bits).times{|i|
|
113
112
|
vn=i<<(rd.dgst_bits-rd.div_bits)
|
114
113
|
rd.v_clk[vn] = i
|
@@ -151,7 +150,7 @@ class RoutingDataTest < Test::Unit::TestCase
|
|
151
150
|
|
152
151
|
def test_dump_binary2
|
153
152
|
rd=Roma::Routing::RoutingData.create(32,9,2,['roma0_3300','roma1_3300'])
|
154
|
-
# set to a bummy clock
|
153
|
+
# set to a bummy clock
|
155
154
|
(2**rd.div_bits).times{|i|
|
156
155
|
vn=i<<(rd.dgst_bits-rd.div_bits)
|
157
156
|
rd.v_clk[vn] = i
|
@@ -304,7 +304,7 @@ class TCStorageTest < Test::Unit::TestCase
|
|
304
304
|
n.times{|i|
|
305
305
|
@st.set(3,"key3-#{i}",0,Time.now.to_i-100,"val3-#{i}")
|
306
306
|
}
|
307
|
-
# 10
|
307
|
+
# 10 keys deleted
|
308
308
|
cnt=0
|
309
309
|
@st.each_clean_up(Time.now.to_i-100,vnhash){|k,vn|
|
310
310
|
assert_equal(3, vn)
|
@@ -1,5 +1,4 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
# -*- coding: utf-8 -*-
|
3
2
|
require 'logger'
|
4
3
|
require 'stringio'
|
5
4
|
require 'roma/write_behind'
|
@@ -9,7 +8,7 @@ require 'roma/client/plugin/alist'
|
|
9
8
|
require 'roma/client/plugin/map'
|
10
9
|
|
11
10
|
class FileWriterTest < Test::Unit::TestCase
|
12
|
-
|
11
|
+
|
13
12
|
def initialize(arg)
|
14
13
|
super(arg)
|
15
14
|
end
|
@@ -24,7 +23,7 @@ class FileWriterTest < Test::Unit::TestCase
|
|
24
23
|
system('rm -rf wb_test')
|
25
24
|
end
|
26
25
|
|
27
|
-
#
|
26
|
+
# making and writing test
|
28
27
|
def test_wb_write
|
29
28
|
system('rm -rf wb_test')
|
30
29
|
fw = Roma::WriteBehind::FileWriter.new("wb_test", 1024 * 1024, Logger.new(nil))
|
@@ -55,7 +54,7 @@ class FileWriterTest < Test::Unit::TestCase
|
|
55
54
|
assert_equal(1,wb1.length )
|
56
55
|
end
|
57
56
|
|
58
|
-
#
|
57
|
+
# rotation test per data
|
59
58
|
def test_wb_rotation
|
60
59
|
system('rm -rf wb_test')
|
61
60
|
fw = Roma::WriteBehind::FileWriter.new("wb_test", 900, Logger.new(nil))
|
@@ -74,56 +73,56 @@ class FileWriterTest < Test::Unit::TestCase
|
|
74
73
|
assert(!File.exist?("#{path}/4.wb"))
|
75
74
|
end
|
76
75
|
|
77
|
-
#
|
76
|
+
# rotation test per time
|
78
77
|
def test_rotation2
|
79
78
|
system('rm -rf wb_test')
|
80
79
|
fw = Roma::WriteBehind::FileWriter.new("wb_test", 1024 * 1024, Logger.new(nil))
|
81
80
|
path = "wb_test/roma0_11211/roma/#{Time.now.strftime('%Y%m%d')}/"
|
82
81
|
|
83
|
-
#
|
82
|
+
# rottime's usec have some value,from instance was created
|
84
83
|
rt = fw.instance_eval{ @rottime }
|
85
84
|
assert_not_equal(0, rt.hour + rt.min + rt.sec+ rt.usec)
|
86
|
-
#
|
85
|
+
# formatting execute in today's date
|
87
86
|
assert_equal(Time.now.day, rt.day)
|
88
|
-
#
|
87
|
+
# confirming the file do not exist
|
89
88
|
assert(!File.exist?("#{path}/0.wb"))
|
90
89
|
fw.write('roma',1,"key","val")
|
91
|
-
#
|
90
|
+
# Open when somenthing to write,and in same timing rottime is updated
|
92
91
|
rt = fw.instance_eval{ @rottime }
|
93
|
-
#
|
92
|
+
# In this time, under of date become "0"
|
94
93
|
assert_equal(0, rt.hour + rt.min + rt.sec+ rt.usec)
|
95
|
-
#
|
94
|
+
# date become tomorrow
|
96
95
|
assert_not_equal(Time.now.day, rt.day)
|
97
96
|
10.times{|i|
|
98
97
|
fw.write('roma',i,"key-#{i}","val-#{i}")
|
99
98
|
}
|
100
|
-
#
|
99
|
+
# confirming file is only 1 not over 2
|
101
100
|
assert(File.exist?("#{path}/0.wb"))
|
102
101
|
assert(!File.exist?("#{path}/1.wb"))
|
103
|
-
|
104
|
-
#
|
102
|
+
|
103
|
+
# set rottime to now forcibly
|
105
104
|
fw.instance_eval{ @rottime=Time.now }
|
106
|
-
# rottime
|
105
|
+
# confriming to change rottime
|
107
106
|
assert_not_equal(rt, fw.instance_eval{ @rottime })
|
108
|
-
#
|
107
|
+
# When something write, rotation is occured
|
109
108
|
fw.write('roma',1,"key","val")
|
110
109
|
assert(File.exist?("#{path}/1.wb"))
|
111
|
-
#
|
110
|
+
# rottime turn back because of test shold not step over the day.
|
112
111
|
assert_equal(rt, fw.instance_eval{ @rottime })
|
113
112
|
end
|
114
113
|
|
115
|
-
#
|
114
|
+
# rotation test from outside
|
116
115
|
def test_wb_rotation3
|
117
116
|
system('rm -rf wb_test')
|
118
117
|
fw = Roma::WriteBehind::FileWriter.new("wb_test", 1024 * 1024, Logger.new(nil))
|
119
118
|
path = "wb_test/roma0_11211/roma/#{Time.now.strftime('%Y%m%d')}/"
|
120
119
|
|
121
|
-
#
|
120
|
+
# confirming file don't exist
|
122
121
|
assert(!File.exist?("#{path}/0.wb"))
|
123
122
|
10.times{|i|
|
124
123
|
fw.write('roma',i,"key-#{i}","val-#{i}")
|
125
124
|
}
|
126
|
-
#
|
125
|
+
# confirming file is only 1 not over 2
|
127
126
|
assert(File.exist?("#{path}/0.wb"))
|
128
127
|
assert(!File.exist?("#{path}/1.wb"))
|
129
128
|
|
@@ -131,23 +130,23 @@ class FileWriterTest < Test::Unit::TestCase
|
|
131
130
|
10.times{|i|
|
132
131
|
fw.write('roma',i,"key-#{i}","val-#{i}")
|
133
132
|
}
|
134
|
-
#
|
133
|
+
# confirming files are 2 not over 3
|
135
134
|
assert(File.exist?("#{path}/0.wb"))
|
136
135
|
assert(File.exist?("#{path}/1.wb"))
|
137
136
|
assert(!File.exist?("#{path}/2.wb"))
|
138
137
|
|
139
|
-
#
|
138
|
+
# test of do rotation continuously
|
140
139
|
fw.rotate('roma')
|
141
140
|
fw.rotate('roma')
|
142
141
|
fw.rotate('roma')
|
143
|
-
#
|
142
|
+
# confimring file's count are still 2 (not changing).
|
144
143
|
assert(File.exist?("#{path}/0.wb"))
|
145
144
|
assert(File.exist?("#{path}/1.wb"))
|
146
145
|
assert(!File.exist?("#{path}/2.wb"))
|
147
146
|
10.times{|i|
|
148
147
|
fw.write('roma',i,"key-#{i}","val-#{i}")
|
149
148
|
}
|
150
|
-
#
|
149
|
+
# confirming files are 3 not over 4
|
151
150
|
assert(File.exist?("#{path}/0.wb"))
|
152
151
|
assert(File.exist?("#{path}/1.wb"))
|
153
152
|
assert(File.exist?("#{path}/2.wb"))
|
@@ -162,7 +161,7 @@ class FileWriterTest < Test::Unit::TestCase
|
|
162
161
|
assert_nil( fw.get_current_file_path('roma') )
|
163
162
|
|
164
163
|
fw.write('roma',0,"key","val")
|
165
|
-
|
164
|
+
|
166
165
|
path = File.expand_path("./wb_test/roma0_11211/roma/#{Time.now.strftime('%Y%m%d')}/")
|
167
166
|
assert_equal( File.join(path,"0.wb"), fw.get_current_file_path('roma'))
|
168
167
|
|
@@ -232,7 +231,7 @@ class WriteBehindTest < FileWriterTest
|
|
232
231
|
send_cmd("localhost_11211", "wb_command_map {:set=>1}")
|
233
232
|
assert_equal("STORED", @rc.set("abc","value abc",0,true))
|
234
233
|
send_cmd("localhost_11211", "writebehind_rotate roma")
|
235
|
-
|
234
|
+
|
236
235
|
wb0 = read_wb("#{wb_path}/0.wb")
|
237
236
|
assert_equal(1, wb0.length)
|
238
237
|
wb0.each do |last, cmd, key, val|
|
@@ -259,8 +258,8 @@ class WriteBehindTest < FileWriterTest
|
|
259
258
|
assert_equal(128, @rc.decr("abc"))
|
260
259
|
## test for set_expt TODO
|
261
260
|
send_cmd("localhost_11211", "writebehind_rotate roma")
|
262
|
-
|
263
|
-
|
261
|
+
|
262
|
+
|
264
263
|
res = {1=>'1',2=>'1',3=>'1',4=>'2',5=>'23',6=>'123',7=>'128',8=>'129',9=>'128'}
|
265
264
|
wb0 = read_wb("#{wb_path}/0.wb")
|
266
265
|
assert_equal(9, wb0.length)
|
@@ -307,7 +306,7 @@ class WriteBehindTest < FileWriterTest
|
|
307
306
|
assert_equal('DELETED', @rc.alist_delete_at("abc",1)) #['13','5','4','2','1','8','9','10','12']
|
308
307
|
assert_equal('CLEARED', @rc.alist_clear("abc"))
|
309
308
|
send_cmd("localhost_11211", "writebehind_rotate roma")
|
310
|
-
|
309
|
+
|
311
310
|
res = {
|
312
311
|
10=>'1',4=>'2',5=>'3',6=>'4',7=>'5',8=>'6',9=>'7',11=>'8',12=>'9',
|
313
312
|
13=>'10',14=>'11',15=>'12',16=>'13',2=>'3',3=>'6',
|
@@ -336,7 +335,7 @@ class WriteBehindTest < FileWriterTest
|
|
336
335
|
assert_equal('STORED', @rc.map_set('abc','mapkey1','value1'))
|
337
336
|
assert_equal('CLEARED', @rc.map_clear("abc"))
|
338
337
|
send_cmd("localhost_11211", "writebehind_rotate roma")
|
339
|
-
|
338
|
+
|
340
339
|
res = {1=>'value1',2=>{},3=>{}}
|
341
340
|
wb0 = read_wb("#{wb_path}/0.wb")
|
342
341
|
assert_equal(4, wb0.length)
|
metadata
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: roma
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
5
|
-
prerelease:
|
4
|
+
version: 0.8.13p1
|
5
|
+
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Junji Torii
|
@@ -10,14 +10,14 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: ruby/server/bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2014-01-23 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: eventmachine
|
17
17
|
requirement: !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
|
-
- - '>='
|
20
|
+
- - ! '>='
|
21
21
|
- !ruby/object:Gem::Version
|
22
22
|
version: '0'
|
23
23
|
type: :runtime
|
@@ -25,37 +25,39 @@ dependencies:
|
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
none: false
|
27
27
|
requirements:
|
28
|
-
- - '>='
|
28
|
+
- - ! '>='
|
29
29
|
- !ruby/object:Gem::Version
|
30
30
|
version: '0'
|
31
|
-
description:
|
32
|
-
|
31
|
+
description: ! ' ROMA server
|
32
|
+
|
33
|
+
'
|
33
34
|
email:
|
34
35
|
executables:
|
35
|
-
-
|
36
|
-
- mkroute
|
36
|
+
- recoverlost
|
37
37
|
- chg_redundancy
|
38
|
-
-
|
39
|
-
-
|
38
|
+
- mkroute
|
39
|
+
- simple_bench
|
40
|
+
- romad
|
40
41
|
- recoverlost_alist
|
42
|
+
- ssroute
|
43
|
+
- mkconfig
|
41
44
|
- roma_watcher
|
42
|
-
- recoverlost
|
43
|
-
- romad
|
44
|
-
- key_list
|
45
|
-
- key_access
|
46
|
-
- recoverlost_alist_keys
|
47
45
|
- mkrecent
|
48
|
-
- mkconfig
|
49
46
|
- log_merger
|
50
47
|
- tribunus
|
51
|
-
-
|
48
|
+
- key_list
|
52
49
|
- test-scenario
|
50
|
+
- recoverlost_alist_keys
|
51
|
+
- key_access
|
52
|
+
- multi_commander
|
53
|
+
- recoverlost_alist_all
|
53
54
|
extensions: []
|
54
55
|
extra_rdoc_files:
|
55
56
|
- README
|
56
57
|
- CHANGELOG
|
57
58
|
files:
|
58
59
|
- CHANGELOG
|
60
|
+
- Gemfile
|
59
61
|
- LICENSE
|
60
62
|
- README
|
61
63
|
- Rakefile
|
@@ -91,6 +93,7 @@ files:
|
|
91
93
|
- ruby/server/lib/roma/command/vn_command_receiver.rb
|
92
94
|
- ruby/server/lib/roma/command_plugin.rb
|
93
95
|
- ruby/server/lib/roma/config.rb
|
96
|
+
- ruby/server/lib/roma/dns_cache.rb
|
94
97
|
- ruby/server/lib/roma/event/con_pool.rb
|
95
98
|
- ruby/server/lib/roma/event/handler.rb
|
96
99
|
- ruby/server/lib/roma/logging/rlogger.rb
|
@@ -105,6 +108,7 @@ files:
|
|
105
108
|
- ruby/server/lib/roma/romad.rb
|
106
109
|
- ruby/server/lib/roma/routing/cb_rttable.rb
|
107
110
|
- ruby/server/lib/roma/routing/merkle_tree.rb
|
111
|
+
- ruby/server/lib/roma/routing/random_balancer.rb
|
108
112
|
- ruby/server/lib/roma/routing/random_partitioner.rb
|
109
113
|
- ruby/server/lib/roma/routing/routing_data.rb
|
110
114
|
- ruby/server/lib/roma/routing/rttable.rb
|
@@ -174,18 +178,15 @@ require_paths:
|
|
174
178
|
required_ruby_version: !ruby/object:Gem::Requirement
|
175
179
|
none: false
|
176
180
|
requirements:
|
177
|
-
- - '>='
|
181
|
+
- - ! '>='
|
178
182
|
- !ruby/object:Gem::Version
|
179
183
|
version: '0'
|
180
|
-
segments:
|
181
|
-
- 0
|
182
|
-
hash: 1424416730039994284
|
183
184
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
184
185
|
none: false
|
185
186
|
requirements:
|
186
|
-
- - '
|
187
|
+
- - ! '>'
|
187
188
|
- !ruby/object:Gem::Version
|
188
|
-
version:
|
189
|
+
version: 1.3.1
|
189
190
|
requirements: []
|
190
191
|
rubyforge_project:
|
191
192
|
rubygems_version: 1.8.25
|