aerospike 1.0.12 → 2.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.
@@ -0,0 +1,38 @@
1
+ # encoding: utf-8
2
+ # Copyright 2016 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
+ module CDT
19
+ module MapOrder
20
+
21
+ ##
22
+ # Map is not ordered. This is the default.
23
+ UNORDERED = 0
24
+
25
+ ##
26
+ # Order map by key.
27
+ KEY_ORDERED = 1
28
+
29
+ ##
30
+ # Order map by key, then value.
31
+ KEY_VALUE_ORDERED = 3
32
+
33
+ ##
34
+ # Default order
35
+ DEFAULT = UNORDERED
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,37 @@
1
+ # encoding: utf-8
2
+ # Copyright 2016 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
+ module CDT
19
+
20
+ class MapPolicy
21
+
22
+ attr_accessor :order, :write_mode
23
+
24
+ def initialize(order: nil, write_mode: nil)
25
+ @order = order || MapOrder::DEFAULT
26
+ @write_mode = write_mode || MapWriteMode::DEFAULT
27
+ end
28
+
29
+ DEFAULT = MapPolicy.new
30
+
31
+ def value
32
+ order.to_int
33
+ end
34
+ end
35
+
36
+ end
37
+ end
@@ -0,0 +1,74 @@
1
+ # encoding: utf-8
2
+ # Copyright 2016 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
+ module CDT
19
+ module MapReturnType
20
+
21
+ ##
22
+ # Do not return a result.
23
+ NONE = 0
24
+
25
+ ##
26
+ # Return key index order.
27
+ # 0 = first key
28
+ # N = Nth key
29
+ # -1 = last key
30
+ INDEX = 1
31
+
32
+ ##
33
+ # Return reverse key order.
34
+ # 0 = last key
35
+ # -1 = first key
36
+ REVERSE_INDEX = 2
37
+
38
+ ##
39
+ # Return value order.
40
+ # 0 = smalles value
41
+ # N = Nth smalles value
42
+ # -1 = largest value
43
+ RANK = 3
44
+
45
+ ##
46
+ # Return reverse value order.
47
+ # 0 = largest value
48
+ # N = Nth largest value
49
+ # -1 = smallest values
50
+ REVERSE_RANK = 4
51
+
52
+ ##
53
+ # Return count of items selected.
54
+ COUNT = 5
55
+
56
+ ##
57
+ # Return key for single read and key list for range read.
58
+ KEY = 6
59
+
60
+ ##
61
+ # Return value for single key read and value list for range read.
62
+ VALUE = 7
63
+
64
+ ##
65
+ # Return key/value items.
66
+ KEY_VALUE = 8
67
+
68
+ ##
69
+ # Default return type: NONE
70
+ DEFAULT_RETURN_TYPE = NONE
71
+
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,41 @@
1
+ # encoding: utf-8
2
+ # Copyright 2016 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
+ module CDT
19
+ module MapWriteMode
20
+
21
+ ##
22
+ # If the key already exists, the item will be overwritten.
23
+ # If the key does not exist, a new item will be created.
24
+ UPDATE = 0
25
+
26
+ ##
27
+ # If the key already exists, the item will be overwritten.
28
+ # If the key does not exist, the write will fail.
29
+ UPDATE_ONLY = 1
30
+
31
+ ##
32
+ # If the key already exists, the write will fail.
33
+ # If the key does not exist, a new item will be created.
34
+ CREATE_ONLY = 2
35
+
36
+ ##
37
+ # Default write mode
38
+ DEFAULT = UPDATE
39
+ end
40
+ end
41
+ end
@@ -29,7 +29,7 @@ module Aerospike
29
29
  # Examples:
30
30
  #
31
31
  # # connect to the database
32
- # client = Client.new('192.168.0.1', 3000)
32
+ # client = Client.new('192.168.0.1')
33
33
  #
34
34
  # #=> raises Aerospike::Exceptions::Timeout if a +:timeout+ is specified and
35
35
  # +:fail_if_not_connected+ set to true
