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,53 @@
|
|
1
|
+
#
|
2
|
+
# LS4
|
3
|
+
# Copyright (C) 2010-2011 FURUHASHI Sadayuki
|
4
|
+
#
|
5
|
+
# This program is free software: you can redistribute it and/or modify
|
6
|
+
# it under the terms of the GNU Affero General Public License as
|
7
|
+
# published by the Free Software Foundation, either version 3 of the
|
8
|
+
# License, or (at your option) any later version.
|
9
|
+
#
|
10
|
+
# This program is distributed in the hope that it will be useful,
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
+
# GNU Affero General Public License for more details.
|
14
|
+
#
|
15
|
+
# You should have received a copy of the GNU Affero General Public License
|
16
|
+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
17
|
+
#
|
18
|
+
module LS4
|
19
|
+
|
20
|
+
|
21
|
+
class MemoryUpdateLog < UpdateLogService
|
22
|
+
UpdateLogSelector.register(:mem, self)
|
23
|
+
|
24
|
+
def open(expr)
|
25
|
+
@array = []
|
26
|
+
end
|
27
|
+
|
28
|
+
def close
|
29
|
+
@array.clear
|
30
|
+
end
|
31
|
+
|
32
|
+
def append(data, &block)
|
33
|
+
@array.push(data)
|
34
|
+
begin
|
35
|
+
block.call
|
36
|
+
rescue
|
37
|
+
@array.pop
|
38
|
+
raise
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def get(pos)
|
43
|
+
data = @array[pos]
|
44
|
+
if data
|
45
|
+
return nil, pos
|
46
|
+
else
|
47
|
+
return data, pos+1
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
|
53
|
+
end
|
@@ -0,0 +1,134 @@
|
|
1
|
+
#
|
2
|
+
# LS4
|
3
|
+
# Copyright (C) 2010-2011 FURUHASHI Sadayuki
|
4
|
+
#
|
5
|
+
# This program is free software: you can redistribute it and/or modify
|
6
|
+
# it under the terms of the GNU Affero General Public License as
|
7
|
+
# published by the Free Software Foundation, either version 3 of the
|
8
|
+
# License, or (at your option) any later version.
|
9
|
+
#
|
10
|
+
# This program is distributed in the hope that it will be useful,
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
+
# GNU Affero General Public License for more details.
|
14
|
+
#
|
15
|
+
# You should have received a copy of the GNU Affero General Public License
|
16
|
+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
17
|
+
#
|
18
|
+
module LS4
|
19
|
+
|
20
|
+
|
21
|
+
class WeightBus < Bus
|
22
|
+
call_slot :get_weight
|
23
|
+
call_slot :get_registered_rsids
|
24
|
+
|
25
|
+
call_slot :set_weight
|
26
|
+
|
27
|
+
call_slot :set_active_rsids
|
28
|
+
call_slot :select_next_rsid
|
29
|
+
end
|
30
|
+
|
31
|
+
|
32
|
+
class WeightService < Service
|
33
|
+
def initialize
|
34
|
+
@winfo = WeightInfo.new
|
35
|
+
end
|
36
|
+
|
37
|
+
def run
|
38
|
+
@weight_path = ConfigBus.get_weight_path
|
39
|
+
@winfo.open(@weight_path) if @weight_path
|
40
|
+
on_change
|
41
|
+
end
|
42
|
+
|
43
|
+
def shutdown
|
44
|
+
@winfo.close if @weight_path
|
45
|
+
end
|
46
|
+
|
47
|
+
def get_weight(rsid)
|
48
|
+
@winfo.get_weight(rsid)
|
49
|
+
end
|
50
|
+
|
51
|
+
def get_registered_rsids
|
52
|
+
@winfo.get_registered_rsids
|
53
|
+
end
|
54
|
+
|
55
|
+
def on_change
|
56
|
+
BalanceBus.update_weight
|
57
|
+
end
|
58
|
+
|
59
|
+
ebus_connect :WeightBus,
|
60
|
+
:get_weight,
|
61
|
+
:get_registered_rsids
|
62
|
+
|
63
|
+
ebus_connect :ProcessBus,
|
64
|
+
:run,
|
65
|
+
:shutdown
|
66
|
+
end
|
67
|
+
|
68
|
+
|
69
|
+
class WeightManagerService < WeightService
|
70
|
+
def initialize
|
71
|
+
super
|
72
|
+
end
|
73
|
+
|
74
|
+
def set_weight(rsid, weight)
|
75
|
+
if @winfo.set_weight(rsid, weight)
|
76
|
+
on_change
|
77
|
+
true
|
78
|
+
else
|
79
|
+
false
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def reset_weight(rsid)
|
84
|
+
if @winfo.reset_weight(rsid)
|
85
|
+
on_change
|
86
|
+
true
|
87
|
+
else
|
88
|
+
false
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
def rpc_set_replset_weight(rsid, weight)
|
93
|
+
set_weight(rsid, weight)
|
94
|
+
end
|
95
|
+
|
96
|
+
def rpc_reset_replset_weight(rsid)
|
97
|
+
reset_weight(rsid)
|
98
|
+
end
|
99
|
+
|
100
|
+
ebus_connect :WeightBus,
|
101
|
+
:set_weight
|
102
|
+
|
103
|
+
ebus_connect :CSRPCBus,
|
104
|
+
:set_replset_weight => :rpc_set_replset_weight,
|
105
|
+
:reset_replset_weight => :rpc_reset_replset_weight
|
106
|
+
|
107
|
+
private
|
108
|
+
def on_change
|
109
|
+
SyncBus.update(SYNC_REPLSET_WEIGHT,
|
110
|
+
@winfo, @winfo.get_hash)
|
111
|
+
super
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
|
116
|
+
class WeightMemberService < WeightService
|
117
|
+
def initialize
|
118
|
+
super
|
119
|
+
end
|
120
|
+
|
121
|
+
def run
|
122
|
+
super
|
123
|
+
|
124
|
+
SyncBus.register_callback(SYNC_REPLSET_WEIGHT,
|
125
|
+
@winfo.get_hash) do |obj|
|
126
|
+
@winfo.from_msgpack(obj)
|
127
|
+
on_change
|
128
|
+
@winfo.get_hash
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
|
134
|
+
end
|
@@ -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_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' 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
|
+
|
data/test/02_read.rt
ADDED
@@ -0,0 +1,61 @@
|
|
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
|
+
_data[2,4] = "OVER"
|
26
|
+
_data_0_8 = _data[0,8]
|
27
|
+
_data_3_20 = _data[3,20]
|
28
|
+
|
29
|
+
test "run normally" do
|
30
|
+
c = gw.client
|
31
|
+
|
32
|
+
LOOP.times {|o|
|
33
|
+
NUM.times do |i|
|
34
|
+
key = keyf % i
|
35
|
+
|
36
|
+
test 'add_data' do
|
37
|
+
c.call(:add_data, key, _data)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
NUM.times do |i|
|
42
|
+
key = keyf % i
|
43
|
+
|
44
|
+
test 'read offset=0 size=8' do
|
45
|
+
data = c.call(:read, key, 0, 8)
|
46
|
+
test_equals _data_0_8, data, 'read _data[0,8] == data'
|
47
|
+
end
|
48
|
+
|
49
|
+
test 'read offset=3 size=20' do
|
50
|
+
data = c.call(:read, key, 3, 20)
|
51
|
+
test_equals _data_3_20, data, 'read _data[3,20] == data'
|
52
|
+
end
|
53
|
+
end
|
54
|
+
}
|
55
|
+
end
|
56
|
+
|
57
|
+
cs.show_items
|
58
|
+
cs.show_stat
|
59
|
+
|
60
|
+
term_all(ds0, ds1, ds2, ds3, gw, mds, cs)
|
61
|
+
|
@@ -0,0 +1,69 @@
|
|
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
|
+
_data[2,4] = "OVER"
|
26
|
+
_data_0_8 = _data[0,8]
|
27
|
+
_data_3_20 = _data[3,20]
|
28
|
+
|
29
|
+
test "run normally" do
|
30
|
+
c = gw.client
|
31
|
+
|
32
|
+
LOOP.times {|o|
|
33
|
+
okeys = []
|
34
|
+
|
35
|
+
NUM.times do |i|
|
36
|
+
key = keyf % i
|
37
|
+
|
38
|
+
test 'add_data' do
|
39
|
+
okey = c.call(:add_data, key, _data)
|
40
|
+
okeys[i] = okey
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
NUM.times do |i|
|
45
|
+
okey = okeys[i]
|
46
|
+
|
47
|
+
test 'getd_data' do
|
48
|
+
data = c.call(:getd_data, okey)
|
49
|
+
test_equals _data, data, 'getd_data _data == data'
|
50
|
+
end
|
51
|
+
|
52
|
+
test 'readd offset=0 size=8' do
|
53
|
+
data = c.call(:readd, okey, 0, 8)
|
54
|
+
test_equals _data_0_8, data, 'readd _data[0,8] == data'
|
55
|
+
end
|
56
|
+
|
57
|
+
test 'readd offset=3 size=20' do
|
58
|
+
data = c.call(:readd, okey, 3, 20)
|
59
|
+
test_equals _data_3_20, data, 'readd _data[3,20] == data'
|
60
|
+
end
|
61
|
+
end
|
62
|
+
}
|
63
|
+
end
|
64
|
+
|
65
|
+
cs.show_items
|
66
|
+
cs.show_stat
|
67
|
+
|
68
|
+
term_all(ds0, ds1, ds2, ds3, gw, mds, cs)
|
69
|
+
|
@@ -0,0 +1,170 @@
|
|
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
|
+
start_time = Time.now.utc.to_i
|
38
|
+
|
39
|
+
LOOP.times {|o|
|
40
|
+
okeys1 = []
|
41
|
+
okeys2 = []
|
42
|
+
|
43
|
+
NUM.times do |i|
|
44
|
+
key = keyf % i
|
45
|
+
_attrs1 = {"loop"=>o.to_s, "attr#{i}"=>i.to_s}
|
46
|
+
|
47
|
+
test 'add 1' do
|
48
|
+
okey = c.call(:add, key, _data1, _attrs1)
|
49
|
+
okeys1 << okey
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
sleep 3
|
54
|
+
|
55
|
+
NUM.times do |i|
|
56
|
+
key = keyf % i
|
57
|
+
_attrs2 = {"loop"=>"2", "attr2#{i}"=>i.to_s}
|
58
|
+
|
59
|
+
test 'add 2' do
|
60
|
+
okey = c.call(:add, key, _data2, _attrs2)
|
61
|
+
okeys2 << okey
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
NUM.times do |i|
|
66
|
+
key = keyf % i
|
67
|
+
_attrs2 = {"loop"=>"2", "attr2#{i}"=>i.to_s}
|
68
|
+
|
69
|
+
test 'get head' do
|
70
|
+
data, attrs = c.call(:get, key)
|
71
|
+
test_equals _data2, data, 'get head _data2 == data'
|
72
|
+
test_equals _attrs2, attrs, 'get head _attrs2 == attrs'
|
73
|
+
end
|
74
|
+
|
75
|
+
test 'get_data head' do
|
76
|
+
data = c.call(:get_data, key)
|
77
|
+
test_equals _data2, data, 'get_data head _data2 == data'
|
78
|
+
end
|
79
|
+
|
80
|
+
test 'get_attrs head' do
|
81
|
+
attrs = c.call(:get_attrs, key)
|
82
|
+
test_equals _attrs2, attrs, 'get_attrs head _attrs2 == attrs'
|
83
|
+
end
|
84
|
+
|
85
|
+
test 'read head offset=0 size=8' do
|
86
|
+
data = c.call(:read, key, 0, 8)
|
87
|
+
test_equals _data2_0_8, data, 'read head _data2[0,8] == data'
|
88
|
+
end
|
89
|
+
|
90
|
+
test 'read head offset=3 size=20' do
|
91
|
+
data = c.call(:read, key, 3, 20)
|
92
|
+
test_equals _data2_3_20, data, 'read head _data2[3,20] == data'
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
NUM.times do |i|
|
97
|
+
key = keyf % i
|
98
|
+
okey = okeys1[i]
|
99
|
+
_attrs1 = {"loop"=>o.to_s, "attr#{i}"=>i.to_s}
|
100
|
+
|
101
|
+
vtime = okey[1]
|
102
|
+
|
103
|
+
test 'gett 1' do
|
104
|
+
data, attrs = c.call(:gett, vtime, key)
|
105
|
+
test_equals _data1, data, 'gett 1 _data1 == data'
|
106
|
+
test_equals _attrs1, attrs, 'gett 1 _attrs1 == attrs'
|
107
|
+
end
|
108
|
+
|
109
|
+
test 'gett_data 1' do
|
110
|
+
data = c.call(:gett_data, vtime, key)
|
111
|
+
test_equals _data1, data, 'gett 1 _data1 == data'
|
112
|
+
end
|
113
|
+
|
114
|
+
test 'gett_attrs 1' do
|
115
|
+
attrs = c.call(:gett_attrs, vtime, key)
|
116
|
+
test_equals _attrs1, attrs, 'gett 1 _attrs1 == attrs'
|
117
|
+
end
|
118
|
+
|
119
|
+
test 'readt 1 offset=0 size=8' do
|
120
|
+
data = c.call(:readt, vtime, key, 0, 8)
|
121
|
+
test_equals _data1_0_8, data, 'readt 1 _data1[0,8] == data'
|
122
|
+
end
|
123
|
+
|
124
|
+
test 'readt 1 offset=3 size=20' do
|
125
|
+
data = c.call(:readt, vtime, key, 3, 20)
|
126
|
+
test_equals _data1_3_20, data, 'readt 1 _data1[3,20] == data'
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
sleep 3
|
131
|
+
}
|
132
|
+
|
133
|
+
NUM.times do |i|
|
134
|
+
key = keyf % i
|
135
|
+
|
136
|
+
vtime = start_time - 1
|
137
|
+
|
138
|
+
test 'gett 0' do
|
139
|
+
data, attrs = c.call(:gett, vtime, key)
|
140
|
+
test_equals nil, data, 'gett 0 _data1 is not found'
|
141
|
+
test_equals nil, attrs, 'gett 0 _attrs1 is not founds'
|
142
|
+
end
|
143
|
+
|
144
|
+
test 'gett_data 0' do
|
145
|
+
data = c.call(:gett_data, vtime, key)
|
146
|
+
test_equals nil, data, 'gett 0 _data1 is not found'
|
147
|
+
end
|
148
|
+
|
149
|
+
test 'gett_attrs 0' do
|
150
|
+
attrs = c.call(:gett_attrs, vtime, key)
|
151
|
+
test_equals nil, attrs, 'gett 0 _attrs1 is not founds'
|
152
|
+
end
|
153
|
+
|
154
|
+
test 'readt 0 offset=0 size=8' do
|
155
|
+
data = c.call(:readt, vtime, key, 0, 8)
|
156
|
+
test_equals nil, data, 'readt 0 _data1[0,8] is not found'
|
157
|
+
end
|
158
|
+
|
159
|
+
test 'readt 0 offset=3 size=20' do
|
160
|
+
data = c.call(:readt, vtime, key, 3, 20)
|
161
|
+
test_equals nil, data, 'readt 0 _data1[3,20] is not found'
|
162
|
+
end
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
cs.show_items
|
167
|
+
cs.show_stat
|
168
|
+
|
169
|
+
term_all(ds0, ds1, ds2, ds3, gw, mds, cs)
|
170
|
+
|