aerospike 2.24.0 → 2.26.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +27 -0
- data/lib/aerospike/cdt/context.rb +136 -69
- data/lib/aerospike/cdt/map_policy.rb +16 -2
- data/lib/aerospike/cdt/map_return_type.rb +9 -1
- data/lib/aerospike/client.rb +30 -32
- data/lib/aerospike/command/command.rb +104 -98
- data/lib/aerospike/command/operate_args.rb +99 -0
- data/lib/aerospike/command/operate_command.rb +6 -11
- data/lib/aerospike/exp/exp.rb +401 -334
- data/lib/aerospike/exp/exp_bit.rb +388 -0
- data/lib/aerospike/exp/exp_hll.rb +169 -0
- data/lib/aerospike/exp/exp_list.rb +403 -0
- data/lib/aerospike/exp/exp_map.rb +493 -0
- data/lib/aerospike/exp/operation.rb +56 -0
- data/lib/aerospike/features.rb +13 -0
- data/lib/aerospike/operation.rb +20 -22
- data/lib/aerospike/policy/policy.rb +25 -12
- data/lib/aerospike/query/filter.rb +44 -32
- data/lib/aerospike/query/query_executor.rb +7 -9
- data/lib/aerospike/query/query_partition_command.rb +32 -31
- data/lib/aerospike/query/recordset.rb +9 -9
- data/lib/aerospike/query/scan_executor.rb +7 -5
- data/lib/aerospike/task/execute_task.rb +17 -14
- data/lib/aerospike/utils/buffer.rb +46 -38
- data/lib/aerospike/utils/packer.rb +7 -6
- data/lib/aerospike/value/value.rb +21 -51
- data/lib/aerospike/version.rb +1 -1
- data/lib/aerospike.rb +156 -148
- metadata +8 -2
@@ -17,36 +17,34 @@
|
|
17
17
|
# License for the specific language governing permissions and limitations under
|
18
18
|
# the License.
|
19
19
|
|
20
|
-
require
|
20
|
+
require "aerospike/utils/pool"
|
21
21
|
|
22
22
|
module Aerospike
|
23
|
-
|
24
23
|
private
|
25
24
|
|
26
25
|
# Buffer class to ease the work around
|
27
26
|
class Buffer #:nodoc:
|
28
|
-
|
29
27
|
@@buf_pool = Pool.new
|
30
28
|
@@buf_pool.create_proc = Proc.new { Buffer.new }
|
31
29
|
|
32
30
|
attr_accessor :buf
|
33
31
|
|
34
|
-
INT16 =
|
35
|
-
UINT16 =
|
36
|
-
UINT16LE =
|
37
|
-
INT32 =
|
38
|
-
UINT32 =
|
39
|
-
INT64 =
|
40
|
-
UINT64 =
|
41
|
-
UINT64LE =
|
42
|
-
DOUBLE =
|
32
|
+
INT16 = "s>"
|
33
|
+
UINT16 = "n"
|
34
|
+
UINT16LE = "v"
|
35
|
+
INT32 = "l>"
|
36
|
+
UINT32 = "N"
|
37
|
+
INT64 = "q>"
|
38
|
+
UINT64 = "Q>"
|
39
|
+
UINT64LE = "Q"
|
40
|
+
DOUBLE = "G"
|
43
41
|
|
44
42
|
DEFAULT_BUFFER_SIZE = 16 * 1024
|
45
43
|
MAX_BUFFER_SIZE = 10 * 1024 * 1024
|
46
44
|
|
47
|
-
def initialize(size=DEFAULT_BUFFER_SIZE, buf = nil)
|
45
|
+
def initialize(size = DEFAULT_BUFFER_SIZE, buf = nil)
|
48
46
|
@buf = (buf ? buf : ("%0#{size}d" % 0))
|
49
|
-
@buf.force_encoding(
|
47
|
+
@buf.force_encoding("binary")
|
50
48
|
@slice_end = @buf.bytesize
|
51
49
|
end
|
52
50
|
|
@@ -61,6 +59,7 @@ module Aerospike
|
|
61
59
|
def size
|
62
60
|
@buf.bytesize
|
63
61
|
end
|
62
|
+
|
64
63
|
alias_method :length, :size
|
65
64
|
|
66
65
|
def eat!(n)
|
@@ -135,7 +134,7 @@ module Aerospike
|
|
135
134
|
8
|
136
135
|
end
|
137
136
|
|
138
|
-
def read(offset, len=nil)
|
137
|
+
def read(offset, len = nil)
|
139
138
|
if len
|
140
139
|
@buf[offset, len]
|
141
140
|
else
|
@@ -144,37 +143,37 @@ module Aerospike
|
|
144
143
|
end
|
145
144
|
|
146
145
|
def read_int16(offset)
|
147
|
-
vals = @buf[offset..offset+1]
|
146
|
+
vals = @buf[offset..offset + 1]
|
148
147
|
vals.unpack(INT16)[0]
|
149
148
|
end
|
150
149
|
|
151
150
|
def read_uint16(offset)
|
152
|
-
vals = @buf[offset..offset+1]
|
151
|
+
vals = @buf[offset..offset + 1]
|
153
152
|
vals.unpack(UINT16)[0]
|
154
153
|
end
|
155
154
|
|
156
155
|
def read_int32(offset)
|
157
|
-
vals = @buf[offset..offset+3]
|
156
|
+
vals = @buf[offset..offset + 3]
|
158
157
|
vals.unpack(INT32)[0]
|
159
158
|
end
|
160
159
|
|
161
160
|
def read_uint32(offset)
|
162
|
-
vals = @buf[offset..offset+3]
|
161
|
+
vals = @buf[offset..offset + 3]
|
163
162
|
vals.unpack(UINT32)[0]
|
164
163
|
end
|
165
164
|
|
166
165
|
def read_int64(offset)
|
167
|
-
vals = @buf[offset..offset+7]
|
166
|
+
vals = @buf[offset..offset + 7]
|
168
167
|
vals.unpack(INT64)[0]
|
169
168
|
end
|
170
169
|
|
171
170
|
def read_uint64_little_endian(offset)
|
172
|
-
vals = @buf[offset..offset+7]
|
171
|
+
vals = @buf[offset..offset + 7]
|
173
172
|
vals.unpack(UINT64LE)[0]
|
174
173
|
end
|
175
174
|
|
176
175
|
def read_uint64(offset)
|
177
|
-
vals = @buf[offset..offset+7]
|
176
|
+
vals = @buf[offset..offset + 7]
|
178
177
|
vals.unpack(UINT64)[0]
|
179
178
|
end
|
180
179
|
|
@@ -183,14 +182,14 @@ module Aerospike
|
|
183
182
|
i = 0
|
184
183
|
while i < len
|
185
184
|
val <<= 8
|
186
|
-
val |= @buf[offset+i].ord & 0xFF
|
185
|
+
val |= @buf[offset + i].ord & 0xFF
|
187
186
|
i = i.succ
|
188
187
|
end
|
189
188
|
val
|
190
189
|
end
|
191
190
|
|
192
191
|
def read_double(offset)
|
193
|
-
vals = @buf[offset..offset+7]
|
192
|
+
vals = @buf[offset..offset + 7]
|
194
193
|
vals.unpack(DOUBLE)[0]
|
195
194
|
end
|
196
195
|
|
@@ -199,39 +198,48 @@ module Aerospike
|
|
199
198
|
end
|
200
199
|
|
201
200
|
def to_s
|
202
|
-
@buf[0..@slice_end-1]
|
201
|
+
@buf[0..@slice_end - 1]
|
203
202
|
end
|
204
203
|
|
205
204
|
def reset
|
206
|
-
for i in 0..@buf.size-1
|
207
|
-
@buf[i] =
|
205
|
+
for i in 0..@buf.size - 1
|
206
|
+
@buf[i] = " "
|
208
207
|
end
|
209
208
|
end
|
210
209
|
|
211
|
-
def dump(start=0, finish=nil)
|
210
|
+
def dump(start = 0, finish = nil)
|
211
|
+
buf ||= @buf.bytes
|
212
212
|
finish ||= @slice_end - 1
|
213
213
|
width = 16
|
214
214
|
|
215
|
-
ascii =
|
215
|
+
ascii = "|"
|
216
216
|
counter = 0
|
217
217
|
|
218
|
-
print
|
218
|
+
print "%08x " % start
|
219
219
|
@buf.bytes[start...finish].each do |c|
|
220
220
|
if counter >= start
|
221
|
-
print
|
221
|
+
print "%02x " % c
|
222
222
|
ascii << (c.between?(32, 126) ? c : ?.)
|
223
|
-
if ascii.length
|
224
|
-
|
223
|
+
print " " if ascii.length == (width / 2 + 1)
|
224
|
+
if ascii.length > width
|
225
|
+
ascii << "|"
|
225
226
|
puts ascii
|
226
|
-
ascii =
|
227
|
-
print
|
227
|
+
ascii = "|"
|
228
|
+
print "%08x " % (counter + 1)
|
228
229
|
end
|
229
230
|
end
|
230
231
|
counter += 1
|
231
232
|
end
|
232
|
-
puts
|
233
|
-
end
|
234
233
|
|
234
|
+
# print the remainder in buffer
|
235
|
+
if ascii.length.positive?
|
236
|
+
fill_size = ((width - ascii.length + 1) * 3)
|
237
|
+
fill_size += 1 if ascii.length <= (width / 2)
|
238
|
+
filler = " " * fill_size
|
239
|
+
print filler
|
240
|
+
ascii << "|"
|
241
|
+
puts ascii
|
242
|
+
end
|
243
|
+
end
|
235
244
|
end # buffer
|
236
|
-
|
237
245
|
end # module
|
@@ -14,13 +14,11 @@
|
|
14
14
|
# License for the specific language governing permissions and limitations under
|
15
15
|
# the License.
|
16
16
|
|
17
|
-
require
|
18
|
-
require
|
17
|
+
require "msgpack"
|
18
|
+
require "aerospike/utils/pool"
|
19
19
|
|
20
20
|
module Aerospike
|
21
|
-
|
22
21
|
class Packer < MessagePack::Packer #:nodoc:
|
23
|
-
|
24
22
|
AS_EXT_TYPE = -1
|
25
23
|
|
26
24
|
@@pool = Pool.new
|
@@ -44,9 +42,12 @@ module Aerospike
|
|
44
42
|
buffer << [val].pack("S>")
|
45
43
|
end
|
46
44
|
|
45
|
+
def write_raw(buf)
|
46
|
+
buffer.write(buf)
|
47
|
+
end
|
48
|
+
|
47
49
|
def bytes
|
48
|
-
self.to_s.force_encoding(
|
50
|
+
self.to_s.force_encoding("binary")
|
49
51
|
end
|
50
52
|
end
|
51
|
-
|
52
53
|
end
|
@@ -17,12 +17,11 @@
|
|
17
17
|
# License for the specific language governing permissions and limitations under
|
18
18
|
# the License.
|
19
19
|
|
20
|
-
require
|
20
|
+
require "aerospike/aerospike_exception"
|
21
21
|
|
22
22
|
module Aerospike
|
23
23
|
# Polymorphic value classes used to efficiently serialize objects into the wire protocol.
|
24
24
|
class Value #:nodoc:
|
25
|
-
|
26
25
|
def self.of(value, allow_64bits = false)
|
27
26
|
case value
|
28
27
|
when Integer
|
@@ -83,12 +82,10 @@ module Aerospike
|
|
83
82
|
raise Aerospike::Exceptions::Aerospike.new(Aerospike::ResultCode::TYPE_NOT_SUPPORTED, "Value type #{value.class} not supported as hash key.")
|
84
83
|
end
|
85
84
|
end
|
86
|
-
|
87
85
|
end # Value
|
88
86
|
|
89
87
|
# Empty value.
|
90
88
|
class NullValue < Value #:nodoc:
|
91
|
-
|
92
89
|
def initialize
|
93
90
|
self
|
94
91
|
end
|
@@ -102,7 +99,7 @@ module Aerospike
|
|
102
99
|
end
|
103
100
|
|
104
101
|
def to_s
|
105
|
-
|
102
|
+
""
|
106
103
|
end
|
107
104
|
|
108
105
|
def estimate_size
|
@@ -118,13 +115,12 @@ module Aerospike
|
|
118
115
|
end
|
119
116
|
|
120
117
|
def to_bytes
|
121
|
-
|
118
|
+
""
|
122
119
|
end
|
123
120
|
end
|
124
121
|
|
125
122
|
NULL = NullValue.new.freeze
|
126
123
|
|
127
|
-
|
128
124
|
# Infinity value.
|
129
125
|
class InfinityValue < Value #:nodoc:
|
130
126
|
def initialize
|
@@ -156,7 +152,7 @@ module Aerospike
|
|
156
152
|
end
|
157
153
|
|
158
154
|
def to_bytes
|
159
|
-
|
155
|
+
""
|
160
156
|
end
|
161
157
|
|
162
158
|
def to_msgpack_ext
|
@@ -197,7 +193,7 @@ module Aerospike
|
|
197
193
|
end
|
198
194
|
|
199
195
|
def to_bytes
|
200
|
-
|
196
|
+
""
|
201
197
|
end
|
202
198
|
|
203
199
|
def to_msgpack_ext
|
@@ -209,10 +205,9 @@ module Aerospike
|
|
209
205
|
|
210
206
|
# Byte array value.
|
211
207
|
class BytesValue < Value #:nodoc:
|
212
|
-
|
213
208
|
def initialize(value)
|
214
209
|
@bytes = value
|
215
|
-
@bytes.force_encoding(
|
210
|
+
@bytes.force_encoding("binary")
|
216
211
|
|
217
212
|
self
|
218
213
|
end
|
@@ -244,16 +239,14 @@ module Aerospike
|
|
244
239
|
def pack(packer)
|
245
240
|
packer.write(Aerospike::ParticleType::BLOB.chr + @bytes)
|
246
241
|
end
|
247
|
-
|
248
242
|
end # BytesValue
|
249
243
|
|
250
244
|
#######################################
|
251
245
|
|
252
246
|
# value string.
|
253
247
|
class StringValue < Value #:nodoc:
|
254
|
-
|
255
248
|
def initialize(val)
|
256
|
-
@value = val ||
|
249
|
+
@value = val || ""
|
257
250
|
self
|
258
251
|
end
|
259
252
|
|
@@ -289,14 +282,12 @@ module Aerospike
|
|
289
282
|
def to_sym
|
290
283
|
@value.to_sym
|
291
284
|
end
|
292
|
-
|
293
285
|
end # StringValue
|
294
286
|
|
295
287
|
#######################################
|
296
288
|
|
297
289
|
# Integer value.
|
298
290
|
class IntegerValue < Value #:nodoc:
|
299
|
-
|
300
291
|
def initialize(val)
|
301
292
|
@value = val || 0
|
302
293
|
self
|
@@ -326,20 +317,18 @@ module Aerospike
|
|
326
317
|
def to_bytes
|
327
318
|
# Convert integer to big endian unsigned 64 bits.
|
328
319
|
# @see http://ruby-doc.org/core-2.3.0/Array.html#method-i-pack
|
329
|
-
[@value].pack(
|
320
|
+
[@value].pack("Q>")
|
330
321
|
end
|
331
322
|
|
332
323
|
def to_s
|
333
324
|
@value.to_s
|
334
325
|
end
|
335
|
-
|
336
326
|
end # IntegerValue
|
337
327
|
|
338
328
|
#######################################
|
339
329
|
|
340
330
|
# Float value.
|
341
331
|
class FloatValue < Value #:nodoc:
|
342
|
-
|
343
332
|
def initialize(val)
|
344
333
|
@value = val || 0.0
|
345
334
|
self
|
@@ -367,13 +356,12 @@ module Aerospike
|
|
367
356
|
end
|
368
357
|
|
369
358
|
def to_bytes
|
370
|
-
[@value].pack(
|
359
|
+
[@value].pack("G")
|
371
360
|
end
|
372
361
|
|
373
362
|
def to_s
|
374
363
|
@value.to_s
|
375
364
|
end
|
376
|
-
|
377
365
|
end # FloatValue
|
378
366
|
|
379
367
|
#######################################
|
@@ -381,7 +369,6 @@ module Aerospike
|
|
381
369
|
# List value.
|
382
370
|
# Supported by Aerospike 3 servers only.
|
383
371
|
class ListValue < Value #:nodoc:
|
384
|
-
|
385
372
|
def initialize(list)
|
386
373
|
@list = list || []
|
387
374
|
end
|
@@ -415,7 +402,7 @@ module Aerospike
|
|
415
402
|
end
|
416
403
|
|
417
404
|
def to_s
|
418
|
-
@list.map{|v| v.to_s}.to_s
|
405
|
+
@list.map { |v| v.to_s }.to_s
|
419
406
|
end
|
420
407
|
|
421
408
|
private
|
@@ -430,15 +417,13 @@ module Aerospike
|
|
430
417
|
|
431
418
|
@bytes
|
432
419
|
end
|
433
|
-
|
434
420
|
end
|
435
421
|
|
436
422
|
# #######################################/
|
437
423
|
|
438
424
|
# Map value.
|
439
|
-
# Supported by Aerospike 3 servers only.
|
425
|
+
# Supported by Aerospike 3+ servers only.
|
440
426
|
class MapValue < Value #:nodoc:
|
441
|
-
|
442
427
|
def initialize(vmap)
|
443
428
|
@vmap = vmap || {}
|
444
429
|
end
|
@@ -475,7 +460,7 @@ module Aerospike
|
|
475
460
|
end
|
476
461
|
|
477
462
|
def to_s
|
478
|
-
@vmap.map{|k, v| "#{k.to_s} => #{v.to_s}" }.to_s
|
463
|
+
@vmap.map { |k, v| "#{k.to_s} => #{v.to_s}" }.to_s
|
479
464
|
end
|
480
465
|
|
481
466
|
private
|
@@ -490,7 +475,6 @@ module Aerospike
|
|
490
475
|
|
491
476
|
@bytes
|
492
477
|
end
|
493
|
-
|
494
478
|
end
|
495
479
|
|
496
480
|
# #######################################/
|
@@ -498,7 +482,6 @@ module Aerospike
|
|
498
482
|
# GeoJSON value.
|
499
483
|
# Supported by Aerospike server version 3.7 and later.
|
500
484
|
class GeoJSONValue < Value #:nodoc:
|
501
|
-
|
502
485
|
def initialize(json)
|
503
486
|
@json = json
|
504
487
|
@bytes = json.to_json
|
@@ -535,7 +518,6 @@ module Aerospike
|
|
535
518
|
def to_s
|
536
519
|
@json
|
537
520
|
end
|
538
|
-
|
539
521
|
end
|
540
522
|
|
541
523
|
# #######################################/
|
@@ -543,14 +525,19 @@ module Aerospike
|
|
543
525
|
# HLLValue value. Encapsulates a HyperLogLog value.
|
544
526
|
# Supported by Aerospike server version 4.9 and later.
|
545
527
|
class HLLValue < Value #:nodoc:
|
528
|
+
attr_reader :bytes
|
546
529
|
|
547
530
|
def initialize(value)
|
548
531
|
@bytes = value
|
549
|
-
@bytes.force_encoding(
|
532
|
+
@bytes.force_encoding("binary")
|
550
533
|
|
551
534
|
self
|
552
535
|
end
|
553
536
|
|
537
|
+
def ==(other)
|
538
|
+
@bytes.to_s == other.to_s
|
539
|
+
end
|
540
|
+
|
554
541
|
def type
|
555
542
|
Aerospike::ParticleType::HLL
|
556
543
|
end
|
@@ -578,7 +565,6 @@ module Aerospike
|
|
578
565
|
def pack(packer)
|
579
566
|
packer.write(Aerospike::ParticleType::BLOB.chr + @bytes)
|
580
567
|
end
|
581
|
-
|
582
568
|
end
|
583
569
|
|
584
570
|
#######################################
|
@@ -594,63 +580,49 @@ module Aerospike
|
|
594
580
|
protected
|
595
581
|
|
596
582
|
def self.bytes_to_particle(type, buf, offset, length) # :nodoc:
|
597
|
-
|
598
583
|
case type
|
599
584
|
when Aerospike::ParticleType::STRING
|
600
585
|
bytes = buf.read(offset, length)
|
601
586
|
bytes.force_encoding(Aerospike.encoding)
|
602
|
-
|
603
587
|
when Aerospike::ParticleType::INTEGER
|
604
588
|
buf.read_int64(offset)
|
605
|
-
|
606
589
|
when Aerospike::ParticleType::DOUBLE
|
607
590
|
buf.read_double(offset)
|
608
|
-
|
609
591
|
when Aerospike::ParticleType::BOOL
|
610
592
|
buf.read_bool(offset, length)
|
611
|
-
|
612
593
|
when Aerospike::ParticleType::BLOB
|
613
|
-
buf.read(offset,length)
|
614
|
-
|
594
|
+
buf.read(offset, length)
|
615
595
|
when Aerospike::ParticleType::LIST
|
616
596
|
Unpacker.use do |unpacker|
|
617
597
|
data = buf.read(offset, length)
|
618
598
|
unpacker.unpack(data)
|
619
599
|
end
|
620
|
-
|
621
600
|
when Aerospike::ParticleType::MAP
|
622
601
|
Unpacker.use do |unpacker|
|
623
602
|
data = buf.read(offset, length)
|
624
603
|
unpacker.unpack(data)
|
625
604
|
end
|
626
|
-
|
627
605
|
when Aerospike::ParticleType::GEOJSON
|
628
606
|
# ignore the flags for now
|
629
607
|
ncells = buf.read_int16(offset + 1)
|
630
608
|
hdrsz = 1 + 2 + (ncells * 8)
|
631
609
|
Aerospike::GeoJSON.new(buf.read(offset + hdrsz, length - hdrsz))
|
632
|
-
|
633
610
|
when Aerospike::ParticleType::HLL
|
634
|
-
bytes = buf.read(offset,length)
|
611
|
+
bytes = buf.read(offset, length)
|
635
612
|
Aerospike::HLLValue.new(bytes)
|
636
|
-
|
637
613
|
else
|
638
614
|
nil
|
639
615
|
end
|
640
616
|
end
|
641
617
|
|
642
618
|
def self.bytes_to_key_value(type, buf, offset, len) # :nodoc:
|
643
|
-
|
644
619
|
case type
|
645
620
|
when Aerospike::ParticleType::STRING
|
646
621
|
StringValue.new(buf.read(offset, len))
|
647
|
-
|
648
622
|
when Aerospike::ParticleType::INTEGER
|
649
623
|
IntegerValue.new(buf.read_var_int64(offset, len))
|
650
|
-
|
651
624
|
when Aerospike::ParticleType::BLOB
|
652
|
-
BytesValue.new(buf.read(offset,len))
|
653
|
-
|
625
|
+
BytesValue.new(buf.read(offset, len))
|
654
626
|
else
|
655
627
|
nil
|
656
628
|
end
|
@@ -663,7 +635,6 @@ module Aerospike
|
|
663
635
|
# Boolean value.
|
664
636
|
# Supported by Aerospike server 5.6+ only.
|
665
637
|
class BoolValue < Value #:nodoc:
|
666
|
-
|
667
638
|
def initialize(val)
|
668
639
|
@value = val || false
|
669
640
|
self
|
@@ -698,6 +669,5 @@ module Aerospike
|
|
698
669
|
def to_s
|
699
670
|
@value.to_s
|
700
671
|
end
|
701
|
-
|
702
672
|
end # BoolValue
|
703
673
|
end # module
|
data/lib/aerospike/version.rb
CHANGED