Class: Gizzard::FinishReplicaCommand

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



621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
# File 'lib/gizzard/commands.rb', line 621

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)

  write_only_shard_id = ShardId.new("localhost", "#{to_shard_id.table_prefix}_copy_write_only")
  link = manager.list_upward_links(write_only_shard_id)[0]
  replica_shard_id = link.up_id
  weight = link.weight

  # careful. need to validate some basic assumptions.
  unless global_options.force
    if manager.list_upward_links(from_shard_id).map { |link| link.up_id }.to_a != [ replica_shard_id ]
      STDERR.puts "Uplink from #{from_shard_id} is not a migration replica."
      exit 1
    end
    if manager.list_upward_links(to_shard_id).map { |link| link.up_id }.to_a != [ write_only_shard_id ]
      STDERR.puts "Uplink from #{to_shard_id} is not a write-only barrier."
      exit 1
    end
  end

  manager.remove_link(write_only_shard_id, to_shard_id)
  manager.remove_link(replica_shard_id, write_only_shard_id)
  manager.add_link(replica_shard_id, to_shard_id, weight)
  manager.delete_shard(write_only_shard_id)
end