elasticsearch-indexstager 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ee43a625d4aa2fb58e9217e24c8fad74a46650b0
4
- data.tar.gz: e3c035fb1260b752efcdbe606dd06083c7a9c3e9
3
+ metadata.gz: 76c39583b931131ea4295d5e688576aafb1bddd0
4
+ data.tar.gz: fd11d8330619935de3806c9d3428d096723a2dd7
5
5
  SHA512:
6
- metadata.gz: 90ed4e107ada5446a21e56b937b83130dddc28e34f1dd49a54f7178437efb764bfa30c3963e48ebd647f0cbcb95dbcf6745f0194e4937db53184c6e4a75ea355
7
- data.tar.gz: 33c25980044d506eefa1c1a49036e5311911bf9b45900c51e1145965918ffd6f90de061f4964e821db89a7470c9fba06cbd421fcc7788d639883502b45e21095
6
+ metadata.gz: 74a48322315750170369c4f8559cfb547b2661615033573c57a214ef89f757b56601e639209bab2605240d44723d925e5adb4c44390f912ad33135d5b248f091
7
+ data.tar.gz: c719ff554f84b1f80e01ce7591394521f00d78fafc08491e48b4d3a62b8682568433b865c62decf51725dbd7c2f4a90959b82812d2c350c1d1254363f3262b2b
data/README.md CHANGED
@@ -1,12 +1,12 @@
1
1
  # elasticsearch-indexstager RubyGem
2
2
 