@@ -39,40 +39,27 @@ module Aerospike
39
39
  attr_accessor :default_policy, :default_write_policy,
40
40
  :default_scan_policy, :default_query_policy, :default_admin_policy
41
41
 
42
- def initialize(host, port, options={})
42
+ def initialize(hosts = nil, policy: ClientPolicy.new, connect: true)
43
43
  @default_policy = Policy.new
44
44
  @default_write_policy = WritePolicy.new
45
45
  @default_scan_policy = ScanPolicy.new
46
46
  @default_query_policy = QueryPolicy.new
47
47
  @default_admin_policy = QueryPolicy.new
48
48
 
49
- policy = opt_to_client_policy(options)
50
-
51
- @cluster = Cluster.new(policy, Host.new(host, port))
49
+ hosts = parse_hosts(hosts || ENV["AEROSPIKE_HOSTS"] || "localhost")
50
+ policy = create_policy(policy, ClientPolicy)
51
+ @cluster = Cluster.new(policy, *hosts)
52
52
  @cluster.add_cluster_config_change_listener(self)
53
- @cluster.connect
54
53
 
54
+ self.connect if connect
55
55
  self
56
56
  end
57
57
 
58
- def self.new_many(hosts, options={})
59
- # Don't initiualize, just instantiate
60
- client = Client.allocate
61
-
62
- client.default_policy = Policy.new
63
- client.default_write_policy = WritePolicy.new
64
- client.default_scan_policy = ScanPolicy.new
65
- client.default_query_policy = QueryPolicy.new
66
- client.default_admin_policy = QueryPolicy.new
67
-
68
- policy = client.send(:opt_to_client_policy , options)
69
-
70
- cluster = Cluster.new(policy, *hosts)
71
- cluster.add_cluster_config_change_listener(client)
72
- client.send(:cluster=, cluster)
73
- cluster.connect
58
+ ##
59
+ # Connect to the cluster.
74
60
 
75
- client
61
+ def connect
62
+ @cluster.connect
76
63
  end
77
64
 
78
65
  ##
@@ -106,6 +93,10 @@ module Aerospike
106
93
  end
107
94
  end
108
95
 
96
+ def supports_feature?(feature)
97
+ @cluster.supports_feature?(feature)
98
+ end
99
+
109
100
  #-------------------------------------------------------
110
101
  # Write Record Operations
111
102
  #-------------------------------------------------------
@@ -122,7 +113,7 @@ module Aerospike
122
113
  # client.put key, {'bin', 'value string'}, :timeout => 0.001
123
114
 
124
115
  def put(key, bins, options={})
125
- policy = opt_to_write_policy(options)
116
+ policy = create_policy(options, WritePolicy)
126
117
  command = WriteCommand.new(@cluster, policy, key, hash_to_bins(bins), Aerospike::Operation::WRITE)
127
118
  execute_command(command)
128
119
  end
@@ -145,7 +136,7 @@ module Aerospike
145
136
  # client.append key, {'bin', 'value to append'}, :timeout => 0.001
146
137
 
147
138
  def append(key, bins, options={})
148
- policy = opt_to_write_policy(options)
139
+ policy = create_policy(options, WritePolicy)
149
140
  command = WriteCommand.new(@cluster, policy, key, hash_to_bins(bins), Aerospike::Operation::APPEND)
150
141
  execute_command(command)
151
142
  end
@@ -164,7 +155,7 @@ module Aerospike
164
155
  # client.prepend key, {'bin', 'value to prepend'}, :timeout => 0.001
165
156
 
166
157
  def prepend(key, bins, options={})
167
- policy = opt_to_write_policy(options)
158
+ policy = create_policy(options, WritePolicy)
168
159
  command = WriteCommand.new(@cluster, policy, key, hash_to_bins(bins), Aerospike::Operation::PREPEND)
169
160
  execute_command(command)
170
161
  end
@@ -187,7 +178,7 @@ module Aerospike
187
178
  # client.add key, {'bin', -1}, :timeout => 0.001
