Class: Redis::NativeMigrator

Inherits:
Object
  • Object
show all
Defined in:
lib/redis_migrator/redis_native_migrator.rb

Instance Method Summary collapse

Constructor Details

#initialize(old_hosts) ⇒ NativeMigrator

Returns a new instance of NativeMigrator.



3
4
5
# File 'lib/redis_migrator/redis_native_migrator.rb', line 3

def initialize(old_hosts)
  Thread.current[:redis] = Redis::Distributed.new(old_hosts)
end

Instance Method Details

#migrate(node_options, keys, _) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/redis_migrator/redis_native_migrator.rb', line 11

def migrate(node_options, keys, _)
  new_node_options = { host: node_options[:host],
                       port: node_options[:port],
                       db:   node_options[:db] }

  grouped_by_old_nodes = keys.group_by do |key|
    redis.node_for(key)
  end

  grouped_by_old_nodes.each do |old_node, node_keys|
    destination_node_options = new_node_options.merge(
      timeout: 30 # lets add a generous timeout here
    )

    node_keys.each_slice(1000) do |slice|
      old_node.pipelined do
        slice.each do |key|
          migrate_key(old_node, key, destination_node_options)
        end
      end
    end
  end
end

#migrate_key(node, key, options) ⇒ Object



35
36
37
38
39
40
41
# File 'lib/redis_migrator/redis_native_migrator.rb', line 35

def migrate_key(node, key, options)
  if Redis::VERSION > '3.0.4'
    node.migrate(key, options)
  else
    node.migrate([options[:host], options[:port], key, options[:db], options[:timeout]])
  end
end

#redisObject



7
8
9
# File 'lib/redis_migrator/redis_native_migrator.rb', line 7

def redis
  Thread.current[:redis]
end