aerospike 2.9.1 → 2.14.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 +50 -4
- data/README.md +1 -1
- data/lib/aerospike.rb +17 -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 +31 -17
- data/lib/aerospike/cluster.rb +139 -17
- data/lib/aerospike/cluster/partition.rb +1 -1
- data/lib/aerospike/cluster/partition_parser.rb +169 -0
- data/lib/aerospike/cluster/rack_parser.rb +117 -0
- data/lib/aerospike/command/admin_command.rb +1 -1
- data/lib/aerospike/command/batch_direct_command.rb +2 -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_command.rb +11 -2
- 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 +157 -11
- data/lib/aerospike/command/delete_command.rb +21 -5
- data/lib/aerospike/command/execute_command.rb +1 -1
- data/lib/aerospike/command/exists_command.rb +21 -5
- data/lib/aerospike/command/field_type.rb +3 -1
- data/lib/aerospike/command/multi_command.rb +55 -5
- data/lib/aerospike/command/operate_command.rb +6 -1
- data/lib/aerospike/command/read_command.rb +63 -20
- data/lib/aerospike/command/read_header_command.rb +18 -6
- data/lib/aerospike/command/roles.rb +1 -1
- data/lib/aerospike/command/single_command.rb +9 -3
- data/lib/aerospike/command/touch_command.rb +48 -4
- data/lib/aerospike/command/unsupported_particle_type_validator.rb +1 -1
- data/lib/aerospike/command/write_command.rb +13 -4
- data/lib/aerospike/connection/create.rb +1 -1
- data/lib/aerospike/features.rb +3 -1
- data/lib/aerospike/geo_json.rb +70 -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 +21 -7
- data/lib/aerospike/node/rebalance.rb +50 -0
- data/lib/aerospike/node/refresh/info.rb +4 -1
- data/lib/aerospike/node/refresh/partitions.rb +6 -15
- data/lib/aerospike/node/refresh/racks.rb +47 -0
- data/lib/aerospike/node/refresh/reset.rb +1 -0
- data/lib/aerospike/node/verify/rebalance_generation.rb +43 -0
- data/lib/aerospike/node_validator.rb +45 -40
- data/lib/aerospike/operation.rb +6 -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 +16 -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 +64 -2
- 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 +45 -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/pred_exp.rb +192 -0
- data/lib/aerospike/query/pred_exp/and_or.rb +32 -0
- data/lib/aerospike/query/pred_exp/geo_json_value.rb +41 -0
- data/lib/aerospike/query/pred_exp/integer_value.rb +32 -0
- data/lib/aerospike/query/pred_exp/op.rb +27 -0
- data/lib/aerospike/query/pred_exp/regex.rb +32 -0
- data/lib/aerospike/query/pred_exp/regex_flags.rb +23 -0
- data/lib/aerospike/query/pred_exp/string_value.rb +29 -0
- data/lib/aerospike/query/query_command.rb +27 -1
- data/lib/aerospike/query/recordset.rb +5 -5
- data/lib/aerospike/query/scan_command.rb +1 -1
- data/lib/aerospike/query/statement.rb +12 -3
- data/lib/aerospike/query/stream_command.rb +1 -1
- data/lib/aerospike/record.rb +1 -1
- data/lib/aerospike/result_code.rb +13 -7
- data/lib/aerospike/socket/base.rb +4 -3
- 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 +14 -4
- data/lib/aerospike/utils/packer.rb +1 -1
- data/lib/aerospike/utils/pool.rb +1 -1
- data/lib/aerospike/utils/unpacker.rb +7 -2
- data/lib/aerospike/value/particle_type.rb +1 -1
- data/lib/aerospike/value/value.rb +59 -29
- data/lib/aerospike/version.rb +1 -1
- metadata +19 -8
- data/lib/aerospike/cluster/partition_tokenizer_new.rb +0 -130
- data/lib/aerospike/cluster/partition_tokenizer_old.rb +0 -135
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright 2018 Aerospike, Inc.
|
4
|
+
#
|
5
|
+
# Portions may be licensed to Aerospike, Inc. under one or more contributor
|
6
|
+
# license agreements.
|
7
|
+
#
|
8
|
+
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
9
|
+
# use this file except in compliance with the License. You may obtain a copy of
|
10
|
+
# the License at
|
11
|
+
#
|
12
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
13
|
+
#
|
14
|
+
# Unless required by applicable law or agreed to in writing, software
|
15
|
+
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
16
|
+
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
17
|
+
# License for the specific language governing permissions and limitations under
|
18
|
+
# the License.
|
19
|
+
|
20
|
+
module Aerospike
|
21
|
+
class Node
|
22
|
+
module Verify
|
23
|
+
# Fetch and set rebalance generation. If racks needs to be refreshed
|
24
|
+
# this will be indicated in node.rebalance_changed
|
25
|
+
module RebalanceGeneration
|
26
|
+
class << self
|
27
|
+
def call(node, info_map)
|
28
|
+
gen_string = info_map.fetch('rebalance-generation', nil)
|
29
|
+
|
30
|
+
raise Aerospike::Exceptions::Parse.new('rebalance-generation is empty') if gen_string.to_s.empty?
|
31
|
+
|
32
|
+
generation = gen_string.to_i
|
33
|
+
|
34
|
+
node.rebalance_generation.update(generation)
|
35
|
+
|
36
|
+
return unless node.rebalance_generation.changed?
|
37
|
+
Aerospike.logger.info("Node #{node.name} rebalance generation #{generation} changed")
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -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,54 +19,57 @@
|
|
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
|
32
30
|
@tls_options = tls_options
|
33
31
|
|
34
|
-
|
35
|
-
|
32
|
+
@aliases = []
|
33
|
+
|
34
|
+
resolve(host.name).each do |address|
|
35
|
+
@aliases += get_hosts(address)
|
36
|
+
end
|
36
37
|
end
|
37
38
|
|
38
39
|
private
|
39
40
|
|
40
|
-
def
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
41
|
+
def get_hosts(address)
|
42
|
+
aliases = [get_alias(address, host.port)]
|
43
|
+
|
44
|
+
begin
|
45
|
+
conn = Cluster::CreateConnection.(@cluster, Host.new(address, host.port, host.tls_name))
|
46
|
+
|
47
|
+
commands = %w[node features]
|
48
|
+
commands << address_command unless is_loopback?(address)
|
45
49
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
if
|
53
|
-
@
|
54
|
-
|
55
|
-
# Set features
|
56
|
-
if features = info_map['features']
|
57
|
-
@features = features.split(';').to_set
|
58
|
-
end
|
59
|
-
|
60
|
-
# Check new info protocol support for >= 2.6.6 build
|
61
|
-
if build_version = info_map['build']
|
62
|
-
v1, v2, v3 = parse_version_string(build_version)
|
63
|
-
@use_new_info = v1.to_i > 2 || (v1.to_i == 2 && (v2.to_i > 6 || (v2.to_i == 6 && v3.to_i >= 6)))
|
64
|
-
end
|
50
|
+
info_map = Info.request(conn, *commands)
|
51
|
+
|
52
|
+
if node_name = info_map['node']
|
53
|
+
@name = node_name
|
54
|
+
|
55
|
+
# Set features
|
56
|
+
if features = info_map['features']
|
57
|
+
@features = features.split(';').to_set
|
65
58
|
end
|
66
|
-
ensure
|
67
|
-
conn.close if conn
|
68
59
|
end
|
60
|
+
|
61
|
+
unless is_loopback?(address)
|
62
|
+
aliases = info_map[address_command].split(',').map { |addr| get_alias(*addr.split(':')) }
|
63
|
+
end
|
64
|
+
ensure
|
65
|
+
conn.close if conn
|
69
66
|
end
|
67
|
+
|
68
|
+
aliases.map { |al| Host.new(al[:address], al[:port], host.tls_name) }
|
69
|
+
end
|
70
|
+
|
71
|
+
def get_alias(address, port)
|
72
|
+
{ address: address, port: port }
|
70
73
|
end
|
71
74
|
|
72
75
|
def resolve(hostname)
|
@@ -79,16 +82,18 @@ module Aerospike
|
|
79
82
|
end
|
80
83
|
end
|
81
84
|
|
82
|
-
def
|
83
|
-
|
85
|
+
def address_command
|
86
|
+
@address_command ||= @cluster.tls_enabled? ? 'service-tls-std': 'service-clear-std'
|
84
87
|
end
|
85
88
|
|
86
|
-
def
|
87
|
-
|
88
|
-
|
89
|
-
|
89
|
+
def is_loopback?(address)
|
90
|
+
info = Addrinfo.ip(address)
|
91
|
+
info.ipv4_loopback? || info.ipv6_loopback?
|
92
|
+
end
|
90
93
|
|
91
|
-
|
94
|
+
def is_ip?(hostname)
|
95
|
+
!!((hostname =~ Resolv::IPv4::Regex) || (hostname =~ Resolv::IPv6::Regex))
|
92
96
|
end
|
97
|
+
|
93
98
|
end # class
|
94
|
-
end #module
|
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
|
# Portions may be licensed to Aerospike, Inc. under one or more contributor
|
5
5
|
# license agreements.
|
@@ -31,6 +31,7 @@ module Aerospike
|
|
31
31
|
APPEND = 9
|
32
32
|
PREPEND = 10
|
33
33
|
TOUCH = 11
|
34
|
+
DELETE = 14
|
34
35
|
|
35
36
|
def initialize(op_type, bin_name=nil, bin_value=NullValue.new)
|
36
37
|
@op_type = op_type
|
@@ -71,6 +72,10 @@ module Aerospike
|
|
71
72
|
Operation.new(TOUCH)
|
72
73
|
end
|
73
74
|
|
75
|
+
def self.delete
|
76
|
+
Operation.new(DELETE)
|
77
|
+
end
|
78
|
+
|
74
79
|
end
|
75
80
|
|
76
81
|
end # module
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# encoding: utf-8
|
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.
|
@@ -27,6 +27,7 @@ module Aerospike
|
|
27
27
|
attr_accessor :cluster_name
|
28
28
|
attr_accessor :tls
|
29
29
|
attr_accessor :policies
|
30
|
+
attr_accessor :rack_aware, :rack_id
|
30
31
|
|
31
32
|
def initialize(opt={})
|
32
33
|
# Initial host connection timeout in seconds. The timeout when opening a connection
|
@@ -56,6 +57,20 @@ module Aerospike
|
|
56
57
|
|
57
58
|
# Default Policies
|
58
59
|
@policies = opt.fetch(:policies) { Hash.new }
|
60
|
+
|
61
|
+
# Track server rack data. This field is useful when directing read commands to the server node
|
62
|
+
# that contains the key and exists on the same rack as the client. This serves to lower cloud
|
63
|
+
# provider costs when nodes are distributed across different racks/data centers.
|
64
|
+
#
|
65
|
+
# ClientPolicy#rack_id, Replica#PREFER_RACK and server rack
|
66
|
+
# configuration must also be set to enable this functionality.
|
67
|
+
@rack_aware = opt[:rack_aware] || false
|
68
|
+
|
69
|
+
# Rack where this client instance resides.
|
70
|
+
#
|
71
|
+
# ClientPolicy#rack_aware, Replica#PREFER_RACK and server rack
|
72
|
+
# configuration must also be set to enable this functionality.
|
73
|
+
@rack_id = opt[:rack_id] || 0
|
59
74
|
end
|
60
75
|
|
61
76
|
def requires_authentication
|
@@ -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
|
@@ -22,7 +23,8 @@ module Aerospike
|
|
22
23
|
# Container object for client policy command.
|
23
24
|
class Policy
|
24
25
|
|
25
|
-
attr_accessor :priority, :timeout, :max_retries, :sleep_between_retries, :consistency_level
|
26
|
+
attr_accessor :priority, :timeout, :max_retries, :sleep_between_retries, :consistency_level,
|
27
|
+
:predexp, :fail_on_filtered_out, :replica, :use_compression
|
26
28
|
|
27
29
|
def initialize(opt={})
|
28
30
|
# Container object for transaction policy attributes used in all database
|
@@ -32,11 +34,71 @@ module Aerospike
|
|
32
34
|
# Currently, only used for scans.
|
33
35
|
@priority = opt[:priority] || Priority::DEFAULT
|
34
36
|
|
37
|
+
# Set optional predicate expression filters in postfix notation.
|
38
|
+
# Predicate expression filters are applied on the query results on the server.
|
39
|
+
# Predicate expression filters may occur on any bin in the record.
|
40
|
+
# Requires Aerospike Server versions >= 3.12
|
41
|
+
#
|
42
|
+
# Postfix notation is described here: http://wiki.c2.com/?PostfixNotation
|
43
|
+
#
|
44
|
+
# Example:
|
45
|
+
#
|
46
|
+
# (c >= 11 and c <= 20) or (d > 3 and (d < 5)
|
47
|
+
# policy.predexp = [
|
48
|
+
# PredExp.integer_bin("c"),
|
49
|
+
# PredExp.integer_value(11),
|
50
|
+
# PredExp.integer_greater_eq(),
|
51
|
+
# PredExp.integer_bin("c"),
|
52
|
+
# PredExp.integer_value(20),
|
53
|
+
# PredExp.integer_less_eq(),
|
54
|
+
# PredExp.and(2),
|
55
|
+
# PredExp.integer_bin("d"),
|
56
|
+
# PredExp.integer_value(3),
|
57
|
+
# PredExp.integer_greater(),
|
58
|
+
# PredExp.integer_bin("d"),
|
59
|
+
# PredExp.integer_value(5),
|
60
|
+
# PredExp.integer_less(),
|
61
|
+
# PredExp.and(2),
|
62
|
+
# PredExp.or(2)
|
63
|
+
# ]
|
64
|
+
#
|
65
|
+
# # Record last update time > 2017-01-15
|
66
|
+
# policy.predexp = [
|
67
|
+
# PredExp.rec_last_update(),
|
68
|
+
# PredExp.integer_value(Time.new(2017, 1, 15).to_i),
|
69
|
+
# PredExp.integer_greater(),
|
70
|
+
# PredExp.integer_greater()
|
71
|
+
# ]
|
72
|
+
@predexp = opt[:predexp] || nil
|
73
|
+
|
74
|
+
|
75
|
+
# Throw exception if @predexp is defined and that filter evaluates
|
76
|
+
# to false (transaction ignored). The Aerospike::Exceptions::Aerospike
|
77
|
+
# will contain result code Aerospike::ResultCode::FILTERED_OUT.
|
78
|
+
# This field is not applicable to batch, scan or query commands.
|
79
|
+
@fail_on_filtered_out = opt[:fail_on_filtered_out] || false
|
80
|
+
|
35
81
|
# How replicas should be consulted in a read operation to provide the desired
|
36
82
|
# consistency guarantee. Default to allowing one replica to be used in the
|
37
83
|
# read operation.
|
38
84
|
@consistency_level = opt[:consistency_level] || Aerospike::ConsistencyLevel::CONSISTENCY_ONE
|
39
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
|
+
# Use zlib compression on write or batch read commands when the command buffer size is greater
|
95
|
+
# than 128 bytes. In addition, tell the server to compress its response on read commands.
|
96
|
+
# The server response compression threshold is also 128 bytes.
|
97
|
+
#
|
98
|
+
# This option will increase cpu and memory usage (for extra compressed buffers), but
|
99
|
+
# decrease the size of data sent over the network.
|
100
|
+
@use_compression = opt[:use_compression] || false
|
101
|
+
|
40
102
|
# Transaction timeout.
|
41
103
|
# This timeout is used to set the socket timeout and is also sent to the
|
42
104
|
# server along with the transaction in the wire protocol.
|
@@ -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,45 @@
|
|
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
|
+
# Try node on the same rack as the client first. If there are no nodes on the
|
32
|
+
# same rack, use SEQUENCE instead.
|
33
|
+
#
|
34
|
+
# ClientPolicy#rack_aware}, ClientPolicy#rack_id, and server rack
|
35
|
+
# configuration must also be set to enable this functionality.
|
36
|
+
PREFER_RACK = 3
|
37
|
+
|
38
|
+
# Distribute reads across all nodes in cluster in round-robin fashion.
|
39
|
+
# This option is useful when the replication factor equals the number
|
40
|
+
# of nodes in the cluster and the overhead of requesting proles is not desired.
|
41
|
+
RANDOM = 4
|
42
|
+
|
43
|
+
end # module
|
44
|
+
|
45
|
+
end # module
|