188
179
 
189
180
  def add(key, bins, options={})
190
- policy = opt_to_write_policy(options)
181
+ policy = create_policy(options, WritePolicy)
191
182
  command = WriteCommand.new(@cluster, policy, key, hash_to_bins(bins), Aerospike::Operation::ADD)
192
183
  execute_command(command)
193
184
  end
@@ -209,7 +200,7 @@ module Aerospike
209
200
  # existed = client.delete key, :timeout => 0.001
210
201
 
211
202
  def delete(key, options={})
212
- policy = opt_to_write_policy(options)
203
+ policy = create_policy(options, WritePolicy)
213
204
  command = DeleteCommand.new(@cluster, policy, key)
214
205
  execute_command(command)
215
206
  command.existed
@@ -230,7 +221,7 @@ module Aerospike
230
221
  # client.touch key, :timeout => 0.001
231
222
 
232
223
  def touch(key, options={})
233
- policy = opt_to_write_policy(options)
224
+ policy = create_policy(options, WritePolicy)
234
225
  command = TouchCommand.new(@cluster, policy, key)
235
226
  execute_command(command)
236
227
  end
@@ -243,7 +234,7 @@ module Aerospike
243
234
  # Determines if a record key exists.
244
235
  # The policy can be used to specify timeouts.
245
236
  def exists(key, options={})
246
- policy = opt_to_policy(options)
237
+ policy = create_policy(options, Policy)
247
238
  command = ExistsCommand.new(@cluster, policy, key)
248
239
  execute_command(command)
249
240
  command.exists
@@ -253,7 +244,7 @@ module Aerospike
253
244
  # The returned array bool is in positional order with the original key array order.
254
245
  # The policy can be used to specify timeouts.
255
246
  def batch_exists(keys, options={})
256
- policy = opt_to_policy(options)
247
+ policy = create_policy(options, Policy)
257
248
 
258
249
  # same array can be used without sychronization;
259
250
  # when a key exists, the corresponding index will be marked true
@@ -276,7 +267,7 @@ module Aerospike
276
267
  # Read record header and bins for specified key.
277
268
  # The policy can be used to specify timeouts.
278
269
  def get(key, bin_names=[], options={})
279
- policy = opt_to_policy(options)
270
+ policy = create_policy(options, Policy)
280
271
 
281
272
  command = ReadCommand.new(@cluster, policy, key, bin_names)
282
273
  execute_command(command)
@@ -286,7 +277,7 @@ module Aerospike
286
277
  # Read record generation and expiration only for specified key. Bins are not read.
287
278
  # The policy can be used to specify timeouts.
288
279
  def get_header(key, options={})
289
- policy = opt_to_policy(options)
280
+ policy = create_policy(options, Policy)
290
281
  command = ReadHeaderCommand.new(@cluster, policy, key)
291
282
  execute_command(command)
292
283
  command.record
@@ -301,7 +292,7 @@ module Aerospike
301
292
  # If a key is not found, the positional record will be nil.
302
293
  # The policy can be used to specify timeouts.
303
294
  def batch_get(keys, bin_names=[], options={})
304
- policy = opt_to_policy(options)
295
+ policy = create_policy(options, Policy)
305
296
 
306
297
  # wait until all migrations are finished
307
298
  # TODO: implement
@@ -326,7 +317,7 @@ module Aerospike
326
317
  # If a key is not found, the positional record will be nil.
327
318
  # The policy can be used to specify timeouts.
328
319
  def batch_get_header(keys, options={})
329
- policy = opt_to_policy(options)
320
+ policy = create_policy(options, Policy)
330
321
 
331
322
  # wait until all migrations are finished
332
323
  # TODO: Fix this and implement
@@ -357,7 +348,7 @@ module Aerospike
357
348
  # Write operations are always performed first, regardless of operation order
358
349
  # relative to read operations.
359
350
  def operate(key, operations, options={})
