redis_migrator 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/redis_migrator.rb +11 -3
- data/lib/redis_migrator/redis_native_migrator.rb +18 -2
- data/redis_migrator.gemspec +1 -1
- metadata +21 -35
- checksums.yaml +0 -7
data/lib/redis_migrator.rb
CHANGED
@@ -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
|
-
|
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
|
-
|
22
|
-
|
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
|
data/redis_migrator.gemspec
CHANGED
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.
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
117
|
+
rubygems_version: 1.8.17
|
131
118
|
signing_key:
|
132
|
-
specification_version:
|
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
|