Skip to content
This repository has been archived by the owner on Sep 18, 2021. It is now read-only.

Commit

Permalink
Add a reproduction test
Browse files Browse the repository at this point in the history
  • Loading branch information
Stu Hood committed Feb 14, 2012
1 parent fa7d453 commit 7793eab
Showing 1 changed file with 51 additions and 0 deletions.
51 changes: 51 additions & 0 deletions test/transformation_spec.rb
Expand Up @@ -145,6 +145,57 @@ def empty_ops
end
end

it "rebalances a tree containing a write-only shard" do
to = mk_template 'ReplicatingShard -> (SqlShard(host3), WriteOnlyShard -> SqlShard(host4))'

children = [
Gizzard::Shard.new(info("host1", "tbl_001_a", "SqlShard"), [], 1),
Gizzard::Shard.new(
info("localhost", "tbl_001_write_only", "WriteOnlyShard"),
[Gizzard::Shard.new(info("host2", "tbl_001_b", "SqlShard"), [], 1)],
1)
]
trees = {
forwarding(0, 0, id("localhost", "tbl_001_rep")) =>
Gizzard::Shard.new(info("localhost", "tbl_001_rep", "ReplicatingShard", "", "", 0), children, 1)
}
dest_templates_and_weights = { to => 1 }
copy_wrapper = "BlockedShard"
batch_finish = false

rebalancer = Gizzard::Rebalancer.new(trees, dest_templates_and_weights, copy_wrapper, batch_finish)
rebalancer.transformations.size.should == 1
transformation = rebalancer.transformations.clone.shift[0]
transformation.operations.should == empty_ops.merge({
:prepare => [ create_shard('WriteOnlyShard'),
create_shard('BlockedShard'),
create_shard('SqlShard(host4)'),
create_shard('BlockedShard'),
create_shard('SqlShard(host3)'),
add_link('WriteOnlyShard', 'BlockedShard'),
add_link('BlockedShard', 'SqlShard(host3)'),
add_link('ReplicatingShard', 'WriteOnlyShard'),
add_link('BlockedShard', 'SqlShard(host4)'),
add_link('ReplicatingShard', 'BlockedShard') ],
:copy => [ copy_shard('SqlShard(host1)', 'SqlShard(host3)'),
copy_shard('SqlShard(host1)', 'SqlShard(host4)') ],
:cleanup => [ add_link('ReplicatingShard', 'SqlShard(host3)'),
add_link('WriteOnlyShard', 'SqlShard(host4)'),
remove_link('ReplicatingShard', 'BlockedShard'),
remove_link('WriteOnlyShard', 'BlockedShard'),
remove_link('BlockedShard', 'SqlShard(host4)'),
remove_link('ReplicatingShard', 'SqlShard(host1)'),
remove_link('WriteOnlyShard', 'SqlShard(host2)'),
remove_link('ReplicatingShard', 'WriteOnlyShard'),
delete_shard('BlockedShard'),
delete_shard('BlockedShard'),
delete_shard('SqlShard(host1)'),
# FIXME: DATASERV-40: these deletes are currently occurring in :prepare
delete_shard('WriteOnlyShard'),
delete_shard('SqlShard(host2)') ]
})
end

it "migrates the top level shard" do
from = mk_template 'ReplicatingShard -> (SqlShard(host1), SqlShard(host2))'
to = mk_template 'FailingOverShard -> (SqlShard(host1), SqlShard(host2))'
Expand Down

0 comments on commit 7793eab

Please sign in to comment.