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,161 @@
|
|
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
|
+
_data1 = "1"*SIZE
|
24
|
+
_data2 = "2"*SIZE
|
25
|
+
|
26
|
+
_data1[2,4] = "OVER"
|
27
|
+
_data1_0_8 = _data1[0,8]
|
28
|
+
_data1_3_20 = _data1[3,20]
|
29
|
+
|
30
|
+
_data2[2,4] = "OVER"
|
31
|
+
_data2_0_8 = _data2[0,8]
|
32
|
+
_data2_3_20 = _data2[3,20]
|
33
|
+
|
34
|
+
test "run normally" do
|
35
|
+
c = gw.client
|
36
|
+
|
37
|
+
LOOP.times {|o|
|
38
|
+
okeys1 = []
|
39
|
+
okeys2 = []
|
40
|
+
|
41
|
+
vname1 = "ver#{o}-1"
|
42
|
+
vname2 = "ver#{o}-2"
|
43
|
+
vname0 = "ver#{o}-0"
|
44
|
+
|
45
|
+
NUM.times do |i|
|
46
|
+
key = keyf % i
|
47
|
+
_attrs1 = {"loop"=>o.to_s, "attr#{i}"=>i.to_s}
|
48
|
+
|
49
|
+
test 'addv 1' do
|
50
|
+
c.call(:addv, vname1, key, _data1, _attrs1)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
NUM.times do |i|
|
55
|
+
key = keyf % i
|
56
|
+
_attrs2 = {"loop"=>"2", "attr2#{i}"=>i.to_s}
|
57
|
+
|
58
|
+
test 'addv 2' do
|
59
|
+
c.call(:addv, vname2, key, _data2, _attrs2)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
NUM.times do |i|
|
64
|
+
key = keyf % i
|
65
|
+
_attrs2 = {"loop"=>"2", "attr2#{i}"=>i.to_s}
|
66
|
+
|
67
|
+
test 'get head' do
|
68
|
+
data, attrs = c.call(:get, key)
|
69
|
+
test_equals _data2, data, 'get head _data2 == data'
|
70
|
+
test_equals _attrs2, attrs, 'get head _attrs2 == attrs'
|
71
|
+
end
|
72
|
+
|
73
|
+
test 'get_data head' do
|
74
|
+
data = c.call(:get_data, key)
|
75
|
+
test_equals _data2, data, 'get_data head _data2 == data'
|
76
|
+
end
|
77
|
+
|
78
|
+
test 'get_attrs head' do
|
79
|
+
attrs = c.call(:get_attrs, key)
|
80
|
+
test_equals _attrs2, attrs, 'get_attrs head _attrs2 == attrs'
|
81
|
+
end
|
82
|
+
|
83
|
+
test 'read head offset=0 size=8' do
|
84
|
+
data = c.call(:read, key, 0, 8)
|
85
|
+
test_equals _data2_0_8, data, 'read head _data2[0,8] == data'
|
86
|
+
end
|
87
|
+
|
88
|
+
test 'read head offset=3 size=20' do
|
89
|
+
data = c.call(:read, key, 3, 20)
|
90
|
+
test_equals _data2_3_20, data, 'read head _data2[3,20] == data'
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
NUM.times do |i|
|
95
|
+
key = keyf % i
|
96
|
+
_attrs1 = {"loop"=>o.to_s, "attr#{i}"=>i.to_s}
|
97
|
+
|
98
|
+
test 'getv 1' do
|
99
|
+
data, attrs = c.call(:getv, vname1, key)
|
100
|
+
test_equals _data1, data, 'getv 1 _data1 == data'
|
101
|
+
test_equals _attrs1, attrs, 'getv 1 _attrs1 == attrs'
|
102
|
+
end
|
103
|
+
|
104
|
+
test 'getv_data 1' do
|
105
|
+
data = c.call(:getv_data, vname1, key)
|
106
|
+
test_equals _data1, data, 'getv 1 _data1 == data'
|
107
|
+
end
|
108
|
+
|
109
|
+
test 'getv_attrs 1' do
|
110
|
+
attrs = c.call(:getv_attrs, vname1, key)
|
111
|
+
test_equals _attrs1, attrs, 'getv 1 _attrs1 == attrs'
|
112
|
+
end
|
113
|
+
|
114
|
+
test 'readv 1 offset=0 size=8' do
|
115
|
+
data = c.call(:readv, vname1, key, 0, 8)
|
116
|
+
test_equals _data1_0_8, data, 'readv 1 _data1[0,8] == data'
|
117
|
+
end
|
118
|
+
|
119
|
+
test 'readv 1 offset=3 size=20' do
|
120
|
+
data = c.call(:readv, vname1, key, 3, 20)
|
121
|
+
test_equals _data1_3_20, data, 'readv 1 _data1[3,20] == data'
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
NUM.times do |i|
|
126
|
+
key = keyf % i
|
127
|
+
|
128
|
+
test 'getv 0' do
|
129
|
+
data, attrs = c.call(:getv, vname0, key)
|
130
|
+
test_equals nil, data, 'getv 0 _data1 is not found'
|
131
|
+
test_equals nil, attrs, 'getv 0 _attrs1 is not founds'
|
132
|
+
end
|
133
|
+
|
134
|
+
test 'getv_data 0' do
|
135
|
+
data = c.call(:getv_data, vname0, key)
|
136
|
+
test_equals nil, data, 'getv 0 _data1 is not found'
|
137
|
+
end
|
138
|
+
|
139
|
+
test 'getv_attrs 0' do
|
140
|
+
attrs = c.call(:getv_attrs, vname0, key)
|
141
|
+
test_equals nil, attrs, 'getv 0 _attrs1 is not founds'
|
142
|
+
end
|
143
|
+
|
144
|
+
test 'readv 0 offset=0 size=8' do
|
145
|
+
data = c.call(:readv, vname0, key, 0, 8)
|
146
|
+
test_equals nil, data, 'readv 0 _data1[0,8] is not found'
|
147
|
+
end
|
148
|
+
|
149
|
+
test 'readv 0 offset=3 size=20' do
|
150
|
+
data = c.call(:readv, vname0, key, 3, 20)
|
151
|
+
test_equals nil, data, 'readv 0 _data1[3,20] is not found'
|
152
|
+
end
|
153
|
+
end
|
154
|
+
}
|
155
|
+
end
|
156
|
+
|
157
|
+
cs.show_items
|
158
|
+
cs.show_stat
|
159
|
+
|
160
|
+
term_all(ds0, ds1, ds2, ds3, gw, mds, cs)
|
161
|
+
|
@@ -0,0 +1,119 @@
|
|
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
|
+
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_data POST /data' do
|
34
|
+
gw.http_client {|http|
|
35
|
+
req = Net::HTTP::Post.new("/data/#{key}")
|
36
|
+
req.set_form_data({:data=>_data})
|
37
|
+
res = http.request(req)
|
38
|
+
test_equals "200", res.code, "add_data 200 OK"
|
39
|
+
}
|
40
|
+
end
|
41
|
+
|
42
|
+
test 'update_attrs POST /attrs' do
|
43
|
+
gw.http_client {|http|
|
44
|
+
req = Net::HTTP::Post.new("/attrs/#{key}")
|
45
|
+
req.set_form_data({:attrs=>JSON.dump(_attrs)})
|
46
|
+
res = http.request(req)
|
47
|
+
test_equals "200", res.code, "update_attrs 202 OK"
|
48
|
+
}
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
NUM.times do |i|
|
53
|
+
key = keyf % i
|
54
|
+
_attrs = {"loop"=>o.to_s, "attr#{i}"=>i.to_s}
|
55
|
+
|
56
|
+
test 'get_data /data' do
|
57
|
+
data = nil
|
58
|
+
|
59
|
+
gw.http_client {|http|
|
60
|
+
res = http.get("/data/#{key}")
|
61
|
+
test_equals "200", res.code, "get_data 200 OK"
|
62
|
+
data = res.body
|
63
|
+
}
|
64
|
+
|
65
|
+
test_equals _data, data, 'get_data _data == data'
|
66
|
+
end
|
67
|
+
|
68
|
+
test "get_attrs /attrs" do
|
69
|
+
attrs = nil
|
70
|
+
|
71
|
+
gw.http_client {|http|
|
72
|
+
res = http.get("/attrs/#{key}")
|
73
|
+
test_equals "200", res.code, "get_attrs 200 OK"
|
74
|
+
attrs = JSON.parse(res.body)
|
75
|
+
}
|
76
|
+
|
77
|
+
test_equals _attrs, attrs, 'get_attrs _attrs == attrs'
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
NUM.times do |i|
|
82
|
+
key = keyf % i
|
83
|
+
|
84
|
+
test "delete /api" do
|
85
|
+
gw.http_client {|http|
|
86
|
+
req = Net::HTTP::Post.new('/api/delete')
|
87
|
+
req.set_form_data({:key=>key})
|
88
|
+
res = http.request(req)
|
89
|
+
test_equals "200", res.code, "delete 200 OK"
|
90
|
+
}
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
NUM.times do |i|
|
95
|
+
key = keyf % i
|
96
|
+
|
97
|
+
test 'deleted get_data /data' do
|
98
|
+
gw.http_client {|http|
|
99
|
+
res = http.get("/data/#{key}")
|
100
|
+
test_equals "404", res.code, 'get_data 404 Not Found'
|
101
|
+
p res.body
|
102
|
+
}
|
103
|
+
end
|
104
|
+
|
105
|
+
test 'deleted get_attrs /attrs' do
|
106
|
+
gw.http_client {|http|
|
107
|
+
res = http.get("/attrs/#{key}")
|
108
|
+
test_equals "404", res.code, 'get_attrs 404 Not Found'
|
109
|
+
}
|
110
|
+
end
|
111
|
+
end
|
112
|
+
}
|
113
|
+
end
|
114
|
+
|
115
|
+
cs.show_items
|
116
|
+
cs.show_stat
|
117
|
+
|
118
|
+
term_all(ds0, ds1, ds2, ds3, gw, mds, cs)
|
119
|
+
|
@@ -0,0 +1,116 @@
|
|
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 PUT /data' do
|
32
|
+
gw.http_client {|http|
|
33
|
+
req = Net::HTTP::Put.new("/data/#{key}")
|
34
|
+
req.body = _data
|
35
|
+
res = http.request(req)
|
36
|
+
test_equals "202", res.code, "add_data 202 Accepted"
|
37
|
+
}
|
38
|
+
end
|
39
|
+
|
40
|
+
test 'update_attrs PUT /attrs' do
|
41
|
+
gw.http_client {|http|
|
42
|
+
req = Net::HTTP::Put.new("/attrs/#{key}")
|
43
|
+
req.body = JSON.dump(_attrs)
|
44
|
+
res = http.request(req)
|
45
|
+
test_equals "202", res.code, "update_attrs 202 Accepted"
|
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_data /api' do
|
55
|
+
data = nil
|
56
|
+
|
57
|
+
gw.http_client {|http|
|
58
|
+
res = http.get("/api/get_data?key=#{key}")
|
59
|
+
test_equals "200", res.code, "get_data 200 OK"
|
60
|
+
data = res.body
|
61
|
+
}
|
62
|
+
|
63
|
+
test_equals _data, data, 'get_data _data == data'
|
64
|
+
end
|
65
|
+
|
66
|
+
test "get_attrs /api" do
|
67
|
+
attrs = nil
|
68
|
+
|
69
|
+
gw.http_client {|http|
|
70
|
+
res = http.get("/api/get_attrs?key=#{key}")
|
71
|
+
test_equals "200", res.code, "get_attrs 200 OK"
|
72
|
+
attrs = JSON.parse(res.body)
|
73
|
+
}
|
74
|
+
|
75
|
+
test_equals _attrs, attrs, 'get_attrs _attrs == attrs'
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
NUM.times do |i|
|
80
|
+
key = keyf % i
|
81
|
+
|
82
|
+
test "remove /api" do
|
83
|
+
gw.http_client {|http|
|
84
|
+
req = Net::HTTP::Post.new('/api/remove')
|
85
|
+
req.set_form_data({:key=>key})
|
86
|
+
res = http.request(req)
|
87
|
+
test_equals "200", res.code, "remove 200 OK"
|
88
|
+
}
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
NUM.times do |i|
|
93
|
+
key = keyf % i
|
94
|
+
|
95
|
+
test 'removed get_data /api' do
|
96
|
+
gw.http_client {|http|
|
97
|
+
res = http.get("/api/get_data?key=#{key}")
|
98
|
+
test_equals "404", res.code, 'get_data 404 Not Found'
|
99
|
+
}
|
100
|
+
end
|
101
|
+
|
102
|
+
test 'removed get_attrs /api' do
|
103
|
+
gw.http_client {|http|
|
104
|
+
res = http.get("/api/get_attrs?key=#{key}")
|
105
|
+
test_equals "404", res.code, 'get_attrs 404 Not Found'
|
106
|
+
}
|
107
|
+
end
|
108
|
+
end
|
109
|
+
}
|
110
|
+
end
|
111
|
+
|
112
|
+
cs.show_items
|
113
|
+
cs.show_stat
|
114
|
+
|
115
|
+
term_all(ds0, ds1, ds2, ds3, gw, mds, cs)
|
116
|
+
|
@@ -0,0 +1,177 @@
|
|
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
|
+
gw0 = start_gw(rogw.size+1, "--read-only-time #{Time.now.utc.to_i}")
|
40
|
+
rogw << gw0
|
41
|
+
|
42
|
+
sleep 3
|
43
|
+
|
44
|
+
NUM.times do |i|
|
45
|
+
key = keyf % i
|
46
|
+
_attrs1 = {"loop"=>"0", "attr#{i}"=>i.to_s}
|
47
|
+
|
48
|
+
test 'add 1' do
|
49
|
+
c.call(:add, key, _data1, _attrs1)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
sleep 2
|
54
|
+
|
55
|
+
gw1 = start_gw(rogw.size+1, "--read-only-time #{Time.now.utc.to_i}")
|
56
|
+
rogw << gw1
|
57
|
+
|
58
|
+
sleep 3
|
59
|
+
|
60
|
+
NUM.times do |i|
|
61
|
+
key = keyf % i
|
62
|
+
_attrs2 = {"loop"=>"2", "attr2#{i}"=>i.to_s}
|
63
|
+
|
64
|
+
test 'add 2' do
|
65
|
+
c.call(:add, key, _data2, _attrs2)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
sleep 2
|
70
|
+
|
71
|
+
gw2 = start_gw(rogw.size+1, "--read-only-time #{Time.now.utc.to_i}")
|
72
|
+
rogw << gw2
|
73
|
+
|
74
|
+
c2 = gw2.client
|
75
|
+
|
76
|
+
NUM.times do |i|
|
77
|
+
key = keyf % i
|
78
|
+
_attrs2 = {"loop"=>"2", "attr2#{i}"=>i.to_s}
|
79
|
+
|
80
|
+
test 'get 2' do
|
81
|
+
data, attrs = c2.call(:get, key)
|
82
|
+
test_equals _data2, data, 'get 2 _data2 == data'
|
83
|
+
test_equals _attrs2, attrs, 'get 2 _attrs2 == attrs'
|
84
|
+
end
|
85
|
+
|
86
|
+
test 'get_data 2' do
|
87
|
+
data = c2.call(:get_data, key)
|
88
|
+
test_equals _data2, data, 'get_data 2 _data2 == data'
|
89
|
+
end
|
90
|
+
|
91
|
+
test 'get_attrs 2' do
|
92
|
+
attrs = c2.call(:get_attrs, key)
|
93
|
+
test_equals _attrs2, attrs, 'get_attrs 2 _attrs2 == attrs'
|
94
|
+
end
|
95
|
+
|
96
|
+
test 'read 2 offset=0 size=8' do
|
97
|
+
data = c2.call(:read, key, 0, 8)
|
98
|
+
test_equals _data2_0_8, data, 'read 2 _data2[0,8] == data'
|
99
|
+
end
|
100
|
+
|
101
|
+
test 'read 2 offset=3 size=20' do
|
102
|
+
data = c2.call(:read, key, 3, 20)
|
103
|
+
test_equals _data2_3_20, data, 'read 2 _data2[3,20] == data'
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
c1 = gw1.client
|
108
|
+
|
109
|
+
NUM.times do |i|
|
110
|
+
key = keyf % i
|
111
|
+
_attrs1 = {"loop"=>"0", "attr#{i}"=>i.to_s}
|
112
|
+
|
113
|
+
test 'get 1' do
|
114
|
+
data, attrs = c1.call(:get, key)
|
115
|
+
test_equals _data1, data, 'get 1 _data1 == data'
|
116
|
+
test_equals _attrs1, attrs, 'get 1 _attrs1 == attrs'
|
117
|
+
end
|
118
|
+
|
119
|
+
test 'get_data 1' do
|
120
|
+
data = c1.call(:get_data, key)
|
121
|
+
test_equals _data1, data, 'get 1 _data1 == data'
|
122
|
+
end
|
123
|
+
|
124
|
+
test 'get_attrs 1' do
|
125
|
+
attrs = c1.call(:get_attrs, key)
|
126
|
+
test_equals _attrs1, attrs, 'get 1 _attrs1 == attrs'
|
127
|
+
end
|
128
|
+
|
129
|
+
test 'read 1 offset=0 size=8' do
|
130
|
+
data = c1.call(:read, key, 0, 8)
|
131
|
+
test_equals _data1_0_8, data, 'read 1 _data1[0,8] == data'
|
132
|
+
end
|
133
|
+
|
134
|
+
test 'read 1 offset=3 size=20' do
|
135
|
+
data = c1.call(:read, key, 3, 20)
|
136
|
+
test_equals _data1_3_20, data, 'read 1 _data1[3,20] == data'
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
c0 = gw0.client
|
141
|
+
|
142
|
+
NUM.times do |i|
|
143
|
+
key = keyf % i
|
144
|
+
|
145
|
+
test 'get 0' do
|
146
|
+
data, attrs = c0.call(:get, key)
|
147
|
+
test_equals nil, data, 'get 0 _data1 is not found'
|
148
|
+
test_equals nil, attrs, 'get 0 _attrs1 is not founds'
|
149
|
+
end
|
150
|
+
|
151
|
+
test 'get_data 0' do
|
152
|
+
data = c0.call(:get_data, key)
|
153
|
+
test_equals nil, data, 'get 0 _data1 is not found'
|
154
|
+
end
|
155
|
+
|
156
|
+
test 'get_attrs 0' do
|
157
|
+
attrs = c0.call(:get_attrs, key)
|
158
|
+
test_equals nil, attrs, 'get 0 _attrs1 is not founds'
|
159
|
+
end
|
160
|
+
|
161
|
+
test 'read 0 offset=0 size=8' do
|
162
|
+
data = c0.call(:read, key, 0, 8)
|
163
|
+
test_equals nil, data, 'read 0 _data1[0,8] is not found'
|
164
|
+
end
|
165
|
+
|
166
|
+
test 'read 0 offset=3 size=20' do
|
167
|
+
data = c0.call(:read, key, 3, 20)
|
168
|
+
test_equals nil, data, 'read 0 _data1[3,20] is not found'
|
169
|
+
end
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
cs.show_items
|
174
|
+
cs.show_stat
|
175
|
+
|
176
|
+
term_all(ds0, ds1, ds2, ds3, gw, mds, cs, *rogw)
|
177
|
+
|