ls4 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/AUTHORS +1 -0
- data/COPYING +661 -0
- data/ChangeLog +9 -0
- data/NOTICE +8 -0
- data/README.rdoc +61 -0
- data/bin/ls4-cs +3 -0
- data/bin/ls4-ds +3 -0
- data/bin/ls4-gw +3 -0
- data/bin/ls4-standalone +3 -0
- data/bin/ls4cmd +3 -0
- data/bin/ls4ctl +3 -0
- data/bin/ls4rpc +3 -0
- data/bin/ls4stat +3 -0
- data/bin/ls4top +3 -0
- data/lib/ls4/command/cmd.rb +241 -0
- data/lib/ls4/command/cs.rb +190 -0
- data/lib/ls4/command/ctl.rb +278 -0
- data/lib/ls4/command/ds.rb +335 -0
- data/lib/ls4/command/gw.rb +256 -0
- data/lib/ls4/command/rpc.rb +172 -0
- data/lib/ls4/command/standalone.rb +318 -0
- data/lib/ls4/command/stat.rb +244 -0
- data/lib/ls4/command/top.rb +291 -0
- data/lib/ls4/default.rb +26 -0
- data/lib/ls4/lib/cclog.rb +220 -0
- data/lib/ls4/lib/ebus.rb +553 -0
- data/lib/ls4/lib/vbcode.rb +228 -0
- data/lib/ls4/logic/fault_detector.rb +212 -0
- data/lib/ls4/logic/membership.rb +253 -0
- data/lib/ls4/logic/node.rb +66 -0
- data/lib/ls4/logic/okey.rb +45 -0
- data/lib/ls4/logic/tsv_data.rb +81 -0
- data/lib/ls4/logic/weight.rb +166 -0
- data/lib/ls4/service/balance.rb +62 -0
- data/lib/ls4/service/base.rb +29 -0
- data/lib/ls4/service/bus.rb +37 -0
- data/lib/ls4/service/config.rb +63 -0
- data/lib/ls4/service/config_cs.rb +33 -0
- data/lib/ls4/service/config_ds.rb +56 -0
- data/lib/ls4/service/config_gw.rb +42 -0
- data/lib/ls4/service/data_client.rb +122 -0
- data/lib/ls4/service/data_server.rb +168 -0
- data/lib/ls4/service/data_server_url.rb +83 -0
- data/lib/ls4/service/gateway.rb +375 -0
- data/lib/ls4/service/gateway_ro.rb +91 -0
- data/lib/ls4/service/gw_http.rb +821 -0
- data/lib/ls4/service/heartbeat.rb +182 -0
- data/lib/ls4/service/log.rb +81 -0
- data/lib/ls4/service/master_select.rb +148 -0
- data/lib/ls4/service/mds.rb +292 -0
- data/lib/ls4/service/mds_cache.rb +294 -0
- data/lib/ls4/service/mds_cache_mem.rb +63 -0
- data/lib/ls4/service/mds_cache_memcached.rb +65 -0
- data/lib/ls4/service/mds_ha.rb +176 -0
- data/lib/ls4/service/mds_memcache.rb +209 -0
- data/lib/ls4/service/mds_tc.rb +508 -0
- data/lib/ls4/service/mds_tt.rb +472 -0
- data/lib/ls4/service/membership.rb +331 -0
- data/lib/ls4/service/process.rb +90 -0
- data/lib/ls4/service/rpc.rb +50 -0
- data/lib/ls4/service/rpc_cs.rb +101 -0
- data/lib/ls4/service/rpc_ds.rb +96 -0
- data/lib/ls4/service/rpc_gw.rb +255 -0
- data/lib/ls4/service/rts.rb +94 -0
- data/lib/ls4/service/rts_file.rb +76 -0
- data/lib/ls4/service/rts_memory.rb +55 -0
- data/lib/ls4/service/slave.rb +132 -0
- data/lib/ls4/service/stat.rb +91 -0
- data/lib/ls4/service/stat_cs.rb +25 -0
- data/lib/ls4/service/stat_ds.rb +40 -0
- data/lib/ls4/service/stat_gw.rb +25 -0
- data/lib/ls4/service/storage.rb +116 -0
- data/lib/ls4/service/storage_dir.rb +201 -0
- data/lib/ls4/service/sync.rb +206 -0
- data/lib/ls4/service/time_check.rb +80 -0
- data/lib/ls4/service/ulog.rb +159 -0
- data/lib/ls4/service/ulog_file.rb +398 -0
- data/lib/ls4/service/ulog_memory.rb +53 -0
- data/lib/ls4/service/weight.rb +134 -0
- data/lib/ls4/version.rb +5 -0
- data/test/01_add_get_remove.rt +84 -0
- data/test/02_read.rt +61 -0
- data/test/03_getd_readd.rt +69 -0
- data/test/04_version_time.rt +170 -0
- data/test/05_version_name.rt +161 -0
- data/test/06_http_get_set_remove_1.rt +119 -0
- data/test/07_http_get_set_remove_2.rt +116 -0
- data/test/08_read_only_time.rt +177 -0
- data/test/09_read_only_name.rt +173 -0
- data/test/10_http_get_set_remove_3.rt +73 -0
- data/test/11_mds_cache_memcached.rt +88 -0
- data/test/12_mds_cache_local_memory.rt +86 -0
- data/test/13_memcache_mds.rt +84 -0
- data/test/14_delete.rt +63 -0
- data/test/15_standalone.rt +71 -0
- data/test/chukan.rb +516 -0
- data/test/common.rb +250 -0
- data/test/load_test.rb +79 -0
- data/test/load_test_offload.rb +86 -0
- metadata +295 -0
@@ -0,0 +1,173 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
$LOAD_PATH << File.dirname(__FILE__)
|
3
|
+
require 'common'
|
4
|
+
|
5
|
+
LOOP = (ARGV[0] || ENV["LOOP"] || (ENV["HEAVY"] ? 20 : 3)).to_i
|
6
|
+
SIZE = (ARGV[1] || 10).to_i
|
7
|
+
NUM = (ARGV[2] || 50).to_i
|
8
|
+
|
9
|
+
mds = start_mds
|
10
|
+
cs = start_cs
|
11
|
+
ds0 = start_ds(0, 0)
|
12
|
+
ds1 = start_ds(1, 0)
|
13
|
+
ds2 = start_ds(2, 1)
|
14
|
+
ds3 = start_ds(3, 1)
|
15
|
+
|
16
|
+
cs.show_nodes
|
17
|
+
cs.show_version
|
18
|
+
|
19
|
+
gw = start_gw
|
20
|
+
|
21
|
+
rogw = []
|
22
|
+
|
23
|
+
pid = Process.pid
|
24
|
+
keyf = "#{pid}-key%d"
|
25
|
+
_data1 = "1"*SIZE
|
26
|
+
_data2 = "2"*SIZE
|
27
|
+
|
28
|
+
_data1[2,4] = "OVER"
|
29
|
+
_data1_0_8 = _data1[0,8]
|
30
|
+
_data1_3_20 = _data1[3,20]
|
31
|
+
|
32
|
+
_data2[2,4] = "OVER"
|
33
|
+
_data2_0_8 = _data2[0,8]
|
34
|
+
_data2_3_20 = _data2[3,20]
|
35
|
+
|
36
|
+
test "run normally" do
|
37
|
+
c = gw.client
|
38
|
+
|
39
|
+
vname1 = "ver0-1"
|
40
|
+
vname2 = "ver0-2"
|
41
|
+
vname0 = "ver0-0"
|
42
|
+
|
43
|
+
gw0 = start_gw(rogw.size+1, "--read-only-name #{vname0}")
|
44
|
+
rogw << gw0
|
45
|
+
|
46
|
+
gw1 = start_gw(rogw.size+1, "--read-only-name #{vname1}")
|
47
|
+
rogw << gw1
|
48
|
+
|
49
|
+
gw2 = start_gw(rogw.size+1, "--read-only-name #{vname2}")
|
50
|
+
rogw << gw2
|
51
|
+
|
52
|
+
NUM.times do |i|
|
53
|
+
key = keyf % i
|
54
|
+
_attrs1 = {"loop"=>"0", "attr#{i}"=>i.to_s}
|
55
|
+
|
56
|
+
test 'addv 1' do
|
57
|
+
c.call(:addv, vname1, key, _data1, _attrs1)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
NUM.times do |i|
|
62
|
+
key = keyf % i
|
63
|
+
_attrs2 = {"loop"=>"2", "attr2#{i}"=>i.to_s}
|
64
|
+
|
65
|
+
test 'addv 2' do
|
66
|
+
c.call(:addv, vname2, key, _data2, _attrs2)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
c2 = gw2.client
|
71
|
+
|
72
|
+
NUM.times do |i|
|
73
|
+
key = keyf % i
|
74
|
+
_attrs2 = {"loop"=>"2", "attr2#{i}"=>i.to_s}
|
75
|
+
|
76
|
+
test 'get 2' do
|
77
|
+
data, attrs = c2.call(:get, key)
|
78
|
+
test_equals _data2, data, 'get 2 _data2 == data'
|
79
|
+
test_equals _attrs2, attrs, 'get 2 _attrs2 == attrs'
|
80
|
+
end
|
81
|
+
|
82
|
+
test 'get_data 2' do
|
83
|
+
data = c2.call(:get_data, key)
|
84
|
+
test_equals _data2, data, 'get_data 2 _data2 == data'
|
85
|
+
end
|
86
|
+
|
87
|
+
test 'get_attrs 2' do
|
88
|
+
attrs = c2.call(:get_attrs, key)
|
89
|
+
test_equals _attrs2, attrs, 'get_attrs 2 _attrs2 == attrs'
|
90
|
+
end
|
91
|
+
|
92
|
+
test 'read 2 offset=0 size=8' do
|
93
|
+
data = c2.call(:read, key, 0, 8)
|
94
|
+
test_equals _data2_0_8, data, 'read 2 _data2[0,8] == data'
|
95
|
+
end
|
96
|
+
|
97
|
+
test 'read 2 offset=3 size=20' do
|
98
|
+
data = c2.call(:read, key, 3, 20)
|
99
|
+
test_equals _data2_3_20, data, 'read 2 _data2[3,20] == data'
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
c1 = gw1.client
|
104
|
+
|
105
|
+
NUM.times do |i|
|
106
|
+
key = keyf % i
|
107
|
+
_attrs1 = {"loop"=>"0", "attr#{i}"=>i.to_s}
|
108
|
+
|
109
|
+
test 'get 1' do
|
110
|
+
data, attrs = c1.call(:get, key)
|
111
|
+
test_equals _data1, data, 'get 1 _data1 == data'
|
112
|
+
test_equals _attrs1, attrs, 'get 1 _attrs1 == attrs'
|
113
|
+
end
|
114
|
+
|
115
|
+
test 'get_data 1' do
|
116
|
+
data = c1.call(:get_data, key)
|
117
|
+
test_equals _data1, data, 'get 1 _data1 == data'
|
118
|
+
end
|
119
|
+
|
120
|
+
test 'get_attrs 1' do
|
121
|
+
attrs = c1.call(:get_attrs, key)
|
122
|
+
test_equals _attrs1, attrs, 'get 1 _attrs1 == attrs'
|
123
|
+
end
|
124
|
+
|
125
|
+
test 'read 1 offset=0 size=8' do
|
126
|
+
data = c1.call(:read, key, 0, 8)
|
127
|
+
test_equals _data1_0_8, data, 'read 1 _data1[0,8] == data'
|
128
|
+
end
|
129
|
+
|
130
|
+
test 'read 1 offset=3 size=20' do
|
131
|
+
data = c1.call(:read, key, 3, 20)
|
132
|
+
test_equals _data1_3_20, data, 'read 1 _data1[3,20] == data'
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
c0 = gw0.client
|
137
|
+
|
138
|
+
NUM.times do |i|
|
139
|
+
key = keyf % i
|
140
|
+
|
141
|
+
test 'get 0' do
|
142
|
+
data, attrs = c0.call(:get, key)
|
143
|
+
test_equals nil, data, 'get 0 _data1 is not found'
|
144
|
+
test_equals nil, attrs, 'get 0 _attrs1 is not founds'
|
145
|
+
end
|
146
|
+
|
147
|
+
test 'get_data 0' do
|
148
|
+
data = c0.call(:get_data, key)
|
149
|
+
test_equals nil, data, 'get 0 _data1 is not found'
|
150
|
+
end
|
151
|
+
|
152
|
+
test 'get_attrs 0' do
|
153
|
+
attrs = c0.call(:get_attrs, key)
|
154
|
+
test_equals nil, attrs, 'get 0 _attrs1 is not founds'
|
155
|
+
end
|
156
|
+
|
157
|
+
test 'read 0 offset=0 size=8' do
|
158
|
+
data = c0.call(:read, key, 0, 8)
|
159
|
+
test_equals nil, data, 'read 0 _data1[0,8] is not found'
|
160
|
+
end
|
161
|
+
|
162
|
+
test 'read 0 offset=3 size=20' do
|
163
|
+
data = c0.call(:read, key, 3, 20)
|
164
|
+
test_equals nil, data, 'read 0 _data1[3,20] is not found'
|
165
|
+
end
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
cs.show_items
|
170
|
+
cs.show_stat
|
171
|
+
|
172
|
+
term_all(ds0, ds1, ds2, ds3, gw, mds, cs, *rogw)
|
173
|
+
|
@@ -0,0 +1,73 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
$LOAD_PATH << File.dirname(__FILE__)
|
3
|
+
require 'common'
|
4
|
+
|
5
|
+
LOOP = (ARGV[0] || ENV["LOOP"] || (ENV["HEAVY"] ? 20 : 3)).to_i
|
6
|
+
SIZE = (ARGV[1] || 10).to_i
|
7
|
+
NUM = (ARGV[2] || 50).to_i
|
8
|
+
|
9
|
+
mds = start_mds
|
10
|
+
cs = start_cs
|
11
|
+
ds0 = start_ds(0, 0)
|
12
|
+
ds1 = start_ds(1, 0)
|
13
|
+
ds2 = start_ds(2, 1)
|
14
|
+
ds3 = start_ds(3, 1)
|
15
|
+
|
16
|
+
cs.show_nodes
|
17
|
+
cs.show_version
|
18
|
+
|
19
|
+
gw = start_gw
|
20
|
+
|
21
|
+
pid = Process.pid
|
22
|
+
keyf = "#{pid}-key%d"
|
23
|
+
_data = "@"*SIZE
|
24
|
+
|
25
|
+
test "run normally" do
|
26
|
+
LOOP.times {|o|
|
27
|
+
NUM.times do |i|
|
28
|
+
key = keyf % i
|
29
|
+
_attrs = {"loop"=>o.to_s, "attr#{i}"=>i.to_s}
|
30
|
+
|
31
|
+
test 'add_data /api' do
|
32
|
+
gw.http_client {|http|
|
33
|
+
req = Net::HTTP::Post.new('/api/add')
|
34
|
+
req.set_form_data({:key=>key, :data=>_data})
|
35
|
+
res = http.request(req)
|
36
|
+
test_equals "200", res.code, "add_data 200 OK"
|
37
|
+
}
|
38
|
+
end
|
39
|
+
|
40
|
+
test 'update_attrs /api' do
|
41
|
+
gw.http_client {|http|
|
42
|
+
req = Net::HTTP::Post.new('/api/update_attrs')
|
43
|
+
req.set_form_data({:key=>key, :attrs=>JSON.dump(_attrs)})
|
44
|
+
res = http.request(req)
|
45
|
+
test_equals "200", res.code, "update_attrs 200 OK"
|
46
|
+
}
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
NUM.times do |i|
|
51
|
+
key = keyf % i
|
52
|
+
_attrs = {"loop"=>o.to_s, "attr#{i}"=>i.to_s}
|
53
|
+
|
54
|
+
test "get_attrs /api msgpack" do
|
55
|
+
attrs = nil
|
56
|
+
|
57
|
+
gw.http_client {|http|
|
58
|
+
res = http.get("/api/get_attrs?key=#{key}&format=msgpack")
|
59
|
+
test_equals "200", res.code, "get_attrs msgpack 200 OK"
|
60
|
+
attrs = MessagePack.unpack(res.body)
|
61
|
+
}
|
62
|
+
|
63
|
+
test_equals _attrs, attrs, 'get_attrs msgpack _attrs == attrs'
|
64
|
+
end
|
65
|
+
end
|
66
|
+
}
|
67
|
+
end
|
68
|
+
|
69
|
+
cs.show_items
|
70
|
+
cs.show_stat
|
71
|
+
|
72
|
+
term_all(ds0, ds1, ds2, ds3, gw, mds, cs)
|
73
|
+
|
@@ -0,0 +1,88 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
$LOAD_PATH << File.dirname(__FILE__)
|
3
|
+
require 'common'
|
4
|
+
|
5
|
+
LOOP = (ARGV[0] || ENV["LOOP"] || (ENV["HEAVY"] ? 20 : 3)).to_i
|
6
|
+
SIZE = (ARGV[1] || 10).to_i
|
7
|
+
NUM = (ARGV[2] || 50).to_i
|
8
|
+
|
9
|
+
mc1 = start_memcached(50100)
|
10
|
+
mc2 = start_memcached(50101)
|
11
|
+
mds = start_mds
|
12
|
+
cs = start_cs("--mds-cache mc:127.0.0.1:50100,127.0.0.1:50101")
|
13
|
+
ds0 = start_ds(0, 0)
|
14
|
+
ds1 = start_ds(1, 0)
|
15
|
+
ds2 = start_ds(2, 1)
|
16
|
+
ds3 = start_ds(3, 1)
|
17
|
+
|
18
|
+
cs.show_nodes
|
19
|
+
cs.show_version
|
20
|
+
|
21
|
+
gw = start_gw
|
22
|
+
|
23
|
+
pid = Process.pid
|
24
|
+
keyf = "#{pid}-key%d"
|
25
|
+
_data = "@"*SIZE
|
26
|
+
|
27
|
+
test "run normally" do
|
28
|
+
c = gw.client
|
29
|
+
|
30
|
+
LOOP.times {|o|
|
31
|
+
NUM.times do |i|
|
32
|
+
key = keyf % i
|
33
|
+
_attrs = {"loop"=>o.to_s, "attr#{i}"=>i.to_s}
|
34
|
+
|
35
|
+
test 'add' do
|
36
|
+
c.call(:add, key, _data, _attrs)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
3.times do
|
41
|
+
NUM.times do |i|
|
42
|
+
key = keyf % i
|
43
|
+
_attrs = {"loop"=>o.to_s, "attr#{i}"=>i.to_s}
|
44
|
+
|
45
|
+
test 'get' do
|
46
|
+
data, attrs = c.call(:get, key)
|
47
|
+
test_equals _data, data, 'get _data == data'
|
48
|
+
test_equals _attrs, attrs, 'get _attrs == attrs'
|
49
|
+
end
|
50
|
+
|
51
|
+
test 'get_data' do
|
52
|
+
data = c.call(:get_data, key)
|
53
|
+
test_equals _data, data, 'get_data _data == data'
|
54
|
+
end
|
55
|
+
|
56
|
+
test 'get_attrs' do
|
57
|
+
attrs = c.call(:get_attrs, key)
|
58
|
+
test_equals _attrs, attrs, 'get_attrs _attrs == attrs'
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
NUM.times do |i|
|
64
|
+
key = keyf % i
|
65
|
+
|
66
|
+
test "remove" do
|
67
|
+
removed = c.call(:remove, key)
|
68
|
+
test_equals true, removed, 'removed == true'
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
NUM.times do |i|
|
73
|
+
key = keyf % i
|
74
|
+
|
75
|
+
test 'removed get' do
|
76
|
+
data, attrs = c.call(:get, key)
|
77
|
+
test_equals nil, data, 'get_data _data is removed'
|
78
|
+
test_equals nil, attrs, 'get_attrs _attrs is removed'
|
79
|
+
end
|
80
|
+
end
|
81
|
+
}
|
82
|
+
end
|
83
|
+
|
84
|
+
cs.show_items
|
85
|
+
cs.show_stat
|
86
|
+
|
87
|
+
term_all(ds0, ds1, ds2, ds3, gw, mds, cs, mc1, mc2)
|
88
|
+
|
@@ -0,0 +1,86 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
$LOAD_PATH << File.dirname(__FILE__)
|
3
|
+
require 'common'
|
4
|
+
|
5
|
+
LOOP = (ARGV[0] || ENV["LOOP"] || (ENV["HEAVY"] ? 20 : 3)).to_i
|
6
|
+
SIZE = (ARGV[1] || 10).to_i
|
7
|
+
NUM = (ARGV[2] || 50).to_i
|
8
|
+
|
9
|
+
mds = start_mds
|
10
|
+
cs = start_cs("--mds-cache local:64m")
|
11
|
+
ds0 = start_ds(0, 0)
|
12
|
+
ds1 = start_ds(1, 0)
|
13
|
+
ds2 = start_ds(2, 1)
|
14
|
+
ds3 = start_ds(3, 1)
|
15
|
+
|
16
|
+
cs.show_nodes
|
17
|
+
cs.show_version
|
18
|
+
|
19
|
+
gw = start_gw
|
20
|
+
|
21
|
+
pid = Process.pid
|
22
|
+
keyf = "#{pid}-key%d"
|
23
|
+
_data = "@"*SIZE
|
24
|
+
|
25
|
+
test "run normally" do
|
26
|
+
c = gw.client
|
27
|
+
|
28
|
+
LOOP.times {|o|
|
29
|
+
NUM.times do |i|
|
30
|
+
key = keyf % i
|
31
|
+
_attrs = {"loop"=>o.to_s, "attr#{i}"=>i.to_s}
|
32
|
+
|
33
|
+
test 'add' do
|
34
|
+
c.call(:add, key, _data, _attrs)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
3.times do
|
39
|
+
NUM.times do |i|
|
40
|
+
key = keyf % i
|
41
|
+
_attrs = {"loop"=>o.to_s, "attr#{i}"=>i.to_s}
|
42
|
+
|
43
|
+
test 'get' do
|
44
|
+
data, attrs = c.call(:get, key)
|
45
|
+
test_equals _data, data, 'get _data == data'
|
46
|
+
test_equals _attrs, attrs, 'get _attrs == attrs'
|
47
|
+
end
|
48
|
+
|
49
|
+
test 'get_data' do
|
50
|
+
data = c.call(:get_data, key)
|
51
|
+
test_equals _data, data, 'get_data _data == data'
|
52
|
+
end
|
53
|
+
|
54
|
+
test 'get_attrs' do
|
55
|
+
attrs = c.call(:get_attrs, key)
|
56
|
+
test_equals _attrs, attrs, 'get_attrs _attrs == attrs'
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
NUM.times do |i|
|
62
|
+
key = keyf % i
|
63
|
+
|
64
|
+
test "remove" do
|
65
|
+
removed = c.call(:remove, key)
|
66
|
+
test_equals true, removed, 'removed == true'
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
NUM.times do |i|
|
71
|
+
key = keyf % i
|
72
|
+
|
73
|
+
test 'removed get' do
|
74
|
+
data, attrs = c.call(:get, key)
|
75
|
+
test_equals nil, data, 'get_data _data is removed'
|
76
|
+
test_equals nil, attrs, 'get_attrs _attrs is removed'
|
77
|
+
end
|
78
|
+
end
|
79
|
+
}
|
80
|
+
end
|
81
|
+
|
82
|
+
cs.show_items
|
83
|
+
cs.show_stat
|
84
|
+
|
85
|
+
term_all(ds0, ds1, ds2, ds3, gw, mds, cs)
|
86
|
+
|
@@ -0,0 +1,84 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
$LOAD_PATH << File.dirname(__FILE__)
|
3
|
+
require 'common'
|
4
|
+
|
5
|
+
LOOP = (ARGV[0] || ENV["LOOP"] || (ENV["HEAVY"] ? 20 : 3)).to_i
|
6
|
+
SIZE = (ARGV[1] || 10).to_i
|
7
|
+
NUM = (ARGV[2] || 50).to_i
|
8
|
+
|
9
|
+
mds = start_memcached(MDS_PORT)
|
10
|
+
cs = start_cs("--mds mc:127.0.0.1:#{MDS_PORT}")
|
11
|
+
ds0 = start_ds(0, 0)
|
12
|
+
ds1 = start_ds(1, 0)
|
13
|
+
ds2 = start_ds(2, 1)
|
14
|
+
ds3 = start_ds(3, 1)
|
15
|
+
|
16
|
+
cs.show_nodes
|
17
|
+
cs.show_version
|
18
|
+
|
19
|
+
gw = start_gw
|
20
|
+
|
21
|
+
pid = Process.pid
|
22
|
+
keyf = "#{pid}-key%d"
|
23
|
+
_data = "@"*SIZE
|
24
|
+
|
25
|
+
test "run normally" do
|
26
|
+
c = gw.client
|
27
|
+
|
28
|
+
LOOP.times {|o|
|
29
|
+
NUM.times do |i|
|
30
|
+
key = keyf % i
|
31
|
+
_attrs = {"loop"=>o.to_s, "attr#{i}"=>i.to_s}
|
32
|
+
|
33
|
+
test 'add' do
|
34
|
+
c.call(:add, key, _data, _attrs)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
NUM.times do |i|
|
39
|
+
key = keyf % i
|
40
|
+
_attrs = {"loop"=>o.to_s, "attr#{i}"=>i.to_s}
|
41
|
+
|
42
|
+
test 'get' do
|
43
|
+
data, attrs = c.call(:get, key)
|
44
|
+
test_equals _data, data, 'get _data == data'
|
45
|
+
test_equals _attrs, attrs, 'get _attrs == attrs'
|
46
|
+
end
|
47
|
+
|
48
|
+
test 'get_data' do
|
49
|
+
data = c.call(:get_data, key)
|
50
|
+
test_equals _data, data, 'get_data _data == data'
|
51
|
+
end
|
52
|
+
|
53
|
+
test 'get_attrs' do
|
54
|
+
attrs = c.call(:get_attrs, key)
|
55
|
+
test_equals _attrs, attrs, 'get_attrs _attrs == attrs'
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
NUM.times do |i|
|
60
|
+
key = keyf % i
|
61
|
+
|
62
|
+
test "remove" do
|
63
|
+
removed = c.call(:remove, key)
|
64
|
+
test_equals true, removed, 'removed == true'
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
NUM.times do |i|
|
69
|
+
key = keyf % i
|
70
|
+
|
71
|
+
test 'removed get' do
|
72
|
+
data, attrs = c.call(:get, key)
|
73
|
+
test_equals nil, data, 'get_data _data is removed'
|
74
|
+
test_equals nil, attrs, 'get_attrs _attrs is removed'
|
75
|
+
end
|
76
|
+
end
|
77
|
+
}
|
78
|
+
end
|
79
|
+
|
80
|
+
cs.show_items
|
81
|
+
cs.show_stat
|
82
|
+
|
83
|
+
term_all(ds0, ds1, ds2, ds3, gw, mds, cs)
|
84
|
+
|