ls4 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (100) hide show
  1. data/AUTHORS +1 -0
  2. data/COPYING +661 -0
  3. data/ChangeLog +9 -0
  4. data/NOTICE +8 -0
  5. data/README.rdoc +61 -0
  6. data/bin/ls4-cs +3 -0
  7. data/bin/ls4-ds +3 -0
  8. data/bin/ls4-gw +3 -0
  9. data/bin/ls4-standalone +3 -0
  10. data/bin/ls4cmd +3 -0
  11. data/bin/ls4ctl +3 -0
  12. data/bin/ls4rpc +3 -0
  13. data/bin/ls4stat +3 -0
  14. data/bin/ls4top +3 -0
  15. data/lib/ls4/command/cmd.rb +241 -0
  16. data/lib/ls4/command/cs.rb +190 -0
  17. data/lib/ls4/command/ctl.rb +278 -0
  18. data/lib/ls4/command/ds.rb +335 -0
  19. data/lib/ls4/command/gw.rb +256 -0
  20. data/lib/ls4/command/rpc.rb +172 -0
  21. data/lib/ls4/command/standalone.rb +318 -0
  22. data/lib/ls4/command/stat.rb +244 -0
  23. data/lib/ls4/command/top.rb +291 -0
  24. data/lib/ls4/default.rb +26 -0
  25. data/lib/ls4/lib/cclog.rb +220 -0
  26. data/lib/ls4/lib/ebus.rb +553 -0
  27. data/lib/ls4/lib/vbcode.rb +228 -0
  28. data/lib/ls4/logic/fault_detector.rb +212 -0
  29. data/lib/ls4/logic/membership.rb +253 -0
  30. data/lib/ls4/logic/node.rb +66 -0
  31. data/lib/ls4/logic/okey.rb +45 -0
  32. data/lib/ls4/logic/tsv_data.rb +81 -0
  33. data/lib/ls4/logic/weight.rb +166 -0
  34. data/lib/ls4/service/balance.rb +62 -0
  35. data/lib/ls4/service/base.rb +29 -0
  36. data/lib/ls4/service/bus.rb +37 -0
  37. data/lib/ls4/service/config.rb +63 -0
  38. data/lib/ls4/service/config_cs.rb +33 -0
  39. data/lib/ls4/service/config_ds.rb +56 -0
  40. data/lib/ls4/service/config_gw.rb +42 -0
  41. data/lib/ls4/service/data_client.rb +122 -0
  42. data/lib/ls4/service/data_server.rb +168 -0
  43. data/lib/ls4/service/data_server_url.rb +83 -0
  44. data/lib/ls4/service/gateway.rb +375 -0
  45. data/lib/ls4/service/gateway_ro.rb +91 -0
  46. data/lib/ls4/service/gw_http.rb +821 -0
  47. data/lib/ls4/service/heartbeat.rb +182 -0
  48. data/lib/ls4/service/log.rb +81 -0
  49. data/lib/ls4/service/master_select.rb +148 -0
  50. data/lib/ls4/service/mds.rb +292 -0
  51. data/lib/ls4/service/mds_cache.rb +294 -0
  52. data/lib/ls4/service/mds_cache_mem.rb +63 -0
  53. data/lib/ls4/service/mds_cache_memcached.rb +65 -0
  54. data/lib/ls4/service/mds_ha.rb +176 -0
  55. data/lib/ls4/service/mds_memcache.rb +209 -0
  56. data/lib/ls4/service/mds_tc.rb +508 -0
  57. data/lib/ls4/service/mds_tt.rb +472 -0
  58. data/lib/ls4/service/membership.rb +331 -0
  59. data/lib/ls4/service/process.rb +90 -0
  60. data/lib/ls4/service/rpc.rb +50 -0
  61. data/lib/ls4/service/rpc_cs.rb +101 -0
  62. data/lib/ls4/service/rpc_ds.rb +96 -0
  63. data/lib/ls4/service/rpc_gw.rb +255 -0
  64. data/lib/ls4/service/rts.rb +94 -0
  65. data/lib/ls4/service/rts_file.rb +76 -0
  66. data/lib/ls4/service/rts_memory.rb +55 -0
  67. data/lib/ls4/service/slave.rb +132 -0
  68. data/lib/ls4/service/stat.rb +91 -0
  69. data/lib/ls4/service/stat_cs.rb +25 -0
  70. data/lib/ls4/service/stat_ds.rb +40 -0
  71. data/lib/ls4/service/stat_gw.rb +25 -0
  72. data/lib/ls4/service/storage.rb +116 -0
  73. data/lib/ls4/service/storage_dir.rb +201 -0
  74. data/lib/ls4/service/sync.rb +206 -0
  75. data/lib/ls4/service/time_check.rb +80 -0
  76. data/lib/ls4/service/ulog.rb +159 -0
  77. data/lib/ls4/service/ulog_file.rb +398 -0
  78. data/lib/ls4/service/ulog_memory.rb +53 -0
  79. data/lib/ls4/service/weight.rb +134 -0
  80. data/lib/ls4/version.rb +5 -0
  81. data/test/01_add_get_remove.rt +84 -0
  82. data/test/02_read.rt +61 -0
  83. data/test/03_getd_readd.rt +69 -0
  84. data/test/04_version_time.rt +170 -0
  85. data/test/05_version_name.rt +161 -0
  86. data/test/06_http_get_set_remove_1.rt +119 -0
  87. data/test/07_http_get_set_remove_2.rt +116 -0
  88. data/test/08_read_only_time.rt +177 -0
  89. data/test/09_read_only_name.rt +173 -0
  90. data/test/10_http_get_set_remove_3.rt +73 -0
  91. data/test/11_mds_cache_memcached.rt +88 -0
  92. data/test/12_mds_cache_local_memory.rt +86 -0
  93. data/test/13_memcache_mds.rt +84 -0
  94. data/test/14_delete.rt +63 -0
  95. data/test/15_standalone.rt +71 -0
  96. data/test/chukan.rb +516 -0
  97. data/test/common.rb +250 -0
  98. data/test/load_test.rb +79 -0
  99. data/test/load_test_offload.rb +86 -0
  100. metadata +295 -0
