em-voldemort 0.1.5
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/.gitignore +1 -0
- data/Gemfile +2 -0
- data/LICENSE +19 -0
- data/README.md +78 -0
- data/em-voldemort.gemspec +23 -0
- data/lib/em-voldemort.rb +11 -0
- data/lib/em-voldemort/binary_json.rb +330 -0
- data/lib/em-voldemort/cluster.rb +247 -0
- data/lib/em-voldemort/compressor.rb +39 -0
- data/lib/em-voldemort/connection.rb +234 -0
- data/lib/em-voldemort/errors.rb +13 -0
- data/lib/em-voldemort/protobuf.rb +105 -0
- data/lib/em-voldemort/protocol.rb +23 -0
- data/lib/em-voldemort/router.rb +62 -0
- data/lib/em-voldemort/store.rb +108 -0
- data/spec/em-voldemort/binary_json_spec.rb +33 -0
- data/spec/em-voldemort/cluster_spec.rb +363 -0
- data/spec/em-voldemort/connection_spec.rb +307 -0
- data/spec/em-voldemort/fixtures/cluster.xml +323 -0
- data/spec/em-voldemort/router_spec.rb +73 -0
- data/spec/spec_helper.rb +9 -0
- metadata +164 -0
@@ -0,0 +1,307 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe EM::Voldemort::Connection do
|
4
|
+
before do
|
5
|
+
EM::Voldemort::Connection.any_instance.stub(:setup_status_check_timer) do |&timer|
|
6
|
+
@status_check_timer = timer
|
7
|
+
double('timer', :cancel => nil)
|
8
|
+
end
|
9
|
+
|
10
|
+
@logger = Logger.new($stdout)
|
11
|
+
@logger.level = Logger::ERROR
|
12
|
+
@connection = EM::Voldemort::Connection.new :host => 'localhost', :port => 6666, :logger => @logger
|
13
|
+
|
14
|
+
Timecop.freeze
|
15
|
+
end
|
16
|
+
|
17
|
+
def expect_connect(&block)
|
18
|
+
EM.should_receive(:connect).once do |host, port, handler_module, *args|
|
19
|
+
Class.new(Object) { include handler_module }.new(*args).tap do |handler|
|
20
|
+
yield handler
|
21
|
+
handler.post_init
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def setup_connection(&block)
|
27
|
+
expect_connect do |handler|
|
28
|
+
handler.should_receive(:send_data).with('pb0') do |request|
|
29
|
+
EM.next_tick do
|
30
|
+
handler.receive_data('ok')
|
31
|
+
yield handler if block_given?
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def later(elapsed_seconds)
|
38
|
+
Timecop.freeze(elapsed_seconds)
|
39
|
+
@elapsed_time ||= 0
|
40
|
+
if ((@elapsed_time + elapsed_seconds) / EM::Voldemort::Connection::STATUS_CHECK_PERIOD).floor >
|
41
|
+
(@elapsed_time / EM::Voldemort::Connection::STATUS_CHECK_PERIOD).floor
|
42
|
+
@status_check_timer.call
|
43
|
+
end
|
44
|
+
@elapsed_time += elapsed_seconds
|
45
|
+
end
|
46
|
+
|
47
|
+
|
48
|
+
it 'should negotiate the protocol at the start of the connection' do
|
49
|
+
setup_connection do |handler|
|
50
|
+
handler.state.should == :idle
|
51
|
+
@connection.health.should == :good
|
52
|
+
EM.stop
|
53
|
+
end
|
54
|
+
EM.run { @connection.connect }
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'should disconnect if the server does not support the protocol' do
|
58
|
+
expect_connect do |handler|
|
59
|
+
handler.should_receive(:send_data) do |request|
|
60
|
+
request.should == 'pb0'
|
61
|
+
EM.next_tick do
|
62
|
+
handler.should_receive(:close_connection) { handler.unbind }
|
63
|
+
handler.receive_data('no')
|
64
|
+
handler.state.should == :disconnected
|
65
|
+
@connection.health.should == :bad
|
66
|
+
EM.stop
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
EM.run { @connection.connect }
|
71
|
+
end
|
72
|
+
|
73
|
+
it 'should try reconnecting after a delay if the host is unresolvable' do
|
74
|
+
EM.run do
|
75
|
+
EM.should_receive(:connect).once.and_raise(EventMachine::ConnectionError, 'unable to resolve server address')
|
76
|
+
@connection.connect # first connection attempt
|
77
|
+
@connection.health.should == :bad
|
78
|
+
later(2) # no reconnect only 2 seconds after first attempt
|
79
|
+
setup_connection do |handler| # second attempt is successful
|
80
|
+
handler.state.should == :idle
|
81
|
+
@connection.health.should == :good
|
82
|
+
EM.stop
|
83
|
+
end
|
84
|
+
later(4) # 6 seconds after first attempt, status check timer has fired
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
it 'should immediately fail requests if the host is unresolvable' do
|
89
|
+
EM.run do
|
90
|
+
EM.should_receive(:connect).once.and_raise(EventMachine::ConnectionError, 'unable to resolve server address')
|
91
|
+
failed1, failed2 = false, false
|
92
|
+
@connection.send_request('foo').errback { failed1 = true }
|
93
|
+
@connection.send_request('bar').errback { failed2 = true }
|
94
|
+
failed1.should be_true
|
95
|
+
failed2.should be_true
|
96
|
+
EM.stop
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
it 'should disconnect and reconnect if protocol negotiation times out' do
|
101
|
+
expect_connect do |handler|
|
102
|
+
handler.should_receive(:send_data).with('pb0')
|
103
|
+
EM.next_tick do
|
104
|
+
later(2) # no timeout after only 2 seconds
|
105
|
+
handler.should_receive(:close_connection) { handler.unbind }
|
106
|
+
EM.should_receive(:connect) do
|
107
|
+
@connection.health.should == :bad
|
108
|
+
EM.stop
|
109
|
+
double('connection', :in_flight => EM::DefaultDeferrable.new)
|
110
|
+
end
|
111
|
+
later(4) # 6 seconds after sending protocol request, give up
|
112
|
+
end
|
113
|
+
end
|
114
|
+
EM.run { @connection.connect }
|
115
|
+
end
|
116
|
+
|
117
|
+
it 'should try reconnecting after a delay if the connection is closed' do
|
118
|
+
setup_connection do |handler|
|
119
|
+
later(16) # sit idle for a while
|
120
|
+
handler.unbind 'connection reset by peer'
|
121
|
+
@connection.health.should == :bad
|
122
|
+
later(2) # no reconnect only 2 seconds after disconnection
|
123
|
+
setup_connection do
|
124
|
+
@connection.health.should == :good
|
125
|
+
EM.stop
|
126
|
+
end
|
127
|
+
later(4) # 6 seconds after disconnection, status check timer has fired
|
128
|
+
end
|
129
|
+
EM.run { @connection.connect }
|
130
|
+
end
|
131
|
+
|
132
|
+
it 'should immediately fail requests while the connection is closed' do
|
133
|
+
setup_connection do |handler|
|
134
|
+
handler.should_receive(:send_data).with([8, 'request1'].pack('NA*')).once do
|
135
|
+
EM.next_tick { handler.receive_data([9, 'response1'].pack('NA*')) }
|
136
|
+
end
|
137
|
+
@connection.send_request('request1').callback do
|
138
|
+
handler.unbind
|
139
|
+
failed1, failed2 = false, false
|
140
|
+
@connection.send_request('request2').errback { failed1 = true }
|
141
|
+
@connection.send_request('request3').errback { failed2 = true }
|
142
|
+
failed1.should be_true
|
143
|
+
failed2.should be_true
|
144
|
+
EM.stop
|
145
|
+
end
|
146
|
+
end
|
147
|
+
EM.run { @connection.connect }
|
148
|
+
end
|
149
|
+
|
150
|
+
it 'should reassemble responses split across multiple packets' do
|
151
|
+
setup_connection do |handler|
|
152
|
+
handler.should_receive(:send_data).with([8, 'request1'].pack('NA*')).once do
|
153
|
+
EM.next_tick do
|
154
|
+
handler.receive_data([9, 'respon'].pack('NA*'))
|
155
|
+
EM.next_tick { handler.receive_data('se1') }
|
156
|
+
end
|
157
|
+
end
|
158
|
+
@connection.send_request('request1').callback do |response|
|
159
|
+
response.should == 'response1'
|
160
|
+
EM.stop
|
161
|
+
end
|
162
|
+
end
|
163
|
+
EM.run { @connection.connect }
|
164
|
+
end
|
165
|
+
|
166
|
+
describe 'queueing requests' do
|
167
|
+
def three_queued_requests(handler)
|
168
|
+
handler.should_receive(:send_data).with([8, 'request1'].pack('NA*')).once do
|
169
|
+
EM.next_tick do
|
170
|
+
handler.should_receive(:send_data).with([8, 'request2'].pack('NA*')).once do
|
171
|
+
EM.next_tick do
|
172
|
+
handler.should_receive(:send_data).with([8, 'request3'].pack('NA*')).once do
|
173
|
+
EM.next_tick do
|
174
|
+
handler.receive_data([9, 'response3'].pack('NA*'))
|
175
|
+
end
|
176
|
+
end
|
177
|
+
handler.receive_data([9, 'response2'].pack('NA*'))
|
178
|
+
end
|
179
|
+
end
|
180
|
+
handler.receive_data([9, 'response1'].pack('NA*'))
|
181
|
+
end
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
it 'should queue up requests made before the previous request returns' do
|
186
|
+
setup_connection do |handler|
|
187
|
+
three_queued_requests(handler)
|
188
|
+
@connection.send_request('request1').callback {|response| @response1 = response }
|
189
|
+
@connection.send_request('request2').callback {|response| @response2 = response }
|
190
|
+
@connection.send_request('request3').callback do |response|
|
191
|
+
@response1.should == 'response1'
|
192
|
+
@response2.should == 'response2'
|
193
|
+
response.should == 'response3'
|
194
|
+
EM.stop
|
195
|
+
end
|
196
|
+
end
|
197
|
+
EM.run { @connection.connect }
|
198
|
+
end
|
199
|
+
|
200
|
+
it 'should queue up requests made in the callback of a previous response' do
|
201
|
+
setup_connection do |handler|
|
202
|
+
three_queued_requests(handler)
|
203
|
+
@connection.send_request('request1').callback do |response1|
|
204
|
+
response1.should == 'response1'
|
205
|
+
@connection.send_request('request2').callback do |response2|
|
206
|
+
response2.should == 'response2'
|
207
|
+
end
|
208
|
+
@connection.send_request('request3').callback do |response2|
|
209
|
+
response2.should == 'response3'
|
210
|
+
EM.stop
|
211
|
+
end
|
212
|
+
end
|
213
|
+
end
|
214
|
+
EM.run { @connection.connect }
|
215
|
+
end
|
216
|
+
|
217
|
+
it 'should queue up requests made while protocol negotiation is in progress' do
|
218
|
+
expect_connect do |handler|
|
219
|
+
handler.should_receive(:send_data).with('pb0')
|
220
|
+
EM.next_tick do
|
221
|
+
@connection.health.should == :good
|
222
|
+
@connection.send_request('request1')
|
223
|
+
later(2)
|
224
|
+
EM.next_tick do
|
225
|
+
handler.should_receive(:send_data).with([8, 'request1'].pack('NA*')) { EM.stop }
|
226
|
+
handler.receive_data('ok')
|
227
|
+
end
|
228
|
+
end
|
229
|
+
end
|
230
|
+
EM.run { @connection.connect }
|
231
|
+
end
|
232
|
+
end
|
233
|
+
|
234
|
+
it 'should close the connection and reconnect if a request takes too long' do
|
235
|
+
setup_connection do |handler|
|
236
|
+
handler.should_receive(:send_data).with([8, 'request1'].pack('NA*')).once
|
237
|
+
@connection.send_request('request1').errback { EM.stop }
|
238
|
+
later(2) # not timed out yet after 2 seconds
|
239
|
+
@connection.health.should == :good
|
240
|
+
handler.should_receive(:close_connection) { handler.unbind }
|
241
|
+
EM.should_receive(:connect).and_return(double('handler', :in_flight => EM::DefaultDeferrable.new))
|
242
|
+
later(4) # after 6 seconds, should time out and call the errback
|
243
|
+
@connection.health.should == :bad
|
244
|
+
end
|
245
|
+
EM.run { @connection.connect }
|
246
|
+
end
|
247
|
+
|
248
|
+
it 'should close the connection when asked to shut down' do
|
249
|
+
setup_connection do |handler|
|
250
|
+
later(16) # sit idle for a while
|
251
|
+
handler.should_receive(:close_connection) { EM.next_tick { handler.unbind } }
|
252
|
+
deferrable = @connection.close
|
253
|
+
@connection.health.should == :bad
|
254
|
+
deferrable.callback { EM.stop }
|
255
|
+
end
|
256
|
+
EM.run { @connection.connect }
|
257
|
+
end
|
258
|
+
|
259
|
+
it 'should handle outstanding requests when asked to shut down' do
|
260
|
+
setup_connection do |handler|
|
261
|
+
handler.should_receive(:send_data).with([8, 'request1'].pack('NA*')).once do
|
262
|
+
EM.next_tick do
|
263
|
+
@connection.close.callback do
|
264
|
+
@response1.should == 'response1'
|
265
|
+
@error2.should be_true
|
266
|
+
@error3.should be_true
|
267
|
+
EM.stop
|
268
|
+
end
|
269
|
+
EM.next_tick do
|
270
|
+
handler.should_receive(:close_connection) { EM.next_tick { handler.unbind } }
|
271
|
+
handler.receive_data([9, 'response1'].pack('NA*'))
|
272
|
+
end
|
273
|
+
end
|
274
|
+
end
|
275
|
+
@connection.send_request('request1').callback {|response| @response1 = response }
|
276
|
+
@connection.send_request('request2').errback { @error2 = true }
|
277
|
+
@connection.send_request('request3').errback { @error3 = true }
|
278
|
+
end
|
279
|
+
EM.run { @connection.connect }
|
280
|
+
end
|
281
|
+
|
282
|
+
it 'should fail outstanding requests when the connection is closed' do
|
283
|
+
setup_connection do |handler|
|
284
|
+
handler.should_receive(:send_data).with([8, 'request1'].pack('NA*')).once do
|
285
|
+
EM.next_tick do
|
286
|
+
handler.unbind
|
287
|
+
@error1.should be_true
|
288
|
+
@error2.should be_true
|
289
|
+
EM.stop
|
290
|
+
end
|
291
|
+
end
|
292
|
+
@connection.send_request('request1').errback { @error1 = true }
|
293
|
+
@connection.send_request('request2').errback { @error2 = true }
|
294
|
+
end
|
295
|
+
EM.run { @connection.connect }
|
296
|
+
end
|
297
|
+
|
298
|
+
it 'should handle a shutdown request while in error state' do
|
299
|
+
EM.run do
|
300
|
+
EM.should_receive(:connect).once.and_raise(EventMachine::ConnectionError, 'unable to resolve server address')
|
301
|
+
@connection.send_request('foo')
|
302
|
+
EM.next_tick do
|
303
|
+
@connection.close.callback { EM.stop }
|
304
|
+
end
|
305
|
+
end
|
306
|
+
end
|
307
|
+
end
|
@@ -0,0 +1,323 @@
|
|
1
|
+
<cluster>
|
2
|
+
<name>example-voldemort-cluster</name>
|
3
|
+
<server>
|
4
|
+
<id>0</id>
|
5
|
+
<host>voldemort00.example.com</host>
|
6
|
+
<http-port>8081</http-port>
|
7
|
+
<socket-port>6666</socket-port>
|
8
|
+
<admin-port>6667</admin-port>
|
9
|
+
<partitions>14, 45, 240, 266, 271, 274, 288, 318, 342, 389, 393, 464, 492</partitions>
|
10
|
+
</server>
|
11
|
+
<server>
|
12
|
+
<id>1</id>
|
13
|
+
<host>voldemort01.example.com</host>
|
14
|
+
<http-port>8081</http-port>
|
15
|
+
<socket-port>6666</socket-port>
|
16
|
+
<admin-port>6667</admin-port>
|
17
|
+
<partitions>38, 40, 46, 88, 93, 96, 103, 152, 325, 344, 354, 445, 531</partitions>
|
18
|
+
</server>
|
19
|
+
<server>
|
20
|
+
<id>2</id>
|
21
|
+
<host>voldemort02.example.com</host>
|
22
|
+
<http-port>8081</http-port>
|
23
|
+
<socket-port>6666</socket-port>
|
24
|
+
<admin-port>6667</admin-port>
|
25
|
+
<partitions>5, 10, 98, 135, 176, 276, 305, 341, 449, 452, 473, 500, 509</partitions>
|
26
|
+
</server>
|
27
|
+
<server>
|
28
|
+
<id>3</id>
|
29
|
+
<host>voldemort03.example.com</host>
|
30
|
+
<http-port>8081</http-port>
|
31
|
+
<socket-port>6666</socket-port>
|
32
|
+
<admin-port>6667</admin-port>
|
33
|
+
<partitions>18, 43, 92, 137, 144, 224, 239, 300, 334, 381, 401, 403, 412, 457</partitions>
|
34
|
+
</server>
|
35
|
+
<server>
|
36
|
+
<id>4</id>
|
37
|
+
<host>voldemort04.example.com</host>
|
38
|
+
<http-port>8081</http-port>
|
39
|
+
<socket-port>6666</socket-port>
|
40
|
+
<admin-port>6667</admin-port>
|
41
|
+
<partitions>132, 219, 222, 299, 324, 374, 397, 409, 413, 421, 424, 442, 472, 501</partitions>
|
42
|
+
</server>
|
43
|
+
<server>
|
44
|
+
<id>5</id>
|
45
|
+
<host>voldemort05.example.com</host>
|
46
|
+
<http-port>8081</http-port>
|
47
|
+
<socket-port>6666</socket-port>
|
48
|
+
<admin-port>6667</admin-port>
|
49
|
+
<partitions>47, 64, 158, 167, 226, 283, 315, 348, 350, 361, 366, 384, 430, 529</partitions>
|
50
|
+
</server>
|
51
|
+
<server>
|
52
|
+
<id>6</id>
|
53
|
+
<host>voldemort06.example.com</host>
|
54
|
+
<http-port>8081</http-port>
|
55
|
+
<socket-port>6666</socket-port>
|
56
|
+
<admin-port>6667</admin-port>
|
57
|
+
<partitions>26, 117, 136, 194, 212, 225, 360, 407, 454, 475, 477, 479, 491, 530</partitions>
|
58
|
+
</server>
|
59
|
+
<server>
|
60
|
+
<id>7</id>
|
61
|
+
<host>voldemort07.example.com</host>
|
62
|
+
<http-port>8081</http-port>
|
63
|
+
<socket-port>6666</socket-port>
|
64
|
+
<admin-port>6667</admin-port>
|
65
|
+
<partitions>73, 79, 95, 123, 129, 133, 142, 155, 187, 197, 205, 206, 471, 485</partitions>
|
66
|
+
</server>
|
67
|
+
<server>
|
68
|
+
<id>8</id>
|
69
|
+
<host>voldemort08.example.com</host>
|
70
|
+
<http-port>8081</http-port>
|
71
|
+
<socket-port>6666</socket-port>
|
72
|
+
<admin-port>6667</admin-port>
|
73
|
+
<partitions>33, 66, 68, 80, 81, 86, 89, 102, 111, 193, 232, 298, 369, 488</partitions>
|
74
|
+
</server>
|
75
|
+
<server>
|
76
|
+
<id>9</id>
|
77
|
+
<host>voldemort09.example.com</host>
|
78
|
+
<http-port>8081</http-port>
|
79
|
+
<socket-port>6666</socket-port>
|
80
|
+
<admin-port>6667</admin-port>
|
81
|
+
<partitions>159, 166, 209, 249, 273, 286, 308, 337, 353, 376, 410, 426, 495, 496</partitions>
|
82
|
+
</server>
|
83
|
+
<server>
|
84
|
+
<id>10</id>
|
85
|
+
<host>voldemort10.example.com</host>
|
86
|
+
<http-port>8081</http-port>
|
87
|
+
<socket-port>6666</socket-port>
|
88
|
+
<admin-port>6667</admin-port>
|
89
|
+
<partitions>31, 125, 154, 174, 191, 221, 303, 309, 329, 394, 448, 498, 505, 522</partitions>
|
90
|
+
</server>
|
91
|
+
<server>
|
92
|
+
<id>11</id>
|
93
|
+
<host>voldemort11.example.com</host>
|
94
|
+
<http-port>8081</http-port>
|
95
|
+
<socket-port>6666</socket-port>
|
96
|
+
<admin-port>6667</admin-port>
|
97
|
+
<partitions>23, 30, 59, 130, 289, 357, 358, 367, 446, 456, 466, 493, 533, 535</partitions>
|
98
|
+
</server>
|
99
|
+
<server>
|
100
|
+
<id>12</id>
|
101
|
+
<host>voldemort12.example.com</host>
|
102
|
+
<http-port>8081</http-port>
|
103
|
+
<socket-port>6666</socket-port>
|
104
|
+
<admin-port>6667</admin-port>
|
105
|
+
<partitions>2, 50, 53, 138, 153, 215, 257, 262, 295, 349, 371, 386, 428, 502</partitions>
|
106
|
+
</server>
|
107
|
+
<server>
|
108
|
+
<id>13</id>
|
109
|
+
<host>voldemort13.example.com</host>
|
110
|
+
<http-port>8081</http-port>
|
111
|
+
<socket-port>6666</socket-port>
|
112
|
+
<admin-port>6667</admin-port>
|
113
|
+
<partitions>71, 107, 146, 265, 277, 306, 326, 400, 463, 483, 494, 515, 518, 536</partitions>
|
114
|
+
</server>
|
115
|
+
<server>
|
116
|
+
<id>14</id>
|
117
|
+
<host>voldemort14.example.com</host>
|
118
|
+
<http-port>8081</http-port>
|
119
|
+
<socket-port>6666</socket-port>
|
120
|
+
<admin-port>6667</admin-port>
|
121
|
+
<partitions>20, 24, 97, 179, 241, 287, 362, 364, 431, 470, 476, 484, 489, 538</partitions>
|
122
|
+
</server>
|
123
|
+
<server>
|
124
|
+
<id>15</id>
|
125
|
+
<host>voldemort15.example.com</host>
|
126
|
+
<http-port>8081</http-port>
|
127
|
+
<socket-port>6666</socket-port>
|
128
|
+
<admin-port>6667</admin-port>
|
129
|
+
<partitions>94, 109, 116, 208, 227, 255, 280, 291, 351, 420, 439, 450, 510, 539</partitions>
|
130
|
+
</server>
|
131
|
+
<server>
|
132
|
+
<id>16</id>
|
133
|
+
<host>voldemort16.example.com</host>
|
134
|
+
<http-port>8081</http-port>
|
135
|
+
<socket-port>6666</socket-port>
|
136
|
+
<admin-port>6667</admin-port>
|
137
|
+
<partitions>1, 4, 76, 242, 246, 250, 258, 297, 373, 392, 429, 467, 482, 521</partitions>
|
138
|
+
</server>
|
139
|
+
<server>
|
140
|
+
<id>17</id>
|
141
|
+
<host>voldemort17.example.com</host>
|
142
|
+
<http-port>8081</http-port>
|
143
|
+
<socket-port>6666</socket-port>
|
144
|
+
<admin-port>6667</admin-port>
|
145
|
+
<partitions>29, 32, 57, 106, 149, 164, 199, 216, 263, 379, 411, 481, 519, 537</partitions>
|
146
|
+
</server>
|
147
|
+
<server>
|
148
|
+
<id>18</id>
|
149
|
+
<host>voldemort18.example.com</host>
|
150
|
+
<http-port>8081</http-port>
|
151
|
+
<socket-port>6666</socket-port>
|
152
|
+
<admin-port>6667</admin-port>
|
153
|
+
<partitions>19, 22, 56, 100, 128, 156, 217, 245, 292, 370, 396, 415, 427, 527</partitions>
|
154
|
+
</server>
|
155
|
+
<server>
|
156
|
+
<id>19</id>
|
157
|
+
<host>voldemort19.example.com</host>
|
158
|
+
<http-port>8081</http-port>
|
159
|
+
<socket-port>6666</socket-port>
|
160
|
+
<admin-port>6667</admin-port>
|
161
|
+
<partitions>21, 41, 62, 134, 186, 314, 333, 347, 372, 433, 443, 458, 513, 520</partitions>
|
162
|
+
</server>
|
163
|
+
<server>
|
164
|
+
<id>20</id>
|
165
|
+
<host>voldemort20.example.com</host>
|
166
|
+
<http-port>8081</http-port>
|
167
|
+
<socket-port>6666</socket-port>
|
168
|
+
<admin-port>6667</admin-port>
|
169
|
+
<partitions>82, 143, 171, 177, 188, 231, 247, 251, 296, 368, 380, 416, 419, 506</partitions>
|
170
|
+
</server>
|
171
|
+
<server>
|
172
|
+
<id>21</id>
|
173
|
+
<host>voldemort21.example.com</host>
|
174
|
+
<http-port>8081</http-port>
|
175
|
+
<socket-port>6666</socket-port>
|
176
|
+
<admin-port>6667</admin-port>
|
177
|
+
<partitions>16, 99, 112, 118, 120, 157, 168, 192, 204, 244, 440, 490, 499, 512</partitions>
|
178
|
+
</server>
|
179
|
+
<server>
|
180
|
+
<id>22</id>
|
181
|
+
<host>voldemort22.example.com</host>
|
182
|
+
<http-port>8081</http-port>
|
183
|
+
<socket-port>6666</socket-port>
|
184
|
+
<admin-port>6667</admin-port>
|
185
|
+
<partitions>17, 101, 127, 182, 189, 198, 234, 278, 313, 319, 432, 434, 441, 534</partitions>
|
186
|
+
</server>
|
187
|
+
<server>
|
188
|
+
<id>23</id>
|
189
|
+
<host>voldemort23.example.com</host>
|
190
|
+
<http-port>8081</http-port>
|
191
|
+
<socket-port>6666</socket-port>
|
192
|
+
<admin-port>6667</admin-port>
|
193
|
+
<partitions>52, 55, 63, 65, 69, 104, 126, 161, 321, 352, 461, 465, 526</partitions>
|
194
|
+
</server>
|
195
|
+
<server>
|
196
|
+
<id>24</id>
|
197
|
+
<host>voldemort24.example.com</host>
|
198
|
+
<http-port>8081</http-port>
|
199
|
+
<socket-port>6666</socket-port>
|
200
|
+
<admin-port>6667</admin-port>
|
201
|
+
<partitions>48, 121, 148, 207, 210, 229, 248, 302, 408, 414, 478, 497, 523</partitions>
|
202
|
+
</server>
|
203
|
+
<server>
|
204
|
+
<id>25</id>
|
205
|
+
<host>voldemort25.example.com</host>
|
206
|
+
<http-port>8081</http-port>
|
207
|
+
<socket-port>6666</socket-port>
|
208
|
+
<admin-port>6667</admin-port>
|
209
|
+
<partitions>12, 77, 108, 122, 150, 190, 202, 214, 293, 304, 330, 343, 525</partitions>
|
210
|
+
</server>
|
211
|
+
<server>
|
212
|
+
<id>26</id>
|
213
|
+
<host>voldemort26.example.com</host>
|
214
|
+
<http-port>8081</http-port>
|
215
|
+
<socket-port>6666</socket-port>
|
216
|
+
<admin-port>6667</admin-port>
|
217
|
+
<partitions>61, 165, 172, 180, 195, 233, 252, 259, 267, 282, 346, 404, 438</partitions>
|
218
|
+
</server>
|
219
|
+
<server>
|
220
|
+
<id>27</id>
|
221
|
+
<host>voldemort27.example.com</host>
|
222
|
+
<http-port>8081</http-port>
|
223
|
+
<socket-port>6666</socket-port>
|
224
|
+
<admin-port>6667</admin-port>
|
225
|
+
<partitions>75, 90, 114, 139, 162, 163, 223, 310, 336, 355, 398, 437, 511</partitions>
|
226
|
+
</server>
|
227
|
+
<server>
|
228
|
+
<id>28</id>
|
229
|
+
<host>voldemort28.example.com</host>
|
230
|
+
<http-port>8081</http-port>
|
231
|
+
<socket-port>6666</socket-port>
|
232
|
+
<admin-port>6667</admin-port>
|
233
|
+
<partitions>6, 7, 36, 39, 105, 254, 365, 423, 451, 468, 486, 507, 524</partitions>
|
234
|
+
</server>
|
235
|
+
<server>
|
236
|
+
<id>29</id>
|
237
|
+
<host>voldemort29.example.com</host>
|
238
|
+
<http-port>8081</http-port>
|
239
|
+
<socket-port>6666</socket-port>
|
240
|
+
<admin-port>6667</admin-port>
|
241
|
+
<partitions>3, 49, 72, 84, 85, 181, 213, 236, 281, 311, 382, 388, 405</partitions>
|
242
|
+
</server>
|
243
|
+
<server>
|
244
|
+
<id>30</id>
|
245
|
+
<host>voldemort30.example.com</host>
|
246
|
+
<http-port>8081</http-port>
|
247
|
+
<socket-port>6666</socket-port>
|
248
|
+
<admin-port>6667</admin-port>
|
249
|
+
<partitions>27, 37, 78, 185, 196, 201, 238, 269, 294, 316, 335, 377, 418</partitions>
|
250
|
+
</server>
|
251
|
+
<server>
|
252
|
+
<id>31</id>
|
253
|
+
<host>voldemort31.example.com</host>
|
254
|
+
<http-port>8081</http-port>
|
255
|
+
<socket-port>6666</socket-port>
|
256
|
+
<admin-port>6667</admin-port>
|
257
|
+
<partitions>0, 11, 113, 119, 151, 183, 284, 345, 383, 399, 474, 487, 514</partitions>
|
258
|
+
</server>
|
259
|
+
<server>
|
260
|
+
<id>32</id>
|
261
|
+
<host>voldemort32.example.com</host>
|
262
|
+
<http-port>8081</http-port>
|
263
|
+
<socket-port>6666</socket-port>
|
264
|
+
<admin-port>6667</admin-port>
|
265
|
+
<partitions>9, 54, 140, 211, 230, 301, 323, 327, 331, 359, 385, 453, 503</partitions>
|
266
|
+
</server>
|
267
|
+
<server>
|
268
|
+
<id>33</id>
|
269
|
+
<host>voldemort33.example.com</host>
|
270
|
+
<http-port>8081</http-port>
|
271
|
+
<socket-port>6666</socket-port>
|
272
|
+
<admin-port>6667</admin-port>
|
273
|
+
<partitions>124, 175, 184, 235, 237, 264, 307, 322, 332, 339, 340, 435, 469</partitions>
|
274
|
+
</server>
|
275
|
+
<server>
|
276
|
+
<id>34</id>
|
277
|
+
<host>voldemort34.example.com</host>
|
278
|
+
<http-port>8081</http-port>
|
279
|
+
<socket-port>6666</socket-port>
|
280
|
+
<admin-port>6667</admin-port>
|
281
|
+
<partitions>91, 170, 173, 178, 268, 285, 328, 338, 378, 387, 390, 444, 480</partitions>
|
282
|
+
</server>
|
283
|
+
<server>
|
284
|
+
<id>35</id>
|
285
|
+
<host>voldemort35.example.com</host>
|
286
|
+
<http-port>8081</http-port>
|
287
|
+
<socket-port>6666</socket-port>
|
288
|
+
<admin-port>6667</admin-port>
|
289
|
+
<partitions>13, 15, 44, 141, 220, 228, 275, 320, 356, 436, 460, 462, 517</partitions>
|
290
|
+
</server>
|
291
|
+
<server>
|
292
|
+
<id>36</id>
|
293
|
+
<host>voldemort36.example.com</host>
|
294
|
+
<http-port>8081</http-port>
|
295
|
+
<socket-port>6666</socket-port>
|
296
|
+
<admin-port>6667</admin-port>
|
297
|
+
<partitions>25, 35, 70, 74, 253, 261, 270, 425, 447, 459, 504, 508, 516</partitions>
|
298
|
+
</server>
|
299
|
+
<server>
|
300
|
+
<id>37</id>
|
301
|
+
<host>voldemort37.example.com</host>
|
302
|
+
<http-port>8081</http-port>
|
303
|
+
<socket-port>6666</socket-port>
|
304
|
+
<admin-port>6667</admin-port>
|
305
|
+
<partitions>60, 67, 83, 131, 145, 147, 243, 260, 290, 375, 395, 417, 528</partitions>
|
306
|
+
</server>
|
307
|
+
<server>
|
308
|
+
<id>38</id>
|
309
|
+
<host>voldemort38.example.com</host>
|
310
|
+
<http-port>8081</http-port>
|
311
|
+
<socket-port>6666</socket-port>
|
312
|
+
<admin-port>6667</admin-port>
|
313
|
+
<partitions>42, 58, 115, 169, 200, 203, 256, 279, 312, 317, 391, 422, 455</partitions>
|
314
|
+
</server>
|
315
|
+
<server>
|
316
|
+
<id>39</id>
|
317
|
+
<host>voldemort39.example.com</host>
|
318
|
+
<http-port>8081</http-port>
|
319
|
+
<socket-port>6666</socket-port>
|
320
|
+
<admin-port>6667</admin-port>
|
321
|
+
<partitions>8, 28, 34, 51, 87, 110, 160, 218, 272, 363, 402, 406, 532</partitions>
|
322
|
+
</server>
|
323
|
+
</cluster>
|