aerospike 2.6.0 → 2.7.0
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 +4 -4
- data/CHANGELOG.md +9 -0
- data/README.md +3 -1
- data/lib/aerospike.rb +9 -5
- data/lib/aerospike/client.rb +101 -83
- data/lib/aerospike/cluster.rb +11 -50
- data/lib/aerospike/cluster/create_connection.rb +1 -1
- data/lib/aerospike/cluster/find_nodes_to_remove.rb +66 -0
- data/lib/aerospike/cluster/partition.rb +5 -2
- data/lib/aerospike/command/batch_direct_command.rb +104 -0
- data/lib/aerospike/command/batch_direct_exists_command.rb +51 -0
- data/lib/aerospike/command/batch_direct_node.rb +40 -0
- data/lib/aerospike/command/batch_index_command.rb +119 -0
- data/lib/aerospike/command/batch_index_exists_command.rb +45 -0
- data/lib/aerospike/command/batch_index_node.rb +52 -0
- data/lib/aerospike/command/batch_item.rb +18 -47
- data/lib/aerospike/command/command.rb +6 -65
- data/lib/aerospike/command/field_type.rb +13 -10
- data/lib/aerospike/command/{batch_command.rb → multi_command.rb} +29 -9
- data/lib/aerospike/command/read_command.rb +4 -2
- data/lib/aerospike/command/single_command.rb +6 -9
- data/lib/aerospike/connection/create.rb +3 -3
- data/lib/aerospike/host/parse.rb +28 -2
- data/lib/aerospike/node.rb +6 -2
- data/lib/aerospike/node/refresh/friends.rb +1 -1
- data/lib/aerospike/node/refresh/peers.rb +1 -1
- data/lib/aerospike/node_validator.rb +3 -3
- data/lib/aerospike/peers.rb +4 -0
- data/lib/aerospike/peers/parse.rb +26 -6
- data/lib/aerospike/policy/batch_policy.rb +25 -15
- data/lib/aerospike/policy/client_policy.rb +2 -2
- data/lib/aerospike/policy/query_policy.rb +25 -12
- data/lib/aerospike/policy/scan_policy.rb +39 -16
- data/lib/aerospike/query/stream_command.rb +6 -5
- data/lib/aerospike/record.rb +4 -3
- data/lib/aerospike/socket/ssl.rb +13 -13
- data/lib/aerospike/socket/tcp.rb +8 -1
- data/lib/aerospike/utils/string_parser.rb +7 -3
- data/lib/aerospike/version.rb +1 -1
- metadata +11 -7
- data/lib/aerospike/command/batch_command_exists.rb +0 -93
- data/lib/aerospike/command/batch_command_get.rb +0 -84
- data/lib/aerospike/command/batch_node.rb +0 -82
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2351767e50e34f9aec1da0eb58c6d5fb5b8a39f83d3aa2d2f9c88ed5d446b15a
|
4
|
+
data.tar.gz: 7104f9494a571dcf34a4809f0e4331acc76981649a53df06dd5f5c3ceddbcd0d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a48674b7bf187a0660d0a2b0e9c070f1b9f270d31dda522a2264cb2821470c193d2714944f35e4c65c2f05ee06fc299894d4721e348b8c986d5124f8d95ae2ef
|
7
|
+
data.tar.gz: febaffccf38b34e5b6653ce078630eacf73fead0d2cd840d09a87016a3adc3a8ff26a00460031a18d52d8a3bda6e9def1c7259917291f79857e020212812ebb1
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
v2.7.0 / 2018-04-12
|
2
|
+
===================
|
3
|
+
|
4
|
+
* **New Features**
|
5
|
+
* Batch Index protocol support. Thanks to [@deenbandhu-agarwal](https://github.com/deenbandhu-agarwal)! [[#61](https://github.com/aerospike/aerospike-client-ruby/pull/61)]
|
6
|
+
* Memory optimization: Avoid easy allocations. Thanks to [@wallin](https://github.com/wallin)! [[#62](https://github.com/aerospike/aerospike-client-ruby/pull/62)]
|
7
|
+
* New node removal strategy. Thanks to [@wallin](https://github.com/wallin)! [[#63](https://github.com/aerospike/aerospike-client-ruby/pull/63)]
|
8
|
+
* Support for IPv6. Requires Aerospike Enterprise Edition v3.10 or later. Thanks to [@wallin](https://github.com/wallin)! [[#65](https://github.com/aerospike/aerospike-client-ruby/pull/65)]
|
9
|
+
|
1
10
|
v2.6.0 / 2018-03-27
|
2
11
|
===================
|
3
12
|
|
data/README.md
CHANGED
@@ -1,7 +1,9 @@
|
|
1
|
-
# Aerospike Ruby Client [![travis][travis-image]][travis-url] [![gem][gem-image]][gem-url]
|
1
|
+
# Aerospike Ruby Client [![travis][travis-image]][travis-url] [![codecov][codecov-image]][codecov-url] [![gem][gem-image]][gem-url]
|
2
2
|
|
3
3
|
[travis-image]: https://travis-ci.org/aerospike/aerospike-client-ruby.svg?branch=master
|
4
4
|
[travis-url]: https://travis-ci.org/aerospike/aerospike-client-ruby
|
5
|
+
[codecov-image]: https://codecov.io/gh/aerospike/aerospike-client-ruby/branch/master/graph/badge.svg
|
6
|
+
[codecov-url]: https://codecov.io/gh/aerospike/aerospike-client-ruby
|
5
7
|
[gem-image]: https://img.shields.io/gem/v/aerospike.svg
|
6
8
|
[gem-url]: https://rubygems.org/gems/aerospike
|
7
9
|
|
data/lib/aerospike.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
1
|
# Copyright 2014-2018 Aerospike, Inc.
|
3
2
|
#
|
4
3
|
# Portions may be licensed to Aerospike, Inc. under one or more contributor
|
@@ -41,7 +40,8 @@ require 'aerospike/version'
|
|
41
40
|
require 'aerospike/value/particle_type'
|
42
41
|
require 'aerospike/value/value'
|
43
42
|
require 'aerospike/command/single_command'
|
44
|
-
require 'aerospike/command/
|
43
|
+
require 'aerospike/command/batch_direct_node'
|
44
|
+
require 'aerospike/command/batch_index_node'
|
45
45
|
require 'aerospike/command/field_type'
|
46
46
|
require 'aerospike/command/command'
|
47
47
|
require 'aerospike/command/execute_command'
|
@@ -49,11 +49,13 @@ require 'aerospike/command/write_command'
|
|
49
49
|
require 'aerospike/command/batch_item'
|
50
50
|
require 'aerospike/command/operate_command'
|
51
51
|
require 'aerospike/command/exists_command'
|
52
|
-
require 'aerospike/command/
|
53
|
-
require 'aerospike/command/
|
52
|
+
require 'aerospike/command/multi_command'
|
53
|
+
require 'aerospike/command/batch_direct_command'
|
54
|
+
require 'aerospike/command/batch_direct_exists_command'
|
55
|
+
require 'aerospike/command/batch_index_command'
|
56
|
+
require 'aerospike/command/batch_index_exists_command'
|
54
57
|
require 'aerospike/command/read_header_command'
|
55
58
|
require 'aerospike/command/touch_command'
|
56
|
-
require 'aerospike/command/batch_command_exists'
|
57
59
|
require 'aerospike/command/read_command'
|
58
60
|
require 'aerospike/command/delete_command'
|
59
61
|
require 'aerospike/command/admin_command'
|
@@ -74,6 +76,7 @@ require 'aerospike/policy/priority'
|
|
74
76
|
require 'aerospike/policy/record_exists_action'
|
75
77
|
require 'aerospike/policy/generation_policy'
|
76
78
|
require 'aerospike/policy/policy'
|
79
|
+
require 'aerospike/policy/batch_policy'
|
77
80
|
require 'aerospike/policy/write_policy'
|
78
81
|
require 'aerospike/policy/scan_policy'
|
79
82
|
require 'aerospike/policy/query_policy'
|
@@ -91,6 +94,7 @@ require 'aerospike/connection/create'
|
|
91
94
|
require 'aerospike/cluster'
|
92
95
|
require 'aerospike/cluster/create_connection'
|
93
96
|
require 'aerospike/cluster/partition'
|
97
|
+
require 'aerospike/cluster/find_nodes_to_remove'
|
94
98
|
require 'aerospike/cluster/find_node'
|
95
99
|
require 'aerospike/cluster/partition_tokenizer_new'
|
96
100
|
require 'aerospike/cluster/partition_tokenizer_old'
|
data/lib/aerospike/client.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
1
|
# Copyright 2014-2018 Aerospike, Inc.
|
3
2
|
#
|
4
3
|
# Portions may be licensed to Aerospike, Inc. under one or more contributor
|
@@ -112,7 +111,7 @@ module Aerospike
|
|
112
111
|
#
|
113
112
|
# client.put key, {'bin', 'value string'}, :timeout => 0.001
|
114
113
|
|
115
|
-
def put(key, bins, options=
|
114
|
+
def put(key, bins, options = nil)
|
116
115
|
policy = create_policy(options, WritePolicy)
|
117
116
|
command = WriteCommand.new(@cluster, policy, key, hash_to_bins(bins), Aerospike::Operation::WRITE)
|
118
117
|
execute_command(command)
|
@@ -135,7 +134,7 @@ module Aerospike
|
|
135
134
|
#
|
136
135
|
# client.append key, {'bin', 'value to append'}, :timeout => 0.001
|
137
136
|
|
138
|
-
def append(key, bins, options=
|
137
|
+
def append(key, bins, options = nil)
|
139
138
|
policy = create_policy(options, WritePolicy)
|
140
139
|
command = WriteCommand.new(@cluster, policy, key, hash_to_bins(bins), Aerospike::Operation::APPEND)
|
141
140
|
execute_command(command)
|
@@ -154,7 +153,7 @@ module Aerospike
|
|
154
153
|
#
|
155
154
|
# client.prepend key, {'bin', 'value to prepend'}, :timeout => 0.001
|
156
155
|
|
157
|
-
def prepend(key, bins, options=
|
156
|
+
def prepend(key, bins, options = nil)
|
158
157
|
policy = create_policy(options, WritePolicy)
|
159
158
|
command = WriteCommand.new(@cluster, policy, key, hash_to_bins(bins), Aerospike::Operation::PREPEND)
|
160
159
|
execute_command(command)
|
@@ -177,7 +176,7 @@ module Aerospike
|
|
177
176
|
#
|
178
177
|
# client.add key, {'bin', -1}, :timeout => 0.001
|
179
178
|
|
180
|
-
def add(key, bins, options=
|
179
|
+
def add(key, bins, options = nil)
|
181
180
|
policy = create_policy(options, WritePolicy)
|
182
181
|
command = WriteCommand.new(@cluster, policy, key, hash_to_bins(bins), Aerospike::Operation::ADD)
|
183
182
|
execute_command(command)
|
@@ -199,7 +198,7 @@ module Aerospike
|
|
199
198
|
#
|
200
199
|
# existed = client.delete key, :timeout => 0.001
|
201
200
|
|
202
|
-
def delete(key, options=
|
201
|
+
def delete(key, options = nil)
|
203
202
|
policy = create_policy(options, WritePolicy)
|
204
203
|
command = DeleteCommand.new(@cluster, policy, key)
|
205
204
|
execute_command(command)
|
@@ -247,7 +246,7 @@ module Aerospike
|
|
247
246
|
#
|
248
247
|
# client.touch key, :timeout => 0.001
|
249
248
|
|
250
|
-
def touch(key, options=
|
249
|
+
def touch(key, options = nil)
|
251
250
|
policy = create_policy(options, WritePolicy)
|
252
251
|
command = TouchCommand.new(@cluster, policy, key)
|
253
252
|
execute_command(command)
|
@@ -260,38 +259,20 @@ module Aerospike
|
|
260
259
|
##
|
261
260
|
# Determines if a record key exists.
|
262
261
|
# The policy can be used to specify timeouts.
|
263
|
-
def exists(key, options=
|
262
|
+
def exists(key, options = nil)
|
264
263
|
policy = create_policy(options, Policy)
|
265
264
|
command = ExistsCommand.new(@cluster, policy, key)
|
266
265
|
execute_command(command)
|
267
266
|
command.exists
|
268
267
|
end
|
269
268
|
|
270
|
-
# Check if multiple record keys exist in one batch call.
|
271
|
-
# The returned array bool is in positional order with the original key array order.
|
272
|
-
# The policy can be used to specify timeouts.
|
273
|
-
def batch_exists(keys, options={})
|
274
|
-
policy = create_policy(options, Policy)
|
275
|
-
|
276
|
-
# same array can be used without sychronization;
|
277
|
-
# when a key exists, the corresponding index will be marked true
|
278
|
-
exists_array = Array.new(keys.length)
|
279
|
-
|
280
|
-
key_map = BatchItem.generate_map(keys)
|
281
|
-
|
282
|
-
batch_execute(keys) do |node, bns|
|
283
|
-
BatchCommandExists.new(node, bns, policy, key_map, exists_array)
|
284
|
-
end
|
285
|
-
exists_array
|
286
|
-
end
|
287
|
-
|
288
269
|
#-------------------------------------------------------
|
289
270
|
# Read Record Operations
|
290
271
|
#-------------------------------------------------------
|
291
272
|
|
292
273
|
# Read record header and bins for specified key.
|
293
274
|
# The policy can be used to specify timeouts.
|
294
|
-
def get(key, bin_names=
|
275
|
+
def get(key, bin_names = nil, options = nil)
|
295
276
|
policy = create_policy(options, Policy)
|
296
277
|
|
297
278
|
command = ReadCommand.new(@cluster, policy, key, bin_names)
|
@@ -301,7 +282,7 @@ module Aerospike
|
|
301
282
|
|
302
283
|
# Read record generation and expiration only for specified key. Bins are not read.
|
303
284
|
# The policy can be used to specify timeouts.
|
304
|
-
def get_header(key, options=
|
285
|
+
def get_header(key, options = nil)
|
305
286
|
policy = create_policy(options, Policy)
|
306
287
|
command = ReadHeaderCommand.new(@cluster, policy, key)
|
307
288
|
execute_command(command)
|
@@ -315,48 +296,62 @@ module Aerospike
|
|
315
296
|
# Read multiple record headers and bins for specified keys in one batch call.
|
316
297
|
# The returned records are in positional order with the original key array order.
|
317
298
|
# If a key is not found, the positional record will be nil.
|
318
|
-
# The policy can be used to specify timeouts.
|
319
|
-
def batch_get(keys, bin_names=
|
320
|
-
policy = create_policy(options,
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
299
|
+
# The policy can be used to specify timeouts and protocol type.
|
300
|
+
def batch_get(keys, bin_names = nil, options = nil)
|
301
|
+
policy = create_policy(options, BatchPolicy)
|
302
|
+
results = Array.new(keys.length)
|
303
|
+
info_flags = INFO1_READ
|
304
|
+
|
305
|
+
case bin_names
|
306
|
+
when :all, nil, []
|
307
|
+
info_flags |= INFO1_GET_ALL
|
308
|
+
bin_names = nil
|
309
|
+
when :none
|
310
|
+
info_flags |= INFO1_NOBINDATA
|
311
|
+
bin_names = nil
|
312
|
+
end
|
331
313
|
|
332
|
-
|
333
|
-
|
314
|
+
if policy.use_batch_direct
|
315
|
+
key_map = BatchItem.generate_map(keys)
|
316
|
+
execute_batch_direct_commands(keys) do |node, batch|
|
317
|
+
BatchDirectCommand.new(node, batch, policy, key_map, bin_names, results, info_flags)
|
318
|
+
end
|
319
|
+
else
|
320
|
+
execute_batch_index_commands(keys) do |node, batch|
|
321
|
+
BatchIndexCommand.new(node, batch, policy, bin_names, results, info_flags)
|
322
|
+
end
|
334
323
|
end
|
335
|
-
|
324
|
+
|
325
|
+
results
|
336
326
|
end
|
337
327
|
|
338
328
|
# Read multiple record header data for specified keys in one batch call.
|
339
329
|
# The returned records are in positional order with the original key array order.
|
340
330
|
# If a key is not found, the positional record will be nil.
|
341
|
-
# The policy can be used to specify timeouts.
|
342
|
-
def batch_get_header(keys, options=
|
343
|
-
|
344
|
-
|
345
|
-
# wait until all migrations are finished
|
346
|
-
# TODO: Fix this and implement
|
347
|
-
# @cluster.WaitUntillMigrationIsFinished(policy.timeout)
|
348
|
-
|
349
|
-
# same array can be used without sychronization;
|
350
|
-
# when a key exists, the corresponding index will be set to record
|
351
|
-
records = Array.new(keys.length)
|
352
|
-
|
353
|
-
key_map = BatchItem.generate_map(keys)
|
331
|
+
# The policy can be used to specify timeouts and protocol type.
|
332
|
+
def batch_get_header(keys, options = nil)
|
333
|
+
batch_get(keys, :none, options)
|
334
|
+
end
|
354
335
|
|
355
|
-
|
356
|
-
|
336
|
+
# Check if multiple record keys exist in one batch call.
|
337
|
+
# The returned boolean array is in positional order with the original key array order.
|
338
|
+
# The policy can be used to specify timeouts and protocol type.
|
339
|
+
def batch_exists(keys, options = nil)
|
340
|
+
policy = create_policy(options, BatchPolicy)
|
341
|
+
results = Array.new(keys.length)
|
342
|
+
|
343
|
+
if policy.use_batch_direct
|
344
|
+
key_map = BatchItem.generate_map(keys)
|
345
|
+
execute_batch_direct_commands(keys) do |node, batch|
|
346
|
+
BatchDirectExistsCommand.new(node, batch, policy, key_map, results)
|
347
|
+
end
|
348
|
+
else
|
349
|
+
execute_batch_index_commands(keys) do |node, batch|
|
350
|
+
BatchIndexExistsCommand.new(node, batch, policy, results)
|
351
|
+
end
|
357
352
|
end
|
358
353
|
|
359
|
-
|
354
|
+
results
|
360
355
|
end
|
361
356
|
|
362
357
|
#-------------------------------------------------------
|
@@ -367,7 +362,7 @@ module Aerospike
|
|
367
362
|
# An example would be to add an integer value to an existing record and then
|
368
363
|
# read the result, all in one database call. Operations are executed in
|
369
364
|
# the order they are specified.
|
370
|
-
def operate(key, operations, options=
|
365
|
+
def operate(key, operations, options = nil)
|
371
366
|
policy = create_policy(options, WritePolicy)
|
372
367
|
|
373
368
|
command = OperateCommand.new(@cluster, policy, key, operations)
|
@@ -385,7 +380,7 @@ module Aerospike
|
|
385
380
|
# RegisterTask instance.
|
386
381
|
#
|
387
382
|
# This method is only supported by Aerospike 3 servers.
|
388
|
-
def register_udf_from_file(client_path, server_path, language, options=
|
383
|
+
def register_udf_from_file(client_path, server_path, language, options = nil)
|
389
384
|
udf_body = File.read(client_path)
|
390
385
|
register_udf(udf_body, server_path, language, options)
|
391
386
|
end
|
@@ -396,7 +391,7 @@ module Aerospike
|
|
396
391
|
# RegisterTask instance.
|
397
392
|
#
|
398
393
|
# This method is only supported by Aerospike 3 servers.
|
399
|
-
def register_udf(udf_body, server_path, language, options=
|
394
|
+
def register_udf(udf_body, server_path, language, options = nil)
|
400
395
|
content = Base64.strict_encode64(udf_body).force_encoding('binary')
|
401
396
|
|
402
397
|
str_cmd = "udf-put:filename=#{server_path};content=#{content};"
|
@@ -426,7 +421,7 @@ module Aerospike
|
|
426
421
|
# RemoveTask instance.
|
427
422
|
#
|
428
423
|
# This method is only supported by Aerospike 3 servers.
|
429
|
-
def remove_udf(udf_name, options=
|
424
|
+
def remove_udf(udf_name, options = nil)
|
430
425
|
str_cmd = "udf-remove:filename=#{udf_name};"
|
431
426
|
|
432
427
|
# Send command to one node. That node will distribute it to other nodes.
|
@@ -443,7 +438,7 @@ module Aerospike
|
|
443
438
|
|
444
439
|
# ListUDF lists all packages containing user defined functions in the server.
|
445
440
|
# This method is only supported by Aerospike 3 servers.
|
446
|
-
def list_udf(options=
|
441
|
+
def list_udf(options = nil)
|
447
442
|
str_cmd = 'udf-list'
|
448
443
|
|
449
444
|
# Send command to one node. That node will distribute it to other nodes.
|
@@ -479,7 +474,7 @@ module Aerospike
|
|
479
474
|
# udf file = <server udf dir>/<package name>.lua
|
480
475
|
#
|
481
476
|
# This method is only supported by Aerospike 3 servers.
|
482
|
-
def execute_udf(key, package_name, function_name, args=[], options=
|
477
|
+
def execute_udf(key, package_name, function_name, args=[], options = nil)
|
483
478
|
policy = create_policy(options, WritePolicy)
|
484
479
|
|
485
480
|
command = ExecuteCommand.new(@cluster, policy, key, package_name, function_name, args)
|
@@ -508,7 +503,7 @@ module Aerospike
|
|
508
503
|
#
|
509
504
|
# This method is only supported by Aerospike 3 servers.
|
510
505
|
# If the policy is nil, the default relevant policy will be used.
|
511
|
-
def execute_udf_on_query(statement, package_name, function_name, function_args=[], options=
|
506
|
+
def execute_udf_on_query(statement, package_name, function_name, function_args=[], options = nil)
|
512
507
|
policy = create_policy(options, QueryPolicy)
|
513
508
|
|
514
509
|
nodes = @cluster.nodes
|
@@ -545,7 +540,7 @@ module Aerospike
|
|
545
540
|
# This method is only supported by Aerospike 3 servers.
|
546
541
|
# index_type should be :string, :numeric or :geo2dsphere (requires server version 3.7 or later)
|
547
542
|
# collection_type should be :list, :mapkeys or :mapvalues
|
548
|
-
def create_index(namespace, set_name, index_name, bin_name, index_type, collection_type=nil, options=
|
543
|
+
def create_index(namespace, set_name, index_name, bin_name, index_type, collection_type=nil, options = nil)
|
549
544
|
if options.nil? && collection_type.is_a?(Hash)
|
550
545
|
options, collection_type = collection_type, nil
|
551
546
|
end
|
@@ -574,7 +569,7 @@ module Aerospike
|
|
574
569
|
|
575
570
|
# Delete secondary index.
|
576
571
|
# This method is only supported by Aerospike 3 servers.
|
577
|
-
def drop_index(namespace, set_name, index_name, options=
|
572
|
+
def drop_index(namespace, set_name, index_name, options = nil)
|
578
573
|
policy = create_policy(options, WritePolicy)
|
579
574
|
str_cmd = "sindex-delete:ns=#{namespace}"
|
580
575
|
str_cmd << ";set=#{set_name}" unless set_name.to_s.strip.empty?
|
@@ -598,7 +593,7 @@ module Aerospike
|
|
598
593
|
# Scan Operations
|
599
594
|
#-------------------------------------------------------
|
600
595
|
|
601
|
-
def scan_all(namespace, set_name, bin_names=
|
596
|
+
def scan_all(namespace, set_name, bin_names = nil, options = nil)
|
602
597
|
policy = create_policy(options, ScanPolicy)
|
603
598
|
|
604
599
|
# wait until all migrations are finished
|
@@ -654,7 +649,7 @@ module Aerospike
|
|
654
649
|
|
655
650
|
# ScanNode reads all records in specified namespace and set, from one node only.
|
656
651
|
# The policy can be used to specify timeouts.
|
657
|
-
def scan_node(node, namespace, set_name, bin_names=
|
652
|
+
def scan_node(node, namespace, set_name, bin_names = nil, options = nil)
|
658
653
|
policy = create_policy(options, ScanPolicy)
|
659
654
|
# wait until all migrations are finished
|
660
655
|
# TODO: implement
|
@@ -696,7 +691,7 @@ module Aerospike
|
|
696
691
|
#
|
697
692
|
# This method is only supported by Aerospike 3 servers.
|
698
693
|
# If the policy is nil, a default policy will be generated.
|
699
|
-
def query(statement, options=
|
694
|
+
def query(statement, options = nil)
|
700
695
|
policy = create_policy(options, QueryPolicy)
|
701
696
|
new_policy = policy.clone
|
702
697
|
|
@@ -732,7 +727,7 @@ module Aerospike
|
|
732
727
|
|
733
728
|
# Create user with password and roles. Clear-text password will be hashed using bcrypt
|
734
729
|
# before sending to server.
|
735
|
-
def create_user(user, password, roles, options=
|
730
|
+
def create_user(user, password, roles, options = nil)
|
736
731
|
policy = create_policy(options, AdminPolicy)
|
737
732
|
hash = AdminCommand.hash_password(password)
|
738
733
|
command = AdminCommand.new
|
@@ -740,14 +735,14 @@ module Aerospike
|
|
740
735
|
end
|
741
736
|
|
742
737
|
# Remove user from cluster.
|
743
|
-
def drop_user(user, options=
|
738
|
+
def drop_user(user, options = nil)
|
744
739
|
policy = create_policy(options, AdminPolicy)
|
745
740
|
command = AdminCommand.new
|
746
741
|
command.drop_user(@cluster, policy, user)
|
747
742
|
end
|
748
743
|
|
749
744
|
# Change user's password. Clear-text password will be hashed using bcrypt before sending to server.
|
750
|
-
def change_password(user, password, options=
|
745
|
+
def change_password(user, password, options = nil)
|
751
746
|
raise Aerospike::Exceptions::Aerospike.new(INVALID_USER) unless @cluster.user && @cluster.user != ""
|
752
747
|
policy = create_policy(options, AdminPolicy)
|
753
748
|
|
@@ -766,28 +761,28 @@ module Aerospike
|
|
766
761
|
end
|
767
762
|
|
768
763
|
# Add roles to user's list of roles.
|
769
|
-
def grant_roles(user, roles, options=
|
764
|
+
def grant_roles(user, roles, options = nil)
|
770
765
|
policy = create_policy(options, AdminPolicy)
|
771
766
|
command = AdminCommand.new
|
772
767
|
command.grant_roles(@cluster, policy, user, roles)
|
773
768
|
end
|
774
769
|
|
775
770
|
# Remove roles from user's list of roles.
|
776
|
-
def revoke_roles(user, roles, options=
|
771
|
+
def revoke_roles(user, roles, options = nil)
|
777
772
|
policy = create_policy(options, AdminPolicy)
|
778
773
|
command = AdminCommand.new
|
779
774
|
command.revoke_roles(@cluster, policy, user, roles)
|
780
775
|
end
|
781
776
|
|
782
777
|
# Retrieve roles for a given user.
|
783
|
-
def query_user(user, options=
|
778
|
+
def query_user(user, options = nil)
|
784
779
|
policy = create_policy(options, AdminPolicy)
|
785
780
|
command = AdminCommand.new
|
786
781
|
command.query_user(@cluster, policy, user)
|
787
782
|
end
|
788
783
|
|
789
784
|
# Retrieve all users and their roles.
|
790
|
-
def query_users(options=
|
785
|
+
def query_users(options = nil)
|
791
786
|
policy = create_policy(options, AdminPolicy)
|
792
787
|
command = AdminCommand.new
|
793
788
|
command.query_users(@cluster, policy)
|
@@ -862,18 +857,41 @@ module Aerospike
|
|
862
857
|
command.execute
|
863
858
|
end
|
864
859
|
|
865
|
-
def
|
866
|
-
|
860
|
+
def execute_batch_index_commands(keys)
|
861
|
+
if @cluster.nodes.empty?
|
862
|
+
raise Aerospike::Exceptions::Aerospike.new(Aerospike::ResultCode::SERVER_NOT_AVAILABLE, "Executing Batch Index command failed because cluster is empty.")
|
863
|
+
end
|
864
|
+
|
865
|
+
batch_nodes = BatchIndexNode.generate_list(@cluster, keys)
|
866
|
+
threads = []
|
867
|
+
|
868
|
+
batch_nodes.each do |batch|
|
869
|
+
threads << Thread.new do
|
870
|
+
Thread.current.abort_on_exception = true
|
871
|
+
command = yield batch.node, batch
|
872
|
+
execute_command(command)
|
873
|
+
end
|
874
|
+
end
|
875
|
+
|
876
|
+
threads.each(&:join)
|
877
|
+
end
|
878
|
+
|
879
|
+
def execute_batch_direct_commands(keys)
|
880
|
+
if @cluster.nodes.empty?
|
881
|
+
raise Aerospike::Exceptions::Aerospike.new(Aerospike::ResultCode::SERVER_NOT_AVAILABLE, "Executing Batch Direct command failed because cluster is empty.")
|
882
|
+
end
|
883
|
+
|
884
|
+
batch_nodes = BatchDirectNode.generate_list(@cluster, keys)
|
867
885
|
threads = []
|
868
886
|
|
869
887
|
# Use a thread per namespace per node
|
870
888
|
batch_nodes.each do |batch_node|
|
871
889
|
# copy to avoid race condition
|
872
890
|
bn = batch_node
|
873
|
-
bn.batch_namespaces.each do |
|
891
|
+
bn.batch_namespaces.each do |batch|
|
874
892
|
threads << Thread.new do
|
875
893
|
Thread.current.abort_on_exception = true
|
876
|
-
command = yield
|
894
|
+
command = yield batch_node.node, batch
|
877
895
|
execute_command(command)
|
878
896
|
end
|
879
897
|
end
|