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.
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