3
- [![Build Status](https://travis-ci.org/18F/elasticsearch-indexstager-gem.svg?branch=master)](https://travis-ci.org/18F/elasticsearch-indexstager-gem)
3
+ [![Build Status](https://travis-ci.org/karpet/elasticsearch-indexstager-gem.svg?branch=master)](https://travis-ci.org/karpet/elasticsearch-indexstager-gem)
4
4
 
5
5
  Elasticsearch index management, for stage/promote pattern.
6
6
 
7
7
  See also:
8
8
 
9
- * [elasticsearch-rails-ha](https://github.com/18F/elasticsearch-rails-ha)
9
+ * [elasticsearch-rails-ha](https://github.com/karpet/elasticsearch-rails-ha)
10
10
 
11
11
  ## Examples
12
12
 
@@ -1,6 +1,8 @@
1
+ require 'securerandom'
2
+
1
3
  module Elasticsearch
2
4
  class IndexStager
3
- VERSION = '1.0.0'
5
+ VERSION = '1.1.0'
4
6
 
5
7
  attr_reader :index_name, :es_client
6
8
 
@@ -33,13 +35,21 @@ module Elasticsearch
33
35
  # the renaming actions (performed atomically by ES)
34
36
  rename_actions = [
35
37
  { remove: { index: stage_aliased_to, alias: stage_index_name } },
36
- { add: { index: stage_index_name, alias: @live_index_name } }
38
+ { add: { index: stage_aliased_to, alias: @live_index_name } }
37
39
  ]
38
40
 
39
41
  # zap any existing index known as index_name,
40
42
  # but do it conditionally since it is reasonable that it does not exist.
41
43
  to_delete = []
42
- existing_live_index = es_client.indices.get_aliases(index: @live_index_name)
44
+ live_index_exists = false
45
+ begin
46
+ existing_live_index = es_client.indices.get_alias(index: @live_index_name, name: '*')
47
+ live_index_exists = true
48
+ rescue Elasticsearch::Transport::Transport::Errors::NotFound => _err
49
+ existing_live_index = {}
50
+ rescue => _err
51
+ raise _err
52
+ end
43
53
  existing_live_index.each do |k,v|
44
54
 
45
55
  # if the index is merely aliased, remove its alias as part of the aliasing transaction.
@@ -50,11 +60,27 @@ module Elasticsearch
50
60
  to_delete.push k
51
61
 
52
62
  else
53
- # this is a real, unaliased index with this name, so it must be deleted.
54
- # (This usually happens the first time we implement the aliasing scheme against
55
- # an existing installation.)
56
- es_client.indices.delete index: @live_index_name rescue false
63
+ raise "Found existing index called #{@live_index_name} aliased to itself"
64
+ end
65
+ end
66
+
67
+ if live_index_exists
68
+ new_name = @live_index_name + '-pre-staged-original'
69
+
70
+ # make a copy
71
+ es_client.reindex body: { source: { index: @live_index_name }, dest: { index: new_name } }
72
+
73
+ # make sure the copy exists before we delete the original
74
+ tries = 0
75
+ while( tries < 10 ) do
76
+ indices = ESHelper.client.indices.get_aliases.keys
77
+ break if indices.include?(new_name)
78
+ tries =+ 1
79
+ sleep(1)
57
80
  end
81
+
82
+ # delete the original
83
+ es_client.indices.delete index: @live_index_name rescue false
58
84
  end
59
85
 
60
86
  # re-alias
@@ -80,7 +106,7 @@ module Elasticsearch
80
106
 
81
107
  def find_newest_alias_for(the_index_name)
82
108
  aliased_to = nil
83
- aliases = es_client.indices.get_aliases(index: the_index_name)
109
+ aliases = es_client.indices.get_alias(index: the_index_name, name: '*')
84
110
  aliases.each do |k,v|
85
111
  next unless k.match(tmp_index_pattern)
86
112
  aliased_to ||= k
metadata CHANGED
@@ -1,43 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: elasticsearch-indexstager
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Karman
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-25 00:00:00.000000000 Z
11
+ date: 2018-03-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: elasticsearch
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: '6.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: '0'
27
- - !ruby/object:Gem::Dependency
28
- name: about_yml
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
24
+ - - "~>"
39
25
  - !ruby/object:Gem::Version
40
- version: '0'
26
+ version: '6.0'
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: bundler
43
29
  requirement: !ruby/object:Gem::Requirement
@@ -56,28 +42,28 @@ dependencies:
56
42
  name: rake
57
43
  requirement: !ruby/object:Gem::Requirement
58
44
  requirements:
59
- - - ">="
45
+ - - "~>"
60
46
  - !ruby/object:Gem::Version
61
47
  version: '0'
62
48
  type: :development
63
49
  prerelease: false
64
50
  version_requirements: !ruby/object:Gem::Requirement
65
51
  requirements:
66
- - - ">="
52
+ - - "~>"
67
53
  - !ruby/object:Gem::Version
68
54
  version: '0'
69
55
  - !ruby/object:Gem::Dependency
70
56
  name: rspec
71
57
  requirement: !ruby/object:Gem::Requirement
72
58
  requirements:
73
- - - ">="
59
+ - - "~>"
74
60
  - !ruby/object:Gem::Version
75
61
  version: '0'
76
62
  type: :development
77
63
  prerelease: false
78
64
  version_requirements: !ruby/object:Gem::Requirement
79
65
  requirements:
80
- - - ">="
66
+ - - "~>"
81
67
  - !ruby/object:Gem::Version
82
68
  version: '0'
83
69
  - !ruby/object:Gem::Dependency
@@ -96,7 +82,7 @@ dependencies:
96
82
  version: '0'
97
83
  description: manage Elasticsearch indexes using staging pattern
98
84
  email:
99
- - peter.karman@gsa.gov
85
+ - karpet@peknet.com
100
86
  executables: []
101
87
  extensions: []
102
88
  extra_rdoc_files: []
@@ -105,7 +91,7 @@ files:
105
91
  - LICENSE.md
106
92
  - README.md
107
93
  - lib/elasticsearch/index_stager.rb
108
- homepage: https://github.com/18F/elasticsearch-indexstager-gem
94
+ homepage: https://github.com/karpet/elasticsearch-indexstager-gem
109
95
  licenses:
110
96
  - CC0
111
97
  metadata: {}
@@ -125,9 +111,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
125
111
  version: '0'
126
112
  requirements: []
127
113
  rubyforge_project:
128
- rubygems_version: 2.4.5.1
114
+ rubygems_version: 2.6.13
129
115
  signing_key:
130
116
  specification_version: 4
131
117
  summary: manage Elasticsearch indexes using staging pattern
132
118
  test_files: []
133
- has_rdoc: