redis_migrator 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -27,9 +27,7 @@ class Redis
27
27
  # { "redis://host1.com" => ['key1', 'key2', 'key3'],
28
28
  # "redis://host2.com => ['key4', 'key5', 'key6']" }
29
29
  def changed_keys
30
- keys = @old_cluster.keys("*")
31
-
32
- keys.inject({}) do |acc, key|
30
+ old_cluster_keys.inject({}) do |acc, key|
33
31
  old_node = @old_cluster.node_for(key).client
34
32
  new_node = @new_cluster.node_for(key).client
35
33
 
@@ -43,6 +41,16 @@ class Redis
43
41
  end
44
42
  end
45
43
 
44
+ # Returns all the keys that need to be redistributed. Can be overidden to
45
+ # return only a subset of old keys if migrating from a single redis environment
46
+ # to a mixed environment with both regular and distributed redis instances
47
+ # @return an array of keys that should be checked for redistributing
48
+ # @example Returned value
49
+ # ['key1', 'key2', 'key3']
50
+ def old_cluster_keys
51
+ @old_cluster_keys ||= @old_cluster.keys("*")
52
+ end
53
+
46
54
  # Migrates a given array of keys to a given redis node
47
55
  # @param node [Hash] options for redis node keys will be migrated to
48
56
  # @param keys [Array] array of keys that need to be migrated
@@ -18,10 +18,26 @@ class Redis
18
18
  end
19
19
 
20
20
  grouped_by_old_nodes.each do |old_node, node_keys|
21
- old_node.pipelined do
22
- node_keys.each { |key| old_node.migrate(key, new_node_options) }
21
+ destination_node_options = new_node_options.merge(
22
+ timeout: 30 # lets add a generous timeout here
23
+ )
24
+
25
+ node_keys.each_slice(1000) do |slice|
26
+ old_node.pipelined do
27
+ slice.each do |key|
28
+ migrate_key(old_node, key, destination_node_options)
29
+ end
30
+ end
23
31
  end
24
32
  end
25
33
  end
34
+
35
+ def migrate_key(node, key, options)
36
+ if Redis::VERSION > '3.0.4'
37
+ node.migrate(key, options)
38
+ else
39
+ node.migrate([options[:host], options[:port], key, options[:db], options[:timeout]])
40
+ end
41
+ end
26
42
  end
27
43
  end
@@ -3,7 +3,7 @@ $:.push File.expand_path("./lib", __FILE__)
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "redis_migrator"
6
- s.version = "0.1.1"
6
+ s.version = "0.1.2"
7
7
  s.date = "2014-04-10"
8
8
  s.platform = Gem::Platform::RUBY
9
9
  s.authors = ["Artem Yankov"]
metadata CHANGED
@@ -1,7 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: redis_migrator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - Artem Yankov
@@ -12,74 +13,59 @@ date: 2014-04-10 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: redis
15
- requirement: !ruby/object:Gem::Requirement
16
+ requirement: &70148249978680 !ruby/object:Gem::Requirement
17
+ none: false
16
18
  requirements:
17
19
  - - ! '>='
18
20
  - !ruby/object:Gem::Version
19
21
  version: 3.0.0
20
22
  type: :runtime
21
23
  prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ! '>='
25
- - !ruby/object:Gem::Version
26
- version: 3.0.0
24
+ version_requirements: *70148249978680
27
25
  - !ruby/object:Gem::Dependency
28
26
  name: rspec
29
- requirement: !ruby/object:Gem::Requirement
27
+ requirement: &70148249978100 !ruby/object:Gem::Requirement
28
+ none: false
30
29
  requirements:
31
30
  - - ~>
32
31
  - !ruby/object:Gem::Version
33
32
  version: '2.6'
34
33
  type: :development
35
34
  prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ~>
39
- - !ruby/object:Gem::Version
40
- version: '2.6'
35
+ version_requirements: *70148249978100
41
36
  - !ruby/object:Gem::Dependency