360
- policy = opt_to_write_policy(options)
351
+ policy = create_policy(options, WritePolicy)
361
352
 
362
353
  command = OperateCommand.new(@cluster, policy, key, operations)
363
354
  execute_command(command)
@@ -373,7 +364,8 @@ module Aerospike
373
364
  #
374
365
  # This method is only supported by Aerospike 3 servers.
375
366
  def get_large_list(key, bin_name, user_module=nil, options={})
376
- LargeList.new(self, opt_to_write_policy(options), key, bin_name, user_module)
367
+ policy = create_policy(options, WritePolicy)
368
+ LargeList.new(self, policy, key, bin_name, user_module)
377
369
  end
378
370
 
379
371
  # Initialize large map operator. This operator can be used to create and manage a map
@@ -382,7 +374,8 @@ module Aerospike
382
374
  # This method is only supported by Aerospike 3 servers.
383
375
  # DEPRECATED. This method will be removed from the client in the future.
384
376
  def get_large_map(key, bin_name, user_module=nil, options={})
385
- LargeMap.new(self, opt_to_write_policy(options), key, bin_name, user_module)
377
+ policy = create_policy(options, WritePolicy)
378
+ LargeMap.new(self, policy, key, bin_name, user_module)
386
379
  end
387
380
 
388
381
  # Initialize large set operator. This operator can be used to create and manage a set
@@ -391,7 +384,8 @@ module Aerospike
391
384
  # This method is only supported by Aerospike 3 servers.
392
385
  # DEPRECATED. This method will be removed from the client in the future.
393
386
  def get_large_set(key, bin_name, user_module=nil, options={})
394
- LargeSet.new(self, opt_to_write_policy(options), key, bin_name, user_module)
387
+ policy = create_policy(options, WritePolicy)
388
+ LargeSet.new(self, policy, key, bin_name, user_module)
395
389
  end
396
390
 
397
391
  # Initialize large stack operator. This operator can be used to create and manage a stack
@@ -400,7 +394,8 @@ module Aerospike
400
394
  # This method is only supported by Aerospike 3 servers.
401
395
  # DEPRECATED. This method will be removed from the client in the future.
402
396
  def get_large_stack(key, bin_name, user_module=nil, options={})
403
- LargeStack.new(self, opt_to_write_policy(options), key, bin_name, user_module)
397
+ policy = create_policy(options, WritePolicy)
398
+ LargeStack.new(self, policy, key, bin_name, user_module)
404
399
  end
405
400
 
406
401
  #---------------------------------------------------------------
@@ -508,7 +503,7 @@ module Aerospike
508
503
  #
509
504
  # This method is only supported by Aerospike 3 servers.
510
505
  def execute_udf(key, package_name, function_name, args=[], options={})
511
- policy = opt_to_write_policy(options)
506
+ policy = create_policy(options, WritePolicy)
512
507
 
513
508
  command = ExecuteCommand.new(@cluster, policy, key, package_name, function_name, args)
514
509
  execute_command(command)
@@ -542,7 +537,7 @@ module Aerospike
542
537
  # This method is only supported by Aerospike 3 servers.
543
538
  # If the policy is nil, the default relevant policy will be used.
544
539
  def execute_udf_on_query(statement, package_name, function_name, function_args=[], options={})
545
- policy = opt_to_query_policy(options)
540
+ policy = create_policy(options, QueryPolicy)
546
541
 
547
542
  nodes = @cluster.nodes
548
543
  if nodes.length == 0
@@ -555,7 +550,7 @@ module Aerospike
555
550
  # Use a thread per node
556
551
  nodes.each do |node|
557
552
  Thread.new do
558
- abort_on_exception = true
553
+ Thread.current.abort_on_exception = true
559
554
  begin
560
555
  command = QueryCommand.new(node, policy, statement, nil)
561
556
  execute_command(command)
@@ -578,7 +573,7 @@ module Aerospike
578
573
  # This method is only supported by Aerospike 3 servers.
579
574
  # index_type should be :string, :numeric or :geo2dsphere (requires server version 3.7 or later)
