use ShardedKV; use ShardedKV::Continuum::Ketama; use ShardedKV::Storage::MySQL; use ShardedKV::Storage::MySQL::ActiveKeyMigration; use lib qw(lib t/lib); use ShardedKV::Test; my $continuum_spec = [ ["server1", 100], ["server2", 150], ["server3", 200], ]; my $skv = make_skv($continuum_spec, \&mysql_storage); my @keys = (1..10000); for (@keys) { $skv->set($_, ["v$_"]); warn "$_" if not $_ % 1000; } warn "Adding server"; # Setup new server and an extended continuum $skv->storages->{server4} = mysql_storage(); $skv->storages->{server5} = mysql_storage(); $skv->storages->{server6} = mysql_storage(); my $new_cont = $skv->continuum->clone; $new_cont->extend([ ["server4", 120], ["server5", 220], ["server6", 320], ]); my $time = Time::HiRes::time(); warn "Starting migration"; # set continuum $skv->begin_migration($new_cont); ShardedKV::Storage::MySQL::ActiveKeyMigration::migrate_to_additional_storage( shardedkv => $skv, chunksleep => 0, ); $skv->end_migration; warn "Migration time " . ($time-Time::HiRes::time());