Class: Aerospike::Client
- Inherits:
-
Object
- Object
- Aerospike::Client
- Defined in:
- lib/aerospike/client.rb
Overview
Examples:
# connect to the database client = Client.new(‘192.168.0.1’, 3000)
#=> raises Aerospike::Exceptions::Timeout if a :timeout is specified and :fail_if_not_connected set to true
Instance Attribute Summary collapse
-
#default_admin_policy ⇒ Object
Returns the value of attribute default_admin_policy.
-
#default_policy ⇒ Object
Returns the value of attribute default_policy.
-
#default_query_policy ⇒ Object
Returns the value of attribute default_query_policy.
-
#default_scan_policy ⇒ Object
Returns the value of attribute default_scan_policy.
-
#default_write_policy ⇒ Object
Returns the value of attribute default_write_policy.
Class Method Summary collapse
Instance Method Summary collapse
-
#add(key, bins, options = {}) ⇒ Object
Examples:.
-
#append(key, bins, options = {}) ⇒ Object
Examples:.
-
#batch_exists(keys, options = {}) ⇒ Object
Check if multiple record keys exist in one batch call.
-
#batch_get(keys, bin_names = [], options = {}) ⇒ Object
Read multiple record headers and bins for specified keys in one batch call.
-
#batch_get_header(keys, options = {}) ⇒ Object
Read multiple record header data for specified keys in one batch call.
-
#change_password(user, password, options = {}) ⇒ Object
Change user’s password.
-
#close ⇒ Object
Closes all client connections to database server nodes.
-
#connected? ⇒ Boolean
Determines if there are active connections to the database server cluster.
-
#create_index(namespace, set_name, index_name, bin_name, index_type, options = {}) ⇒ Object
Create secondary index.
-
#create_user(user, password, roles, options = {}) ⇒ Object
Create user with password and roles.
-
#delete(key, options = {}) ⇒ Object
Examples:.
-
#drop_index(namespace, set_name, index_name, options = {}) ⇒ Object
Delete secondary index.
-
#drop_user(user, options = {}) ⇒ Object
Remove user from cluster.
-
#execute_udf(key, package_name, function_name, args = [], options = {}) ⇒ Object
Execute user defined function on server and return results.
-
#execute_udf_on_query(statement, package_name, function_name, function_args = [], options = {}) ⇒ Object
execute_udf_on_query applies user defined function on records that match the statement filter.
-
#exists(key, options = {}) ⇒ Object
Determines if a record key exists.
-
#get(key, bin_names = [], options = {}) ⇒ Object
Read record header and bins for specified key.
-
#get_header(key, options = {}) ⇒ Object
Read record generation and expiration only for specified key.
-
#get_large_list(key, bin_name, user_module = nil, options = {}) ⇒ Object
Initialize large list operator.
-
#get_large_map(key, bin_name, user_module = nil, options = {}) ⇒ Object
Initialize large map operator.
-
#get_large_set(key, bin_name, user_module = nil, options = {}) ⇒ Object
Initialize large set operator.
-
#get_large_stack(key, bin_name, user_module = nil, options = {}) ⇒ Object
Initialize large stack operator.
-
#grant_roles(user, roles, options = {}) ⇒ Object
Add roles to user’s list of roles.
-
#initialize(host, port, options = {}) ⇒ Client
constructor
A new instance of Client.
-
#list_udf(options = {}) ⇒ Object
ListUDF lists all packages containing user defined functions in the server.
-
#node_names ⇒ Object
Returns list of active server node names in the cluster.
-
#nodes ⇒ Object
Returns array of active server nodes in the cluster.
-
#operate(key, operations, options = {}) ⇒ Object
Perform multiple read/write operations on a single key in one batch call.
-
#prepend(key, bins, options = {}) ⇒ Object
Examples:.
-
#put(key, bins, options = {}) ⇒ Object
Examples:.
-
#query(statement, options = {}) ⇒ Object
Query executes a query and returns a recordset.
-
#query_user(user, options = {}) ⇒ Object
Retrieve roles for a given user.
-
#query_users(options = {}) ⇒ Object
Retrieve all users and their roles.
-
#register_udf(udf_body, server_path, language, options = {}) ⇒ Object
Register package containing user defined functions with server.
-
#register_udf_from_file(client_path, server_path, language, options = {}) ⇒ Object
Register package containing user defined functions with server.
-
#remove_udf(udf_name, options = {}) ⇒ Object
RemoveUDF removes a package containing user defined functions in the server.
-
#replace_roles(user, roles, options = {}) ⇒ Object
Replace user’s list of roles.
- #request_info(*commands) ⇒ Object
-
#revoke_roles(user, roles, options = {}) ⇒ Object
Remove roles from user’s list of roles.
-
#scan_all(namespace, set_name, bin_names = [], options = {}) ⇒ Object
——————————————————- Scan Operations ——————————————————-.
-
#scan_node(node, namespace, set_name, bin_names = [], options = {}) ⇒ Object
ScanNode reads all records in specified namespace and set, from one node only.
-
#touch(key, options = {}) ⇒ Object
Examples:.
Constructor Details
#initialize(host, port, options = {}) ⇒ Client
Returns a new instance of Client.
42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/aerospike/client.rb', line 42 def initialize(host, port, ={}) @default_policy = Policy.new @default_write_policy = WritePolicy.new @default_scan_policy = ScanPolicy.new @default_query_policy = QueryPolicy.new @default_admin_policy = QueryPolicy.new policy = opt_to_client_policy() @cluster = Cluster.new(policy, Host.new(host, port)) self end |
Instance Attribute Details
#default_admin_policy ⇒ Object
Returns the value of attribute default_admin_policy.
39 40 41 |
# File 'lib/aerospike/client.rb', line 39 def default_admin_policy @default_admin_policy end |
#default_policy ⇒ Object
Returns the value of attribute default_policy.
39 40 41 |
# File 'lib/aerospike/client.rb', line 39 def default_policy @default_policy end |
#default_query_policy ⇒ Object
Returns the value of attribute default_query_policy.
39 40 41 |
# File 'lib/aerospike/client.rb', line 39 def default_query_policy @default_query_policy end |
#default_scan_policy ⇒ Object
Returns the value of attribute default_scan_policy.
39 40 41 |
# File 'lib/aerospike/client.rb', line 39 def default_scan_policy @default_scan_policy end |
#default_write_policy ⇒ Object
Returns the value of attribute default_write_policy.
39 40 41 |
# File 'lib/aerospike/client.rb', line 39 def default_write_policy @default_write_policy end |
Class Method Details
.new_many(hosts, options = {}) ⇒ Object
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/aerospike/client.rb', line 56 def self.new_many(hosts, ={}) # Don't initiualize, just instantiate client = Client.allocate client.default_policy = Policy.new client.default_write_policy = WritePolicy.new client.default_scan_policy = ScanPolicy.new client.default_query_policy = QueryPolicy.new client.default_admin_policy = QueryPolicy.new policy = client.send(:opt_to_client_policy , ) client.send(:cluster=, Cluster.new(policy, *hosts)) client end |
Instance Method Details
#add(key, bins, options = {}) ⇒ Object
Examples:
client.add key, {'bin', -1}, :timeout => 0.001
184 185 186 187 188 |
# File 'lib/aerospike/client.rb', line 184 def add(key, bins, ={}) policy = opt_to_write_policy() command = WriteCommand.new(@cluster, policy, key, hash_to_bins(bins), Aerospike::Operation::ADD) command.execute end |
#append(key, bins, options = {}) ⇒ Object
Examples:
client.append key, {'bin', 'value to append'}, :timeout => 0.001
142 143 144 145 146 |
# File 'lib/aerospike/client.rb', line 142 def append(key, bins, ={}) policy = opt_to_write_policy() command = WriteCommand.new(@cluster, policy, key, hash_to_bins(bins), Aerospike::Operation::APPEND) command.execute end |
#batch_exists(keys, options = {}) ⇒ Object
Check if multiple record keys exist in one batch call.
The returned array bool is in positional order with the original key array order.
The policy can be used to specify timeouts.
250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 |
# File 'lib/aerospike/client.rb', line 250 def batch_exists(keys, ={}) policy = opt_to_policy() # same array can be used without sychronization; # when a key exists, the corresponding index will be marked true exists_array = Array.new(keys.length) key_map = BatchItem.generate_map(keys) cmd_gen = Proc.new do |node, bns| BatchCommandExists.new(node, bns, policy, key_map, exists_array) end batch_execute(keys, &cmd_gen) exists_array end |
#batch_get(keys, bin_names = [], options = {}) ⇒ Object
Read multiple record headers and bins for specified keys in one batch call.
The returned records are in positional order with the original key array order.
If a key is not found, the positional record will be nil.
The policy can be used to specify timeouts.
298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 |
# File 'lib/aerospike/client.rb', line 298 def batch_get(keys, bin_names=[], ={}) policy = opt_to_policy() # wait until all migrations are finished # TODO: implement # @cluster.WaitUntillMigrationIsFinished(policy.timeout) # same array can be used without sychronization; # when a key exists, the corresponding index will be set to record records = Array.new(keys.length) key_map = BatchItem.generate_map(keys) cmd_gen = Proc.new do |node, bns| BatchCommandGet.new(node, bns, policy, key_map, bin_names.uniq, records, INFO1_READ) end batch_execute(keys, &cmd_gen) records end |
#batch_get_header(keys, options = {}) ⇒ Object
Read multiple record header data for specified keys in one batch call.
The returned records are in positional order with the original key array order.
If a key is not found, the positional record will be nil.
The policy can be used to specify timeouts.
323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 |
# File 'lib/aerospike/client.rb', line 323 def batch_get_header(keys, ={}) policy = opt_to_policy() # wait until all migrations are finished # TODO: Fix this and implement # @cluster.WaitUntillMigrationIsFinished(policy.timeout) # same array can be used without sychronization; # when a key exists, the corresponding index will be set to record records = Array.new(keys.length) key_map = BatchItem.generate_map(keys) cmd_gen = Proc.new do |node, bns| BatchCommandGet.new(node, bns, policy, key_map, nil, records, INFO1_READ | INFO1_NOBINDATA) end batch_execute(keys, &cmd_gen) records end |
#change_password(user, password, options = {}) ⇒ Object
Change user’s password. Clear-text password will be hashed using bcrypt before sending to server.
775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 |
# File 'lib/aerospike/client.rb', line 775 def change_password(user, password, ={}) policy = opt_to_admin_policy() if @cluster.user == '' return NewAerospikeError(INVALID_USER) end hash = AdminCommand.hash_password(password) command = AdminCommand.new if user == @cluster.user # Change own password. command.change_password(@cluster, policy, user, hash) else # Change other user's password by user admin. command.set_password(@cluster, policy, user, hash) end @cluster.change_password(user, hash) end |
#close ⇒ Object
Closes all client connections to database server nodes.
76 77 78 |
# File 'lib/aerospike/client.rb', line 76 def close @cluster.close end |
#connected? ⇒ Boolean
Determines if there are active connections to the database server cluster.
Returns +true+ if connections exist.
84 85 86 |
# File 'lib/aerospike/client.rb', line 84 def connected? @cluster.connected? end |
#create_index(namespace, set_name, index_name, bin_name, index_type, options = {}) ⇒ Object
Create secondary index.
This asynchronous server call will return before command is complete.
The user can optionally wait for command completion by using the returned
IndexTask instance.
This method is only supported by Aerospike 3 servers.
index_type should be between :string or :numeric
572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 |
# File 'lib/aerospike/client.rb', line 572 def create_index(namespace, set_name, index_name, bin_name, index_type, ={}) policy = opt_to_write_policy() str_cmd = "sindex-create:ns=#{namespace}" str_cmd << ";set=#{set_name}" unless set_name.to_s.strip.empty? str_cmd << ";indexname=#{index_name};numbins=1;indexdata=#{bin_name},#{index_type.to_s.upcase}" str_cmd << ";priority=normal" # Send index command to one node. That node will distribute the command to other nodes. response_map = send_info_command(policy, str_cmd) _, response = response_map.first response = response.to_s.upcase if response == 'OK' # Return task that could optionally be polled for completion. return IndexTask.new(@cluster, namespace, index_name) end if response.start_with?('FAIL:200') # Index has already been created. Do not need to poll for completion. return IndexTask.new(@cluster, namespace, index_name, true) end raise Aerospike::Exceptions::Aerospike.new(Aerospike::ResultCode::INDEX_GENERIC, "Create index failed: #{response}") end |
#create_user(user, password, roles, options = {}) ⇒ Object
Create user with password and roles. Clear-text password will be hashed using bcrypt before sending to server.
760 761 762 763 764 765 |
# File 'lib/aerospike/client.rb', line 760 def create_user(user, password, roles, ={}) policy = opt_to_admin_policy() hash = AdminCommand.hash_password(password) command = AdminCommand.new command.create_user(@cluster, policy, user, hash, roles) end |
#delete(key, options = {}) ⇒ Object
Examples:
existed = client.delete key, :timeout => 0.001
206 207 208 209 210 211 |
# File 'lib/aerospike/client.rb', line 206 def delete(key, ={}) policy = opt_to_write_policy() command = DeleteCommand.new(@cluster, policy, key) command.execute command.existed end |
#drop_index(namespace, set_name, index_name, options = {}) ⇒ Object
Delete secondary index.
This method is only supported by Aerospike 3 servers.
599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 |
# File 'lib/aerospike/client.rb', line 599 def drop_index(namespace, set_name, index_name, ={}) policy = opt_to_write_policy() str_cmd = "sindex-delete:ns=#{namespace}" str_cmd << ";set=#{set_name}" unless set_name.to_s.strip.empty? str_cmd << ";indexname=#{index_name}" # Send index command to one node. That node will distribute the command to other nodes. response_map = send_info_command(policy, str_cmd) _, response = response_map.first response = response.to_s.upcase return if response == 'OK' # Index did not previously exist. Return without error. return if response.start_with?('FAIL:201') raise Aerospike::Exceptions::Aerospike.new(Aerospike::ResultCode::INDEX_GENERICINDEX_GENERIC, "Drop index failed: #{response}") end |
#drop_user(user, options = {}) ⇒ Object
Remove user from cluster.
768 769 770 771 772 |
# File 'lib/aerospike/client.rb', line 768 def drop_user(user, ={}) policy = opt_to_admin_policy() command = AdminCommand.new command.drop_user(@cluster, policy, user) end |
#execute_udf(key, package_name, function_name, args = [], options = {}) ⇒ Object
Execute user defined function on server and return results.
The function operates on a single record.
The package name is used to locate the udf file location:
udf file = <server udf dir>/<package name>.lua
This method is only supported by Aerospike 3 servers.
502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 |
# File 'lib/aerospike/client.rb', line 502 def execute_udf(key, package_name, function_name, args=[], ={}) policy = opt_to_write_policy() command = ExecuteCommand.new(@cluster, policy, key, package_name, function_name, args) command.execute record = command.record return nil if !record || record.bins.length == 0 result_map = record.bins # User defined functions don't have to return a value. key, obj = result_map.detect{|k, v| k.include?('SUCCESS')} if key return obj end key, obj = result_map.detect{|k, v| k.include?('FAILURE')} if key raise Aerospike::Exceptions::Aerospike.new(UDF_BAD_RESPONSE, "#{obj}") end raise Aerospike::Exceptions::Aerospike.new(UDF_BAD_RESPONSE, "Invalid UDF return value") end |
#execute_udf_on_query(statement, package_name, function_name, function_args = [], options = {}) ⇒ Object
execute_udf_on_query applies user defined function on records that match the statement filter. Records are not returned to the client. This asynchronous server call will return before command is complete. The user can optionally wait for command completion by using the returned ExecuteTask instance.
This method is only supported by Aerospike 3 servers. If the policy is nil, the default relevant policy will be used.
536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 |
# File 'lib/aerospike/client.rb', line 536 def execute_udf_on_query(statement, package_name, function_name, function_args=[], ={}) policy = opt_to_query_policy() nodes = @cluster.nodes if nodes.length == 0 raise Aerospike::Exceptions::Aerospike.new(Aerospike::ResultCode::SERVER_NOT_AVAILABLE, "Executing UDF failed because cluster is empty.") end # TODO: wait until all migrations are finished statement.set_aggregate_function(package_name, function_name, function_args, false) # Use a thread per node nodes.each do |node| Thread.new do abort_on_exception = true begin command = QueryCommand.new(node, policy, statement, nil) command.execute rescue => e Aerospike.logger.error(e) raise e end end end ExecuteTask.new(@cluster, statement) end |
#exists(key, options = {}) ⇒ Object
Determines if a record key exists.
The policy can be used to specify timeouts.
240 241 242 243 244 245 |
# File 'lib/aerospike/client.rb', line 240 def exists(key, ={}) policy = opt_to_policy() command = ExistsCommand.new(@cluster, policy, key) command.execute command.exists end |
#get(key, bin_names = [], options = {}) ⇒ Object
Read record header and bins for specified key.
The policy can be used to specify timeouts.
273 274 275 276 277 278 279 |
# File 'lib/aerospike/client.rb', line 273 def get(key, bin_names=[], ={}) policy = opt_to_policy() command = ReadCommand.new(@cluster, policy, key, bin_names) command.execute command.record end |
#get_header(key, options = {}) ⇒ Object
Read record generation and expiration only for specified key. Bins are not read.
The policy can be used to specify timeouts.
283 284 285 286 287 288 |
# File 'lib/aerospike/client.rb', line 283 def get_header(key, ={}) policy = opt_to_policy() command = ReadHeaderCommand.new(@cluster, policy, key) command.execute command.record end |
#get_large_list(key, bin_name, user_module = nil, options = {}) ⇒ Object
Initialize large list operator. This operator can be used to create and manage a list
within a single bin.
This method is only supported by Aerospike 3 servers.
370 371 372 |
# File 'lib/aerospike/client.rb', line 370 def get_large_list(key, bin_name, user_module=nil, ={}) LargeList.new(self, opt_to_write_policy(), key, bin_name, user_module) end |
#get_large_map(key, bin_name, user_module = nil, options = {}) ⇒ Object
Initialize large map operator. This operator can be used to create and manage a map
within a single bin.
This method is only supported by Aerospike 3 servers.
378 379 380 |
# File 'lib/aerospike/client.rb', line 378 def get_large_map(key, bin_name, user_module=nil, ={}) LargeMap.new(self, opt_to_write_policy(), key, bin_name, user_module) end |
#get_large_set(key, bin_name, user_module = nil, options = {}) ⇒ Object
Initialize large set operator. This operator can be used to create and manage a set
within a single bin.
This method is only supported by Aerospike 3 servers.
386 387 388 |
# File 'lib/aerospike/client.rb', line 386 def get_large_set(key, bin_name, user_module=nil, ={}) LargeSet.new(self, opt_to_write_policy(), key, bin_name, user_module) end |
#get_large_stack(key, bin_name, user_module = nil, options = {}) ⇒ Object
Initialize large stack operator. This operator can be used to create and manage a stack
within a single bin.
This method is only supported by Aerospike 3 servers.
394 395 396 |
# File 'lib/aerospike/client.rb', line 394 def get_large_stack(key, bin_name, user_module=nil, ={}) LargeStack.new(self, opt_to_write_policy(), key, bin_name, user_module) end |
#grant_roles(user, roles, options = {}) ⇒ Object
Add roles to user’s list of roles.
796 797 798 799 800 |
# File 'lib/aerospike/client.rb', line 796 def grant_roles(user, roles, ={}) policy = opt_to_admin_policy() command = AdminCommand.new command.grant_roles(@cluster, policy, user, roles) end |
#list_udf(options = {}) ⇒ Object
ListUDF lists all packages containing user defined functions in the server.
This method is only supported by Aerospike 3 servers.
466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 |
# File 'lib/aerospike/client.rb', line 466 def list_udf(={}) str_cmd = 'udf-list' # Send command to one node. That node will distribute it to other nodes. response_map = @cluster.request_info(@default_policy, str_cmd) _, response = response_map.first vals = response.split(';') vals.map do |udf_info| next if udf_info.strip! == '' udf_parts = udf_info.split(',') udf = UDF.new udf_parts.each do |values| k, v = values.split('=', 2) case k when 'filename' udf.filename = v when 'hash' udf.hash = v when 'type' udf.language = v end end udf end end |
#node_names ⇒ Object
Returns list of active server node names in the cluster.
98 99 100 101 102 |
# File 'lib/aerospike/client.rb', line 98 def node_names @cluster.nodes.map do |node| node.get_name end end |
#nodes ⇒ Object
Returns array of active server nodes in the cluster.
91 92 93 |
# File 'lib/aerospike/client.rb', line 91 def nodes @cluster.nodes end |
#operate(key, operations, options = {}) ⇒ Object
Perform multiple read/write operations on a single key in one batch call.
An example would be to add an integer value to an existing record and then
read the result, all in one database call.
Write operations are always performed first, regardless of operation order
relative to read operations.
354 355 356 357 358 359 360 |
# File 'lib/aerospike/client.rb', line 354 def operate(key, operations, ={}) policy = opt_to_write_policy() command = OperateCommand.new(@cluster, policy, key, operations) command.execute command.record end |
#prepend(key, bins, options = {}) ⇒ Object
Examples:
client.prepend key, {'bin', 'value to prepend'}, :timeout => 0.001
161 162 163 164 165 |
# File 'lib/aerospike/client.rb', line 161 def prepend(key, bins, ={}) policy = opt_to_write_policy() command = WriteCommand.new(@cluster, policy, key, hash_to_bins(bins), Aerospike::Operation::PREPEND) command.execute end |
#put(key, bins, options = {}) ⇒ Object
Examples:
client.put key, {'bin', 'value string'}, :timeout => 0.001
119 120 121 122 123 |
# File 'lib/aerospike/client.rb', line 119 def put(key, bins, ={}) policy = opt_to_write_policy() command = WriteCommand.new(@cluster, policy, key, hash_to_bins(bins), Aerospike::Operation::WRITE) command.execute end |
#query(statement, options = {}) ⇒ Object
Query executes a query and returns a recordset. The query executor puts records on a channel from separate goroutines. The caller can concurrently pops records off the channel through the record channel.
This method is only supported by Aerospike 3 servers. If the policy is nil, a default policy will be generated.
724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 |
# File 'lib/aerospike/client.rb', line 724 def query(statement, ={}) policy = opt_to_query_policy() new_policy = policy.clone nodes = @cluster.nodes if nodes.length == 0 raise Aerospike::Exceptions::Aerospike.new(Aerospike::ResultCode::SERVER_NOT_AVAILABLE, "Scan failed because cluster is empty.") end recordset = Recordset.new(policy.record_queue_size, nodes.length, :query) # Use a thread per node nodes.each do |node| Thread.new do abort_on_exception = true command = QueryCommand.new(node, new_policy, statement, recordset) begin command.execute rescue => e Aerospike.logger.error(e.backtrace.join("\n")) unless e == QUERY_TERMINATED_EXCEPTION recordset.cancel(e) ensure recordset.thread_finished end end end recordset end |
#query_user(user, options = {}) ⇒ Object
Retrieve roles for a given user.
817 818 819 820 821 |
# File 'lib/aerospike/client.rb', line 817 def query_user(user, ={}) policy = opt_to_admin_policy() command = AdminCommand.new command.query_user(@cluster, policy, user) end |
#query_users(options = {}) ⇒ Object
Retrieve all users and their roles.
824 825 826 827 828 |
# File 'lib/aerospike/client.rb', line 824 def query_users(={}) policy = opt_to_admin_policy() command = AdminCommand.new command.query_users(@cluster, policy) end |
#register_udf(udf_body, server_path, language, options = {}) ⇒ Object
Register package containing user defined functions with server.
This asynchronous server call will return before command is complete.
The user can optionally wait for command completion by using the returned
RegisterTask instance.
This method is only supported by Aerospike 3 servers.
419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 |
# File 'lib/aerospike/client.rb', line 419 def register_udf(udf_body, server_path, language, ={}) content = Base64.strict_encode64(udf_body).force_encoding('binary') str_cmd = "udf-put:filename=#{server_path};content=#{content};" str_cmd << "content-len=#{content.length};udf-type=#{language};" # Send UDF to one node. That node will distribute the UDF to other nodes. response_map = @cluster.request_info(@default_policy, str_cmd) res = {} response_map.each do |k, response| vals = response.to_s.split(';') vals.each do |pair| k, v = pair.split("=", 2) res[k] = v end end if res['error'] raise Aerospike::Exceptions::CommandRejected.new("Registration failed: #{res['error']}\nFile: #{res['file']}\nLine: #{res['line']}\nMessage: #{res['message']}") end UdfRegisterTask.new(@cluster, server_path) end |
#register_udf_from_file(client_path, server_path, language, options = {}) ⇒ Object
Register package containing user defined functions with server.
This asynchronous server call will return before command is complete.
The user can optionally wait for command completion by using the returned
RegisterTask instance.
This method is only supported by Aerospike 3 servers.
408 409 410 411 |
# File 'lib/aerospike/client.rb', line 408 def register_udf_from_file(client_path, server_path, language, ={}) udf_body = File.read(client_path) register_udf(udf_body, server_path, language, ={}) end |
#remove_udf(udf_name, options = {}) ⇒ Object
RemoveUDF removes a package containing user defined functions in the server.
This asynchronous server call will return before command is complete.
The user can optionally wait for command completion by using the returned
RemoveTask instance.
This method is only supported by Aerospike 3 servers.
449 450 451 452 453 454 455 456 457 458 459 460 461 462 |
# File 'lib/aerospike/client.rb', line 449 def remove_udf(udf_name, ={}) str_cmd = "udf-remove:filename=#{udf_name};" # Send command to one node. That node will distribute it to other nodes. # Send UDF to one node. That node will distribute the UDF to other nodes. response_map = @cluster.request_info(@default_policy, str_cmd) _, response = response_map.first if response == 'ok' UdfRemoveTask.new(@cluster, udf_name) else raise Aerospike::Exceptions::Aerospike.new(Aerospike::ResultCode::SERVER_ERROR, response) end end |
#replace_roles(user, roles, options = {}) ⇒ Object
Replace user’s list of roles.
810 811 812 813 814 |
# File 'lib/aerospike/client.rb', line 810 def replace_roles(user, roles, ={}) policy = opt_to_admin_policy() command = AdminCommand.new command.replace_roles(@cluster, policy, user, roles) end |
#request_info(*commands) ⇒ Object
618 619 620 |
# File 'lib/aerospike/client.rb', line 618 def request_info(*commands) @cluster.request_info(@default_policy, *commands) end |
#revoke_roles(user, roles, options = {}) ⇒ Object
Remove roles from user’s list of roles.
803 804 805 806 807 |
# File 'lib/aerospike/client.rb', line 803 def revoke_roles(user, roles, ={}) policy = opt_to_admin_policy() command = AdminCommand.new command.revoke_roles(@cluster, policy, user, roles) end |
#scan_all(namespace, set_name, bin_names = [], options = {}) ⇒ Object
Scan Operations
626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 |
# File 'lib/aerospike/client.rb', line 626 def scan_all(namespace, set_name, bin_names=[], ={}) policy = opt_to_scan_policy() # wait until all migrations are finished # TODO: implement # @cluster.WaitUntillMigrationIsFinished(policy.timeout) # Retry policy must be one-shot for scans. # copy on write for policy new_policy = policy.clone nodes = @cluster.nodes if nodes.length == 0 raise Aerospike::Exceptions::Aerospike.new(Aerospike::ResultCode::SERVER_NOT_AVAILABLE, "Scan failed because cluster is empty.") end recordset = Recordset.new(policy.record_queue_size, nodes.length, :scan) if policy.concurrent_nodes # Use a thread per node nodes.each do |node| Thread.new do abort_on_exception = true command = ScanCommand.new(node, new_policy, namespace, set_name, bin_names, recordset) begin command.execute rescue => e Aerospike.logger.error(e.backtrace.join("\n")) unless e == SCAN_TERMINATED_EXCEPTION recordset.cancel(e) ensure recordset.thread_finished end end end else Thread.new do abort_on_exception = true nodes.each do |node| command = ScanCommand.new(node, new_policy, namespace, set_name, bin_names, recordset) begin command.execute rescue => e Aerospike.logger.error(e.backtrace.join("\n")) unless e == SCAN_TERMINATED_EXCEPTION recordset.cancel(e) ensure recordset.thread_finished end end end end recordset end |
#scan_node(node, namespace, set_name, bin_names = [], options = {}) ⇒ Object
ScanNode reads all records in specified namespace and set, from one node only. The policy can be used to specify timeouts.
682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 |
# File 'lib/aerospike/client.rb', line 682 def scan_node(node, namespace, set_name, bin_names=[], ={}) policy = opt_to_scan_policy() # wait until all migrations are finished # TODO: implement # @cluster.WaitUntillMigrationIsFinished(policy.timeout) # Retry policy must be one-shot for scans. # copy on write for policy new_policy = policy.clone new_policy.max_retries = 0 node = @cluster.get_node_by_name(node) if !node.is_a?(Aerospike::Node) recordset = Recordset.new(policy.record_queue_size, 1, :scan) Thread.new do abort_on_exception = true command = ScanCommand.new(node, new_policy, namespace, set_name, bin_names, recordset) begin command.execute rescue => e Aerospike.logger.error(e.backtrace.join("\n")) unless e == SCAN_TERMINATED_EXCEPTION recordset.cancel(e) ensure recordset.thread_finished end end recordset end |
#touch(key, options = {}) ⇒ Object
Examples:
client.touch key, :timeout => 0.001
227 228 229 230 231 |
# File 'lib/aerospike/client.rb', line 227 def touch(key, ={}) policy = opt_to_write_policy() command = TouchCommand.new(@cluster, policy, key) command.execute end |