aerospike 2.23.0 → 2.25.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -13,7 +13,6 @@
13
13
  # limitations under the License.
14
14
 
15
15
  module Aerospike
16
-
17
16
  private
18
17
 
19
18
  # ExecuteTask is used to poll for long running server execute job completion.
@@ -29,19 +28,24 @@ module Aerospike
29
28
  self
30
29
  end
31
30
 
32
- # IsDone queries all nodes for task completion status.
31
+ # queries all nodes for task completion status.
33
32
  def all_nodes_done?
34
-
35
- if @scan
36
- command = 'scan-list'
37
- else
38
- command = 'query-list'
39
- end
33
+ modul = @scan ? "scan" : "query"
34
+ cmd1 = "query-show:trid=#{@task_id}"
35
+ cmd2 = modul + "-show:trid=#{@task_id}"
36
+ cmd3 = "jobs:module=" + modul + ";cmd=get-job;trid=#{@task_id}"
40
37
 
41
38
  nodes = @cluster.nodes
42
39
  done = false
43
40
 
44
41
  nodes.each do |node|
42
+ command = cmd3
43
+ if node.supports_feature?(Aerospike::Features::PARTITION_QUERY)
44
+ command = cmd1
45
+ elsif node.supports_feature?(Aerospike::Features::QUERY_SHOW)
46
+ command = cmd2
47
+ end
48
+
45
49
  conn = node.get_connection(0)
46
50
  responseMap, _ = Info.request(conn, command)
47
51
  node.put_connection(conn)
@@ -58,28 +62,27 @@ module Aerospike
58
62
 
59
63
  b = index + find.length
60
64
  response = response[b, response.length]
61
- find = 'job_status='
65
+ find = "job_status="
62
66
  index = response.index(find)
63
67
 
64
68
  next unless index
65
69
 
66
70
  b = index + find.length
67
71
  response = response[b, response.length]
68
- e = response.index(':')
72
+ e = response.index(":")
69
73
  status = response[0, e]
70
74
 
71
75
  case status
72
- when 'ABORTED'
76
+ when "ABORTED"
73
77
  raise Aerospike::Exceptions::QueryTerminated
74
- when 'IN PROGRESS'
78
+ when "IN PROGRESS"
75
79
  return false
76
- when 'DONE'
80
+ when "DONE"
77
81
  done = true
78
82
  end
79
83
  end
80
84
 
81
85
  done
82
86
  end
83
-
84
87
  end
85
88
  end
@@ -17,36 +17,34 @@
17
17
  # License for the specific language governing permissions and limitations under
18
18
  # the License.
19
19
 
20
- require 'aerospike/utils/pool'
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 = 's>'
35
- UINT16 = 'n'
36
- UINT16LE = 'v'
37
- INT32 = 'l>'
38
- UINT32 = 'N'
39
- INT64 = 'q>'
40
- UINT64 = 'Q>'
41
- UINT64LE = 'Q'
42
- DOUBLE = 'G'
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('binary')
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)
@@ -125,12 +124,17 @@ module Aerospike
125
124
  8
126
125
  end
127
126
 
127
+ def write_uint64_little_endian(i, offset)
128
+ @buf[offset, 8] = [i].pack(UINT64LE)
129
+ 8
130
+ end
131
+
128
132
  def write_double(f, offset)
129
133
  @buf[offset, 8] = [f].pack(DOUBLE)
130
134
  8
131
135
  end
132
136
 
133
- def read(offset, len=nil)
137
+ def read(offset, len = nil)
134
138
  if len
135
139
  @buf[offset, len]
136
140
  else
@@ -139,37 +143,37 @@ module Aerospike
139
143
  end
140
144
 
141
145
  def read_int16(offset)
142
- vals = @buf[offset..offset+1]
146
+ vals = @buf[offset..offset + 1]
143
147
  vals.unpack(INT16)[0]
144
148
  end
145
149
 