580
575
  def create_index(namespace, set_name, index_name, bin_name, index_type, options={})
581
- policy = opt_to_write_policy(options)
576
+ policy = create_policy(options, WritePolicy)
582
577
  str_cmd = "sindex-create:ns=#{namespace}"
583
578
  str_cmd << ";set=#{set_name}" unless set_name.to_s.strip.empty?
584
579
  str_cmd << ";indexname=#{index_name};numbins=1;indexdata=#{bin_name},#{index_type.to_s.upcase}"
@@ -605,7 +600,7 @@ module Aerospike
605
600
  # Delete secondary index.
606
601
  # This method is only supported by Aerospike 3 servers.
607
602
  def drop_index(namespace, set_name, index_name, options={})
608
- policy = opt_to_write_policy(options)
603
+ policy = create_policy(options, WritePolicy)
609
604
  str_cmd = "sindex-delete:ns=#{namespace}"
610
605
  str_cmd << ";set=#{set_name}" unless set_name.to_s.strip.empty?
611
606
  str_cmd << ";indexname=#{index_name}"
@@ -620,7 +615,7 @@ module Aerospike
620
615
  # Index did not previously exist. Return without error.
621
616
  return if response.start_with?('FAIL:201')
622
617
 
623
- raise Aerospike::Exceptions::Aerospike.new(Aerospike::ResultCode::INDEX_GENERICINDEX_GENERIC, "Drop index failed: #{response}")
618
+ raise Aerospike::Exceptions::Aerospike.new(Aerospike::ResultCode::INDEX_GENERIC, "Drop index failed: #{response}")
624
619
  end
625
620
 
626
621
  def request_info(*commands)
@@ -632,7 +627,7 @@ module Aerospike
632
627
  #-------------------------------------------------------
633
628
 
634
629
  def scan_all(namespace, set_name, bin_names=[], options={})
635
- policy = opt_to_scan_policy(options)
630
+ policy = create_policy(options, ScanPolicy)
636
631
 
637
632
  # wait until all migrations are finished
638
633
  # TODO: implement
@@ -653,12 +648,12 @@ module Aerospike
653
648
  # Use a thread per node
654
649
  nodes.each do |node|
655
650
  Thread.new do
656
- abort_on_exception = true
651
+ Thread.current.abort_on_exception = true
657
652
  command = ScanCommand.new(node, new_policy, namespace, set_name, bin_names, recordset)
658
653
  begin
659
654
  execute_command(command)
660
655
  rescue => e
661
- Aerospike.logger.error(e.backtrace.join("\n")) unless e == SCAN_TERMINATED_EXCEPTION
656
+ Aerospike.logger.error(e.backtrace.join("\n")) unless e == SCAN_TERMINATED_EXCEPTION
662
657
  recordset.cancel(e)
663
658
  ensure
664
659
  recordset.thread_finished
@@ -667,13 +662,13 @@ module Aerospike
667
662
  end
668
663
  else
669
664
  Thread.new do
670
- abort_on_exception = true
665
+ Thread.current.abort_on_exception = true
671
666
  nodes.each do |node|
672
667
  command = ScanCommand.new(node, new_policy, namespace, set_name, bin_names, recordset)
673
668
  begin
674
669
  execute_command(command)
675
670
  rescue => e
676
- Aerospike.logger.error(e.backtrace.join("\n")) unless e == SCAN_TERMINATED_EXCEPTION
671
+ Aerospike.logger.error(e.backtrace.join("\n")) unless e == SCAN_TERMINATED_EXCEPTION
677
672
  recordset.cancel(e)
678
673
  ensure
679
674
  recordset.thread_finished
@@ -688,7 +683,7 @@ module Aerospike
688
683
  # ScanNode reads all records in specified namespace and set, from one node only.
689
684
  # The policy can be used to specify timeouts.
690
685
  def scan_node(node, namespace, set_name, bin_names=[], options={})
