elastomer-client 0.5.1 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -0
- data/Rakefile +1 -1
- data/lib/elastomer/client/cluster.rb +9 -0
- data/lib/elastomer/client/scroller.rb +11 -23
- data/lib/elastomer/version.rb +1 -1
- data/script/cibuild +0 -5
- data/script/test +1 -1
- data/test/client/index_test.rb +8 -0
- data/test/client/repository_test.rb +4 -0
- data/test/client/scroller_test.rb +10 -0
- data/test/client/snapshot_test.rb +6 -2
- data/test/test_helper.rb +37 -7
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 20de9fda77111f1c5d50ccbbb63dd8b3316f7149
|
4
|
+
data.tar.gz: 97b970b60153c6069c44d866b00c08ba0542ae24
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 25dd4d57d43c60e279eaec42708d0ba8f12ad3d085baa64d9b68c489e31f5f152e54b5663fad14afe1c459245e7ca9237082fe41d834a8126be3c09f3d311899
|
7
|
+
data.tar.gz: 751eeeb151a1e582903b84f6383de2f7ff47f39db86afeb582fed185775b6881b915ddaf80c3326930f988bf21d558eb3f66dae82f26b018d4b9c641b64d6b50
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
## 0.6.0 (2015-09-11)
|
2
|
+
- Support all URL parameters when using `Client.#scroll`
|
3
|
+
- BREAKING: Moved some `Scroller` reader methods into `Scroller.opts`
|
4
|
+
|
5
|
+
## 0.5.1 (2015-04-03)
|
6
|
+
- Add response body to notification payload
|
7
|
+
|
1
8
|
## 0.5.0 (2015-01-21)
|
2
9
|
- BREAKING: rename action.available notification to action.ping
|
3
10
|
- Index Component
|
data/Rakefile
CHANGED
@@ -84,6 +84,15 @@ module Elastomer
|
|
84
84
|
response.body
|
85
85
|
end
|
86
86
|
|
87
|
+
# Returns `true` if there items in the pending task list. Returns `false`
|
88
|
+
# if the pending task list is empty. Returns `nil` if the response body
|
89
|
+
# does not contain the "tasks" field.
|
90
|
+
def pending_tasks?
|
91
|
+
hash = pending_tasks
|
92
|
+
return nil unless hash.key? "tasks"
|
93
|
+
hash["tasks"].length > 0
|
94
|
+
end
|
95
|
+
|
87
96
|
# Cluster wide settings that have been modified via the update API.
|
88
97
|
#
|
89
98
|
# params - Parameters Hash
|
@@ -101,6 +101,13 @@ module Elastomer
|
|
101
101
|
response.body
|
102
102
|
end
|
103
103
|
|
104
|
+
DEFAULT_OPTS = {
|
105
|
+
:index => nil,
|
106
|
+
:type => nil,
|
107
|
+
:scroll => '5m',
|
108
|
+
:size => 50,
|
109
|
+
}.freeze
|
110
|
+
|
104
111
|
class Scroller
|
105
112
|
# Create a new scroller that can be used to iterate over all the documents
|
106
113
|
# returned by the `query`. The Scroller supports both the 'scan' and the
|
@@ -128,19 +135,14 @@ module Elastomer
|
|
128
135
|
#
|
129
136
|
def initialize( client, query, opts = {} )
|
130
137
|
@client = client
|
131
|
-
@query = query
|
132
138
|
|
133
|
-
@
|
134
|
-
@type = opts.fetch(:type, nil)
|
135
|
-
@scroll = opts.fetch(:scroll, '5m')
|
136
|
-
@size = opts.fetch(:size, 50)
|
137
|
-
@search_type = opts.fetch(:search_type, nil)
|
139
|
+
@opts = DEFAULT_OPTS.merge({ :body => query }).merge(opts)
|
138
140
|
|
139
141
|
@scroll_id = nil
|
140
142
|
@offset = 0
|
141
143
|
end
|
142
144
|
|
143
|
-
attr_reader :client, :query, :
|
145
|
+
attr_reader :client, :query, :scroll_id
|
144
146
|
|
145
147
|
# Iterate over all the search results from the scan query.
|
146
148
|
#
|
@@ -203,33 +205,19 @@ module Elastomer
|
|
203
205
|
# Returns the response body as a Hash.
|
204
206
|
def do_scroll
|
205
207
|
if scroll_id.nil?
|
206
|
-
body = client.start_scroll(
|
208
|
+
body = client.start_scroll(@opts)
|
207
209
|
if body['hits']['hits'].empty?
|
208
210
|
@scroll_id = body['_scroll_id']
|
209
211
|
return do_scroll
|
210
212
|
end
|
211
213
|
else
|
212
|
-
body = client.continue_scroll(scroll_id, scroll)
|
214
|
+
body = client.continue_scroll(scroll_id, @opts[:scroll])
|
213
215
|
end
|
214
216
|
|
215
217
|
@scroll_id = body['_scroll_id']
|
216
218
|
body
|
217
219
|
end
|
218
220
|
|
219
|
-
# Internal: Returns the options Hash that should be passed to the initial
|
220
|
-
# `Client#start_scroll` method call.
|
221
|
-
def scroll_opts
|
222
|
-
hash = {
|
223
|
-
:scroll => scroll,
|
224
|
-
:size => size,
|
225
|
-
:index => index,
|
226
|
-
:type => type,
|
227
|
-
:body => query
|
228
|
-
}
|
229
|
-
hash[:search_type] = search_type unless search_type.nil?
|
230
|
-
hash
|
231
|
-
end
|
232
|
-
|
233
221
|
end # Scroller
|
234
222
|
end # Client
|
235
223
|
end # Elastomer
|
data/lib/elastomer/version.rb
CHANGED
data/script/cibuild
CHANGED
@@ -12,11 +12,6 @@ PATH="$(pwd)/bin:$(pwd)/script:/usr/share/rbenv/shims:$PATH"
|
|
12
12
|
git log -n 1 || true
|
13
13
|
echo
|
14
14
|
|
15
|
-
# Create a snapshot dir and make it world writable
|
16
|
-
export SNAPSHOT_DIR=/tmp/elastomer-client-snapshot-test
|
17
|
-
mkdir -p $SNAPSHOT_DIR
|
18
|
-
chmod a+rw $SNAPSHOT_DIR
|
19
|
-
|
20
15
|
result=0
|
21
16
|
|
22
17
|
export RBENV_VERSION="2.1.1-github"
|
data/script/test
CHANGED
data/test/client/index_test.rb
CHANGED
@@ -127,6 +127,10 @@ describe Elastomer::Client::Index do
|
|
127
127
|
end
|
128
128
|
|
129
129
|
it 'updates document mappings' do
|
130
|
+
unless es_version_supports_update_mapping_with__all_disabled?
|
131
|
+
skip "Mapping Update API is broken in this ES version."
|
132
|
+
end
|
133
|
+
|
130
134
|
@index.create(
|
131
135
|
:mappings => {
|
132
136
|
:doco => {
|
@@ -154,6 +158,10 @@ describe Elastomer::Client::Index do
|
|
154
158
|
end
|
155
159
|
|
156
160
|
it 'updates document mappings with .put_mapping' do
|
161
|
+
unless es_version_supports_update_mapping_with__all_disabled?
|
162
|
+
skip "Mapping Update API is broken in this ES version."
|
163
|
+
end
|
164
|
+
|
157
165
|
@index.create(
|
158
166
|
:mappings => {
|
159
167
|
:doco => {
|
@@ -5,6 +5,10 @@ describe Elastomer::Client::Repository do
|
|
5
5
|
if es_version_1_x?
|
6
6
|
|
7
7
|
before do
|
8
|
+
if !run_snapshot_tests?
|
9
|
+
skip "To enable snapshot tests, add a path.repo setting to your elasticsearch.yml file."
|
10
|
+
end
|
11
|
+
|
8
12
|
@name = 'elastomer-repository-test'
|
9
13
|
@repo = $client.repository(@name)
|
10
14
|
end
|
@@ -83,6 +83,16 @@ describe Elastomer::Client::Scroller do
|
|
83
83
|
assert_equal expected, tweets
|
84
84
|
end
|
85
85
|
|
86
|
+
it 'propagates URL query strings' do
|
87
|
+
scan = @index.scan(nil, { :q => 'author:pea53 || title:17' })
|
88
|
+
|
89
|
+
counts = {'tweet' => 0, 'book' => 0}
|
90
|
+
scan.each_document { |h| counts[h['_type']] += 1 }
|
91
|
+
|
92
|
+
assert_equal 50, counts['tweet']
|
93
|
+
assert_equal 1, counts['book']
|
94
|
+
end
|
95
|
+
|
86
96
|
def populate!
|
87
97
|
h = @index.bulk do |b|
|
88
98
|
50.times { |num|
|
@@ -4,13 +4,17 @@ require File.expand_path('../../test_helper', __FILE__)
|
|
4
4
|
describe Elastomer::Client::Snapshot do
|
5
5
|
if es_version_1_x?
|
6
6
|
before do
|
7
|
+
if !run_snapshot_tests?
|
8
|
+
skip "To enable snapshot tests, add a path.repo setting to your elasticsearch.yml file."
|
9
|
+
end
|
10
|
+
|
7
11
|
@index_name = 'elastomer-snapshot-test-index'
|
8
12
|
@index = $client.index(@index_name)
|
9
13
|
@name = 'elastomer-test'
|
10
14
|
end
|
11
15
|
|
12
16
|
after do
|
13
|
-
@index.delete if @index.exists?
|
17
|
+
@index.delete if @index && @index.exists?
|
14
18
|
end
|
15
19
|
|
16
20
|
it 'determines if a snapshot exists' do
|
@@ -99,7 +103,7 @@ describe Elastomer::Client::Snapshot do
|
|
99
103
|
end
|
100
104
|
|
101
105
|
after do
|
102
|
-
@restored_index.delete if @restored_index.exists?
|
106
|
+
@restored_index.delete if @restored_index && @restored_index.exists?
|
103
107
|
end
|
104
108
|
|
105
109
|
it 'restores snapshots with options' do
|
data/test/test_helper.rb
CHANGED
@@ -11,8 +11,6 @@ if ENV['COVERAGE'] == 'true'
|
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
|
-
ENV['SNAPSHOT_DIR'] ||= '/tmp/elastomer-client-snapshot-test'
|
15
|
-
|
16
14
|
require 'minitest/spec'
|
17
15
|
require 'minitest/autorun'
|
18
16
|
|
@@ -92,12 +90,12 @@ def es_version_1_x?
|
|
92
90
|
end
|
93
91
|
|
94
92
|
# Elasticsearch 1.4 changed the response body for interacting with index
|
95
|
-
#
|
96
|
-
# longer returned in the
|
93
|
+
# aliases. If an index does not contain any aliases, then an "aliases" key is no
|
94
|
+
# longer returned in the response.
|
97
95
|
#
|
98
|
-
#
|
96
|
+
# Returns `true` if the response contains an "aliases" key.
|
99
97
|
def es_version_always_returns_aliases?
|
100
|
-
$client.semantic_version
|
98
|
+
$client.semantic_version < '1.4.0' ||
|
101
99
|
$client.semantic_version >= '1.4.3'
|
102
100
|
end
|
103
101
|
|
@@ -113,8 +111,40 @@ def es_version_supports_gateway_snapshots?
|
|
113
111
|
$client.semantic_version <= '1.2.0'
|
114
112
|
end
|
115
113
|
|
114
|
+
# Elasticsearch 1.4.0 had a bug in its handling of the Mapping API where it
|
115
|
+
# would not accept an Update request if the index had been created with the
|
116
|
+
# _all field set to disabled. This bug was fixed in 1.4.1.
|
117
|
+
#
|
118
|
+
# See: https://github.com/elastic/elasticsearch/pull/8426
|
119
|
+
def es_version_supports_update_mapping_with__all_disabled?
|
120
|
+
$client.semantic_version != '1.4.0'
|
121
|
+
end
|
122
|
+
|
123
|
+
# Elasticsearch 1.6 requires the repo.path setting when creating
|
124
|
+
# FS repositories.
|
125
|
+
def es_version_requires_repo_path?
|
126
|
+
$client.semantic_version >= '1.6.0'
|
127
|
+
end
|
128
|
+
|
129
|
+
def run_snapshot_tests?
|
130
|
+
unless defined? $run_snapshot_tests
|
131
|
+
begin
|
132
|
+
create_repo("elastomer-client-snapshot-test")
|
133
|
+
$run_snapshot_tests = true
|
134
|
+
rescue Elastomer::Client::Error => e
|
135
|
+
puts "Could not create a snapshot repo. Snapshot tests will be disabled."
|
136
|
+
puts "To enable snapshot tests, add a path.repo setting to your elasticsearch.yml file."
|
137
|
+
$run_snapshot_tests = false
|
138
|
+
ensure
|
139
|
+
delete_repo("elastomer-client-snapshot-test")
|
140
|
+
end
|
141
|
+
end
|
142
|
+
$run_snapshot_tests
|
143
|
+
end
|
144
|
+
|
116
145
|
def create_repo(name, settings = {})
|
117
|
-
|
146
|
+
location = File.join(*[ENV['SNAPSHOT_DIR'], name].compact)
|
147
|
+
default_settings = {:type => 'fs', :settings => {:location => location}}
|
118
148
|
$client.repository(name).create(default_settings.merge(settings))
|
119
149
|
end
|
120
150
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: elastomer-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tim Pease
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-
|
12
|
+
date: 2015-09-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: addressable
|
@@ -217,7 +217,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
217
217
|
version: '0'
|
218
218
|
requirements: []
|
219
219
|
rubyforge_project:
|
220
|
-
rubygems_version: 2.2.
|
220
|
+
rubygems_version: 2.2.3
|
221
221
|
signing_key:
|
222
222
|
specification_version: 4
|
223
223
|
summary: A library for interacting with Elasticsearch
|