146
150
  def read_uint16(offset)
147
- vals = @buf[offset..offset+1]
151
+ vals = @buf[offset..offset + 1]
148
152
  vals.unpack(UINT16)[0]
149
153
  end
150
154
 
151
155
  def read_int32(offset)
152
- vals = @buf[offset..offset+3]
156
+ vals = @buf[offset..offset + 3]
153
157
  vals.unpack(INT32)[0]
154
158
  end
155
159
 
156
160
  def read_uint32(offset)
157
- vals = @buf[offset..offset+3]
161
+ vals = @buf[offset..offset + 3]
158
162
  vals.unpack(UINT32)[0]
159
163
  end
160
164
 
161
165
  def read_int64(offset)
162
- vals = @buf[offset..offset+7]
166
+ vals = @buf[offset..offset + 7]
163
167
  vals.unpack(INT64)[0]
164
168
  end
165
169
 
166
170
  def read_uint64_little_endian(offset)
167
- vals = @buf[offset..offset+7]
171
+ vals = @buf[offset..offset + 7]
168
172
  vals.unpack(UINT64LE)[0]
169
173
  end
170
174
 
171
175
  def read_uint64(offset)
172
- vals = @buf[offset..offset+7]
176
+ vals = @buf[offset..offset + 7]
173
177
  vals.unpack(UINT64)[0]
174
178
  end
175
179
 
@@ -178,14 +182,14 @@ module Aerospike
178
182
  i = 0
179
183
  while i < len
180
184
  val <<= 8
181
- val |= @buf[offset+i].ord & 0xFF
185
+ val |= @buf[offset + i].ord & 0xFF
182
186
  i = i.succ
183
187
  end
184
188
  val
185
189
  end
186
190
 
187
191
  def read_double(offset)
188
- vals = @buf[offset..offset+7]
192
+ vals = @buf[offset..offset + 7]
189
193
  vals.unpack(DOUBLE)[0]
190
194
  end
191
195
 
@@ -194,25 +198,48 @@ module Aerospike
194
198
  end
195
199
 
196
200
  def to_s
197
- @buf[0..@slice_end-1]
201
+ @buf[0..@slice_end - 1]
198
202
  end
199
203
 
200
204
  def reset
201
- for i in 0..@buf.size-1
202
- @buf[i] = ' '
205
+ for i in 0..@buf.size - 1
206
+ @buf[i] = " "
203
207
  end
204
208
  end
205
209
 
206
- def dump(from=nil, to=nil)
207
- from ||= 0
208
- to ||= @slice_end - 1
210
+ def dump(start = 0, finish = nil)
211
+ buf ||= @buf.bytes
212
+ finish ||= @slice_end - 1
213
+ width = 16
214
+
215
+ ascii = "|"
216
+ counter = 0
217
+
218
+ print "%08x " % start
219
+ @buf.bytes[start...finish].each do |c|
220
+ if counter >= start
221
+ print "%02x " % c
222
+ ascii << (c.between?(32, 126) ? c : ?.)
223
+ print " " if ascii.length == (width / 2 + 1)
224
+ if ascii.length > width
225
+ ascii << "|"
226
+ puts ascii
227
+ ascii = "|"
228
+ print "%08x " % (counter + 1)
229
+ end
230
+ end
231
+ counter += 1
232
+ end
209
233
 
210
- @buf.bytes[from...to].each do |c|
211
- print c.ord.to_s(16)
212
- putc ' '
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
213
242
  end
214
243
  end
215
-
216
244
  end # buffer
217
-
218
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 'msgpack'
18
- require 'aerospike/utils/pool'
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('binary')
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 'aerospike/aerospike_exception'
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('binary')
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('Q>')
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('G')
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('binary')
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
@@ -1,4 +1,4 @@
1
1
  # encoding: utf-8
2
2
  module Aerospike
3
- VERSION = "2.23.0"
3
+ VERSION = "2.25.0"
4
4
  end