elasticsearch-extensions 0.0.31 → 0.0.33
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +23 -6
- data/LICENSE.txt +199 -10
- data/README.md +6 -21
- data/Rakefile +21 -4
- data/elasticsearch-extensions.gemspec +37 -29
- data/lib/elasticsearch/extensions/ansi/actions.rb +18 -1
- data/lib/elasticsearch/extensions/ansi/helpers.rb +17 -0
- data/lib/elasticsearch/extensions/ansi/response.rb +17 -0
- data/lib/elasticsearch/extensions/ansi.rb +17 -0
- data/lib/elasticsearch/extensions/backup.rb +26 -1
- data/lib/elasticsearch/extensions/reindex.rb +32 -15
- data/lib/elasticsearch/extensions/test/cluster/tasks.rb +17 -0
- data/lib/elasticsearch/extensions/test/cluster.rb +40 -17
- data/lib/elasticsearch/extensions/test/profiling.rb +17 -0
- data/lib/elasticsearch/extensions/test/startup_shutdown.rb +17 -0
- data/lib/elasticsearch/extensions/version.rb +18 -1
- data/lib/elasticsearch/extensions.rb +17 -0
- data/lib/elasticsearch-extensions.rb +5 -0
- data/test/ansi/unit/ansi_test.rb +23 -6
- data/test/backup/unit/backup_test.rb +21 -0
- data/test/reindex/integration/reindex_test.rb +27 -10
- data/test/reindex/unit/reindex_test.rb +21 -4
- data/test/test/cluster/integration/cluster_test.rb +17 -0
- data/test/test/cluster/unit/cluster_test.rb +35 -0
- data/test/test_helper.rb +27 -2
- metadata +20 -17
@@ -1,3 +1,20 @@
|
|
1
|
+
# Licensed to Elasticsearch B.V. under one or more contributor
|
2
|
+
# license agreements. See the NOTICE file distributed with
|
3
|
+
# this work for additional information regarding copyright
|
4
|
+
# ownership. Elasticsearch B.V. licenses this file to you under
|
5
|
+
# the Apache License, Version 2.0 (the "License"); you may
|
6
|
+
# not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing,
|
12
|
+
# software distributed under the License is distributed on an
|
13
|
+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
14
|
+
# KIND, either express or implied. See the License for the
|
15
|
+
# specific language governing permissions and limitations
|
16
|
+
# under the License.
|
17
|
+
|
1
18
|
# encoding: utf-8
|
2
19
|
|
3
20
|
module Elasticsearch
|
@@ -23,10 +40,10 @@ module Elasticsearch
|
|
23
40
|
end; extend self
|
24
41
|
|
25
42
|
module API
|
26
|
-
# Copy documents from one index into another and refresh the
|
43
|
+
# Copy documents from one index into another and refresh the destination index
|
27
44
|
#
|
28
45
|
# @example
|
29
|
-
# client.reindex source: { index: 'test1' },
|
46
|
+
# client.reindex source: { index: 'test1' }, dest: { index: 'test2' }, refresh: true
|
30
47
|
#
|
31
48
|
# The method allows all the options as {Reindex::Reindex.new}.
|
32
49
|
#
|
@@ -50,40 +67,40 @@ module Elasticsearch
|
|
50
67
|
# client = Elasticsearch::Client.new
|
51
68
|
# reindex = Elasticsearch::Extensions::Reindex.new \
|
52
69
|
# source: { index: 'test1', client: client },
|
53
|
-
#
|
70
|
+
# dest: { index: 'test2' }
|
54
71
|
#
|
55
72
|
# reindex.perform
|
56
73
|
#
|
57
74
|
# @example Copy documents to a different cluster
|
58
75
|
#
|
59
76
|
# source_client = Elasticsearch::Client.new url: 'http://localhost:9200'
|
60
|
-
#
|
77
|
+
# destination_client = Elasticsearch::Client.new url: 'http://localhost:9250'
|
61
78
|
#
|
62
79
|
# reindex = Elasticsearch::Extensions::Reindex.new \
|
63
80
|
# source: { index: 'test', client: source_client },
|
64
|
-
#
|
81
|
+
# dest: { index: 'test', client: destination_client }
|
65
82
|
# reindex.perform
|
66
83
|
#
|
67
84
|
# @example Transform the documents during re-indexing
|
68
85
|
#
|
69
86
|
# reindex = Elasticsearch::Extensions::Reindex.new \
|
70
87
|
# source: { index: 'test1', client: client },
|
71
|
-
#
|
88
|
+
# dest: { index: 'test2' },
|
72
89
|
# transform: lambda { |doc| doc['_source']['category'].upcase! }
|
73
90
|
#
|
74
91
|
#
|
75
92
|
# The reindexing process works by "scrolling" an index and sending
|
76
|
-
# batches via the "Bulk" API to the
|
93
|
+
# batches via the "Bulk" API to the destination index/cluster
|
77
94
|
#
|
78
95
|
# @option arguments [String] :source The source index/cluster definition (*Required*)
|
79
|
-
# @option arguments [String] :
|
96
|
+
# @option arguments [String] :dest The destination index/cluster definition (*Required*)
|
80
97
|
# @option arguments [Proc] :transform A block which will be executed for each document
|
81
98
|
# @option arguments [Integer] :batch_size The size of the batch for scroll operation (Default: 1000)
|
82
99
|
# @option arguments [String] :scroll The timeout for the scroll operation (Default: 5min)
|
83
|
-
# @option arguments [Boolean] :refresh Whether to refresh the
|
100
|
+
# @option arguments [Boolean] :refresh Whether to refresh the destination index after
|
84
101
|
# the operation is completed (Default: false)
|
85
102
|
#
|
86
|
-
# Be aware, that if you want to change the
|
103
|
+
# Be aware, that if you want to change the destination index settings and/or mappings,
|
87
104
|
# you have to do so in advance by using the "Indices Create" API.
|
88
105
|
#
|
89
106
|
# Note, that there is a native "Reindex" API in Elasticsearch 2.3.x and higer versions,
|
@@ -98,7 +115,7 @@ module Elasticsearch
|
|
98
115
|
[
|
99
116
|
[:source, :index],
|
100
117
|
[:source, :client],
|
101
|
-
[:
|
118
|
+
[:dest, :index]
|
102
119
|
].each do |required_option|
|
103
120
|
value = required_option.reduce(arguments) { |sum, o| sum = sum[o] ? sum[o] : {} }
|
104
121
|
|
@@ -113,7 +130,7 @@ module Elasticsearch
|
|
113
130
|
refresh: false
|
114
131
|
}.merge(arguments)
|
115
132
|
|
116
|
-
arguments[:
|
133
|
+
arguments[:dest][:client] ||= arguments[:source][:client]
|
117
134
|
end
|
118
135
|
|
119
136
|
# Performs the operation
|
@@ -144,14 +161,14 @@ module Elasticsearch
|
|
144
161
|
output[:errors] += bulk_response['items'].select { |k, v| k.values.first['error'] }.size
|
145
162
|
end
|
146
163
|
|
147
|
-
arguments[:
|
164
|
+
arguments[:dest][:client].indices.refresh index: arguments[:dest][:index] if arguments[:refresh]
|
148
165
|
|
149
166
|
output
|
150
167
|
end
|
151
168
|
|
152
169
|
def __store_batch(documents)
|
153
170
|
body = documents.map do |doc|
|
154
|
-
doc['_index'] = arguments[:
|
171
|
+
doc['_index'] = arguments[:dest][:index]
|
155
172
|
|
156
173
|
arguments[:transform].call(doc) if arguments[:transform]
|
157
174
|
|
@@ -162,7 +179,7 @@ module Elasticsearch
|
|
162
179
|
{ index: doc }
|
163
180
|
end
|
164
181
|
|
165
|
-
arguments[:
|
182
|
+
arguments[:dest][:client].bulk body: body
|
166
183
|
end
|
167
184
|
end
|
168
185
|
end
|
@@ -1,3 +1,20 @@
|
|
1
|
+
# Licensed to Elasticsearch B.V. under one or more contributor
|
2
|
+
# license agreements. See the NOTICE file distributed with
|
3
|
+
# this work for additional information regarding copyright
|
4
|
+
# ownership. Elasticsearch B.V. licenses this file to you under
|
5
|
+
# the Apache License, Version 2.0 (the "License"); you may
|
6
|
+
# not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing,
|
12
|
+
# software distributed under the License is distributed on an
|
13
|
+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
14
|
+
# KIND, either express or implied. See the License for the
|
15
|
+
# specific language governing permissions and limitations
|
16
|
+
# under the License.
|
17
|
+
|
1
18
|
require 'elasticsearch/extensions/test/cluster'
|
2
19
|
|
3
20
|
namespace :elasticsearch do
|
@@ -1,3 +1,20 @@
|
|
1
|
+
# Licensed to Elasticsearch B.V. under one or more contributor
|
2
|
+
# license agreements. See the NOTICE file distributed with
|
3
|
+
# this work for additional information regarding copyright
|
4
|
+
# ownership. Elasticsearch B.V. licenses this file to you under
|
5
|
+
# the Apache License, Version 2.0 (the "License"); you may
|
6
|
+
# not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing,
|
12
|
+
# software distributed under the License is distributed on an
|
13
|
+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
14
|
+
# KIND, either express or implied. See the License for the
|
15
|
+
# specific language governing permissions and limitations
|
16
|
+
# under the License.
|
17
|
+
|
1
18
|
require 'timeout'
|
2
19
|
require 'net/http'
|
3
20
|
require 'fileutils'
|
@@ -21,7 +38,6 @@ end
|
|
21
38
|
module Elasticsearch
|
22
39
|
module Extensions
|
23
40
|
module Test
|
24
|
-
|
25
41
|
# A convenience Ruby class for starting and stopping an Elasticsearch cluster,
|
26
42
|
# eg. for integration tests
|
27
43
|
#
|
@@ -43,12 +59,11 @@ module Elasticsearch
|
|
43
59
|
# @see Cluster#initialize
|
44
60
|
#
|
45
61
|
module Cluster
|
46
|
-
|
47
62
|
# Starts a cluster
|
48
63
|
#
|
49
64
|
# @see Cluster#start
|
50
65
|
#
|
51
|
-
def start(arguments={})
|
66
|
+
def start(arguments = {})
|
52
67
|
Cluster.new(arguments).start
|
53
68
|
end
|
54
69
|
|
@@ -56,7 +71,7 @@ module Elasticsearch
|
|
56
71
|
#
|
57
72
|
# @see Cluster#stop
|
58
73
|
#
|
59
|
-
def stop(arguments={})
|
74
|
+
def stop(arguments = {})
|
60
75
|
Cluster.new(arguments).stop
|
61
76
|
end
|
62
77
|
|
@@ -64,7 +79,7 @@ module Elasticsearch
|
|
64
79
|
#
|
65
80
|
# @see Cluster#running?
|
66
81
|
#
|
67
|
-
def running?(arguments={})
|
82
|
+
def running?(arguments = {})
|
68
83
|
Cluster.new(arguments).running?
|
69
84
|
end
|
70
85
|
|
@@ -72,7 +87,7 @@ module Elasticsearch
|
|
72
87
|
#
|
73
88
|
# @see Cluster#wait_for_green
|
74
89
|
#
|
75
|
-
def wait_for_green(arguments={})
|
90
|
+
def wait_for_green(arguments = {})
|
76
91
|
Cluster.new(arguments).wait_for_green
|
77
92
|
end
|
78
93
|
|
@@ -190,6 +205,7 @@ module Elasticsearch
|
|
190
205
|
-E path.repo=/tmp \
|
191
206
|
-E repositories.url.allowed_urls=http://snapshot.test* \
|
192
207
|
-E discovery.zen.minimum_master_nodes=#{arguments[:number_of_nodes]-1} \
|
208
|
+
#{'-E xpack.security.enabled=false' unless arguments[:dist] == 'oss'} \
|
193
209
|
-E node.max_local_storage_nodes=#{arguments[:number_of_nodes]} \
|
194
210
|
-E logger.level=#{ENV['DEBUG'] ? 'DEBUG' : 'INFO'} \
|
195
211
|
#{arguments[:es_params]}
|
@@ -197,6 +213,7 @@ module Elasticsearch
|
|
197
213
|
}
|
198
214
|
}
|
199
215
|
COMMANDS['7.0'] = COMMANDS['6.0'].clone
|
216
|
+
COMMANDS['8.0'] = COMMANDS['7.0'].clone
|
200
217
|
COMMANDS.freeze
|
201
218
|
|
202
219
|
# Create a new instance of the Cluster class
|
@@ -238,7 +255,11 @@ module Elasticsearch
|
|
238
255
|
@arguments[:network_host] ||= ENV.fetch('TEST_CLUSTER_NETWORK_HOST', __default_network_host)
|
239
256
|
@arguments[:quiet] ||= ! ENV.fetch('QUIET', '').empty?
|
240
257
|
|
241
|
-
@clear_cluster =
|
258
|
+
@clear_cluster = if @arguments[:clear_cluster].nil?
|
259
|
+
(ENV.fetch('TEST_CLUSTER_CLEAR', 'true') != 'false')
|
260
|
+
else
|
261
|
+
!!@arguments[:clear_cluster]
|
262
|
+
end
|
242
263
|
|
243
264
|
# Make sure `cluster_name` is not dangerous
|
244
265
|
raise ArgumentError, "The `cluster_name` argument cannot be empty string or a slash" \
|
@@ -408,7 +429,7 @@ module Elasticsearch
|
|
408
429
|
'0.0.0.0'
|
409
430
|
when /^2/
|
410
431
|
'_local_'
|
411
|
-
when /^5|^6|^7/
|
432
|
+
when /^5|^6|^7|^8/
|
412
433
|
'_local_'
|
413
434
|
else
|
414
435
|
raise RuntimeError, "Cannot determine default network host from version [#{version}]"
|
@@ -455,8 +476,8 @@ module Elasticsearch
|
|
455
476
|
arguments[:version]
|
456
477
|
elsif File.exist?(path_to_lib) && !(jar = Dir.entries(path_to_lib).select { |f| f =~ /^elasticsearch\-\d/ }.first).nil?
|
457
478
|
__log "Determining version from [#{jar}]" if ENV['DEBUG']
|
458
|
-
if m = jar.match(/elasticsearch\-(\
|
459
|
-
m[
|
479
|
+
if m = jar.match(/elasticsearch\-(\d+\.\d+\.\d+).*/)
|
480
|
+
m[1]
|
460
481
|
else
|
461
482
|
raise RuntimeError, "Cannot determine Elasticsearch version from jar [#{jar}]"
|
462
483
|
end
|
@@ -508,7 +529,9 @@ module Elasticsearch
|
|
508
529
|
raise RuntimeError, "Cannot determine Elasticsearch version from [#{arguments[:command]} --version] or [#{arguments[:command]} -v]"
|
509
530
|
end
|
510
531
|
|
511
|
-
|
532
|
+
@dist = output.match(/Build: ([a-z]+)\//)&.[](1)
|
533
|
+
|
534
|
+
if(m = output.match(/Version: (\d+\.\d+.\d+).*,/))
|
512
535
|
m[1]
|
513
536
|
else
|
514
537
|
raise RuntimeError, "Cannot determine Elasticsearch version from elasticsearch --version output [#{output}]"
|
@@ -528,6 +551,8 @@ module Elasticsearch
|
|
528
551
|
'6.0'
|
529
552
|
when /^7\..*/
|
530
553
|
'7.0'
|
554
|
+
when /^8\..*/
|
555
|
+
'8.0'
|
531
556
|
else
|
532
557
|
raise RuntimeError, "Cannot determine major version from [#{version}]"
|
533
558
|
end
|
@@ -540,11 +565,10 @@ module Elasticsearch
|
|
540
565
|
# @return String
|
541
566
|
#
|
542
567
|
def __command(version, arguments, node_number)
|
543
|
-
|
544
|
-
|
545
|
-
|
546
|
-
|
547
|
-
end
|
568
|
+
raise ArgumentError, "Cannot find command for version [#{version}]" unless (command = COMMANDS[version])
|
569
|
+
|
570
|
+
arguments.merge!({ dist: @dist })
|
571
|
+
command.call(arguments, node_number)
|
548
572
|
end
|
549
573
|
|
550
574
|
# Blocks the process and waits for the cluster to be in a "green" state
|
@@ -646,7 +670,6 @@ module Elasticsearch
|
|
646
670
|
FileUtils.rm_rf arguments[:path_data]
|
647
671
|
end
|
648
672
|
|
649
|
-
|
650
673
|
# Check whether process for PIDs are running
|
651
674
|
#
|
652
675
|
# @api private
|
@@ -1,3 +1,20 @@
|
|
1
|
+
# Licensed to Elasticsearch B.V. under one or more contributor
|
2
|
+
# license agreements. See the NOTICE file distributed with
|
3
|
+
# this work for additional information regarding copyright
|
4
|
+
# ownership. Elasticsearch B.V. licenses this file to you under
|
5
|
+
# the Apache License, Version 2.0 (the "License"); you may
|
6
|
+
# not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing,
|
12
|
+
# software distributed under the License is distributed on an
|
13
|
+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
14
|
+
# KIND, either express or implied. See the License for the
|
15
|
+
# specific language governing permissions and limitations
|
16
|
+
# under the License.
|
17
|
+
|
1
18
|
require 'ruby-prof'
|
2
19
|
require 'benchmark'
|
3
20
|
require 'ansi'
|
@@ -1,3 +1,20 @@
|
|
1
|
+
# Licensed to Elasticsearch B.V. under one or more contributor
|
2
|
+
# license agreements. See the NOTICE file distributed with
|
3
|
+
# this work for additional information regarding copyright
|
4
|
+
# ownership. Elasticsearch B.V. licenses this file to you under
|
5
|
+
# the Apache License, Version 2.0 (the "License"); you may
|
6
|
+
# not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing,
|
12
|
+
# software distributed under the License is distributed on an
|
13
|
+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
14
|
+
# KIND, either express or implied. See the License for the
|
15
|
+
# specific language governing permissions and limitations
|
16
|
+
# under the License.
|
17
|
+
|
1
18
|
module Elasticsearch
|
2
19
|
module Extensions
|
3
20
|
module Test
|
@@ -1,5 +1,22 @@
|
|
1
|
+
# Licensed to Elasticsearch B.V. under one or more contributor
|
2
|
+
# license agreements. See the NOTICE file distributed with
|
3
|
+
# this work for additional information regarding copyright
|
4
|
+
# ownership. Elasticsearch B.V. licenses this file to you under
|
5
|
+
# the Apache License, Version 2.0 (the "License"); you may
|
6
|
+
# not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing,
|
12
|
+
# software distributed under the License is distributed on an
|
13
|
+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
14
|
+
# KIND, either express or implied. See the License for the
|
15
|
+
# specific language governing permissions and limitations
|
16
|
+
# under the License.
|
17
|
+
|
1
18
|
module Elasticsearch
|
2
19
|
module Extensions
|
3
|
-
VERSION =
|
20
|
+
VERSION = '0.0.33'.freeze
|
4
21
|
end
|
5
22
|
end
|
@@ -1,3 +1,20 @@
|
|
1
|
+
# Licensed to Elasticsearch B.V. under one or more contributor
|
2
|
+
# license agreements. See the NOTICE file distributed with
|
3
|
+
# this work for additional information regarding copyright
|
4
|
+
# ownership. Elasticsearch B.V. licenses this file to you under
|
5
|
+
# the Apache License, Version 2.0 (the "License"); you may
|
6
|
+
# not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing,
|
12
|
+
# software distributed under the License is distributed on an
|
13
|
+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
14
|
+
# KIND, either express or implied. See the License for the
|
15
|
+
# specific language governing permissions and limitations
|
16
|
+
# under the License.
|
17
|
+
|
1
18
|
# encoding: utf-8
|
2
19
|
|
3
20
|
require 'elasticsearch'
|
data/test/ansi/unit/ansi_test.rb
CHANGED
@@ -1,3 +1,20 @@
|
|
1
|
+
# Licensed to Elasticsearch B.V. under one or more contributor
|
2
|
+
# license agreements. See the NOTICE file distributed with
|
3
|
+
# this work for additional information regarding copyright
|
4
|
+
# ownership. Elasticsearch B.V. licenses this file to you under
|
5
|
+
# the Apache License, Version 2.0 (the "License"); you may
|
6
|
+
# not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing,
|
12
|
+
# software distributed under the License is distributed on an
|
13
|
+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
14
|
+
# KIND, either express or implied. See the License for the
|
15
|
+
# specific language governing permissions and limitations
|
16
|
+
# under the License.
|
17
|
+
|
1
18
|
require 'test_helper'
|
2
19
|
require 'elasticsearch/extensions/ansi'
|
3
20
|
|
@@ -7,10 +24,10 @@ class Elasticsearch::Extensions::AnsiTest < Elasticsearch::Test::UnitTestCase
|
|
7
24
|
@client = Elasticsearch::Client.new
|
8
25
|
@client.stubs(:perform_request).returns \
|
9
26
|
Elasticsearch::Transport::Transport::Response.new(200, { "ok" => true, "status" => 200, "name" => "Hit-Maker",
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
27
|
+
"version" => { "number" => "0.90.7",
|
28
|
+
"build_hash" => "abc123",
|
29
|
+
"build_timestamp"=>"2013-11-13T12:06:54Z", "build_snapshot"=>false, "lucene_version"=>"4.5.1" },
|
30
|
+
"tagline"=>"You Know, for Search" })
|
14
31
|
end
|
15
32
|
|
16
33
|
should "wrap the response" do
|
@@ -30,7 +47,7 @@ class Elasticsearch::Extensions::AnsiTest < Elasticsearch::Test::UnitTestCase
|
|
30
47
|
should "call the 'awesome_inspect' method when available and no handler found" do
|
31
48
|
@client.stubs(:perform_request).returns \
|
32
49
|
Elasticsearch::Transport::Transport::Response.new(200, {"index-1"=>{"aliases"=>{}}})
|
33
|
-
response = @client.
|
50
|
+
response = @client.cat.aliases
|
34
51
|
|
35
52
|
response.instance_eval do
|
36
53
|
def awesome_inspect; "---PRETTY---"; end
|
@@ -41,7 +58,7 @@ class Elasticsearch::Extensions::AnsiTest < Elasticsearch::Test::UnitTestCase
|
|
41
58
|
should "call `to_s` method when no pretty printer or handler found" do
|
42
59
|
@client.stubs(:perform_request).returns \
|
43
60
|
Elasticsearch::Transport::Transport::Response.new(200, {"index-1"=>{"aliases"=>{}}})
|
44
|
-
response = @client.
|
61
|
+
response = @client.cat.aliases
|
45
62
|
|
46
63
|
assert_equal '{"index-1"=>{"aliases"=>{}}}', response.to_ansi
|
47
64
|
end
|
@@ -1,3 +1,20 @@
|
|
1
|
+
# Licensed to Elasticsearch B.V. under one or more contributor
|
2
|
+
# license agreements. See the NOTICE file distributed with
|
3
|
+
# this work for additional information regarding copyright
|
4
|
+
# ownership. Elasticsearch B.V. licenses this file to you under
|
5
|
+
# the Apache License, Version 2.0 (the "License"); you may
|
6
|
+
# not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing,
|
12
|
+
# software distributed under the License is distributed on an
|
13
|
+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
14
|
+
# KIND, either express or implied. See the License for the
|
15
|
+
# specific language governing permissions and limitations
|
16
|
+
# under the License.
|
17
|
+
|
1
18
|
require 'test_helper'
|
2
19
|
require 'logger'
|
3
20
|
|
@@ -106,5 +123,9 @@ class Elasticsearch::Extensions::BackupTest < Elasticsearch::Test::UnitTestCase
|
|
106
123
|
|
107
124
|
@subject.__perform_single
|
108
125
|
end
|
126
|
+
|
127
|
+
should "sanitize filename" do
|
128
|
+
assert_equal "foo-bar-baz", @subject.__sanitize_filename("foo/bar\nbaz")
|
129
|
+
end
|
109
130
|
end
|
110
131
|
end
|
@@ -1,3 +1,20 @@
|
|
1
|
+
# Licensed to Elasticsearch B.V. under one or more contributor
|
2
|
+
# license agreements. See the NOTICE file distributed with
|
3
|
+
# this work for additional information regarding copyright
|
4
|
+
# ownership. Elasticsearch B.V. licenses this file to you under
|
5
|
+
# the Apache License, Version 2.0 (the "License"); you may
|
6
|
+
# not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing,
|
12
|
+
# software distributed under the License is distributed on an
|
13
|
+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
14
|
+
# KIND, either express or implied. See the License for the
|
15
|
+
# specific language governing permissions and limitations
|
16
|
+
# under the License.
|
17
|
+
|
1
18
|
require 'test_helper'
|
2
19
|
require 'elasticsearch/extensions/reindex'
|
3
20
|
|
@@ -17,7 +34,7 @@ class Elasticsearch::Extensions::ReindexIntegrationTest < Elasticsearch::Test::I
|
|
17
34
|
ANSI.ansi(severity[0] + ' ', color, :faint) + ANSI.ansi(msg, :white, :faint) + "\n"
|
18
35
|
end
|
19
36
|
|
20
|
-
@client = Elasticsearch::Client.new host: "
|
37
|
+
@client = Elasticsearch::Client.new host: "#{TEST_HOST}:#{TEST_PORT}", logger: @logger
|
21
38
|
@client.indices.delete index: '_all'
|
22
39
|
|
23
40
|
@client.index index: 'test1', type: 'd', id: 1, body: { title: 'TEST 1', category: 'one' }
|
@@ -37,53 +54,53 @@ class Elasticsearch::Extensions::ReindexIntegrationTest < Elasticsearch::Test::I
|
|
37
54
|
should "copy documents from one index to another" do
|
38
55
|
reindex = Elasticsearch::Extensions::Reindex.new \
|
39
56
|
source: { index: 'test1', client: @client },
|
40
|
-
|
57
|
+
dest: { index: 'test2' },
|
41
58
|
batch_size: 2,
|
42
59
|
refresh: true
|
43
60
|
|
44
61
|
result = reindex.perform
|
45
62
|
|
46
63
|
assert_equal 0, result[:errors]
|
47
|
-
assert_equal 3, @client.search(index: 'test2')['hits']['total']
|
64
|
+
assert_equal 3, @client.search(index: 'test2')['hits']['total']['value']
|
48
65
|
end
|
49
66
|
|
50
67
|
should "transform documents with a lambda" do
|
51
68
|
reindex = Elasticsearch::Extensions::Reindex.new \
|
52
69
|
source: { index: 'test1', client: @client },
|
53
|
-
|
70
|
+
dest: { index: 'test2' },
|
54
71
|
transform: lambda { |d| d['_source']['category'].upcase! },
|
55
72
|
refresh: true
|
56
73
|
|
57
74
|
result = reindex.perform
|
58
75
|
|
59
76
|
assert_equal 0, result[:errors]
|
60
|
-
assert_equal 3, @client.search(index: 'test2')['hits']['total']
|
77
|
+
assert_equal 3, @client.search(index: 'test2')['hits']['total']['value']
|
61
78
|
assert_equal 'ONE', @client.get(index: 'test2', type: 'd', id: 1)['_source']['category']
|
62
79
|
end
|
63
80
|
|
64
81
|
should "return the number of errors" do
|
65
|
-
@client.indices.create index: 'test3', body: { mappings: {
|
82
|
+
@client.indices.create index: 'test3', body: { mappings: { properties: { category: { type: 'integer' } }}}
|
66
83
|
@client.cluster.health wait_for_status: 'yellow'
|
67
84
|
|
68
85
|
reindex = Elasticsearch::Extensions::Reindex.new \
|
69
86
|
source: { index: 'test1', client: @client },
|
70
|
-
|
87
|
+
dest: { index: 'test3' }
|
71
88
|
|
72
89
|
result = reindex.perform
|
73
90
|
|
74
91
|
@client.indices.refresh index: 'test3'
|
75
92
|
|
76
93
|
assert_equal 3, result[:errors]
|
77
|
-
assert_equal 0, @client.search(index: 'test3')['hits']['total']
|
94
|
+
assert_equal 0, @client.search(index: 'test3')['hits']['total']['value']
|
78
95
|
end
|
79
96
|
|
80
97
|
should "reindex via the API integration" do
|
81
98
|
@client.indices.create index: 'test4'
|
82
99
|
|
83
|
-
@client.reindex source: { index: 'test1' },
|
100
|
+
@client.reindex source: { index: 'test1' }, dest: { index: 'test4' }
|
84
101
|
@client.indices.refresh index: 'test4'
|
85
102
|
|
86
|
-
assert_equal 3, @client.search(index: 'test4')['hits']['total']
|
103
|
+
assert_equal 3, @client.search(index: 'test4')['hits']['total']['value']
|
87
104
|
end
|
88
105
|
end
|
89
106
|
|
@@ -1,9 +1,26 @@
|
|
1
|
+
# Licensed to Elasticsearch B.V. under one or more contributor
|
2
|
+
# license agreements. See the NOTICE file distributed with
|
3
|
+
# this work for additional information regarding copyright
|
4
|
+
# ownership. Elasticsearch B.V. licenses this file to you under
|
5
|
+
# the Apache License, Version 2.0 (the "License"); you may
|
6
|
+
# not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing,
|
12
|
+
# software distributed under the License is distributed on an
|
13
|
+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
14
|
+
# KIND, either express or implied. See the License for the
|
15
|
+
# specific language governing permissions and limitations
|
16
|
+
# under the License.
|
17
|
+
|
1
18
|
require 'test_helper'
|
2
19
|
require 'elasticsearch/extensions/reindex'
|
3
20
|
|
4
21
|
class Elasticsearch::Extensions::ReindexTest < Elasticsearch::Test::UnitTestCase
|
5
22
|
context "The Reindex extension module" do
|
6
|
-
DEFAULT_OPTIONS = { source: { index: 'foo', client: Object.new },
|
23
|
+
DEFAULT_OPTIONS = { source: { index: 'foo', client: Object.new }, dest: { index: 'bar' } }
|
7
24
|
|
8
25
|
should "require options" do
|
9
26
|
assert_raise ArgumentError do
|
@@ -50,7 +67,7 @@ class Elasticsearch::Extensions::ReindexTest < Elasticsearch::Test::UnitTestCase
|
|
50
67
|
should "scroll through the index and save batches in bulk" do
|
51
68
|
client = mock()
|
52
69
|
subject = Elasticsearch::Extensions::Reindex.new source: { index: 'foo', client: client },
|
53
|
-
|
70
|
+
dest: { index: 'bar' }
|
54
71
|
|
55
72
|
client.expects(:search)
|
56
73
|
.returns({ '_scroll_id' => 'scroll_id_1' }.merge(Marshal.load(Marshal.dump(@default_response))))
|
@@ -70,7 +87,7 @@ class Elasticsearch::Extensions::ReindexTest < Elasticsearch::Test::UnitTestCase
|
|
70
87
|
should "return the number of errors" do
|
71
88
|
client = mock()
|
72
89
|
subject = Elasticsearch::Extensions::Reindex.new source: { index: 'foo', client: client },
|
73
|
-
|
90
|
+
dest: { index: 'bar' }
|
74
91
|
|
75
92
|
client.expects(:search).returns({ '_scroll_id' => 'scroll_id_1' }.merge(@default_response))
|
76
93
|
client.expects(:scroll).returns(@empty_response)
|
@@ -85,7 +102,7 @@ class Elasticsearch::Extensions::ReindexTest < Elasticsearch::Test::UnitTestCase
|
|
85
102
|
client = mock()
|
86
103
|
subject = Elasticsearch::Extensions::Reindex.new \
|
87
104
|
source: { index: 'foo', client: client },
|
88
|
-
|
105
|
+
dest: { index: 'bar' },
|
89
106
|
transform: lambda { |d| d['_source']['foo'].upcase!; d }
|
90
107
|
|
91
108
|
client.expects(:search).returns({ '_scroll_id' => 'scroll_id_1' }.merge(@default_response))
|
@@ -1,3 +1,20 @@
|
|
1
|
+
# Licensed to Elasticsearch B.V. under one or more contributor
|
2
|
+
# license agreements. See the NOTICE file distributed with
|
3
|
+
# this work for additional information regarding copyright
|
4
|
+
# ownership. Elasticsearch B.V. licenses this file to you under
|
5
|
+
# the Apache License, Version 2.0 (the "License"); you may
|
6
|
+
# not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing,
|
12
|
+
# software distributed under the License is distributed on an
|
13
|
+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
14
|
+
# KIND, either express or implied. See the License for the
|
15
|
+
# specific language governing permissions and limitations
|
16
|
+
# under the License.
|
17
|
+
|
1
18
|
require 'test_helper'
|
2
19
|
require 'pathname'
|
3
20
|
|