691
- policy = opt_to_scan_policy(options)
686
+ policy = create_policy(options, ScanPolicy)
692
687
  # wait until all migrations are finished
693
688
  # TODO: implement
694
689
  # @cluster.WaitUntillMigrationIsFinished(policy.timeout)
@@ -703,12 +698,12 @@ module Aerospike
703
698
  recordset = Recordset.new(policy.record_queue_size, 1, :scan)
704
699
 
705
700
  Thread.new do
706
- abort_on_exception = true
701
+ Thread.current.abort_on_exception = true
707
702
  command = ScanCommand.new(node, new_policy, namespace, set_name, bin_names, recordset)
708
703
  begin
709
704
  execute_command(command)
710
705
  rescue => e
711
- Aerospike.logger.error(e.backtrace.join("\n")) unless e == SCAN_TERMINATED_EXCEPTION
706
+ Aerospike.logger.error(e.backtrace.join("\n")) unless e == SCAN_TERMINATED_EXCEPTION
712
707
  recordset.cancel(e)
713
708
  ensure
714
709
  recordset.thread_finished
@@ -730,7 +725,7 @@ module Aerospike
730
725
  # This method is only supported by Aerospike 3 servers.
731
726
  # If the policy is nil, a default policy will be generated.
732
727
  def query(statement, options={})
733
- policy = opt_to_query_policy(options)
728
+ policy = create_policy(options, QueryPolicy)
734
729
  new_policy = policy.clone
735
730
 
736
731
  nodes = @cluster.nodes
@@ -743,12 +738,12 @@ module Aerospike
743
738
  # Use a thread per node
744
739
  nodes.each do |node|
745
740
  Thread.new do
746
- abort_on_exception = true
741
+ Thread.current.abort_on_exception = true
747
742
  command = QueryCommand.new(node, new_policy, statement, recordset)
748
743
  begin
749
744
  execute_command(command)
750
745
  rescue => e
751
- Aerospike.logger.error(e.backtrace.join("\n")) unless e == QUERY_TERMINATED_EXCEPTION
746
+ Aerospike.logger.error(e.backtrace.join("\n")) unless e == QUERY_TERMINATED_EXCEPTION
752
747
  recordset.cancel(e)
753
748
  ensure
754
749
  recordset.thread_finished
@@ -766,7 +761,7 @@ module Aerospike
766
761
  # Create user with password and roles. Clear-text password will be hashed using bcrypt
767
762
  # before sending to server.
768
763
  def create_user(user, password, roles, options={})
769
- policy = opt_to_admin_policy(options)
764
+ policy = create_policy(options, AdminPolicy)
770
765
  hash = AdminCommand.hash_password(password)
771
766
  command = AdminCommand.new
772
767
  command.create_user(@cluster, policy, user, hash, roles)
@@ -774,14 +769,14 @@ module Aerospike
774
769
 
775
770
  # Remove user from cluster.
776
771
  def drop_user(user, options={})
777
- policy = opt_to_admin_policy(options)
772
+ policy = create_policy(options, AdminPolicy)
778
773
  command = AdminCommand.new
779
774
  command.drop_user(@cluster, policy, user)
780
775
  end
781
776
 
782
777
  # Change user's password. Clear-text password will be hashed using bcrypt before sending to server.
783
778
  def change_password(user, password, options={})
784
- policy = opt_to_admin_policy(options)
779
+ policy = create_policy(options, AdminPolicy)
785
780
  if @cluster.user == ''
786
781
  return NewAerospikeError(INVALID_USER)
787
782
  end
@@ -802,28 +797,28 @@ module Aerospike
802
797
 
803
798
  # Add roles to user's list of roles.
804
799
  def grant_roles(user, roles, options={})
805
- policy = opt_to_admin_policy(options)
800
+ policy = create_policy(options, AdminPolicy)
806
801
  command = AdminCommand.new
807
802
  command.grant_roles(@cluster, policy, user, roles)
808
803
  end
809
804
 
810
805
  # Remove roles from user's list of roles.
811
806
  def revoke_roles(user, roles, options={})