42
37
  name: rake
43
- requirement: !ruby/object:Gem::Requirement
38
+ requirement: &70148249977600 !ruby/object:Gem::Requirement
39
+ none: false
44
40
  requirements:
45
41
  - - ! '>='
46
42
  - !ruby/object:Gem::Version
47
43
  version: '0'
48
44
  type: :development
49
45
  prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ! '>='
53
- - !ruby/object:Gem::Version
54
- version: '0'
46
+ version_requirements: *70148249977600
55
47
  - !ruby/object:Gem::Dependency
56
48
  name: debugger
57
- requirement: !ruby/object:Gem::Requirement
49
+ requirement: &70148249976980 !ruby/object:Gem::Requirement
50
+ none: false
58
51
  requirements:
59
52
  - - ! '>='
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0'
62
55
  type: :development
63
56
  prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ! '>='
67
- - !ruby/object:Gem::Version
68
- version: '0'
57
+ version_requirements: *70148249976980
69
58
  - !ruby/object:Gem::Dependency
70
59
  name: mock_redis
71
- requirement: !ruby/object:Gem::Requirement
60
+ requirement: &70148249976460 !ruby/object:Gem::Requirement
61
+ none: false
72
62
  requirements:
73
63
  - - ! '>='
74
64
  - !ruby/object:Gem::Version
75
65
  version: '0'
76
66
  type: :development
77
67
  prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ! '>='
81
- - !ruby/object:Gem::Version
82
- version: '0'
68
+ version_requirements: *70148249976460
83
69
  description: Redis-migrator takes a list of nodes for your old cluster and list of
84
70
  nodes for your new cluster and determines for which keys routes were changed. Then
85
71
  it moves those keys to new nodes.
@@ -110,26 +96,27 @@ files:
110
96
  - spec/spec_helper.rb
111
97
  homepage: http://rubygems.org/gems/redis_migrator
112
98
  licenses: []
113
- metadata: {}
114
99
  post_install_message:
115
100
  rdoc_options: []
116
101
  require_paths:
117
102
  - lib
118
103
  required_ruby_version: !ruby/object:Gem::Requirement
104
+ none: false
119
105
  requirements:
120
106
  - - ! '>='
121
107
  - !ruby/object:Gem::Version
122
108
  version: '0'
123
109
  required_rubygems_version: !ruby/object:Gem::Requirement
110
+ none: false
124
111
  requirements:
125
112
  - - ! '>='
126
113
  - !ruby/object:Gem::Version
127
114
  version: '0'
128
115
  requirements: []
129
116
  rubyforge_project:
130
- rubygems_version: 2.2.2
117
+ rubygems_version: 1.8.17
131
118
  signing_key:
132
- specification_version: 4
119
+ specification_version: 3
133
120
  summary: A tool to redistribute keys in your redis cluster when its topography has
134
121
  changed
135
122
  test_files:
@@ -140,4 +127,3 @@ test_files:
140
127
  - spec/redis_pipe_migrator_spec.rb
141
128
  - spec/shared_hosts_context.rb
142
129
  - spec/spec_helper.rb
143
- has_rdoc:
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: 98a618ae2641c4bf6eadc6cae753d8219f0ab039
4
- data.tar.gz: e07f091488059a7d20f7ce0bdf05fb43566632ef
5
- SHA512:
6
- metadata.gz: 7cda9a9894f2a79c4a500eb15cf9ab6f5efe6fcf512112b9dcfe818c0f672ee4e1894d2aae5d03624db69aee3452821cabf1597c3c6f1588f93785bdd6b5711f
7
- data.tar.gz: f6d7e25a19eff8d52cc6704d528eeb6c5fa03bfd5ea4d8f6ac5fec92ba675b14c55d1c3ff8b5d332511b6c69ef86f784e5e5a6d2a0fc381ca9026a1a24126bd5