es-reindex 0.3.1 → 0.3.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: dd1bacbfe466185d042ad4c4e0a376465247effd
4
- data.tar.gz: 8c57e5ffc56aced527ae24fdeed9f503055cc1fb
3
+ metadata.gz: 6bb1862c74c923e6e30a22bc694f2b4cc97a11ac
4
+ data.tar.gz: bc5529358af365d1803a6d5c5a5158c6e265fd36
5
5
  SHA512:
6
- metadata.gz: 8c72172b076d24e2bcd034f78099085168aa3f47cd3607b643f43b9a2bd8346d7ed82920e20bf25bfe9cd07e1579f4da9a0390fc8722fcab0b8ce32c0800882f
7
- data.tar.gz: 12735b79ed00178836f866ea5c55e6601e6a9a0fecb79fab481bfdce31acbc58d5915a1b07011c064476bee23e225ca88b20b6f274e493ab1f5c8cd127ade92d
6
+ metadata.gz: 5eec5cb2304c337e4fd242f2035d99354f1542939948830292f5a94f4a1d4d684e066f1a6cd576e23f27fac84678d203d9fad544ce81235c337beeff0ec8b99d
7
+ data.tar.gz: 341436662c907031f3ed38ead2e96dca6a2228203b47b6c70d5d7a1f6a9f84cd648c01d5b61d0332dc30f2811057f603660ecb061d647b7269772ee8fd69ccd7
@@ -1,6 +1,7 @@
1
1
  ## Changelog
2
2
 
