gizzmo 0.11.0 → 0.11.1
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/Rakefile +11 -16
- data/VERSION +1 -1
- data/bin/setup_shards +173 -0
- data/lib/gizzard.rb +4 -0
- data/lib/gizzard/commands.rb +286 -152
- data/lib/gizzard/migrator.rb +192 -0
- data/lib/gizzard/nameserver.rb +206 -0
- data/lib/gizzard/shard_template.rb +252 -0
- data/lib/gizzard/thrift.rb +187 -135
- data/lib/gizzard/transformation.rb +230 -0
- data/lib/gizzard/transformation_op.rb +181 -0
- data/lib/gizzard/transformation_scheduler.rb +220 -0
- data/lib/gizzmo.rb +87 -20
- data/test/gizzmo_spec.rb +499 -0
- data/test/nameserver_spec.rb +139 -0
- data/test/scheduler_spec.rb +59 -0
- data/test/shard_template_spec.rb +103 -0
- data/test/spec.opts +7 -0
- data/test/spec_helper.rb +139 -0
- data/test/test_server/.gitignore +13 -0
- data/test/test_server/project/build.properties +8 -0
- data/test/test_server/project/build/Project.scala +13 -0
- data/test/test_server/project/plugins/Plugins.scala +6 -0
- data/test/test_server/src/main/scala/Main.scala +18 -0
- data/test/test_server/src/main/scala/TestServer.scala +247 -0
- data/test/test_server/src/main/thrift/TestServer.thrift +12 -0
- data/test/transformation_spec.rb +181 -0
- metadata +32 -5
- data/gizzmo.gemspec +0 -75
data/test/gizzmo_spec.rb
ADDED
@@ -0,0 +1,499 @@
|
|
1
|
+
require File.expand_path('../spec_helper.rb', __FILE__)
|
2
|
+
|
3
|
+
describe "gizzmo (cli)" do
|
4
|
+
def gizzmo(cmd)
|
5
|
+
`cd #{ROOT_DIR} && ruby -rubygems -Ilib bin/gizzmo -H localhost -P #{MANAGER_PORT} #{cmd} 2>&1`
|
6
|
+
end
|
7
|
+
|
8
|
+
def nameserver
|
9
|
+
@nameserver ||= read_nameserver_db
|
10
|
+
end
|
11
|
+
|
12
|
+
before do
|
13
|
+
reset_nameserver
|
14
|
+
@nameserver = nil
|
15
|
+
end
|
16
|
+
|
17
|
+
describe "basic manipulation commands" do
|
18
|
+
describe "create" do
|
19
|
+
it "creates a single shard" do
|
20
|
+
gizzmo "create TestShard localhost/t0_0"
|
21
|
+
|
22
|
+
nameserver[:shards].should == [info("localhost", "t0_0", "TestShard")]
|
23
|
+
end
|
24
|
+
|
25
|
+
it "creates multiple shards" do
|
26
|
+
gizzmo "create TestShard localhost/t0_0 localhost/t0_1"
|
27
|
+
|
28
|
+
nameserver[:shards].should == [info("localhost", "t0_0", "TestShard"),
|
29
|
+
info("localhost", "t0_1", "TestShard")]
|
30
|
+
end
|
31
|
+
|
32
|
+
it "honors source and destination types" do
|
33
|
+
gizzmo "create TestShard -s int -d long localhost/t0_0"
|
34
|
+
gizzmo "create TestShard --source-type=int --destination-type=long localhost/t0_1"
|
35
|
+
|
36
|
+
nameserver[:shards].should == [info("localhost", "t0_0", "TestShard", "int", "long"),
|
37
|
+
info("localhost", "t0_1", "TestShard", "int", "long")]
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
describe "delete" do
|
42
|
+
it "deletes a shard" do
|
43
|
+
gizzmo "create TestShard localhost/t0_0"
|
44
|
+
gizzmo "delete localhost/t0_0"
|
45
|
+
|
46
|
+
nameserver[:shards].should == []
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
describe "wrap/unwrap" do
|
51
|
+
before do
|
52
|
+
gizzmo "create TestShard localhost/t0_0"
|
53
|
+
gizzmo "create ReplicatingShard localhost/t0_0_replicating"
|
54
|
+
gizzmo "addlink localhost/t0_0_replicating localhost/t0_0 1"
|
55
|
+
|
56
|
+
gizzmo "wrap BlockedShard localhost/t0_0"
|
57
|
+
end
|
58
|
+
|
59
|
+
it "wrap wraps a shard" do
|
60
|
+
nameserver[:shards].should == [info("localhost", "t0_0", "TestShard"),
|
61
|
+
info("localhost", "t0_0_blocked", "BlockedShard"),
|
62
|
+
info("localhost", "t0_0_replicating", "ReplicatingShard")]
|
63
|
+
|
64
|
+
nameserver[:links].should == [link(id("localhost", "t0_0_blocked"), id("localhost", "t0_0"), 1),
|
65
|
+
link(id("localhost", "t0_0_replicating"), id("localhost", "t0_0_blocked"), 1)]
|
66
|
+
end
|
67
|
+
|
68
|
+
it "unwrap unwraps a shard" do
|
69
|
+
gizzmo "unwrap localhost/t0_0_blocked"
|
70
|
+
|
71
|
+
nameserver[:shards].should == [info("localhost", "t0_0", "TestShard"),
|
72
|
+
info("localhost", "t0_0_replicating", "ReplicatingShard")]
|
73
|
+
|
74
|
+
nameserver[:links].should == [link(id("localhost", "t0_0_replicating"), id("localhost", "t0_0"), 1)]
|
75
|
+
end
|
76
|
+
|
77
|
+
it "unwrap doesn't unwrap a top level shard or a leaf" do
|
78
|
+
gizzmo "unwrap localhost/t0_0"
|
79
|
+
gizzmo "unwrap localhost/t0_0_replicating"
|
80
|
+
|
81
|
+
nameserver[:shards].should == [info("localhost", "t0_0", "TestShard"),
|
82
|
+
info("localhost", "t0_0_blocked", "BlockedShard"),
|
83
|
+
info("localhost", "t0_0_replicating", "ReplicatingShard")]
|
84
|
+
|
85
|
+
nameserver[:links].should == [link(id("localhost", "t0_0_blocked"), id("localhost", "t0_0"), 1),
|
86
|
+
link(id("localhost", "t0_0_replicating"), id("localhost", "t0_0_blocked"), 1)]
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
describe "markbusy" do
|
91
|
+
it "marks shards busy" do
|
92
|
+
gizzmo "create TestShard localhost/t0_0"
|
93
|
+
gizzmo "markbusy localhost/t0_0"
|
94
|
+
|
95
|
+
nameserver[:shards].should == [info("localhost", "t0_0", "TestShard", "", "", 1)]
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
describe "markunbusy" do
|
100
|
+
it "marks shards as not busy" do
|
101
|
+
gizzmo "create TestShard localhost/t0_0"
|
102
|
+
gizzmo "markbusy localhost/t0_0"
|
103
|
+
gizzmo "markunbusy localhost/t0_0"
|
104
|
+
|
105
|
+
nameserver[:shards].should == [info("localhost", "t0_0", "TestShard", "", "", 0)]
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
describe "addforwarding" do
|
110
|
+
it "adds a forwarding" do
|
111
|
+
gizzmo "create TestShard localhost/t0_0"
|
112
|
+
gizzmo "addforwarding 0 0 localhost/t0_0"
|
113
|
+
|
114
|
+
nameserver[:shards].should == [info("localhost", "t0_0", "TestShard")]
|
115
|
+
nameserver[:forwardings].should == [forwarding(0, 0, id("localhost", "t0_0"))]
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
describe "deleteforwarding" do
|
120
|
+
it "removes a forwarding" do
|
121
|
+
gizzmo "create TestShard localhost/t0_0"
|
122
|
+
gizzmo "addforwarding 0 0 localhost/t0_0"
|
123
|
+
gizzmo "deleteforwarding 0 0 localhost/t0_0"
|
124
|
+
|
125
|
+
nameserver[:shards].should == [info("localhost", "t0_0", "TestShard")]
|
126
|
+
nameserver[:forwardings].should == []
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
describe "addlink" do
|
131
|
+
it "links two shards" do
|
132
|
+
gizzmo "create TestShard localhost/t0_0"
|
133
|
+
gizzmo "create ReplicatingShard localhost/t0_0_replicating"
|
134
|
+
gizzmo "addlink localhost/t0_0_replicating localhost/t0_0 1"
|
135
|
+
|
136
|
+
nameserver[:shards].should == [info("localhost", "t0_0", "TestShard"),
|
137
|
+
info("localhost", "t0_0_replicating", "ReplicatingShard")]
|
138
|
+
|
139
|
+
nameserver[:links].should == [link(id("localhost", "t0_0_replicating"), id("localhost", "t0_0"), 1)]
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
describe "unlink" do
|
144
|
+
it "unlinks two shards" do
|
145
|
+
gizzmo "create TestShard localhost/t0_0"
|
146
|
+
gizzmo "create ReplicatingShard localhost/t0_0_replicating"
|
147
|
+
gizzmo "addlink localhost/t0_0_replicating localhost/t0_0 1"
|
148
|
+
gizzmo "unlink localhost/t0_0_replicating localhost/t0_0"
|
149
|
+
|
150
|
+
nameserver[:shards].should == [info("localhost", "t0_0", "TestShard"),
|
151
|
+
info("localhost", "t0_0_replicating", "ReplicatingShard")]
|
152
|
+
|
153
|
+
nameserver[:links].should == []
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
|
158
|
+
describe "add-host" do
|
159
|
+
it "creates single and multiple hosts" do
|
160
|
+
gizzmo "add-host c1:c1host1:7777"
|
161
|
+
gizzmo "add-host c2:c2host1:7777 c2:c2host2:7777"
|
162
|
+
|
163
|
+
nameserver[:hosts].should == [ host("c1host1", 7777, "c1"),
|
164
|
+
host("c2host1", 7777, "c2"),
|
165
|
+
host("c2host2", 7777, "c2") ]
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
describe "remove-host" do
|
170
|
+
it "creates single and multiple hosts" do
|
171
|
+
gizzmo "add-host c1:c1host1:7777"
|
172
|
+
gizzmo "remove-host c1:c1host1:7777"
|
173
|
+
|
174
|
+
nameserver[:hosts].should == []
|
175
|
+
end
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
describe "basic read methods" do
|
180
|
+
before do
|
181
|
+
3.times do |i|
|
182
|
+
gizzmo "create TestShard -s Int -d Int localhost/t0_#{i}_a 127.0.0.1/t0_#{i}_b"
|
183
|
+
gizzmo "create ReplicatingShard localhost/t0_#{i}_replicating"
|
184
|
+
gizzmo "addlink localhost/t0_#{i}_replicating localhost/t0_#{i}_a 1"
|
185
|
+
gizzmo "addlink localhost/t0_#{i}_replicating 127.0.0.1/t0_#{i}_b 1"
|
186
|
+
gizzmo "addforwarding 0 #{i} localhost/t0_#{i}_replicating"
|
187
|
+
end
|
188
|
+
end
|
189
|
+
|
190
|
+
describe "subtree" do
|
191
|
+
it "prints the tree for a shard" do
|
192
|
+
results = "localhost/t0_0_replicating\n 127.0.0.1/t0_0_b\n localhost/t0_0_a\n"
|
193
|
+
gizzmo("subtree localhost/t0_0_replicating").should == results
|
194
|
+
gizzmo("subtree localhost/t0_0_a").should == results
|
195
|
+
gizzmo("subtree 127.0.0.1/t0_0_b").should == results
|
196
|
+
end
|
197
|
+
end
|
198
|
+
|
199
|
+
describe "hosts" do
|
200
|
+
it "prints a list of unique hosts" do
|
201
|
+
gizzmo("hosts").should == "127.0.0.1\nlocalhost\n"
|
202
|
+
end
|
203
|
+
end
|
204
|
+
|
205
|
+
describe "forwardings" do
|
206
|
+
it "lists forwardings and the root of the corresponding shard trees" do
|
207
|
+
gizzmo("forwardings").should == <<-EOF
|
208
|
+
0\t0\tlocalhost/t0_0_replicating
|
209
|
+
0\t1\tlocalhost/t0_1_replicating
|
210
|
+
0\t2\tlocalhost/t0_2_replicating
|
211
|
+
EOF
|
212
|
+
end
|
213
|
+
end
|
214
|
+
|
215
|
+
describe "links" do
|
216
|
+
it "lists links associated withe the given shards" do
|
217
|
+
gizzmo("links localhost/t0_0_a localhost/t0_1_a").should == <<-EOF
|
218
|
+
localhost/t0_0_replicating\tlocalhost/t0_0_a\t1
|
219
|
+
localhost/t0_1_replicating\tlocalhost/t0_1_a\t1
|
220
|
+
EOF
|
221
|
+
end
|
222
|
+
end
|
223
|
+
|
224
|
+
describe "info" do
|
225
|
+
it "outputs shard info for the given shard ids" do
|
226
|
+
gizzmo("info localhost/t0_0_a 127.0.0.1/t0_1_b localhost/t0_2_replicating").should == <<-EOF
|
227
|
+
localhost/t0_0_a\tTestShard\tok
|
228
|
+
127.0.0.1/t0_1_b\tTestShard\tok
|
229
|
+
localhost/t0_2_replicating\tReplicatingShard\tok
|
230
|
+
EOF
|
231
|
+
end
|
232
|
+
end
|
233
|
+
|
234
|
+
describe "busy" do
|
235
|
+
it "lists all busy shards" do
|
236
|
+
gizzmo "markbusy localhost/t0_0_a localhost/t0_1_a localhost/t0_2_a"
|
237
|
+
|
238
|
+
gizzmo("busy").should == <<-EOF
|
239
|
+
localhost/t0_0_a\tTestShard\tbusy
|
240
|
+
localhost/t0_1_a\tTestShard\tbusy
|
241
|
+
localhost/t0_2_a\tTestShard\tbusy
|
242
|
+
EOF
|
243
|
+
end
|
244
|
+
end
|
245
|
+
|
246
|
+
describe "list-hosts" do
|
247
|
+
it "returns a list of all hosts and their status" do
|
248
|
+
gizzmo("add-host c1:c1host1:7777 c2:c2host1:7777 c2:c2host2:7777")
|
249
|
+
|
250
|
+
gizzmo("list-hosts").should == <<-EOF
|
251
|
+
c1:c1host1:7777 0
|
252
|
+
c2:c2host1:7777 0
|
253
|
+
c2:c2host2:7777 0
|
254
|
+
EOF
|
255
|
+
end
|
256
|
+
end
|
257
|
+
|
258
|
+
describe "topology" do
|
259
|
+
it "lists counts for each template" do
|
260
|
+
gizzmo("-T 0 topology").should == <<-EOF
|
261
|
+
3 ReplicatingShard(1) -> (TestShard(localhost,1,Int,Int), TestShard(127.0.0.1,1,Int,Int))
|
262
|
+
EOF
|
263
|
+
end
|
264
|
+
|
265
|
+
it "shows the template for each forwarding" do
|
266
|
+
gizzmo("-T 0 topology --forwardings").should == <<-EOF
|
267
|
+
0 ReplicatingShard(1) -> (TestShard(localhost,1,Int,Int), TestShard(127.0.0.1,1,Int,Int))
|
268
|
+
1 ReplicatingShard(1) -> (TestShard(localhost,1,Int,Int), TestShard(127.0.0.1,1,Int,Int))
|
269
|
+
2 ReplicatingShard(1) -> (TestShard(localhost,1,Int,Int), TestShard(127.0.0.1,1,Int,Int))
|
270
|
+
EOF
|
271
|
+
end
|
272
|
+
end
|
273
|
+
end
|
274
|
+
|
275
|
+
describe "find" do
|
276
|
+
it "works"
|
277
|
+
end
|
278
|
+
|
279
|
+
describe "rebalance" do
|
280
|
+
it "works"
|
281
|
+
end
|
282
|
+
|
283
|
+
describe "repair" do
|
284
|
+
it "works"
|
285
|
+
end
|
286
|
+
|
287
|
+
describe "reload" do
|
288
|
+
it "works"
|
289
|
+
end
|
290
|
+
|
291
|
+
describe "drill" do
|
292
|
+
it "works"
|
293
|
+
end
|
294
|
+
|
295
|
+
describe "pair" do
|
296
|
+
it "works"
|
297
|
+
end
|
298
|
+
|
299
|
+
describe "report" do
|
300
|
+
it "works"
|
301
|
+
end
|
302
|
+
|
303
|
+
describe "lookup" do
|
304
|
+
it "works"
|
305
|
+
end
|
306
|
+
|
307
|
+
describe "copy" do
|
308
|
+
it "works"
|
309
|
+
end
|
310
|
+
|
311
|
+
describe "setup-migrate" do
|
312
|
+
it "works"
|
313
|
+
end
|
314
|
+
|
315
|
+
describe "finish-migrate" do
|
316
|
+
it "works"
|
317
|
+
end
|
318
|
+
|
319
|
+
describe "inject" do
|
320
|
+
it "works"
|
321
|
+
end
|
322
|
+
|
323
|
+
describe "flush" do
|
324
|
+
it "works"
|
325
|
+
end
|
326
|
+
|
327
|
+
describe "transform-tree" do
|
328
|
+
it "works" do
|
329
|
+
gizzmo "create -s Int -d Int TestShard localhost/s_0_001_a"
|
330
|
+
#gizzmo "create TestShard 127.0.0.1/s_0_001_b"
|
331
|
+
gizzmo "create ReplicatingShard localhost/s_0_001_replicating"
|
332
|
+
gizzmo "addlink localhost/s_0_001_replicating localhost/s_0_001_a 1"
|
333
|
+
#gizzmo "addlink localhost/s_0_001_replicating 127.0.0.1/s_0_001_b 1"
|
334
|
+
gizzmo "addforwarding 0 1 localhost/s_0_001_replicating"
|
335
|
+
gizzmo "-f reload"
|
336
|
+
|
337
|
+
gizzmo('-f transform-tree --no-progress --poll-interval=1 "ReplicatingShard(1) -> (TestShard(localhost,1,Int,Int), TestShard(127.0.0.1))" localhost/s_0_001_replicating').should == <<-EOF
|
338
|
+
ReplicatingShard(1) -> TestShard(localhost,1,Int,Int) => ReplicatingShard(1) -> (TestShard(localhost,1,Int,Int), TestShard(127.0.0.1,1)) :
|
339
|
+
PREPARE
|
340
|
+
create_shard(TestShard/127.0.0.1)
|
341
|
+
create_shard(WriteOnlyShard)
|
342
|
+
add_link(WriteOnlyShard -> TestShard/127.0.0.1)
|
343
|
+
add_link(ReplicatingShard -> WriteOnlyShard)
|
344
|
+
COPY
|
345
|
+
copy_shard(TestShard/127.0.0.1)
|
346
|
+
CLEANUP
|
347
|
+
add_link(ReplicatingShard -> TestShard/127.0.0.1)
|
348
|
+
remove_link(WriteOnlyShard -> TestShard/127.0.0.1)
|
349
|
+
remove_link(ReplicatingShard -> WriteOnlyShard)
|
350
|
+
delete_shard(WriteOnlyShard)
|
351
|
+
|
352
|
+
STARTING:
|
353
|
+
[0] 1 = localhost/s_0_001_replicating: ReplicatingShard(1) -> TestShard(localhost,1,Int,Int) => ReplicatingShard(1) -> (TestShard(localhost,1,Int,Int), TestShard(127.0.0.1,1))
|
354
|
+
COPIES:
|
355
|
+
localhost/s_0_001_a -> 127.0.0.1/s_0_0001
|
356
|
+
FINISHING:
|
357
|
+
[0] 1 = localhost/s_0_001_replicating: ReplicatingShard(1) -> TestShard(localhost,1,Int,Int) => ReplicatingShard(1) -> (TestShard(localhost,1,Int,Int), TestShard(127.0.0.1,1))
|
358
|
+
1 transformation applied. Total time elapsed: 1 second
|
359
|
+
EOF
|
360
|
+
|
361
|
+
nameserver[:shards].should == [ info("127.0.0.1", "s_0_0001", "TestShard"),
|
362
|
+
info("localhost", "s_0_001_a", "TestShard", "Int", "Int"),
|
363
|
+
info("localhost", "s_0_001_replicating", "ReplicatingShard") ]
|
364
|
+
|
365
|
+
nameserver[:links].should == [ link(id("localhost", "s_0_001_replicating"), id("127.0.0.1", "s_0_0001"), 1),
|
366
|
+
link(id("localhost", "s_0_001_replicating"), id("localhost", "s_0_001_a"), 1) ]
|
367
|
+
end
|
368
|
+
end
|
369
|
+
|
370
|
+
describe "transform" do
|
371
|
+
it "works" do
|
372
|
+
1.upto(2) do |i|
|
373
|
+
gizzmo "create TestShard -s Int -d Int localhost/s_0_00#{i}_a"
|
374
|
+
#gizzmo "create TestShard -s Int -d Int 127.0.0.1/s_0_000#{i}_b"
|
375
|
+
gizzmo "create ReplicatingShard localhost/s_0_00#{i}_replicating"
|
376
|
+
gizzmo "addlink localhost/s_0_00#{i}_replicating localhost/s_0_00#{i}_a 1"
|
377
|
+
#gizzmo "addlink localhost/s_0_00#{i}_replicating 127.0.0.1/s_0_000#{i}_b 1"
|
378
|
+
gizzmo "addforwarding 0 #{i} localhost/s_0_00#{i}_replicating"
|
379
|
+
end
|
380
|
+
gizzmo "-f reload"
|
381
|
+
|
382
|
+
gizzmo('-f -T0 transform --no-progress --poll-interval=1 "ReplicatingShard -> TestShard(localhost,1,Int,Int)" "ReplicatingShard -> (TestShard(localhost,1,Int,Int), TestShard(127.0.0.1))"').should == <<-EOF
|
383
|
+
ReplicatingShard(1) -> TestShard(localhost,1,Int,Int) => ReplicatingShard(1) -> (TestShard(localhost,1,Int,Int), TestShard(127.0.0.1,1)) :
|
384
|
+
PREPARE
|
385
|
+
create_shard(TestShard/127.0.0.1)
|
386
|
+
create_shard(WriteOnlyShard)
|
387
|
+
add_link(WriteOnlyShard -> TestShard/127.0.0.1)
|
388
|
+
add_link(ReplicatingShard -> WriteOnlyShard)
|
389
|
+
COPY
|
390
|
+
copy_shard(TestShard/127.0.0.1)
|
391
|
+
CLEANUP
|
392
|
+
add_link(ReplicatingShard -> TestShard/127.0.0.1)
|
393
|
+
remove_link(WriteOnlyShard -> TestShard/127.0.0.1)
|
394
|
+
remove_link(ReplicatingShard -> WriteOnlyShard)
|
395
|
+
delete_shard(WriteOnlyShard)
|
396
|
+
Applied to 2 shards:
|
397
|
+
[0] 1 = localhost/s_0_001_replicating
|
398
|
+
[0] 2 = localhost/s_0_002_replicating
|
399
|
+
|
400
|
+
STARTING:
|
401
|
+
[0] 1 = localhost/s_0_001_replicating: ReplicatingShard(1) -> TestShard(localhost,1,Int,Int) => ReplicatingShard(1) -> (TestShard(localhost,1,Int,Int), TestShard(127.0.0.1,1))
|
402
|
+
[0] 2 = localhost/s_0_002_replicating: ReplicatingShard(1) -> TestShard(localhost,1,Int,Int) => ReplicatingShard(1) -> (TestShard(localhost,1,Int,Int), TestShard(127.0.0.1,1))
|
403
|
+
COPIES:
|
404
|
+
localhost/s_0_001_a -> 127.0.0.1/s_0_0001
|
405
|
+
localhost/s_0_002_a -> 127.0.0.1/s_0_0002
|
406
|
+
FINISHING:
|
407
|
+
[0] 1 = localhost/s_0_001_replicating: ReplicatingShard(1) -> TestShard(localhost,1,Int,Int) => ReplicatingShard(1) -> (TestShard(localhost,1,Int,Int), TestShard(127.0.0.1,1))
|
408
|
+
[0] 2 = localhost/s_0_002_replicating: ReplicatingShard(1) -> TestShard(localhost,1,Int,Int) => ReplicatingShard(1) -> (TestShard(localhost,1,Int,Int), TestShard(127.0.0.1,1))
|
409
|
+
2 transformations applied. Total time elapsed: 1 second
|
410
|
+
EOF
|
411
|
+
|
412
|
+
nameserver[:shards].should == [ info("127.0.0.1", "s_0_0001", "TestShard"),
|
413
|
+
info("127.0.0.1", "s_0_0002", "TestShard"),
|
414
|
+
info("localhost", "s_0_001_a", "TestShard", "Int", "Int"),
|
415
|
+
info("localhost", "s_0_001_replicating", "ReplicatingShard"),
|
416
|
+
info("localhost", "s_0_002_a", "TestShard", "Int", "Int"),
|
417
|
+
info("localhost", "s_0_002_replicating", "ReplicatingShard") ]
|
418
|
+
|
419
|
+
nameserver[:links].should == [ link(id("localhost", "s_0_001_replicating"), id("127.0.0.1", "s_0_0001"), 1),
|
420
|
+
link(id("localhost", "s_0_001_replicating"), id("localhost", "s_0_001_a"), 1),
|
421
|
+
link(id("localhost", "s_0_002_replicating"), id("127.0.0.1", "s_0_0002"), 1),
|
422
|
+
link(id("localhost", "s_0_002_replicating"), id("localhost", "s_0_002_a"), 1) ]
|
423
|
+
end
|
424
|
+
|
425
|
+
it "works with multiple forwarding tables" do
|
426
|
+
0.upto(1) do |table|
|
427
|
+
1.upto(2) do |i|
|
428
|
+
gizzmo "create TestShard -s Int -d Int localhost/s_#{table}_00#{i}_a"
|
429
|
+
#gizzmo "create TestShard -s Int -d Int 127.0.0.1/s_#{table}_000#{i}_b"
|
430
|
+
gizzmo "create ReplicatingShard localhost/s_#{table}_00#{i}_replicating"
|
431
|
+
gizzmo "addlink localhost/s_#{table}_00#{i}_replicating localhost/s_#{table}_00#{i}_a 1"
|
432
|
+
#gizzmo "addlink localhost/s_#{table}_00#{i}_replicating 127.0.0.1/s_#{table}_000#{i}_b 1"
|
433
|
+
gizzmo "addforwarding #{table} #{i} localhost/s_#{table}_00#{i}_replicating"
|
434
|
+
end
|
435
|
+
end
|
436
|
+
gizzmo "-f reload"
|
437
|
+
|
438
|
+
gizzmo('-f -T0,1 transform --no-progress --poll-interval=1 "ReplicatingShard -> TestShard(localhost,1,Int,Int)" "ReplicatingShard -> (TestShard(localhost,1,Int,Int), TestShard(127.0.0.1))"').should == <<-EOF
|
439
|
+
ReplicatingShard(1) -> TestShard(localhost,1,Int,Int) => ReplicatingShard(1) -> (TestShard(localhost,1,Int,Int), TestShard(127.0.0.1,1)) :
|
440
|
+
PREPARE
|
441
|
+
create_shard(TestShard/127.0.0.1)
|
442
|
+
create_shard(WriteOnlyShard)
|
443
|
+
add_link(WriteOnlyShard -> TestShard/127.0.0.1)
|
444
|
+
add_link(ReplicatingShard -> WriteOnlyShard)
|
445
|
+
COPY
|
446
|
+
copy_shard(TestShard/127.0.0.1)
|
447
|
+
CLEANUP
|
448
|
+
add_link(ReplicatingShard -> TestShard/127.0.0.1)
|
449
|
+
remove_link(WriteOnlyShard -> TestShard/127.0.0.1)
|
450
|
+
remove_link(ReplicatingShard -> WriteOnlyShard)
|
451
|
+
delete_shard(WriteOnlyShard)
|
452
|
+
Applied to 4 shards:
|
453
|
+
[0] 1 = localhost/s_0_001_replicating
|
454
|
+
[0] 2 = localhost/s_0_002_replicating
|
455
|
+
[1] 1 = localhost/s_1_001_replicating
|
456
|
+
[1] 2 = localhost/s_1_002_replicating
|
457
|
+
|
458
|
+
STARTING:
|
459
|
+
[0] 1 = localhost/s_0_001_replicating: ReplicatingShard(1) -> TestShard(localhost,1,Int,Int) => ReplicatingShard(1) -> (TestShard(localhost,1,Int,Int), TestShard(127.0.0.1,1))
|
460
|
+
[0] 2 = localhost/s_0_002_replicating: ReplicatingShard(1) -> TestShard(localhost,1,Int,Int) => ReplicatingShard(1) -> (TestShard(localhost,1,Int,Int), TestShard(127.0.0.1,1))
|
461
|
+
[1] 1 = localhost/s_1_001_replicating: ReplicatingShard(1) -> TestShard(localhost,1,Int,Int) => ReplicatingShard(1) -> (TestShard(localhost,1,Int,Int), TestShard(127.0.0.1,1))
|
462
|
+
[1] 2 = localhost/s_1_002_replicating: ReplicatingShard(1) -> TestShard(localhost,1,Int,Int) => ReplicatingShard(1) -> (TestShard(localhost,1,Int,Int), TestShard(127.0.0.1,1))
|
463
|
+
COPIES:
|
464
|
+
localhost/s_0_001_a -> 127.0.0.1/s_0_0001
|
465
|
+
localhost/s_0_002_a -> 127.0.0.1/s_0_0002
|
466
|
+
localhost/s_1_001_a -> 127.0.0.1/s_1_0001
|
467
|
+
localhost/s_1_002_a -> 127.0.0.1/s_1_0002
|
468
|
+
FINISHING:
|
469
|
+
[0] 1 = localhost/s_0_001_replicating: ReplicatingShard(1) -> TestShard(localhost,1,Int,Int) => ReplicatingShard(1) -> (TestShard(localhost,1,Int,Int), TestShard(127.0.0.1,1))
|
470
|
+
[0] 2 = localhost/s_0_002_replicating: ReplicatingShard(1) -> TestShard(localhost,1,Int,Int) => ReplicatingShard(1) -> (TestShard(localhost,1,Int,Int), TestShard(127.0.0.1,1))
|
471
|
+
[1] 1 = localhost/s_1_001_replicating: ReplicatingShard(1) -> TestShard(localhost,1,Int,Int) => ReplicatingShard(1) -> (TestShard(localhost,1,Int,Int), TestShard(127.0.0.1,1))
|
472
|
+
[1] 2 = localhost/s_1_002_replicating: ReplicatingShard(1) -> TestShard(localhost,1,Int,Int) => ReplicatingShard(1) -> (TestShard(localhost,1,Int,Int), TestShard(127.0.0.1,1))
|
473
|
+
4 transformations applied. Total time elapsed: 1 second
|
474
|
+
EOF
|
475
|
+
|
476
|
+
nameserver[:shards].should == [ info("127.0.0.1", "s_0_0001", "TestShard"),
|
477
|
+
info("127.0.0.1", "s_0_0002", "TestShard"),
|
478
|
+
info("127.0.0.1", "s_1_0001", "TestShard"),
|
479
|
+
info("127.0.0.1", "s_1_0002", "TestShard"),
|
480
|
+
info("localhost", "s_0_001_a", "TestShard", "Int", "Int"),
|
481
|
+
info("localhost", "s_0_001_replicating", "ReplicatingShard"),
|
482
|
+
info("localhost", "s_0_002_a", "TestShard", "Int", "Int"),
|
483
|
+
info("localhost", "s_0_002_replicating", "ReplicatingShard"),
|
484
|
+
info("localhost", "s_1_001_a", "TestShard", "Int", "Int"),
|
485
|
+
info("localhost", "s_1_001_replicating", "ReplicatingShard"),
|
486
|
+
info("localhost", "s_1_002_a", "TestShard", "Int", "Int"),
|
487
|
+
info("localhost", "s_1_002_replicating", "ReplicatingShard") ]
|
488
|
+
|
489
|
+
nameserver[:links].should == [ link(id("localhost", "s_0_001_replicating"), id("127.0.0.1", "s_0_0001"), 1),
|
490
|
+
link(id("localhost", "s_0_001_replicating"), id("localhost", "s_0_001_a"), 1),
|
491
|
+
link(id("localhost", "s_0_002_replicating"), id("127.0.0.1", "s_0_0002"), 1),
|
492
|
+
link(id("localhost", "s_0_002_replicating"), id("localhost", "s_0_002_a"), 1),
|
493
|
+
link(id("localhost", "s_1_001_replicating"), id("127.0.0.1", "s_1_0001"), 1),
|
494
|
+
link(id("localhost", "s_1_001_replicating"), id("localhost", "s_1_001_a"), 1),
|
495
|
+
link(id("localhost", "s_1_002_replicating"), id("127.0.0.1", "s_1_0002"), 1),
|
496
|
+
link(id("localhost", "s_1_002_replicating"), id("localhost", "s_1_002_a"), 1) ]
|
497
|
+
end
|
498
|
+
end
|
499
|
+
end
|