aerospike 0.1.6 → 1.0.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 +22 -0
- data/lib/aerospike.rb +5 -0
- data/lib/aerospike/atomic/atomic.rb +3 -1
- data/lib/aerospike/client.rb +98 -32
- data/lib/aerospike/cluster/cluster.rb +25 -8
- data/lib/aerospike/cluster/connection.rb +1 -1
- data/lib/aerospike/cluster/node.rb +16 -3
- data/lib/aerospike/cluster/node_validator.rb +16 -4
- data/lib/aerospike/cluster/partition.rb +1 -1
- data/lib/aerospike/cluster/partition_tokenizer_new.rb +4 -2
- data/lib/aerospike/cluster/partition_tokenizer_old.rb +1 -1
- data/lib/aerospike/command/admin_command.rb +353 -0
- data/lib/aerospike/command/batch_command.rb +12 -42
- data/lib/aerospike/command/batch_command_exists.rb +1 -1
- data/lib/aerospike/command/batch_command_get.rb +1 -1
- data/lib/aerospike/command/batch_item.rb +1 -1
- data/lib/aerospike/command/batch_node.rb +1 -1
- data/lib/aerospike/command/command.rb +9 -14
- data/lib/aerospike/command/delete_command.rb +1 -1
- data/lib/aerospike/command/execute_command.rb +1 -1
- data/lib/aerospike/command/exists_command.rb +1 -1
- data/lib/aerospike/command/operate_command.rb +1 -1
- data/lib/aerospike/command/read_command.rb +12 -38
- data/lib/aerospike/command/read_header_command.rb +2 -2
- data/lib/aerospike/command/roles.rb +36 -0
- data/lib/aerospike/command/single_command.rb +1 -1
- data/lib/aerospike/command/touch_command.rb +1 -1
- data/lib/aerospike/command/write_command.rb +1 -1
- data/lib/aerospike/info.rb +1 -1
- data/lib/aerospike/loggable.rb +1 -1
- data/lib/aerospike/policy/admin_policy.rb +33 -0
- data/lib/aerospike/policy/batch_policy.rb +5 -5
- data/lib/aerospike/policy/client_policy.rb +15 -4
- data/lib/aerospike/policy/generation_policy.rb +0 -5
- data/lib/aerospike/policy/policy.rb +6 -6
- data/lib/aerospike/policy/query_policy.rb +2 -2
- data/lib/aerospike/policy/scan_policy.rb +6 -6
- data/lib/aerospike/policy/write_policy.rb +8 -8
- data/lib/aerospike/query/query_command.rb +1 -1
- data/lib/aerospike/query/scan_command.rb +1 -1
- data/lib/aerospike/query/stream_command.rb +1 -1
- data/lib/aerospike/record.rb +2 -3
- data/lib/aerospike/result_code.rb +11 -1
- data/lib/aerospike/user_role.rb +30 -0
- data/lib/aerospike/utils/buffer.rb +22 -2
- data/lib/aerospike/utils/epoc.rb +3 -1
- data/lib/aerospike/utils/pool.rb +1 -1
- data/lib/aerospike/value/value.rb +12 -13
- data/lib/aerospike/version.rb +1 -1
- metadata +6 -2
@@ -27,11 +27,6 @@ module Aerospike
|
|
27
27
|
# This is useful for restore after backup.
|
28
28
|
EXPECT_GEN_GT = 2
|
29
29
|
|
30
|
-
# Create duplicate record if expected generation is not equal to server generation.
|
31
|
-
# Duplicates are only created when the server configuration option "allow-versions"
|
32
|
-
# is true (default is false).
|
33
|
-
DUPLICATE = 3
|
34
|
-
|
35
30
|
end # module
|
36
31
|
|
37
32
|
end # module
|
@@ -24,34 +24,34 @@ module Aerospike
|
|
24
24
|
|
25
25
|
attr_accessor :priority, :timeout, :max_retries, :sleep_between_retries, :consistency_level
|
26
26
|
|
27
|
-
def initialize(
|
27
|
+
def initialize(opt={})
|
28
28
|
# Container object for transaction policy attributes used in all database
|
29
29
|
# operation calls.
|
30
30
|
|
31
31
|
# Priority of request relative to other transactions.
|
32
32
|
# Currently, only used for scans.
|
33
|
-
@priority = priority || Priority::DEFAULT
|
33
|
+
@priority = opt[:priority] || Priority::DEFAULT
|
34
34
|
|
35
35
|
# How replicas should be consulted in a read operation to provide the desired
|
36
36
|
# consistency guarantee. Default to allowing one replica to be used in the
|
37
37
|
# read operation.
|
38
|
-
@consistency_level = consistency_level || Aerospike::ConsistencyLevel::CONSISTENCY_ONE
|
38
|
+
@consistency_level = opt[:consistency_level] || Aerospike::ConsistencyLevel::CONSISTENCY_ONE
|
39
39
|
|
40
40
|
# Transaction timeout.
|
41
41
|
# This timeout is used to set the socket timeout and is also sent to the
|
42
42
|
# server along with the transaction in the wire protocol.
|
43
43
|
# Default to no timeout (0).
|
44
|
-
@timeout = timeout || 0
|
44
|
+
@timeout = opt[:timeout] || 0
|
45
45
|
|
46
46
|
# Maximum number of retries before aborting the current transaction.
|
47
47
|
# A retry is attempted when there is a network error other than timeout.
|
48
48
|
# If max_retries is exceeded, the abort will occur even if the timeout
|
49
49
|
# has not yet been exceeded.
|
50
|
-
@max_retries = max_retiries || 2
|
50
|
+
@max_retries = opt[:max_retiries] || 2
|
51
51
|
|
52
52
|
# Duration to sleep between retries if a transaction fails and the
|
53
53
|
# timeout was not exceeded. Enter zero to skip sleep.
|
54
|
-
@sleep_between_retries = sleep_between_retries || 0.5
|
54
|
+
@sleep_between_retries = opt[:sleep_between_retries] || 0.5
|
55
55
|
end
|
56
56
|
|
57
57
|
|
@@ -23,13 +23,13 @@ module Aerospike
|
|
23
23
|
attr_accessor :scan_percent, :concurrent_nodes,
|
24
24
|
:include_bin_data, :fail_on_cluster_change
|
25
25
|
|
26
|
-
def initialize(
|
27
|
-
super()
|
26
|
+
def initialize(opt={})
|
27
|
+
super(opt)
|
28
28
|
|
29
|
-
@scan_percent = scan_percent || 100
|
30
|
-
@concurrent_nodes = concurrent_nodes.nil? ? true : concurrent_nodes
|
31
|
-
@include_bin_data = include_bin_data.nil? ? true : include_bin_data
|
32
|
-
@fail_on_cluster_change = fail_on_cluster_change.nil? ? true : fail_on_cluster_change
|
29
|
+
@scan_percent = opt[:scan_percent] || 100
|
30
|
+
@concurrent_nodes = opt[:concurrent_nodes].nil? ? true : concurrent_nodes
|
31
|
+
@include_bin_data = opt[:include_bin_data].nil? ? true : include_bin_data
|
32
|
+
@fail_on_cluster_change = opt[:fail_on_cluster_change].nil? ? true : fail_on_cluster_change
|
33
33
|
|
34
34
|
@max_retries = 0
|
35
35
|
|
@@ -26,25 +26,25 @@ module Aerospike
|
|
26
26
|
attr_accessor :record_exists_action, :generation_policy,
|
27
27
|
:generation, :expiration, :send_key, :commit_level
|
28
28
|
|
29
|
-
def initialize(
|
30
|
-
super()
|
29
|
+
def initialize(opt={})
|
30
|
+
super(opt)
|
31
31
|
|
32
32
|
# Qualify how to handle writes where the record already exists.
|
33
|
-
@record_exists_action = record_exists_action || RecordExistsAction::UPDATE
|
33
|
+
@record_exists_action = opt[:record_exists_action] || RecordExistsAction::UPDATE
|
34
34
|
|
35
35
|
# Qualify how to handle record writes based on record generation. The default (NONE)
|
36
36
|
# indicates that the generation is not used to restrict writes.
|
37
|
-
@generation_policy = gen_policy || GenerationPolicy::NONE
|
37
|
+
@generation_policy = opt[:gen_policy] || GenerationPolicy::NONE
|
38
38
|
|
39
39
|
# Desired consistency guarantee when committing a transaction on the server. The default
|
40
40
|
# (COMMIT_ALL) indicates that the server should wait for master and all replica commits to
|
41
41
|
# be successful before returning success to the client.
|
42
|
-
@commit_level = commit_level || Aerospike::CommitLevel::COMMIT_ALL
|
42
|
+
@commit_level = opt[:commit_level] || Aerospike::CommitLevel::COMMIT_ALL
|
43
43
|
|
44
44
|
# Expected generation. Generation is the number of times a record has been modified
|
45
45
|
# (including creation) on the server. If a write operation is creating a record,
|
46
46
|
# the expected generation would be 0
|
47
|
-
@generation = generation || 0
|
47
|
+
@generation = opt[:generation] || 0
|
48
48
|
|
49
49
|
# Record expiration. Also known as ttl (time to live).
|
50
50
|
# Seconds record will live before being removed by the server.
|
@@ -53,11 +53,11 @@ module Aerospike
|
|
53
53
|
# versions >= 3.1.4. Do not use -1 for older servers.
|
54
54
|
# 0: Default to namespace configuration variable "default-ttl" on the server.
|
55
55
|
# > 0: Actual expiration in seconds.
|
56
|
-
@expiration = expiration || 0
|
56
|
+
@expiration = opt[:expiration] || 0
|
57
57
|
|
58
58
|
# Send user defined key in addition to hash digest on a record put.
|
59
59
|
# The default is to send the user defined key.
|
60
|
-
@send_key = send_key.nil? ? true : send_key
|
60
|
+
@send_key = opt[:send_key].nil? ? true : send_key
|
61
61
|
|
62
62
|
self
|
63
63
|
end
|
data/lib/aerospike/record.rb
CHANGED
@@ -20,15 +20,14 @@ module Aerospike
|
|
20
20
|
|
21
21
|
class Record
|
22
22
|
|
23
|
-
attr_reader :key, :bins, :generation, :expiration, :node
|
23
|
+
attr_reader :key, :bins, :generation, :expiration, :node
|
24
24
|
|
25
|
-
def initialize(node, rec_key, rec_bins,
|
25
|
+
def initialize(node, rec_key, rec_bins, rec_gen, rec_exp)
|
26
26
|
@key = rec_key
|
27
27
|
@bins = rec_bins
|
28
28
|
@generation = rec_gen
|
29
29
|
@expiration = rec_exp
|
30
30
|
@node = node
|
31
|
-
@dups = dups
|
32
31
|
end
|
33
32
|
|
34
33
|
def to_s
|
@@ -128,10 +128,14 @@ module Aerospike
|
|
128
128
|
# User was previously created.
|
129
129
|
USER_ALREADY_EXISTS = 61
|
130
130
|
|
131
|
-
|
132
131
|
# Password is invalid.
|
133
132
|
INVALID_PASSWORD = 62
|
134
133
|
|
134
|
+
# Password is invalid.
|
135
|
+
EXPIRED_PASSWORD = 63
|
136
|
+
|
137
|
+
# Password is invalid.
|
138
|
+
FORBIDDEN_PASSWORD = 64
|
135
139
|
|
136
140
|
# Security credential is invalid.
|
137
141
|
INVALID_CREDENTIAL = 63
|
@@ -297,6 +301,12 @@ module Aerospike
|
|
297
301
|
when INVALID_PASSWORD
|
298
302
|
"Invalid password"
|
299
303
|
|
304
|
+
when EXPIRED_PASSWORD
|
305
|
+
"Expired password"
|
306
|
+
|
307
|
+
when FORBIDDEN_PASSWORD
|
308
|
+
"Forbidden password"
|
309
|
+
|
300
310
|
when INVALID_CREDENTIAL
|
301
311
|
"Invalid credential"
|
302
312
|
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
# Copyright 2014 Aerospike, Inc.
|
3
|
+
#
|
4
|
+
# Portions may be licensed to Aerospike, Inc. under one or more contributor
|
5
|
+
# license agreements.
|
6
|
+
#
|
7
|
+
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
8
|
+
# use this file except in compliance with the License. You may obtain a copy of
|
9
|
+
# the License at http:#www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
13
|
+
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
14
|
+
# License for the specific language governing permissions and limitations under
|
15
|
+
# the License.
|
16
|
+
|
17
|
+
module Aerospike
|
18
|
+
|
19
|
+
# User and assigned roles.
|
20
|
+
class UserRoles
|
21
|
+
|
22
|
+
# User name.
|
23
|
+
attr_accessor :user
|
24
|
+
|
25
|
+
# List of assigned roles.
|
26
|
+
attr_accessor :roles
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
@@ -21,7 +21,7 @@ module Aerospike
|
|
21
21
|
private
|
22
22
|
|
23
23
|
# Buffer class to ease the work around
|
24
|
-
class Buffer
|
24
|
+
class Buffer #:nodoc:
|
25
25
|
|
26
26
|
@@buf_pool = Pool.new
|
27
27
|
@@buf_pool.create_block = Proc.new { Buffer.new }
|
@@ -29,8 +29,11 @@ module Aerospike
|
|
29
29
|
attr_accessor :buf
|
30
30
|
|
31
31
|
INT16 = 's>'
|
32
|
+
UINT16 = 'n'
|
32
33
|
INT32 = 'l>'
|
34
|
+
UINT32 = 'N'
|
33
35
|
INT64 = 'q>'
|
36
|
+
UINT64 = 'Q>'
|
34
37
|
|
35
38
|
DEFAULT_BUFFER_SIZE = 16 * 1024
|
36
39
|
MAX_BUFFER_SIZE = 10 * 1024 * 1024
|
@@ -76,16 +79,31 @@ module Aerospike
|
|
76
79
|
2
|
77
80
|
end
|
78
81
|
|
82
|
+
def write_uint16(i, offset)
|
83
|
+
@buf[offset, 2] = [i].pack(UINT16)
|
84
|
+
2
|
85
|
+
end
|
86
|
+
|
79
87
|
def write_int32(i, offset)
|
80
88
|
@buf[offset, 4] = [i].pack(INT32)
|
81
89
|
4
|
82
90
|
end
|
83
91
|
|
92
|
+
def write_uint32(i, offset)
|
93
|
+
@buf[offset, 4] = [i].pack(UINT32)
|
94
|
+
4
|
95
|
+
end
|
96
|
+
|
84
97
|
def write_int64(i, offset)
|
85
98
|
@buf[offset, 8] = [i].pack(INT64)
|
86
99
|
8
|
87
100
|
end
|
88
101
|
|
102
|
+
def write_uint64(i, offset)
|
103
|
+
@buf[offset, 8] = [i].pack(UINT64)
|
104
|
+
8
|
105
|
+
end
|
106
|
+
|
89
107
|
def read(offset, len=nil)
|
90
108
|
start = offset
|
91
109
|
|
@@ -113,9 +131,11 @@ module Aerospike
|
|
113
131
|
|
114
132
|
def read_var_int64(offset, len)
|
115
133
|
val = 0
|
116
|
-
|
134
|
+
i = 0
|
135
|
+
while i < len
|
117
136
|
val <<= 8
|
118
137
|
val |= @buf[offset+i].ord & 0xFF
|
138
|
+
i = i.succ
|
119
139
|
end
|
120
140
|
val
|
121
141
|
end
|
data/lib/aerospike/utils/epoc.rb
CHANGED
@@ -18,10 +18,12 @@ require 'time'
|
|
18
18
|
|
19
19
|
module Aerospike
|
20
20
|
|
21
|
+
private
|
22
|
+
|
21
23
|
CITRUSLEAF_EPOCH = 1262304000
|
22
24
|
|
23
25
|
# Converts an Expiration time to TTL in seconds
|
24
|
-
def self.TTL(secs_from_citrus_leaf_epoc)
|
26
|
+
def self.TTL(secs_from_citrus_leaf_epoc) #:nodoc:
|
25
27
|
if secs_from_citrus_leaf_epoc == 0
|
26
28
|
0xFFFFFFFF
|
27
29
|
else
|
data/lib/aerospike/utils/pool.rb
CHANGED
@@ -25,7 +25,7 @@ module Aerospike
|
|
25
25
|
private
|
26
26
|
|
27
27
|
# Polymorphic value classes used to efficiently serialize objects into the wire protocol.
|
28
|
-
class Value
|
28
|
+
class Value #:nodoc:
|
29
29
|
|
30
30
|
@@packer_pool = Pool.new
|
31
31
|
@@packer_pool.create_block = Proc.new { MessagePack::Packer.new }
|
@@ -71,7 +71,7 @@ module Aerospike
|
|
71
71
|
|
72
72
|
|
73
73
|
# Empty value.
|
74
|
-
class NullValue < Value
|
74
|
+
class NullValue < Value #:nodoc:
|
75
75
|
|
76
76
|
def initialize
|
77
77
|
self
|
@@ -108,7 +108,7 @@ module Aerospike
|
|
108
108
|
end
|
109
109
|
|
110
110
|
# Byte array value.
|
111
|
-
class BytesValue < Value
|
111
|
+
class BytesValue < Value #:nodoc:
|
112
112
|
|
113
113
|
def initialize(value)
|
114
114
|
@bytes = value
|
@@ -139,7 +139,6 @@ module Aerospike
|
|
139
139
|
|
140
140
|
def write(buffer, offset)
|
141
141
|
buffer.write_binary(@bytes, offset)
|
142
|
-
buffer.length
|
143
142
|
end
|
144
143
|
|
145
144
|
def pack(packer)
|
@@ -151,7 +150,7 @@ module Aerospike
|
|
151
150
|
#######################################
|
152
151
|
|
153
152
|
# value string.
|
154
|
-
class StringValue < Value
|
153
|
+
class StringValue < Value #:nodoc:
|
155
154
|
|
156
155
|
def initialize(val)
|
157
156
|
@value = val || ''
|
@@ -191,7 +190,7 @@ module Aerospike
|
|
191
190
|
#######################################
|
192
191
|
|
193
192
|
# Integer value.
|
194
|
-
class IntegerValue < Value
|
193
|
+
class IntegerValue < Value #:nodoc:
|
195
194
|
|
196
195
|
def initialize(val)
|
197
196
|
@value = val || 0
|
@@ -231,7 +230,7 @@ module Aerospike
|
|
231
230
|
|
232
231
|
# List value.
|
233
232
|
# Supported by Aerospike 3 servers only.
|
234
|
-
class ListValue < Value
|
233
|
+
class ListValue < Value #:nodoc:
|
235
234
|
|
236
235
|
def initialize(list)
|
237
236
|
@list = list || nil
|
@@ -281,7 +280,7 @@ module Aerospike
|
|
281
280
|
|
282
281
|
# Map value.
|
283
282
|
# Supported by Aerospike 3 servers only.
|
284
|
-
class MapValue < Value
|
283
|
+
class MapValue < Value #:nodoc:
|
285
284
|
|
286
285
|
def initialize(vmap)
|
287
286
|
@vmap = vmap || {}
|
@@ -334,7 +333,7 @@ module Aerospike
|
|
334
333
|
|
335
334
|
protected
|
336
335
|
|
337
|
-
def self.normalize_elem(elem)
|
336
|
+
def self.normalize_elem(elem) # :nodoc:
|
338
337
|
case elem
|
339
338
|
when String
|
340
339
|
elem[1..-1]
|
@@ -347,17 +346,17 @@ module Aerospike
|
|
347
346
|
end
|
348
347
|
end
|
349
348
|
|
350
|
-
def self.normalize_strings_in_array(arr)
|
349
|
+
def self.normalize_strings_in_array(arr) # :nodoc:
|
351
350
|
arr.map! { |elem| normalize_elem(elem) }
|
352
351
|
end
|
353
352
|
|
354
|
-
def self.normalize_strings_in_map(hash)
|
353
|
+
def self.normalize_strings_in_map(hash) # :nodoc:
|
355
354
|
hash.inject({}) do |h, (k,v)|
|
356
355
|
h.update({ normalize_elem(k) => normalize_elem(v) })
|
357
356
|
end
|
358
357
|
end
|
359
358
|
|
360
|
-
def self.bytes_to_particle(type, buf, offset, length)
|
359
|
+
def self.bytes_to_particle(type, buf, offset, length) # :nodoc:
|
361
360
|
|
362
361
|
case type
|
363
362
|
when Aerospike::ParticleType::STRING
|
@@ -380,7 +379,7 @@ module Aerospike
|
|
380
379
|
end
|
381
380
|
end
|
382
381
|
|
383
|
-
def self.bytes_to_key_value(type, buf, offset, len)
|
382
|
+
def self.bytes_to_key_value(type, buf, offset, len) # :nodoc:
|
384
383
|
|
385
384
|
case type
|
386
385
|
when Aerospike::ParticleType::STRING
|
data/lib/aerospike/version.rb
CHANGED