Class: Gizzard::SetupMigrateCommand

Inherits:
Command
  • Object
show all
Defined in:
lib/gizzard/commands.rb

Instance Attribute Summary

Attributes inherited from Command

#argv, #buffer, #command_options, #global_options, #job_injector, #manager

Instance Method Summary collapse

Methods inherited from Command

classify, #confirm!, #get_base_name, #help!, #initialize, make_job_injector, make_manager, #output, #require_tables, #require_template_options, run

Constructor Details

This class inherits a constructor from Gizzard::Command

Instance Method Details

#runObject



652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
# File 'lib/gizzard/commands.rb', line 652

def run
  from_shard_id_string, to_shard_id_string = @argv
  help!("Requires source & destination shard id") unless from_shard_id_string && to_shard_id_string
  from_shard_id = ShardId.parse(from_shard_id_string)
  to_shard_id = ShardId.parse(to_shard_id_string)

  if manager.list_upward_links(to_shard_id).size > 0
    STDERR.puts "Destination shard #{to_shard_id} has links to it."
    exit 1
  end

  write_only_shard_id = ShardId.new("localhost", "#{to_shard_id.table_prefix}_migrate_write_only")
  replica_shard_id = ShardId.new("localhost", "#{to_shard_id.table_prefix}_migrate_replica")
  manager.create_shard(ShardInfo.new(write_only_shard_id, "com.twitter.gizzard.shards.WriteOnlyShard", "", "", 0))
  manager.create_shard(ShardInfo.new(replica_shard_id, "com.twitter.gizzard.shards.ReplicatingShard", "", "", 0))
  manager.add_link(write_only_shard_id, to_shard_id, 1)
  manager.list_upward_links(from_shard_id).each do |link|
    manager.remove_link(link.up_id, link.down_id)
    manager.add_link(link.up_id, replica_shard_id, link.weight)
  end
  manager.add_link(replica_shard_id, from_shard_id, 1)
  manager.add_link(replica_shard_id, write_only_shard_id, 0)
  manager.replace_forwarding(from_shard_id, replica_shard_id)
  output replica_shard_id.to_unix
end