@@ -0,0 +1,250 @@
1
+ here = File.expand_path(File.dirname(__FILE__))
2
+
3
+ RUBY = ENV["RUBY"] || "ruby"
4
+ TTSERVER = ENV["TTSERVER"] || "ttserver"
5
+
6
+ DATA_DIR = ENV["DATA_DIR"] || "#{here}/tmp-#{Time.now.strftime("%Y-%m-%d.%H-%M-%S")}.#{Process.pid}"
7
+
8
+ CMD_BASE = "#{RUBY} -I#{here}/../lib #{here}/../lib/ls4/command"
9
+ CMD_CS = "#{CMD_BASE}/cs.rb"
10
+ CMD_DS = "#{CMD_BASE}/ds.rb"
11
+ CMD_GW = "#{CMD_BASE}/gw.rb"
12
+ CMD_CTL = "#{CMD_BASE}/ctl.rb"
13
+ CMD_STANDALONE = "#{CMD_BASE}/standalone.rb"
14
+
15
+ CS_PORT = (ENV["CS_PORT"] || 49700).to_i
16
+ DS_PORT = (ENV["DS_PORT"] || 49900).to_i
17
+ GW_PORT = (ENV["GW_PORT"] || 49800).to_i
18
+ MDS_PORT = (ENV["MDS_PORT"] || 49600).to_i
19
+ DS_HTTP_PORT = (ENV["GW_HTTP_PORT"] || 49400).to_i
20
+ GW_HTTP_PORT = (ENV["GW_HTTP_PORT"] || 49500).to_i
21
+
22
+ if ENV["NO_TRACE"]
23
+ OPT = ENV["OPT"] || "--color-log"
24
+ TTOPT = ENV["TTOPT"] || ""
25
+ else
26
+ OPT = ENV["OPT"] || "--trace --color-log"
27
+ TTOPT = ENV["TTOPT"] || "-ld"
28
+ end
29
+
30
+ begin
31
+ require 'rubygems'
32
+ rescue LoadError
33
+ end
34
+ require 'chukan'
35
+ require 'msgpack/rpc'
36
+ require 'fileutils'
37
+ require 'json'
38
+
39
+ require 'net/http'
40
+ Net::HTTP.version_1_2
41
+
42
+ include Chukan
43
+ include Chukan::Test
44
+
45
+ class ServerProcess < Chukan::LocalProcess
46
+ def host
47
+ "127.0.0.1"
48
+ end
49
+
50
+ protected
51
+ def init_data_dir(subdir)
52
+ ddir = "#{DATA_DIR}/#{subdir}"
53
+ FileUtils.rm_rf(ddir)
54
+ FileUtils.mkdir_p(ddir)
55
+ ddir
56
+ end
57
+ end
58
+
59
+ class MDSProcess < ServerProcess
60
+ def initialize(*args)
61
+ @port = MDS_PORT
62
+
63
+ ddir = init_data_dir("mds")
64
+ super("#{TTSERVER} -port #{@port} #{TTOPT} #{args.join(' ')} #{ddir}/mds.tct")
65
+ end
66
+
67
+ attr_reader :port
68
+
69
+ def join_started
70
+ stdout_join('started')
71
+ end
72
+ end
73
+
74
+ class CtlProcess < Chukan::LocalProcess
75
+ def initialize(host, port, *args)
76
+ super("#{CMD_CTL} #{host}:#{port} #{args.join(' ')}")
77
+ set_display("ctl #{args[0]}")
78
+ end
79
+ end
80
+
81
+ class CSProcess < ServerProcess
82
+ def initialize(*args)
83
+ @port = CS_PORT
84
+
85
+ ddir = init_data_dir("cs")
86
+ super("#{CMD_CS} --mds tt:127.0.0.1:#{MDS_PORT} -p #{@port} -s #{ddir} #{args.join(' ')} #{OPT}")
87
+
88
+ set_display("cs")
89
+ end
90
+
91
+ attr_reader :port
92
+
93
+ def join_started
94
+ stdout_join('start on')
95
+ end
96
+
97
+ def show_stat
98
+ CtlProcess.new(host, port, "stat").join
99
+ end
100
+
101
+ def show_nodes
102
+ CtlProcess.new(host, port, "nodes").join
103
+ end
104
+
105
+ def show_weight
106
+ CtlProcess.new(host, port, "weight").join
107
+ end
108
+
109
+ def show_version
110
+ CtlProcess.new(host, port, "version").join
111
+ end
112
+
113
+ def show_items
114
+ CtlProcess.new(host, port, "items").join
115
+ end
116
+
117
+ def show_snapshot
118
+ CtlProcess.new(host, port, "snapshot").join
119
+ end
120
+
121
+ def add_snapshot(name)
122
+ CtlProcess.new(host, port, "add_snapshot", name).join
123
+ end
124
+ end
125
+
126
+ class DSProcess < ServerProcess
127
+ def initialize(nid, rsid, *args)
128
+ @nid = nid
129
+ @rsid = rsid
130
+ @port = DS_PORT+nid
131
+ @http_port = DS_HTTP_PORT+nid
132
+
133
+ ddir = init_data_dir("ds#{nid}")
134
+ super("#{CMD_DS} -c 127.0.0.1:#{CS_PORT} -s #{ddir} -i #{nid} -n node#{nid} -g #{rsid} -a 127.0.0.1:#{@port} -t #{@http_port} #{args.join(' ')} #{OPT}")
135
+
136
+ set_display("ds#{nid} rsid=#{rsid}")
137
+ end
138
+
139
+ attr_reader :port
140
+ attr_reader :http_port
141
+ attr_reader :nid
142
+ attr_reader :rsid
143
+
144
+ def join_started
145
+ stdout_join('start on')
146
+ end
147
+
148
+ def client
149
+ MessagePack::RPC::Client.new(host, @port)
150
+ end
151
+
152
+ def http_client(path, &block)
153
+ Net::HTTP.start("127.0.0.1", @http_port, &block)
154
+ end
155
+ end
156
+
157
+ class GWProcess < ServerProcess
158
+ def initialize(n, *args)
159
+ @port = GW_PORT+n
160
+ @http_port = GW_HTTP_PORT+n
161
+
162
+ super("#{CMD_GW} -c 127.0.0.1:#{CS_PORT} -p #{port} -t #{@http_port} #{args.join(' ')} #{OPT}")
163
+
164
+ set_display("gw#{n}")
165
+ end
166
+
167
+ attr_reader :port
168
+ attr_reader :http_port
169
+
170
+ def join_started
171
+ stdout_join('start on')
172
+ end
173
+
174
+ def client
175
+ MessagePack::RPC::Client.new(host, @port)
176
+ end
177
+
178
+ def http_client(&block)
179
+ Net::HTTP.start("127.0.0.1", @http_port, &block)
180
+ end
181
+ end
182
+
183
+ class StandaloneProcess < ServerProcess
184
+ def initialize(*args)
185
+ @port = DS_PORT
186
+ @http_port = DS_HTTP_PORT
187
+
188
+ ddir = init_data_dir("standalone")
189
+ super("#{CMD_STANDALONE} -s #{ddir} -p #{@port} -t #{@http_port} #{args.join(' ')} #{OPT}")
190
+
191
+ set_display("standalone")
192
+ end
193
+
194
+ attr_reader :port
195
+ attr_reader :http_port
196
+
197
+ def join_started
198
+ stdout_join('start on')
199
+ end
200
+
201
+ def client
202
+ MessagePack::RPC::Client.new(host, @port)
203
+ end
204
+
205
+ def http_client(path, &block)
206
+ Net::HTTP.start("127.0.0.1", @http_port, &block)
207
+ end
208
+ end
209
+
210
+
211
+ def start_mds(*args)
212
+ mds = MDSProcess.new(*args)
213
+ mds.join_started
214
+ mds
215
+ end
216
+
217
+ def start_cs(*args)
218
+ cs = CSProcess.new(*args)
219
+ cs.join_started
220
+ cs
221
+ end
222
+
223
+ def start_ds(nid, rsid, *args)
224
+ ds = DSProcess.new(nid, rsid, *args)
225
+ ds.join_started
226
+ ds
227
+ end
228
+
229
+ def start_gw(n=0, *args)
230
+ gw = GWProcess.new(n, *args)
231
+ gw.join_started
232
+ gw
233
+ end
234
+
235
+ def start_standalone(*args)
236
+ standalone = StandaloneProcess.new(*args)
237
+ standalone.join_started
238
+ standalone
239
+ end
240
+
241
+ def start_memcached(port, *args)
242
+ m = spawn("memcached -U 0 -p #{port} #{args.join(' ')}")
243
+ m
244
+ end
245
+
246
+ def term_all(*procs)
247
+ procs.each {|pr| pr.term rescue p($!) }
248
+ procs.each {|pr| pr.join rescue p($!) }
249
+ end
250
+
@@ -0,0 +1,79 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ begin
4
+ require 'rubygems'
5
+ rescue LoadError
6
+ end
7
+ require 'chukan'
8
+ require 'msgpack/rpc'
9
+
10
+ include Chukan::Test
11
+
12
+ host = '127.0.0.1'
13
+ port = ARGV[0] || 18800
14
+
15
+ THREAD = 1
16
+ LOOP = 2
17
+ SIZE = 4*1024*1024
18
+ NUM = 100
19
+ DUP = 3
20
+
21
+ pid = Process.pid
22
+
23
+ data = " " * SIZE
24
+
25
+ threads = (1..THREAD).map do
26
+
27
+ test "remove existent keys" do
28
+ c = MessagePack::RPC::Client.new(host, port)
29
+ (NUM/DUP*DUP).times {|i|
30
+ c.call(:remove, "k#{i}")
31
+ }
32
+ end
33
+
34
+ Thread.new(MessagePack::RPC::Client.new(host, port)) {|c|
35
+
36
+ test "run normally" do
37
+ LOOP.times {
38
+ puts "set #{SIZE} bytes #{NUM/DUP*DUP} items with #{DUP} async"
39
+ t = Time.now
40
+ (NUM/DUP).times {|n|
41
+ ar = []
42
+ DUP.times {|d|
43
+ #f = c.call_async(:add, "k#{n*DUP+d}", data, {"attr"=>"at"})
44
+ f = c.call_async(:add_data, "k#{pid}-#{n*DUP+d}", data)
45
+ ar << f
46
+ }
47
+ ar.each {|f|
48
+ f.get
49
+ }
50
+ }
51
+ e = Time.now - t
52
+ puts "#{e} sec."
53
+ puts "#{NUM/DUP*DUP/e} req/sec"
54
+ puts "#{NUM/DUP*DUP/e*SIZE/1024/1024} MB/sec"
55
+
56
+ puts "get #{SIZE} bytes #{NUM/DUP*DUP} items with #{DUP} async"
57
+ t = Time.now
58
+ (NUM/DUP).times {|n|
59
+ ar = []
60
+ DUP.times {|d|
61
+ f = c.call_async(:get, "k#{pid}-#{n*DUP+d}")
62
+ ar << f
63
+ }
64
+ ar.each {|f|
65
+ f.get
66
+ }
67
+ }
68
+ e = Time.now - t
69
+ puts "#{e} sec."
70
+ puts "#{NUM/DUP*DUP/e} req/sec"
71
+ puts "#{NUM/DUP*DUP/e*SIZE/1024/1024} MB/sec"
72
+ }
73
+ end
74
+
75
+ }
76
+ end.each {|th|
77
+ th.join
78
+ }
79
+
@@ -0,0 +1,86 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ begin
4
+ require 'rubygems'
5
+ rescue LoadError
6
+ end
7
+ require 'chukan'
8
+ require 'msgpack/rpc'
9
+ require 'net/http'
10
+ Net::HTTP.version_1_2
11
+
12
+ include Chukan::Test
13
+
14
+ host = '127.0.0.1'
15
+ port = ARGV[0] || 18800
16
+
17
+ THREAD = 1
18
+ LOOP = 2
19
+ SIZE = 4*1024*1024
20
+ NUM = 100
21
+ DUP = 3
22
+
23
+ pid = Process.pid
24
+
25
+ data = " " * SIZE
26
+
27
+ threads = (1..THREAD).map do
28
+
29
+ test "remove existent keys" do
30
+ c = MessagePack::RPC::Client.new(host, port)
31
+ (NUM/DUP*DUP).times {|i|
32
+ c.call(:remove, "k#{i}")
33
+ }
34
+ end
35
+
36
+ Thread.new(MessagePack::RPC::Client.new(host, port)) {|c|
37
+
38
+ test "run normally" do
39
+ LOOP.times {
40
+ puts "set #{SIZE} bytes #{NUM/DUP*DUP} items with #{DUP} async"
41
+ t = Time.now
42
+ (NUM/DUP).times {|n|
43
+ ar = []
44
+ DUP.times {|d|
45
+ #f = c.call_async(:add, "k#{n*DUP+d}", data, {"attr"=>"at"})
46
+ f = c.call_async(:add_data, "k#{pid}-#{n*DUP+d}", data)
47
+ ar << f
48
+ }
49
+ ar.each {|f|
50
+ f.get
51
+ }
52
+ }
53
+ e = Time.now - t
54
+ puts "#{e} sec."
55
+ puts "#{NUM/DUP*DUP/e} req/sec"
56
+ puts "#{NUM/DUP*DUP/e*SIZE/1024/1024} MB/sec"
57
+
58
+ puts "get #{SIZE} bytes #{NUM/DUP*DUP} items with #{DUP} async"
59
+ t = Time.now
60
+ (NUM/DUP).times {|n|
61
+ ar = []
62
+ DUP.times {|d|
63
+ f = c.call_async(:url, "k#{pid}-#{n*DUP+d}")
64
+ ar << f
65
+ }
66
+ ar.each {|f|
67
+ url = f.get
68
+ uri = URI.parse(url)
69
+ Net::HTTP.start(uri.host, uri.port) {|http|
70
+ res = http.get(uri.path)
71
+ res.body
72
+ }
73
+ }
74
+ }
75
+ e = Time.now - t
76
+ puts "#{e} sec."
77
+ puts "#{NUM/DUP*DUP/e} req/sec"
78
+ puts "#{NUM/DUP*DUP/e*SIZE/1024/1024} MB/sec"
79
+ }
80
+ end
81
+
82
+ }
83
+ end.each {|th|
84
+ th.join
85
+ }
86
+
metadata ADDED
@@ -0,0 +1,295 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ls4
3
+ version: !ruby/object:Gem::Version
4
+ hash: 59
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 9
9
+ - 0
10
+ version: 0.9.0
11
+ platform: ruby
12
+ authors:
13
+ - FURUHASHI Sadayuki
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-03-20 00:00:00 +09:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: msgpack
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 7
30
+ segments:
31
+ - 0
32
+ - 4
33
+ - 4
34
+ version: 0.4.4
35
+ type: :runtime
36
+ version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ name: msgpack-rpc
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ hash: 9
46
+ segments:
47
+ - 0
48
+ - 4
49
+ - 3
50
+ version: 0.4.3
51
+ type: :runtime
52
+ version_requirements: *id002
53
+ - !ruby/object:Gem::Dependency
54
+ name: tokyocabinet
55
+ prerelease: false
56
+ requirement: &id003 !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ hash: 53
62
+ segments:
63
+ - 1
64
+ - 29
65
+ version: "1.29"
66
+ type: :runtime
67
+ version_requirements: *id003
68
+ - !ruby/object:Gem::Dependency
69
+ name: tokyotyrant
70
+ prerelease: false
71
+ requirement: &id004 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ hash: 21
77
+ segments:
78
+ - 1
79
+ - 13
80
+ version: "1.13"
81
+ type: :runtime
82
+ version_requirements: *id004
83
+ - !ruby/object:Gem::Dependency
84
+ name: memcache-client
85
+ prerelease: false
86
+ requirement: &id005 !ruby/object:Gem::Requirement
87
+ none: false
88
+ requirements:
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ hash: 61
92
+ segments:
93
+ - 1
94
+ - 8
95
+ - 5
96
+ version: 1.8.5
97
+ type: :runtime
98
+ version_requirements: *id005
99
+ - !ruby/object:Gem::Dependency
100
+ name: rack
101
+ prerelease: false
102
+ requirement: &id006 !ruby/object:Gem::Requirement
103
+ none: false
104
+ requirements:
105
+ - - ">="
106
+ - !ruby/object:Gem::Version
107
+ hash: 29
108
+ segments:
109
+ - 1
110
+ - 2
111
+ - 1
112
+ version: 1.2.1
113
+ type: :runtime
114
+ version_requirements: *id006
115
+ - !ruby/object:Gem::Dependency
116
+ name: rspec
117
+ prerelease: false
118
+ requirement: &id007 !ruby/object:Gem::Requirement
119
+ none: false
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ hash: 3
124
+ segments:
125
+ - 0
126
+ version: "0"
127
+ type: :development
128
+ version_requirements: *id007
129
+ description:
130
+ email: frsyuki@users.sourceforge.jp
131
+ executables:
132
+ - ls4-cs
133
+ - ls4-ds
134
+ - ls4-gw
135
+ - ls4-standalone
136
+ - ls4cmd
137
+ - ls4ctl
138
+ - ls4rpc
139
+ - ls4stat
140
+ - ls4top
141
+ extensions: []
142
+
143
+ extra_rdoc_files:
144
+ - ChangeLog
145
+ - README.rdoc
146
+ files:
147
+ - AUTHORS
148
+ - COPYING
149
+ - ChangeLog
150
+ - NOTICE
151
+ - README.rdoc
152
+ - lib/ls4/command/cmd.rb
153
+ - lib/ls4/command/cs.rb
154
+ - lib/ls4/command/ctl.rb
155
+ - lib/ls4/command/ds.rb
156
+ - lib/ls4/command/gw.rb
157
+ - lib/ls4/command/rpc.rb
158
+ - lib/ls4/command/standalone.rb
159
+ - lib/ls4/command/stat.rb
160
+ - lib/ls4/command/top.rb
161
+ - lib/ls4/default.rb
162
+ - lib/ls4/lib/cclog.rb
163
+ - lib/ls4/lib/ebus.rb
164
+ - lib/ls4/lib/vbcode.rb
165
+ - lib/ls4/logic/fault_detector.rb
166
+ - lib/ls4/logic/membership.rb
167
+ - lib/ls4/logic/node.rb
168
+ - lib/ls4/logic/okey.rb
169
+ - lib/ls4/logic/tsv_data.rb
170
+ - lib/ls4/logic/weight.rb
171
+ - lib/ls4/service/balance.rb
172
+ - lib/ls4/service/base.rb
173
+ - lib/ls4/service/bus.rb
174
+ - lib/ls4/service/config.rb
175
+ - lib/ls4/service/config_cs.rb
176
+ - lib/ls4/service/config_ds.rb
177
+ - lib/ls4/service/config_gw.rb
178
+ - lib/ls4/service/data_client.rb
179
+ - lib/ls4/service/data_server.rb
180
+ - lib/ls4/service/data_server_url.rb
181
+ - lib/ls4/service/gateway.rb
182
+ - lib/ls4/service/gateway_ro.rb
183
+ - lib/ls4/service/gw_http.rb
184
+ - lib/ls4/service/heartbeat.rb
185
+ - lib/ls4/service/log.rb
186
+ - lib/ls4/service/master_select.rb
187
+ - lib/ls4/service/mds.rb
188
+ - lib/ls4/service/mds_cache.rb
189
+ - lib/ls4/service/mds_cache_mem.rb
190
+ - lib/ls4/service/mds_cache_memcached.rb
191
+ - lib/ls4/service/mds_ha.rb
192
+ - lib/ls4/service/mds_memcache.rb
193
+ - lib/ls4/service/mds_tc.rb
194
+ - lib/ls4/service/mds_tt.rb
195
+ - lib/ls4/service/membership.rb
196
+ - lib/ls4/service/process.rb
197
+ - lib/ls4/service/rpc.rb
198
+ - lib/ls4/service/rpc_cs.rb
199
+ - lib/ls4/service/rpc_ds.rb
200
+ - lib/ls4/service/rpc_gw.rb
201
+ - lib/ls4/service/rts.rb
202
+ - lib/ls4/service/rts_file.rb
203
+ - lib/ls4/service/rts_memory.rb
204
+ - lib/ls4/service/slave.rb
205
+ - lib/ls4/service/stat.rb
206
+ - lib/ls4/service/stat_cs.rb
207
+ - lib/ls4/service/stat_ds.rb
208
+ - lib/ls4/service/stat_gw.rb
209
+ - lib/ls4/service/storage.rb
210
+ - lib/ls4/service/storage_dir.rb
211
+ - lib/ls4/service/sync.rb
212
+ - lib/ls4/service/time_check.rb
213
+ - lib/ls4/service/ulog.rb
214
+ - lib/ls4/service/ulog_file.rb
215
+ - lib/ls4/service/ulog_memory.rb
216
+ - lib/ls4/service/weight.rb
217
+ - lib/ls4/version.rb
218
+ - test/01_add_get_remove.rt
219
+ - test/02_read.rt
220
+ - test/03_getd_readd.rt
221
+ - test/04_version_time.rt
222
+ - test/05_version_name.rt
223
+ - test/06_http_get_set_remove_1.rt
224
+ - test/07_http_get_set_remove_2.rt
225
+ - test/08_read_only_time.rt
226
+ - test/09_read_only_name.rt
227
+ - test/10_http_get_set_remove_3.rt
228
+ - test/11_mds_cache_memcached.rt
229
+ - test/12_mds_cache_local_memory.rt
230
+ - test/13_memcache_mds.rt
231
+ - test/14_delete.rt
232
+ - test/15_standalone.rt
233
+ - test/chukan.rb
234
+ - test/common.rb
235
+ - test/load_test.rb
236
+ - test/load_test_offload.rb
237
+ - bin/ls4-cs
238
+ - bin/ls4-ds
239
+ - bin/ls4-gw
240
+ - bin/ls4-standalone
241
+ - bin/ls4cmd
242
+ - bin/ls4ctl
243
+ - bin/ls4rpc
244
+ - bin/ls4stat
245
+ - bin/ls4top
246
+ has_rdoc: true
247
+ homepage: http://ls4.sourceforge.net/
248
+ licenses: []
249
+
250
+ post_install_message:
251
+ rdoc_options:
252
+ - --charset=UTF-8
253
+ require_paths:
254
+ - lib
255
+ required_ruby_version: !ruby/object:Gem::Requirement
256
+ none: false
257
+ requirements:
258
+ - - ">="
259
+ - !ruby/object:Gem::Version
260
+ hash: 3
261
+ segments:
262
+ - 0
263
+ version: "0"
264
+ required_rubygems_version: !ruby/object:Gem::Requirement
265
+ none: false
266
+ requirements:
267
+ - - ">="
268
+ - !ruby/object:Gem::Version
269
+ hash: 3
270
+ segments:
271
+ - 0
272
+ version: "0"
273
+ requirements: []
274
+
275
+ rubyforge_project:
276
+ rubygems_version: 1.3.7
277
+ signing_key:
278
+ specification_version: 3
279
+ summary: LS4 - large-scale simple storage system
280
+ test_files:
281
+ - test/01_add_get_remove.rt
282
+ - test/02_read.rt
283
+ - test/03_getd_readd.rt
284
+ - test/04_version_time.rt
285
+ - test/05_version_name.rt
286
+ - test/06_http_get_set_remove_1.rt
287
+ - test/07_http_get_set_remove_2.rt
288
+ - test/08_read_only_time.rt
289
+ - test/09_read_only_name.rt
290
+ - test/10_http_get_set_remove_3.rt
291
+ - test/11_mds_cache_memcached.rt
292
+ - test/12_mds_cache_local_memory.rt
293
+ - test/13_memcache_mds.rt
294
+ - test/14_delete.rt
295
+ - test/15_standalone.rt