812
- policy = opt_to_admin_policy(options)
807
+ policy = create_policy(options, AdminPolicy)
813
808
  command = AdminCommand.new
814
809
  command.revoke_roles(@cluster, policy, user, roles)
815
810
  end
816
811
 
817
812
  # Retrieve roles for a given user.
818
813
  def query_user(user, options={})
819
- policy = opt_to_admin_policy(options)
814
+ policy = create_policy(options, AdminPolicy)
820
815
  command = AdminCommand.new
821
816
  command.query_user(@cluster, policy, user)
822
817
  end
823
818
 
824
819
  # Retrieve all users and their roles.
825
820
  def query_users(options={})
826
- policy = opt_to_admin_policy(options)
821
+ policy = create_policy(options, AdminPolicy)
827
822
  command = AdminCommand.new
828
823
  command.query_users(@cluster, policy)
829
824
  end
@@ -847,63 +842,33 @@ module Aerospike
847
842
  end
848
843
  end
849
844
 
850
- def opt_to_client_policy(options)
851
- if options.nil? || options == {}
852
- ClientPolicy.new
853
- elsif options.is_a?(ClientPolicy)
854
- options
855
- elsif options.is_a?(Hash)
856
- ClientPolicy.new(options)
857
- end
858
- end
859
-
860
- def opt_to_policy(options)
861
- if options.nil? || options == {}
862
- @default_policy
863
- elsif options.is_a?(Policy)
864
- options
865
- elsif options.is_a?(Hash)
866
- Policy.new(options)
867
- end
868
- end
869
-
870
- def opt_to_write_policy(options)
871
- if options.nil? || options == {}
872
- @default_write_policy
873
- elsif options.is_a?(WritePolicy)
874
- options
875
- elsif options.is_a?(Hash)
876
- WritePolicy.new(options)
877
- end
878
- end
879
-
880
- def opt_to_scan_policy(options)
881
- if options.nil? || options == {}
882
- @default_scan_policy
883
- elsif options.is_a?(ScanPolicy)
884
- options
885
- elsif options.is_a?(Hash)
886
- ScanPolicy.new(options)
887
- end
888
- end
889
-
890
- def opt_to_query_policy(options)
891
- if options.nil? || options == {}
892
- @default_query_policy
893
- elsif options.is_a?(QueryPolicy)
894
- options
895
- elsif options.is_a?(Hash)
896
- QueryPolicy.new(options)
845
+ def create_policy(policy, policy_klass)
846
+ case policy
847
+ when nil
848
+ policy_klass.new
849
+ when policy_klass
850
+ policy
851
+ when Hash
852
+ policy_klass.new(policy)
853
+ else
854
+ fail TypeError, "policy should be a #{policy_klass.name} instance or a Hash"
897
855
  end
898
856
  end
899
857
 
900
- def opt_to_admin_policy(options)
901
- if options.nil? || options == {}
902
- @default_admin_policy
903
- elsif options.is_a?(AdminPolicy)
904
- options
905
- elsif options.is_a?(Hash)
906
- AdminPolicy.new(options)
858
+ def parse_hosts(hosts)
859
+ case hosts
860
+ when Host
861
+ [hosts]
862
+ when Array
863
+ hosts
864
+ when String
865
+ hosts.split(?,).map { |host|
866
+ (addr, port) = host.split(?:)
867
+ port ||= 3000
868
+ Host.new(addr, port.to_i)
869
+ }
870
+ else
871
+ fail TypeError, "hosts should be a Host object, an Array of Host objects, or a String"
907
872
  end
908
873
  end
909
874
 
@@ -951,7 +916,7 @@ module Aerospike
951
916
  bn = batch_node
952
917
  bn.batch_namespaces.each do |bns|
953
918
  threads << Thread.new do
954
- abort_on_exception=true
919
+ Thread.current.abort_on_exception = true
955
920
  command = cmd_gen.call(bn.node, bns)
956
921
  execute_command(command)
957
922
  end