3
- + __0.3.1__: Add activesupport dependency since es-reindex uses methods from it.
3
+ + __0.3.2__: Remove activesupport dependency entirely, handle aliased indices [@waterlink](https://github.com/waterlink)
4
+ + __0.3.1__: Add activesupport dependency since es-reindex uses methods from it.
4
5
  + __0.3.0__: Add `:if` and `:unless` callbacks
5
6
  + __0.2.1__: [BUGFIX] Improve callback presence check
6
7
  + __0.2.0__: Lots of bugfixes, use elasticsearch client gem, add .reindex! method and callbacks
@@ -23,7 +23,6 @@ Gem::Specification.new do |s|
23
23
  s.require_paths = ["lib"]
24
24
 
25
25
  s.add_runtime_dependency 'elasticsearch', '>= 1.0.0'
26
- s.add_runtime_dependency 'activesupport', '>= 0'
27
26
 
28
27
  # Development Dependencies:
29
28
  s.add_development_dependency 'elasticsearch-persistence', '~> 0.1'
@@ -39,7 +39,7 @@ class ESReindex
39
39
  %w{
40
40
  if unless mappings settings before_create after_create before_each after_each after_copy
41
41
  }.each do |callback|
42
- if options[callback.to_sym].present? && !options[callback.to_sym].respond_to?(:call)
42
+ if options.has_key?(callback.to_sym) && !options[callback.to_sym].respond_to?(:call)
43
43
  raise ArgumentError, "#{callback} must be a callable object"
44
44
  end
45
45
  end
@@ -65,8 +65,8 @@ class ESReindex
65
65
 
66
66
  def okay_to_proceed?
67
67
  okay = true
68
- okay = options[:if].call(sclient, dclient) if options[:if].present?
69
- okay = (okay && !(options[:unless].call sclient, dclient)) if options[:unless].present?
68
+ okay = options[:if].call(sclient, dclient) if options.has_key?(:if)
69
+ okay = (okay && !(options[:unless].call sclient, dclient)) if options.has_key?(:unless)
70
70
  log 'Skipping action due to guard callbacks' unless okay
71
71
  okay
72
72
  end
@@ -113,13 +113,13 @@ class ESReindex
113
113
  create_msg = ""
114
114
  end
115
115
 
116
- options[:before_create].try(:call)
116
+ options[:before_create] && options[:before_create].call
117
117
 
118
118
  log "Creating '#{durl}/#{didx}' index#{create_msg}..."
119
119
  dclient.indices.create index: didx, body: { settings: settings, mappings: mappings }
120
120
  log "Succesfully created '#{durl}/#{didx}''#{create_msg}."
121
121
 
122
- options[:after_create].try(:call)
122
+ options[:after_create] && options[:after_create].call
123
123
  end
124
124
 
125
125
  true
@@ -131,7 +131,7 @@ class ESReindex
131
131
  return false
132
132
  end
133
133
 
134
- @settings = settings[sidx]["settings"]
134
+ @settings = fetch_index_config(settings, sidx)["settings"]
135
135
  @settings["index"]["version"].delete "created"
136
136
  end
137
137
 
@@ -140,7 +140,7 @@ class ESReindex
140
140
  log "Failed to obtain original index '#{surl}/#{sidx}' mappings!", :error
141
141
  return false
142
142
  end
143
- @mappings = mappings[sidx]["mappings"]
143
+ @mappings = fetch_index_config(mappings, sidx)["mappings"]
144
144
  end
145
145
 
146
146
  def copy_docs
@@ -157,13 +157,13 @@ class ESReindex
157
157
  while scroll = sclient.scroll(scroll_id: scroll['_scroll_id'], scroll: '10m') and not scroll['hits']['hits'].empty? do
158
158
  bulk = []
159
159
  scroll['hits']['hits'].each do |doc|
160
- options[:before_each].try(:call)
160
+ options[:before_each] && options[:before_each].call
161
161
  ### === implement possible modifications to the document
162
162
  ### === end modifications to the document
163
163
  base = {'_index' => didx, '_id' => doc['_id'], '_type' => doc['_type'], data: doc['_source']}
164
164
  bulk << {action => base}
165
165
  @done = done + 1
166
- options[:after_each].try(:call)
166
+ options[:after_each] && options[:after_each].call
167
167
  end
168
168
  unless bulk.empty?
169
169
  dclient.bulk body: bulk
@@ -175,7 +175,7 @@ class ESReindex
175
175
 
176
176
  log "Copy progress: %u/%u done in %s.\n" % [done, total, tm_len]
177
177
 
178
- options[:after_copy].try(:call)
178
+ options[:after_copy] && options[:after_copy].call
179
179
 
180
180
  true
181
181
  end
@@ -242,4 +242,11 @@ private
242
242
  out
243
243
  end
244
244
 
245
+ # Accounts for aliased indices. When index is aliased there will not
246
+ # be a key nor in settings, nor in mappings. But there will be the
247
+ # only key for original index name.
248
+ def fetch_index_config(config, index)
249
+ config.fetch(index) { config.values.first }
250
+ end
251
+
245
252
  end
@@ -1,3 +1,3 @@
1
1
  class ESReindex
2
- VERSION = '0.3.1'
2
+ VERSION = '0.3.2'
3
3
  end
@@ -3,6 +3,7 @@ require 'spec_helper'
3
3
  describe "copy!", type: :integration do
4
4
  let(:orig_index_name) { "test_index" }
5
5
  let(:new_index_name) { "test_index_clone" }
6
+ let(:orig_index_alias) { "test_index_alias" }
6
7
 
7
8
  let!(:original_klass) { test_klass index_name: orig_index_name }
8
9
  let!(:new_klass) { test_klass index_name: new_index_name }
@@ -10,6 +11,9 @@ describe "copy!", type: :integration do
10
11
  let(:test_post) { original_klass.create id: 1, text: 'test_post' }
11
12
  let(:test_post_2) { new_klass.create id: 2, text: 'other_post' }
12
13
 
14
+ let(:elastic_client) { Elasticsearch::Client.new(host: ES_HOST, log: false) }
15
+ let(:alias_index) { elastic_client.indices.put_alias(index: orig_index_name, name: orig_index_alias) }
16
+
13
17
  # Create the index (test_index) on the test_klass:
14
18
  before do
15
19
  original_klass.create_index!
@@ -22,6 +26,12 @@ describe "copy!", type: :integration do
22
26
  expect(new_klass.find test_post.id).to be_present
23
27
  end
24
28
 
29
+ it "copies the aliased index" do
30
+ alias_index
31
+ ESReindex.copy! "#{ES_HOST}/#{orig_index_alias}", "#{ES_HOST}/#{new_index_name}", {}
32
+ expect(new_klass.find test_post.id).to be_present
33
+ end
34
+
25
35
  context "when the destination index already exists" do
26
36
 
27
37
  # Create the index (test_index_clone) on the destination klass:
@@ -3,12 +3,16 @@ require 'spec_helper'
3
3
  describe "reindex!", type: :integration do
4
4
  let(:orig_index_name) { "test_index" }
5
5
  let(:new_index_name) { "test_index_clone" }
6
+ let(:orig_index_alias) { "test_index_alias" }
6
7
 
7
8
  let!(:original_klass) { test_klass index_name: orig_index_name }
8
9
  let!(:new_klass) { test_klass index_name: new_index_name, attributes: [:foo] }
9
10
 
10
11
  let(:test_post) { original_klass.create id: 1, text: 'test_post' }
11
12
 
13
+ let(:elastic_client) { Elasticsearch::Client.new(host: ES_HOST, log: false) }
14
+ let(:alias_index) { elastic_client.indices.put_alias(index: orig_index_name, name: orig_index_alias) }
15
+
12
16
  # Create the index (test_index) on the test_klass:
13
17
  before do
14
18
  original_klass.create_index!
@@ -16,13 +20,14 @@ describe "reindex!", type: :integration do
16
20
  original_klass.refresh_index!
17
21
  end
18
22
 
19
- let(:reindexed_post) { new_klass.find test_post.id }
23
+ let(:reindexed_post) { new_klass.find test_post.id }
20
24
 
21
- let(:reindex) { ESReindex.reindex! "#{ES_HOST}/#{orig_index_name}", "#{ES_HOST}/#{new_index_name}", opts }
22
- let(:mappings) { ->{ new_klass.mappings } }
23
- let(:settings) { ->{ new_klass.settings } }
24
- let(:other_opts) { {} }
25
- let(:opts) { {mappings: mappings, settings: settings}.merge other_opts }
25
+ let(:reindex) { ESReindex.reindex! "#{ES_HOST}/#{orig_index_name}", "#{ES_HOST}/#{new_index_name}", opts }
26
+ let(:aliased_reindex) { ESReindex.reindex! "#{ES_HOST}/#{orig_index_alias}", "#{ES_HOST}/#{new_index_name}", opts }
27
+ let(:mappings) { ->{ new_klass.mappings } }
28
+ let(:settings) { ->{ new_klass.settings } }
29
+ let(:other_opts) { {} }
30
+ let(:opts) { {mappings: mappings, settings: settings}.merge other_opts }
26
31
 
27
32
  it "reindexes with the selected mappings" do
28
33
  reindex
@@ -32,6 +37,16 @@ describe "reindex!", type: :integration do
32
37
  expect(reindexed_post).to respond_to :foo
33
38
  end
34
39
 
40
+ it "reindexes alias with the selected mappings" do
41
+ alias_index
42
+
43
+ aliased_reindex
44
+
45
+ expect(reindexed_post.id).to eq test_post.id
46
+ expect(reindexed_post.text).to eq test_post.text
47
+ expect(reindexed_post).to respond_to :foo
48
+ end
49
+
35
50
  context "with a :unless guard" do
36
51
  let(:other_opts) do
37
52
  {
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: es-reindex
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Aiken
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-02-14 00:00:00.000000000 Z
12
+ date: 2015-02-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: elasticsearch
@@ -25,20 +25,6 @@ dependencies:
25
25
  - - ">="
26
26
  - !ruby/object:Gem::Version
27
27
  version: 1.0.0
28
- - !ruby/object:Gem::Dependency
29
- name: activesupport
30
- requirement: !ruby/object:Gem::Requirement
31
- requirements:
32
- - - ">="
33
- - !ruby/object:Gem::Version
34
- version: '0'
35
- type: :runtime
36
- prerelease: false
37
- version_requirements: !ruby/object:Gem::Requirement
38
- requirements:
39
- - - ">="
40
- - !ruby/object:Gem::Version
41
- version: '0'
42
28
  - !ruby/object:Gem::Dependency
43
29
  name: elasticsearch-persistence
44
30
  requirement: !ruby/object:Gem::Requirement