aerospike 2.12.0 → 2.13.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 +10 -0
- data/lib/aerospike.rb +3 -4
- data/lib/aerospike/aerospike_exception.rb +7 -1
- data/lib/aerospike/atomic/atomic.rb +1 -1
- data/lib/aerospike/bin.rb +1 -1
- data/lib/aerospike/cdt/list_operation.rb +1 -1
- data/lib/aerospike/cdt/map_operation.rb +1 -1
- data/lib/aerospike/cdt/map_order.rb +1 -1
- data/lib/aerospike/cdt/map_policy.rb +1 -1
- data/lib/aerospike/cdt/map_return_type.rb +1 -1
- data/lib/aerospike/cdt/map_write_mode.rb +1 -1
- data/lib/aerospike/client.rb +9 -9
- data/lib/aerospike/cluster.rb +92 -17
- data/lib/aerospike/cluster/partition.rb +1 -1
- data/lib/aerospike/cluster/partition_parser.rb +169 -0
- data/lib/aerospike/command/admin_command.rb +1 -1
- data/lib/aerospike/command/batch_direct_command.rb +1 -1
- data/lib/aerospike/command/batch_direct_exists_command.rb +1 -1
- data/lib/aerospike/command/batch_direct_node.rb +3 -3
- data/lib/aerospike/command/batch_index_node.rb +2 -2
- data/lib/aerospike/command/batch_item.rb +1 -1
- data/lib/aerospike/command/command.rb +21 -4
- data/lib/aerospike/command/delete_command.rb +5 -1
- data/lib/aerospike/command/execute_command.rb +1 -1
- data/lib/aerospike/command/exists_command.rb +5 -1
- data/lib/aerospike/command/field_type.rb +2 -1
- data/lib/aerospike/command/multi_command.rb +5 -1
- data/lib/aerospike/command/operate_command.rb +6 -1
- data/lib/aerospike/command/read_command.rb +5 -1
- data/lib/aerospike/command/read_header_command.rb +5 -1
- data/lib/aerospike/command/roles.rb +1 -1
- data/lib/aerospike/command/single_command.rb +9 -3
- data/lib/aerospike/command/touch_command.rb +5 -1
- data/lib/aerospike/command/unsupported_particle_type_validator.rb +1 -1
- data/lib/aerospike/command/write_command.rb +5 -1
- data/lib/aerospike/connection/create.rb +1 -1
- data/lib/aerospike/features.rb +1 -1
- data/lib/aerospike/geo_json.rb +1 -1
- data/lib/aerospike/host.rb +1 -1
- data/lib/aerospike/info.rb +1 -1
- data/lib/aerospike/key.rb +1 -1
- data/lib/aerospike/language.rb +1 -1
- data/lib/aerospike/node.rb +3 -6
- data/lib/aerospike/node/refresh/partitions.rb +6 -15
- data/lib/aerospike/node_validator.rb +4 -19
- data/lib/aerospike/operation.rb +1 -1
- data/lib/aerospike/policy/admin_policy.rb +1 -1
- data/lib/aerospike/policy/batch_policy.rb +1 -1
- data/lib/aerospike/policy/client_policy.rb +1 -1
- data/lib/aerospike/policy/commit_level.rb +1 -1
- data/lib/aerospike/policy/consistency_level.rb +1 -1
- data/lib/aerospike/policy/generation_policy.rb +1 -1
- data/lib/aerospike/policy/operate_policy.rb +1 -1
- data/lib/aerospike/policy/policy.rb +12 -3
- data/lib/aerospike/policy/priority.rb +1 -1
- data/lib/aerospike/policy/query_policy.rb +8 -1
- data/lib/aerospike/policy/record_bin_multiplicity.rb +1 -1
- data/lib/aerospike/policy/record_exists_action.rb +1 -1
- data/lib/aerospike/policy/replica.rb +38 -0
- data/lib/aerospike/policy/scan_policy.rb +8 -1
- data/lib/aerospike/policy/write_policy.rb +1 -1
- data/lib/aerospike/query/filter.rb +1 -1
- data/lib/aerospike/query/query_command.rb +10 -1
- data/lib/aerospike/query/recordset.rb +1 -1
- data/lib/aerospike/query/scan_command.rb +1 -1
- data/lib/aerospike/query/statement.rb +1 -1
- data/lib/aerospike/query/stream_command.rb +1 -1
- data/lib/aerospike/record.rb +1 -1
- data/lib/aerospike/result_code.rb +1 -1
- data/lib/aerospike/socket/base.rb +1 -1
- data/lib/aerospike/task/execute_task.rb +1 -1
- data/lib/aerospike/task/index_task.rb +1 -1
- data/lib/aerospike/task/task.rb +1 -1
- data/lib/aerospike/task/udf_register_task.rb +1 -1
- data/lib/aerospike/task/udf_remove_task.rb +1 -1
- data/lib/aerospike/ttl.rb +1 -1
- data/lib/aerospike/udf.rb +1 -1
- data/lib/aerospike/user_role.rb +1 -1
- data/lib/aerospike/utils/buffer.rb +1 -1
- data/lib/aerospike/utils/packer.rb +1 -1
- data/lib/aerospike/utils/pool.rb +1 -1
- data/lib/aerospike/utils/unpacker.rb +1 -1
- data/lib/aerospike/value/particle_type.rb +1 -1
- data/lib/aerospike/value/value.rb +1 -1
- data/lib/aerospike/version.rb +1 -1
- metadata +6 -6
- data/lib/aerospike/cluster/partition_tokenizer_new.rb +0 -130
- data/lib/aerospike/cluster/partition_tokenizer_old.rb +0 -135
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# Copyright 2014-
|
3
|
+
# Copyright 2014-2020 Aerospike, Inc.
|
4
4
|
#
|
5
5
|
# Portions may be licensed to Aerospike, Inc. under one or more contributor
|
6
6
|
# license agreements.
|
@@ -19,13 +19,11 @@
|
|
19
19
|
|
20
20
|
module Aerospike
|
21
21
|
class NodeValidator # :nodoc:
|
22
|
-
VERSION_REGEXP = /(?<v1>\d+)\.(?<v2>\d+)\.(?<v3>\d+).*/.freeze
|
23
22
|
|
24
|
-
attr_reader :host, :aliases, :name, :
|
23
|
+
attr_reader :host, :aliases, :name, :features, :cluster_name, :tls_options, :conn
|
25
24
|
|
26
25
|
def initialize(cluster, host, timeout, cluster_name, tls_options = {})
|
27
26
|
@cluster = cluster
|
28
|
-
@use_new_info = true
|
29
27
|
@features = Set.new
|
30
28
|
@host = host
|
31
29
|
@cluster_name = cluster_name
|
@@ -46,7 +44,7 @@ module Aerospike
|
|
46
44
|
begin
|
47
45
|
conn = Cluster::CreateConnection.(@cluster, Host.new(address, host.port, host.tls_name))
|
48
46
|
|
49
|
-
commands = %w[node
|
47
|
+
commands = %w[node features]
|
50
48
|
commands << address_command unless is_loopback?(address)
|
51
49
|
|
52
50
|
info_map = Info.request(conn, *commands)
|
@@ -58,16 +56,10 @@ module Aerospike
|
|
58
56
|
if features = info_map['features']
|
59
57
|
@features = features.split(';').to_set
|
60
58
|
end
|
61
|
-
|
62
|
-
# Check new info protocol support for >= 2.6.6 build
|
63
|
-
if build_version = info_map['build']
|
64
|
-
v1, v2, v3 = parse_version_string(build_version)
|
65
|
-
@use_new_info = v1.to_i > 2 || (v1.to_i == 2 && (v2.to_i > 6 || (v2.to_i == 6 && v3.to_i >= 6)))
|
66
|
-
end
|
67
59
|
end
|
68
60
|
|
69
61
|
unless is_loopback?(address)
|
70
|
-
aliases = info_map[address_command].split(',').map { |
|
62
|
+
aliases = info_map[address_command].split(',').map { |addr| get_alias(*addr.split(':')) }
|
71
63
|
end
|
72
64
|
ensure
|
73
65
|
conn.close if conn
|
@@ -103,12 +95,5 @@ module Aerospike
|
|
103
95
|
!!((hostname =~ Resolv::IPv4::Regex) || (hostname =~ Resolv::IPv6::Regex))
|
104
96
|
end
|
105
97
|
|
106
|
-
def parse_version_string(version)
|
107
|
-
if v = VERSION_REGEXP.match(version)
|
108
|
-
return v['v1'], v['v2'], v['v3']
|
109
|
-
end
|
110
|
-
|
111
|
-
raise Aerospike::Exceptions::Parse.new("Invalid build version string in Info: #{version}")
|
112
|
-
end
|
113
98
|
end # class
|
114
99
|
end # module
|
data/lib/aerospike/operation.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
# Copyright 2014-
|
2
|
+
# Copyright 2014-2020 Aerospike, Inc.
|
3
3
|
#
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
5
|
# you may not use this file except in compliance with the License.
|
@@ -15,6 +15,7 @@
|
|
15
15
|
|
16
16
|
require 'aerospike/policy/priority'
|
17
17
|
require 'aerospike/policy/consistency_level'
|
18
|
+
require 'aerospike/policy/replica'
|
18
19
|
|
19
20
|
|
20
21
|
module Aerospike
|
@@ -23,7 +24,7 @@ module Aerospike
|
|
23
24
|
class Policy
|
24
25
|
|
25
26
|
attr_accessor :priority, :timeout, :max_retries, :sleep_between_retries, :consistency_level,
|
26
|
-
:predexp, :fail_on_filtered_out
|
27
|
+
:predexp, :fail_on_filtered_out, :replica
|
27
28
|
|
28
29
|
def initialize(opt={})
|
29
30
|
# Container object for transaction policy attributes used in all database
|
@@ -82,7 +83,15 @@ module Aerospike
|
|
82
83
|
# read operation.
|
83
84
|
@consistency_level = opt[:consistency_level] || Aerospike::ConsistencyLevel::CONSISTENCY_ONE
|
84
85
|
|
85
|
-
|
86
|
+
|
87
|
+
# Send read commands to the node containing the key's partition replica type.
|
88
|
+
# Write commands are not affected by this setting, because all writes are directed
|
89
|
+
# to the node containing the key's master partition.
|
90
|
+
#
|
91
|
+
# Default to sending read commands to the node containing the key's master partition.
|
92
|
+
@replica = opt[:replica] || Aerospike::Replica::MASTER;
|
93
|
+
|
94
|
+
# Transaction timeout.
|
86
95
|
# This timeout is used to set the socket timeout and is also sent to the
|
87
96
|
# server along with the transaction in the wire protocol.
|
88
97
|
# Default to no timeout (0).
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright 2014-
|
1
|
+
# Copyright 2014-2020 Aerospike, Inc.
|
2
2
|
#
|
3
3
|
# Portions may be licensed to Aerospike, Inc. under one or more contributor
|
4
4
|
# license agreements.
|
@@ -24,6 +24,7 @@ module Aerospike
|
|
24
24
|
|
25
25
|
attr_accessor :include_bin_data
|
26
26
|
attr_accessor :record_queue_size
|
27
|
+
attr_accessor :records_per_second
|
27
28
|
|
28
29
|
def initialize(opt={})
|
29
30
|
super(opt)
|
@@ -42,6 +43,12 @@ module Aerospike
|
|
42
43
|
# Default is 5000.
|
43
44
|
@record_queue_size = opt[:record_queue_size] || 5000
|
44
45
|
|
46
|
+
# Limit returned records per second (rps) rate for each server.
|
47
|
+
# Will not apply rps limit if records_per_second is zero.
|
48
|
+
# Currently only applicable to a query without a defined filter (scan).
|
49
|
+
# Default is 0
|
50
|
+
@records_per_second = opt[:records_per_second] || 0
|
51
|
+
|
45
52
|
self
|
46
53
|
end
|
47
54
|
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
# Copyright 2014-2020 Aerospike, Inc.
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http:#www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
|
16
|
+
module Aerospike
|
17
|
+
|
18
|
+
module Replica
|
19
|
+
|
20
|
+
# Read from node containing key's master partition. This is the default behavior.
|
21
|
+
MASTER = 0
|
22
|
+
|
23
|
+
# Distribute reads across nodes containing key's master and replicated partitions
|
24
|
+
# in round-robin fashion.
|
25
|
+
MASTER_PROLES = 1
|
26
|
+
|
27
|
+
# Always try node containing master partition first. If connection fails and
|
28
|
+
# Policy#retryOnTimeout is true, try nodes containing prole partition.
|
29
|
+
SEQUENCE = 2
|
30
|
+
|
31
|
+
# Distribute reads across all nodes in cluster in round-robin fashion.
|
32
|
+
# This option is useful when the replication factor equals the number
|
33
|
+
# of nodes in the cluster and the overhead of requesting proles is not desired.
|
34
|
+
RANDOM = 4
|
35
|
+
|
36
|
+
end # module
|
37
|
+
|
38
|
+
end # module
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright 2014-
|
1
|
+
# Copyright 2014-2020 Aerospike, Inc.
|
2
2
|
#
|
3
3
|
# Portions may be licensed to Aerospike, Inc. under one or more contributor
|
4
4
|
# license agreements.
|
@@ -28,6 +28,7 @@ module Aerospike
|
|
28
28
|
attr_accessor :fail_on_cluster_change
|
29
29
|
attr_accessor :socket_timeout
|
30
30
|
attr_accessor :record_queue_size
|
31
|
+
attr_accessor :records_per_second
|
31
32
|
|
32
33
|
def initialize(opt={})
|
33
34
|
super(opt)
|
@@ -59,6 +60,12 @@ module Aerospike
|
|
59
60
|
# Default is 5000.
|
60
61
|
@record_queue_size = opt[:record_queue_size] || 5000
|
61
62
|
|
63
|
+
# Limit returned records per second (rps) rate for each server.
|
64
|
+
# Will not apply rps limit if records_per_second is zero.
|
65
|
+
# Currently only applicable to a query without a defined filter (scan).
|
66
|
+
# Default is 0
|
67
|
+
@records_per_second = opt[:records_per_second] || 0
|
68
|
+
|
62
69
|
self
|
63
70
|
end
|
64
71
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
# Copyright 2014-
|
2
|
+
# Copyright 2014-2020 Aerospike, Inc.
|
3
3
|
#
|
4
4
|
# Portions may be licensed to Aerospike, Inc. under one or more contributor
|
5
5
|
# license agreements.
|
@@ -82,6 +82,11 @@ module Aerospike
|
|
82
82
|
fieldCount+=1
|
83
83
|
end
|
84
84
|
else
|
85
|
+
if @policy.records_per_second > 0
|
86
|
+
@data_offset += 4 + FIELD_HEADER_SIZE
|
87
|
+
fieldCount += 1
|
88
|
+
end
|
89
|
+
|
85
90
|
# Calling query with no filters is more efficiently handled by a primary index scan.
|
86
91
|
# Estimate scan options size.
|
87
92
|
@data_offset += (2 + FIELD_HEADER_SIZE)
|
@@ -172,6 +177,10 @@ module Aerospike
|
|
172
177
|
end
|
173
178
|
end
|
174
179
|
else
|
180
|
+
if @policy.records_per_second > 0
|
181
|
+
write_field_int(@policy.records_per_second, Aerospike::FieldType::RECORDS_PER_SECOND)
|
182
|
+
end
|
183
|
+
|
175
184
|
# Calling query with no filters is more efficiently handled by a primary index scan.
|
176
185
|
write_field_header(2, Aerospike::FieldType::SCAN_OPTIONS)
|
177
186
|
priority = @policy.priority.ord
|
data/lib/aerospike/record.rb
CHANGED
data/lib/aerospike/task/task.rb
CHANGED
data/lib/aerospike/ttl.rb
CHANGED
data/lib/aerospike/udf.rb
CHANGED
data/lib/aerospike/user_role.rb
CHANGED