aerospike 2.12.0 → 2.17.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 +44 -0
- data/lib/aerospike.rb +17 -4
- data/lib/aerospike/aerospike_exception.rb +7 -1
- data/lib/aerospike/atomic/atomic.rb +1 -1
- data/lib/aerospike/bin.rb +1 -1
- data/lib/aerospike/cdt/bit_operation.rb +376 -0
- data/lib/aerospike/cdt/bit_overflow_action.rb +46 -0
- data/lib/aerospike/cdt/bit_policy.rb +36 -0
- data/lib/aerospike/cdt/bit_resize_flags.rb +44 -0
- data/lib/aerospike/cdt/bit_write_flags.rb +51 -0
- data/lib/aerospike/cdt/context.rb +113 -0
- data/lib/aerospike/cdt/hll_operation.rb +200 -0
- data/lib/aerospike/cdt/hll_policy.rb +34 -0
- data/lib/aerospike/cdt/hll_write_flags.rb +53 -0
- data/lib/aerospike/cdt/list_operation.rb +156 -97
- data/lib/aerospike/cdt/list_order.rb +7 -0
- data/lib/aerospike/cdt/list_sort_flags.rb +10 -2
- data/lib/aerospike/cdt/map_operation.rb +180 -93
- data/lib/aerospike/cdt/map_order.rb +4 -4
- data/lib/aerospike/cdt/map_policy.rb +1 -1
- data/lib/aerospike/cdt/map_return_type.rb +1 -1
- data/lib/aerospike/cdt/map_write_mode.rb +1 -1
- data/lib/aerospike/client.rb +33 -16
- data/lib/aerospike/cluster.rb +139 -17
- data/lib/aerospike/cluster/partition.rb +1 -1
- data/lib/aerospike/cluster/partition_parser.rb +169 -0
- data/lib/aerospike/cluster/rack_parser.rb +117 -0
- data/lib/aerospike/command/admin_command.rb +1 -1
- data/lib/aerospike/command/batch_direct_command.rb +2 -1
- data/lib/aerospike/command/batch_direct_exists_command.rb +1 -1
- data/lib/aerospike/command/batch_direct_node.rb +3 -3
- data/lib/aerospike/command/batch_index_command.rb +1 -0
- data/lib/aerospike/command/batch_index_node.rb +2 -2
- data/lib/aerospike/command/batch_item.rb +1 -1
- data/lib/aerospike/command/command.rb +90 -8
- data/lib/aerospike/command/delete_command.rb +5 -1
- data/lib/aerospike/command/execute_command.rb +1 -1
- data/lib/aerospike/command/exists_command.rb +5 -1
- data/lib/aerospike/command/field_type.rb +2 -1
- data/lib/aerospike/command/multi_command.rb +49 -2
- data/lib/aerospike/command/operate_command.rb +6 -1
- data/lib/aerospike/command/read_command.rb +39 -3
- data/lib/aerospike/command/read_header_command.rb +5 -1
- data/lib/aerospike/command/roles.rb +1 -1
- data/lib/aerospike/command/single_command.rb +9 -3
- data/lib/aerospike/command/touch_command.rb +39 -2
- data/lib/aerospike/command/unsupported_particle_type_validator.rb +1 -1
- data/lib/aerospike/command/write_command.rb +5 -1
- data/lib/aerospike/connection/create.rb +1 -1
- data/lib/aerospike/features.rb +6 -1
- data/lib/aerospike/geo_json.rb +1 -1
- data/lib/aerospike/host.rb +1 -1
- data/lib/aerospike/info.rb +1 -1
- data/lib/aerospike/key.rb +1 -1
- data/lib/aerospike/language.rb +1 -1
- data/lib/aerospike/node.rb +21 -7
- data/lib/aerospike/node/rebalance.rb +50 -0
- data/lib/aerospike/node/refresh/info.rb +4 -1
- data/lib/aerospike/node/refresh/partitions.rb +6 -15
- data/lib/aerospike/node/refresh/racks.rb +47 -0
- data/lib/aerospike/node/refresh/reset.rb +1 -0
- data/lib/aerospike/node/verify/rebalance_generation.rb +43 -0
- data/lib/aerospike/node_validator.rb +4 -19
- data/lib/aerospike/operation.rb +8 -3
- data/lib/aerospike/policy/admin_policy.rb +1 -1
- data/lib/aerospike/policy/batch_policy.rb +1 -1
- data/lib/aerospike/policy/client_policy.rb +16 -1
- data/lib/aerospike/policy/commit_level.rb +1 -1
- data/lib/aerospike/policy/consistency_level.rb +1 -1
- data/lib/aerospike/policy/generation_policy.rb +1 -1
- data/lib/aerospike/policy/operate_policy.rb +1 -1
- data/lib/aerospike/policy/policy.rb +19 -2
- data/lib/aerospike/policy/priority.rb +1 -1
- data/lib/aerospike/policy/query_policy.rb +8 -1
- data/lib/aerospike/policy/record_bin_multiplicity.rb +1 -1
- data/lib/aerospike/policy/record_exists_action.rb +1 -1
- data/lib/aerospike/policy/replica.rb +45 -0
- data/lib/aerospike/policy/scan_policy.rb +8 -1
- data/lib/aerospike/policy/write_policy.rb +1 -1
- data/lib/aerospike/query/filter.rb +1 -1
- data/lib/aerospike/query/query_command.rb +10 -1
- data/lib/aerospike/query/recordset.rb +1 -1
- data/lib/aerospike/query/scan_command.rb +1 -1
- data/lib/aerospike/query/statement.rb +1 -1
- data/lib/aerospike/query/stream_command.rb +1 -1
- data/lib/aerospike/record.rb +1 -1
- data/lib/aerospike/result_code.rb +14 -1
- data/lib/aerospike/socket/base.rb +4 -3
- data/lib/aerospike/task/execute_task.rb +1 -1
- data/lib/aerospike/task/index_task.rb +1 -1
- data/lib/aerospike/task/task.rb +1 -1
- data/lib/aerospike/task/udf_register_task.rb +1 -1
- data/lib/aerospike/task/udf_remove_task.rb +1 -1
- data/lib/aerospike/ttl.rb +1 -1
- data/lib/aerospike/udf.rb +1 -1
- data/lib/aerospike/user_role.rb +1 -1
- data/lib/aerospike/utils/buffer.rb +14 -4
- data/lib/aerospike/utils/packer.rb +1 -1
- data/lib/aerospike/utils/pool.rb +1 -1
- data/lib/aerospike/utils/unpacker.rb +3 -3
- data/lib/aerospike/value/particle_type.rb +2 -2
- data/lib/aerospike/value/value.rb +108 -6
- data/lib/aerospike/version.rb +1 -1
- metadata +19 -6
- data/lib/aerospike/cluster/partition_tokenizer_new.rb +0 -130
- data/lib/aerospike/cluster/partition_tokenizer_old.rb +0 -135
| @@ -0,0 +1,34 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            # Copyright 2020 Aerospike, Inc.
         | 
| 4 | 
            +
            #
         | 
| 5 | 
            +
            # Portions may be licensed to Aerospike, Inc. under one or more contributor
         | 
| 6 | 
            +
            # license agreements.
         | 
| 7 | 
            +
            #
         | 
| 8 | 
            +
            # Licensed under the Apache License, Version 2.0 (the "License"); you may not
         | 
| 9 | 
            +
            # use this file except in compliance with the License. You may obtain a copy of
         | 
| 10 | 
            +
            # the License at
         | 
| 11 | 
            +
            #
         | 
| 12 | 
            +
            #     http://www.apache.org/licenses/LICENSE-2.0
         | 
| 13 | 
            +
            #
         | 
| 14 | 
            +
            # Unless required by applicable law or agreed to in writing, software
         | 
| 15 | 
            +
            # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
         | 
| 16 | 
            +
            # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
         | 
| 17 | 
            +
            # License for the specific language governing permissions and limitations under
         | 
| 18 | 
            +
            # the License.
         | 
| 19 | 
            +
             | 
| 20 | 
            +
            module Aerospike
         | 
| 21 | 
            +
              module CDT
         | 
| 22 | 
            +
                class HLLPolicy
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                  attr_accessor :flags
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                  def initialize(write_flags: HLLWriteFlags::DEFAULT)
         | 
| 27 | 
            +
                    @flags = write_flags
         | 
| 28 | 
            +
                  end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                  DEFAULT = HLLPolicy.new
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                end
         | 
| 33 | 
            +
              end
         | 
| 34 | 
            +
            end
         | 
| @@ -0,0 +1,53 @@ | |
| 1 | 
            +
            # encoding: utf-8
         | 
| 2 | 
            +
            # Copyright 2020 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 | 
            +
                ##
         | 
| 21 | 
            +
                # Map write bit flags.
         | 
| 22 | 
            +
                # Requires server versions >= 4.3.
         | 
| 23 | 
            +
                module HLLWriteFlags
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                  ##
         | 
| 26 | 
            +
                  # Default is Default. Allow create or update.
         | 
| 27 | 
            +
                  DEFAULT = 0
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                  ##
         | 
| 30 | 
            +
                  # CREATE_ONLY behaves like the following:
         | 
| 31 | 
            +
                  # If the bin already exists, the operation will be denied.
         | 
| 32 | 
            +
                  # If the bin does not exist, a new bin will be created.
         | 
| 33 | 
            +
                  CREATE_ONLY = 1
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                  ##
         | 
| 36 | 
            +
                  # UPDATE_ONLY behaves like the following:
         | 
| 37 | 
            +
                  # If the bin already exists, the bin will be overwritten.
         | 
| 38 | 
            +
                  # If the bin does not exist, the operation will be denied.
         | 
| 39 | 
            +
                  UPDATE_ONLY = 2
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                  ##
         | 
| 42 | 
            +
                  # NO_FAIL does not raise error if operation is denied.
         | 
| 43 | 
            +
                  NO_FAIL = 4
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                  ##
         | 
| 46 | 
            +
                  # ALLOW_FOLD allows the resulting set to be the minimum of provided index bits.
         | 
| 47 | 
            +
                  # Also, allow the usage of less precise HLL algorithms when minHash bits
         | 
| 48 | 
            +
                  # of all participating sets do not match.
         | 
| 49 | 
            +
                  ALLOW_FOLD = 8
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                end
         | 
| 52 | 
            +
              end
         | 
| 53 | 
            +
            end
         | 
| @@ -1,6 +1,6 @@ | |
| 1 1 | 
             
            # frozen_string_literal: true
         | 
| 2 2 |  | 
| 3 | 
            -
            # Copyright 2016- | 
| 3 | 
            +
            # Copyright 2016-2020 Aerospike, Inc.
         | 
| 4 4 | 
             
            #
         | 
| 5 5 | 
             
            # Portions may be licensed to Aerospike, Inc. under one or more contributor
         | 
| 6 6 | 
             
            # license agreements.
         | 
| @@ -21,23 +21,32 @@ module Aerospike | |
| 21 21 | 
             
              module CDT
         | 
| 22 22 |  | 
| 23 23 | 
             
                ##
         | 
| 24 | 
            -
                # List  | 
| 25 | 
            -
                #  | 
| 26 | 
            -
                #  | 
| 24 | 
            +
                # List operations support negative indexing.  If the index is negative, the
         | 
| 25 | 
            +
                # resolved index starts backwards from end of list. If an index is out of bounds,
         | 
| 26 | 
            +
                # a parameter error will be returned. If a range is partially out of bounds, the
         | 
| 27 | 
            +
                # valid part of the range will be returned. Index/Range examples:
         | 
| 27 28 | 
             
                #
         | 
| 28 29 | 
             
                # Index/Range examples:
         | 
| 29 | 
            -
                # * Index 0: First item in list.
         | 
| 30 | 
            -
                # * Index 4: Fifth item in list.
         | 
| 31 | 
            -
                # * Index -1: Last item in list.
         | 
| 32 | 
            -
                # * Index -3: Third to last item in list.
         | 
| 33 | 
            -
                # * Index 1 Count 2: Second and third items in list.
         | 
| 34 | 
            -
                # * Index -3 Count 3: Last three items in list.
         | 
| 35 | 
            -
                # * Index -5 Count 4: Range between fifth to last item to second to last
         | 
| 36 | 
            -
                #   item inclusive.
         | 
| 37 30 | 
             
                #
         | 
| 38 | 
            -
                #  | 
| 39 | 
            -
                #  | 
| 40 | 
            -
                #  | 
| 31 | 
            +
                #    Index 0: First item in list.
         | 
| 32 | 
            +
                #    Index 4: Fifth item in list.
         | 
| 33 | 
            +
                #    Index -1: Last item in list.
         | 
| 34 | 
            +
                #    Index -3: Third to last item in list.
         | 
| 35 | 
            +
                #    Index 1 Count 2: Second and third items in list.
         | 
| 36 | 
            +
                #    Index -3 Count 3: Last three items in list.
         | 
| 37 | 
            +
                #    Index -5 Count 4: Range between fifth to last item to second to last item inclusive.
         | 
| 38 | 
            +
                #
         | 
| 39 | 
            +
                # Nested CDT operations are supported by optional Ctx context arguments.  Examples:
         | 
| 40 | 
            +
                #
         | 
| 41 | 
            +
                # bin = [[7,9,5],[1,2,3],[6,5,4,1]]
         | 
| 42 | 
            +
                # Append 11 to last list.
         | 
| 43 | 
            +
                # ListOperation.append("bin", 11, ctx: [Context.list_index(-1)])
         | 
| 44 | 
            +
                # bin result = [[7,9,5],[1,2,3],[6,5,4,1,11]]
         | 
| 45 | 
            +
                #
         | 
| 46 | 
            +
                # bin = {key1:[[7,9,5],[13]], key2:[[9],[2,4],[6,1,9]], key3:[[6,5]]}
         | 
| 47 | 
            +
                # Append 11 to lowest ranked list in map identified by "key2".
         | 
| 48 | 
            +
                # ListOperation.append("bin", 11, ctx: [Context.map_key("key2"), Context.list_rank(0)])
         | 
| 49 | 
            +
                # bin result = {key1:[[7,9,5],[13]], key2:[[9],[2,4,11],[6,1,9]], key3:[[6,5]]}
         | 
| 41 50 |  | 
| 42 51 | 
             
                class ListOperation < Operation
         | 
| 43 52 |  | 
| @@ -75,34 +84,50 @@ module Aerospike | |
| 75 84 | 
             
                  REMOVE_BY_RANK_RANGE = 39
         | 
| 76 85 | 
             
                  REMOVE_BY_VALUE_REL_RANK_RANGE = 40
         | 
| 77 86 |  | 
| 78 | 
            -
                  attr_reader :list_op, :arguments, :policy, :return_type
         | 
| 87 | 
            +
                  attr_reader :list_op, :arguments, :policy, :return_type, :ctx, :flag
         | 
| 79 88 |  | 
| 80 | 
            -
                  def initialize(op_type, list_op, bin_name, *arguments, return_type: nil)
         | 
| 89 | 
            +
                  def initialize(op_type, list_op, bin_name, *arguments, return_type: nil, ctx: nil, flag: nil)
         | 
| 81 90 | 
             
                    @op_type = op_type
         | 
| 82 91 | 
             
                    @bin_name = bin_name
         | 
| 83 92 | 
             
                    @bin_value = nil
         | 
| 84 93 | 
             
                    @list_op = list_op
         | 
| 94 | 
            +
                    @ctx = ctx
         | 
| 95 | 
            +
                    @flag = flag
         | 
| 85 96 | 
             
                    @arguments = arguments
         | 
| 86 97 | 
             
                    @return_type = return_type
         | 
| 87 98 | 
             
                  end
         | 
| 88 99 |  | 
| 100 | 
            +
                  ##
         | 
| 101 | 
            +
                  # creates list create operation.
         | 
| 102 | 
            +
                  # Server creates list at given context level. The context is allowed to be beyond list
         | 
| 103 | 
            +
                  # boundaries only if pad is set to true.  In that case, nil list entries will be inserted to
         | 
| 104 | 
            +
                  # satisfy the context position.
         | 
| 105 | 
            +
                  def self.create(bin_name, order, pad, ctx: nil)
         | 
| 106 | 
            +
                    # If context not defined, the set order for top-level bin list.
         | 
| 107 | 
            +
                    if !ctx || ctx.length == 0
         | 
| 108 | 
            +
                      self.set_order(bin_name, order)
         | 
| 109 | 
            +
                    else
         | 
| 110 | 
            +
                      ListOperation.new(Operation::CDT_MODIFY, SET_TYPE, bin_name, order, ctx: ctx, flag: ListOrder.flag(order, pad))
         | 
| 111 | 
            +
                    end
         | 
| 112 | 
            +
                  end
         | 
| 113 | 
            +
             | 
| 89 114 | 
             
                  ##
         | 
| 90 115 | 
             
                  #  Create a set list order operation.
         | 
| 91 116 | 
             
                  #  Server sets list order.
         | 
| 92 117 | 
             
                  #  Server returns null.
         | 
| 93 | 
            -
                  def self.set_order(bin_name, order)
         | 
| 94 | 
            -
                    ListOperation.new(Operation::CDT_MODIFY, SET_TYPE, bin_name, order)
         | 
| 118 | 
            +
                  def self.set_order(bin_name, order, ctx: nil)
         | 
| 119 | 
            +
                    ListOperation.new(Operation::CDT_MODIFY, SET_TYPE, bin_name, order, ctx: ctx)
         | 
| 95 120 | 
             
                  end
         | 
| 96 121 |  | 
| 97 122 | 
             
                  ##
         | 
| 98 123 | 
             
                  #  Create list append operation.
         | 
| 99 124 | 
             
                  #  Server appends value(s) to end of the list bin.
         | 
| 100 125 | 
             
                  #  Server returns list size.
         | 
| 101 | 
            -
                  def self.append(bin_name, *values, policy: ListPolicy::DEFAULT)
         | 
| 126 | 
            +
                  def self.append(bin_name, *values, ctx: nil, policy: ListPolicy::DEFAULT)
         | 
| 102 127 | 
             
                    if values.length > 1
         | 
| 103 | 
            -
                      ListOperation.new(Operation::CDT_MODIFY, APPEND_ITEMS, bin_name, values, policy.order, policy.flags)
         | 
| 128 | 
            +
                      ListOperation.new(Operation::CDT_MODIFY, APPEND_ITEMS, bin_name, values, policy.order, policy.flags, ctx: ctx)
         | 
| 104 129 | 
             
                    else
         | 
| 105 | 
            -
                      ListOperation.new(Operation::CDT_MODIFY, APPEND, bin_name, values.first, policy.order, policy.flags)
         | 
| 130 | 
            +
                      ListOperation.new(Operation::CDT_MODIFY, APPEND, bin_name, values.first, policy.order, policy.flags, ctx: ctx)
         | 
| 106 131 | 
             
                    end
         | 
| 107 132 | 
             
                  end
         | 
| 108 133 |  | 
| @@ -110,19 +135,19 @@ module Aerospike | |
| 110 135 | 
             
                  #  Create list insert operation.
         | 
| 111 136 | 
             
                  #  Server inserts value(s) at the specified index of the list bin.
         | 
| 112 137 | 
             
                  #  Server returns list size.
         | 
| 113 | 
            -
                  def self.insert(bin_name, index, *values, policy: ListPolicy::DEFAULT)
         | 
| 138 | 
            +
                  def self.insert(bin_name, index, *values, ctx: nil, policy: ListPolicy::DEFAULT)
         | 
| 114 139 | 
             
                    if values.length > 1
         | 
| 115 | 
            -
                      ListOperation.new(Operation::CDT_MODIFY, INSERT_ITEMS, bin_name, index, values, policy.flags)
         | 
| 140 | 
            +
                      ListOperation.new(Operation::CDT_MODIFY, INSERT_ITEMS, bin_name, index, values, policy.flags, ctx: ctx)
         | 
| 116 141 | 
             
                    else
         | 
| 117 | 
            -
                      ListOperation.new(Operation::CDT_MODIFY, INSERT, bin_name, index, values.first, policy.flags)
         | 
| 142 | 
            +
                      ListOperation.new(Operation::CDT_MODIFY, INSERT, bin_name, index, values.first, policy.flags, ctx: ctx)
         | 
| 118 143 | 
             
                    end
         | 
| 119 144 | 
             
                  end
         | 
| 120 145 |  | 
| 121 146 | 
             
                  ##
         | 
| 122 147 | 
             
                  # Create list pop operation.
         | 
| 123 148 | 
             
                  # Server returns item at specified index and removes item from list bin.
         | 
| 124 | 
            -
                  def self.pop(bin_name, index)
         | 
| 125 | 
            -
                    ListOperation.new(Operation::CDT_MODIFY, POP, bin_name, index)
         | 
| 149 | 
            +
                  def self.pop(bin_name, index, ctx: nil)
         | 
| 150 | 
            +
                    ListOperation.new(Operation::CDT_MODIFY, POP, bin_name, index, ctx: ctx)
         | 
| 126 151 | 
             
                  end
         | 
| 127 152 |  | 
| 128 153 | 
             
                  ##
         | 
| @@ -131,11 +156,11 @@ module Aerospike | |
| 131 156 | 
             
                  # items from list bin. If "count" is not specified, the server returns
         | 
| 132 157 | 
             
                  # items starting at the specified index to the end of the list and
         | 
| 133 158 | 
             
                  # removes those items from the list bin.
         | 
| 134 | 
            -
                  def self.pop_range(bin_name, index, count=nil)
         | 
| 159 | 
            +
                  def self.pop_range(bin_name, index, count=nil, ctx: nil)
         | 
| 135 160 | 
             
                    if count
         | 
| 136 | 
            -
                      ListOperation.new(Operation::CDT_MODIFY, POP_RANGE, bin_name, index, count)
         | 
| 161 | 
            +
                      ListOperation.new(Operation::CDT_MODIFY, POP_RANGE, bin_name, index, count, ctx: ctx)
         | 
| 137 162 | 
             
                    else
         | 
| 138 | 
            -
                      ListOperation.new(Operation::CDT_MODIFY, POP_RANGE, bin_name, index)
         | 
| 163 | 
            +
                      ListOperation.new(Operation::CDT_MODIFY, POP_RANGE, bin_name, index, ctx: ctx)
         | 
| 139 164 | 
             
                    end
         | 
| 140 165 | 
             
                  end
         | 
| 141 166 |  | 
| @@ -143,8 +168,8 @@ module Aerospike | |
| 143 168 | 
             
                  # Create list remove operation.
         | 
| 144 169 | 
             
                  # Server removes item at specified index from list bin.
         | 
| 145 170 | 
             
                  # Server returns number of items removed.
         | 
| 146 | 
            -
                  def self.remove(bin_name, index)
         | 
| 147 | 
            -
                    ListOperation.new(Operation::CDT_MODIFY, REMOVE, bin_name, index)
         | 
| 171 | 
            +
                  def self.remove(bin_name, index, ctx: nil)
         | 
| 172 | 
            +
                    ListOperation.new(Operation::CDT_MODIFY, REMOVE, bin_name, index, ctx: ctx)
         | 
| 148 173 | 
             
                  end
         | 
| 149 174 |  | 
| 150 175 | 
             
                  ##
         | 
| @@ -153,11 +178,11 @@ module Aerospike | |
| 153 178 | 
             
                  # "count" is not specified, the server removes all items starting at the
         | 
| 154 179 | 
             
                  # specified index to the end of the list.
         | 
| 155 180 | 
             
                  # Server returns number of items removed.
         | 
| 156 | 
            -
                  def self.remove_range(bin_name, index, count=nil)
         | 
| 181 | 
            +
                  def self.remove_range(bin_name, index, count=nil, ctx: nil)
         | 
| 157 182 | 
             
                    if count
         | 
| 158 | 
            -
                      ListOperation.new(Operation::CDT_MODIFY, REMOVE_RANGE, bin_name, index, count)
         | 
| 183 | 
            +
                      ListOperation.new(Operation::CDT_MODIFY, REMOVE_RANGE, bin_name, index, count, ctx: ctx)
         | 
| 159 184 | 
             
                    else
         | 
| 160 | 
            -
                      ListOperation.new(Operation::CDT_MODIFY, REMOVE_RANGE, bin_name, index)
         | 
| 185 | 
            +
                      ListOperation.new(Operation::CDT_MODIFY, REMOVE_RANGE, bin_name, index, ctx: ctx)
         | 
| 161 186 | 
             
                    end
         | 
| 162 187 | 
             
                  end
         | 
| 163 188 |  | 
| @@ -165,8 +190,8 @@ module Aerospike | |
| 165 190 | 
             
                  # Create list set operation.
         | 
| 166 191 | 
             
                  # Server sets item value at specified index in list bin.
         | 
| 167 192 | 
             
                  # Server does not return a result by default.
         | 
| 168 | 
            -
                  def self.set(bin_name, index, value, policy: ListPolicy::DEFAULT)
         | 
| 169 | 
            -
                    ListOperation.new(Operation::CDT_MODIFY, SET, bin_name, index, value, policy.flags)
         | 
| 193 | 
            +
                  def self.set(bin_name, index, value, ctx: nil, policy: ListPolicy::DEFAULT)
         | 
| 194 | 
            +
                    ListOperation.new(Operation::CDT_MODIFY, SET, bin_name, index, value, policy.flags, ctx: ctx)
         | 
| 170 195 | 
             
                  end
         | 
| 171 196 |  | 
| 172 197 | 
             
                  ##
         | 
| @@ -176,24 +201,24 @@ module Aerospike | |
| 176 201 | 
             
                  # by index and count.
         | 
| 177 202 | 
             
                  #
         | 
| 178 203 | 
             
                  # Server returns number of items removed.
         | 
| 179 | 
            -
                  def self.trim(bin_name, index, count)
         | 
| 180 | 
            -
                    ListOperation.new(Operation::CDT_MODIFY, TRIM, bin_name, index, count)
         | 
| 204 | 
            +
                  def self.trim(bin_name, index, count, ctx: nil)
         | 
| 205 | 
            +
                    ListOperation.new(Operation::CDT_MODIFY, TRIM, bin_name, index, count, ctx: ctx)
         | 
| 181 206 | 
             
                  end
         | 
| 182 207 |  | 
| 183 208 | 
             
                  ##
         | 
| 184 209 | 
             
                  # Create list clear operation.
         | 
| 185 210 | 
             
                  # Server removes all items in the list bin.
         | 
| 186 211 | 
             
                  # Server does not return a result by default.
         | 
| 187 | 
            -
                  def self.clear(bin_name)
         | 
| 188 | 
            -
                    ListOperation.new(Operation::CDT_MODIFY, CLEAR, bin_name)
         | 
| 212 | 
            +
                  def self.clear(bin_name, ctx: nil)
         | 
| 213 | 
            +
                    ListOperation.new(Operation::CDT_MODIFY, CLEAR, bin_name, ctx: ctx)
         | 
| 189 214 | 
             
                  end
         | 
| 190 215 |  | 
| 191 216 | 
             
                  ##
         | 
| 192 217 | 
             
                  # Create list increment operation.
         | 
| 193 218 | 
             
                  # Server increments list[index] by value. If not specified, value defaults to 1.
         | 
| 194 219 | 
             
                  # Server returns the value of list[index] after the operation.
         | 
| 195 | 
            -
                  def self.increment(bin_name, index, value = 1, policy: ListPolicy::DEFAULT)
         | 
| 196 | 
            -
                    ListOperation.new(Operation::CDT_MODIFY, INCREMENT, bin_name, index, value, policy.order, policy.flags)
         | 
| 220 | 
            +
                  def self.increment(bin_name, index, value = 1, ctx: nil, policy: ListPolicy::DEFAULT)
         | 
| 221 | 
            +
                    ListOperation.new(Operation::CDT_MODIFY, INCREMENT, bin_name, index, value, policy.order, policy.flags, ctx: ctx)
         | 
| 197 222 | 
             
                  end
         | 
| 198 223 |  | 
| 199 224 | 
             
                  ##
         | 
| @@ -207,15 +232,15 @@ module Aerospike | |
| 207 232 | 
             
                  ##
         | 
| 208 233 | 
             
                  # Create list size operation.
         | 
| 209 234 | 
             
                  # Server returns size of list.
         | 
| 210 | 
            -
                  def self.size(bin_name)
         | 
| 211 | 
            -
                    ListOperation.new(Operation::CDT_READ, SIZE, bin_name)
         | 
| 235 | 
            +
                  def self.size(bin_name, ctx: nil)
         | 
| 236 | 
            +
                    ListOperation.new(Operation::CDT_READ, SIZE, bin_name, ctx: ctx)
         | 
| 212 237 | 
             
                  end
         | 
| 213 238 |  | 
| 214 239 | 
             
                  ##
         | 
| 215 240 | 
             
                  # Create list get operation.
         | 
| 216 241 | 
             
                  # Server returns the item at the specified index in the list bin.
         | 
| 217 | 
            -
                  def self.get(bin_name, index)
         | 
| 218 | 
            -
                    ListOperation.new(Operation::CDT_READ, GET, bin_name, index)
         | 
| 242 | 
            +
                  def self.get(bin_name, index, ctx: nil)
         | 
| 243 | 
            +
                    ListOperation.new(Operation::CDT_READ, GET, bin_name, index, ctx: ctx)
         | 
| 219 244 | 
             
                  end
         | 
| 220 245 |  | 
| 221 246 | 
             
                  ##
         | 
| @@ -223,11 +248,11 @@ module Aerospike | |
| 223 248 | 
             
                  # Server returns "count" items starting at the specified index in the
         | 
| 224 249 | 
             
                  # list bin. If "count" is not specified, the server returns all items
         | 
| 225 250 | 
             
                  # starting at the specified index to the end of the list.
         | 
| 226 | 
            -
                  def self.get_range(bin_name, index, count=nil)
         | 
| 251 | 
            +
                  def self.get_range(bin_name, index, count=nil, ctx: nil)
         | 
| 227 252 | 
             
                    if count
         | 
| 228 | 
            -
                      ListOperation.new(Operation::CDT_READ, GET_RANGE, bin_name, index, count)
         | 
| 253 | 
            +
                      ListOperation.new(Operation::CDT_READ, GET_RANGE, bin_name, index, count, ctx: ctx)
         | 
| 229 254 | 
             
                    else
         | 
| 230 | 
            -
                      ListOperation.new(Operation::CDT_READ, GET_RANGE, bin_name, index)
         | 
| 255 | 
            +
                      ListOperation.new(Operation::CDT_READ, GET_RANGE, bin_name, index, ctx: ctx)
         | 
| 231 256 | 
             
                    end
         | 
| 232 257 | 
             
                  end
         | 
| 233 258 |  | 
| @@ -236,8 +261,8 @@ module Aerospike | |
| 236 261 | 
             
                  # Server selects list item identified by index.
         | 
| 237 262 | 
             
                  #
         | 
| 238 263 | 
             
                  # Server returns selected data specified by return_type.
         | 
| 239 | 
            -
                  def self.get_by_index(bin_name, index, return_type: ListReturnType::NONE)
         | 
| 240 | 
            -
                    ListOperation.new(Operation::CDT_READ, GET_BY_INDEX, bin_name, index, return_type: return_type)
         | 
| 264 | 
            +
                  def self.get_by_index(bin_name, index, ctx: nil, return_type: ListReturnType::NONE)
         | 
| 265 | 
            +
                    ListOperation.new(Operation::CDT_READ, GET_BY_INDEX, bin_name, index, return_type: return_type, ctx: ctx)
         | 
| 241 266 | 
             
                  end
         | 
| 242 267 |  | 
| 243 268 | 
             
                  # Create list get by index range operation.
         | 
| @@ -245,11 +270,11 @@ module Aerospike | |
| 245 270 | 
             
                  # Server selects list item identified by index range
         | 
| 246 271 | 
             
                  #
         | 
| 247 272 | 
             
                  # Server returns selected data specified by return_type.
         | 
| 248 | 
            -
                  def self.get_by_index_range(bin_name, index, count=nil, return_type: ListReturnType::NONE)
         | 
| 273 | 
            +
                  def self.get_by_index_range(bin_name, index, count=nil, ctx: nil, return_type: ListReturnType::NONE)
         | 
| 249 274 | 
             
                    if count
         | 
| 250 | 
            -
                      InvertibleListOp.new(Operation::CDT_READ, GET_BY_INDEX_RANGE, bin_name, index, count, return_type: return_type)
         | 
| 275 | 
            +
                      InvertibleListOp.new(Operation::CDT_READ, GET_BY_INDEX_RANGE, bin_name, index, count, ctx: ctx, return_type: return_type)
         | 
| 251 276 | 
             
                    else
         | 
| 252 | 
            -
                      InvertibleListOp.new(Operation::CDT_READ, GET_BY_INDEX_RANGE, bin_name, index, return_type: return_type)
         | 
| 277 | 
            +
                      InvertibleListOp.new(Operation::CDT_READ, GET_BY_INDEX_RANGE, bin_name, index, ctx: ctx, return_type: return_type)
         | 
| 253 278 | 
             
                    end
         | 
| 254 279 | 
             
                  end
         | 
| 255 280 |  | 
| @@ -258,8 +283,8 @@ module Aerospike | |
| 258 283 | 
             
                  # Server selects list item identified by rank.
         | 
| 259 284 | 
             
                  #
         | 
| 260 285 | 
             
                  # Server returns selected data specified by return_type.
         | 
| 261 | 
            -
                  def self.get_by_rank(bin_name, rank, return_type: ListReturnType::NONE)
         | 
| 262 | 
            -
                    ListOperation.new(Operation::CDT_READ, GET_BY_RANK, bin_name, rank, return_type: return_type)
         | 
| 286 | 
            +
                  def self.get_by_rank(bin_name, rank, ctx: nil, return_type: ListReturnType::NONE)
         | 
| 287 | 
            +
                    ListOperation.new(Operation::CDT_READ, GET_BY_RANK, bin_name, rank, ctx: ctx, return_type: return_type)
         | 
| 263 288 | 
             
                  end
         | 
| 264 289 |  | 
| 265 290 | 
             
                  # Create list get by rank range operation.
         | 
| @@ -267,11 +292,11 @@ module Aerospike | |
| 267 292 | 
             
                  # Server selects list item identified by rank range.
         | 
| 268 293 | 
             
                  #
         | 
| 269 294 | 
             
                  # Server returns selected data specified by return_type.
         | 
| 270 | 
            -
                  def self.get_by_rank_range(bin_name, rank, count=nil, return_type: ListReturnType::NONE)
         | 
| 295 | 
            +
                  def self.get_by_rank_range(bin_name, rank, count=nil, ctx: nil, return_type: ListReturnType::NONE)
         | 
| 271 296 | 
             
                    if count
         | 
| 272 | 
            -
                      InvertibleListOp.new(Operation::CDT_READ, GET_BY_RANK_RANGE, bin_name, rank, count, return_type: return_type)
         | 
| 297 | 
            +
                      InvertibleListOp.new(Operation::CDT_READ, GET_BY_RANK_RANGE, bin_name, rank, count, ctx: ctx, return_type: return_type)
         | 
| 273 298 | 
             
                    else
         | 
| 274 | 
            -
                      InvertibleListOp.new(Operation::CDT_READ, GET_BY_RANK_RANGE, bin_name, rank, return_type: return_type)
         | 
| 299 | 
            +
                      InvertibleListOp.new(Operation::CDT_READ, GET_BY_RANK_RANGE, bin_name, rank, ctx: ctx, return_type: return_type)
         | 
| 275 300 | 
             
                    end
         | 
| 276 301 | 
             
                  end
         | 
| 277 302 |  | 
| @@ -280,8 +305,8 @@ module Aerospike | |
| 280 305 | 
             
                  # Server selects list items identified by value.
         | 
| 281 306 | 
             
                  #
         | 
| 282 307 | 
             
                  # Server returns selected data specified by return_type.
         | 
| 283 | 
            -
                  def self.get_by_value(bin_name, value, return_type: ListReturnType::NONE)
         | 
| 284 | 
            -
                    InvertibleListOp.new(Operation::CDT_READ, GET_BY_VALUE, bin_name, value, return_type: return_type)
         | 
| 308 | 
            +
                  def self.get_by_value(bin_name, value, ctx: nil, return_type: ListReturnType::NONE)
         | 
| 309 | 
            +
                    InvertibleListOp.new(Operation::CDT_READ, GET_BY_VALUE, bin_name, value, ctx: ctx, return_type: return_type)
         | 
| 285 310 | 
             
                  end
         | 
| 286 311 |  | 
| 287 312 | 
             
                  # Create list get by value range operation.
         | 
| @@ -292,11 +317,11 @@ module Aerospike | |
| 292 317 | 
             
                  # equal to value_begin.
         | 
| 293 318 | 
             
                  #
         | 
| 294 319 | 
             
                  # Server returns selected data specified by return_type.
         | 
| 295 | 
            -
                  def self.get_by_value_range(bin_name, value_begin, value_end = nil, return_type: ListReturnType::NONE)
         | 
| 320 | 
            +
                  def self.get_by_value_range(bin_name, value_begin, value_end = nil, ctx: nil, return_type: ListReturnType::NONE)
         | 
| 296 321 | 
             
                    if value_end
         | 
| 297 | 
            -
                      InvertibleListOp.new(Operation::CDT_READ, GET_BY_VALUE_INTERVAL, bin_name, value_begin, value_end, return_type: return_type)
         | 
| 322 | 
            +
                      InvertibleListOp.new(Operation::CDT_READ, GET_BY_VALUE_INTERVAL, bin_name, value_begin, value_end, ctx: ctx, return_type: return_type)
         | 
| 298 323 | 
             
                    else
         | 
| 299 | 
            -
                      InvertibleListOp.new(Operation::CDT_READ, GET_BY_VALUE_INTERVAL, bin_name, value_begin, return_type: return_type)
         | 
| 324 | 
            +
                      InvertibleListOp.new(Operation::CDT_READ, GET_BY_VALUE_INTERVAL, bin_name, value_begin, ctx: ctx, return_type: return_type)
         | 
| 300 325 | 
             
                    end
         | 
| 301 326 | 
             
                  end
         | 
| 302 327 |  | 
| @@ -305,8 +330,8 @@ module Aerospike | |
| 305 330 | 
             
                  # Server selects list items identified by values.
         | 
| 306 331 | 
             
                  #
         | 
| 307 332 | 
             
                  # Server returns selected data specified by return_type.
         | 
| 308 | 
            -
                  def self.get_by_value_list(bin_name, values, return_type: ListReturnType::NONE)
         | 
| 309 | 
            -
                    InvertibleListOp.new(Operation::CDT_READ, GET_BY_VALUE_LIST, bin_name, values, return_type: return_type)
         | 
| 333 | 
            +
                  def self.get_by_value_list(bin_name, values, ctx: nil, return_type: ListReturnType::NONE)
         | 
| 334 | 
            +
                    InvertibleListOp.new(Operation::CDT_READ, GET_BY_VALUE_LIST, bin_name, values, ctx: ctx, return_type: return_type)
         | 
| 310 335 | 
             
                  end
         | 
| 311 336 |  | 
| 312 337 | 
             
                  # Create list get by value relative to rank range list operation.
         | 
| @@ -339,11 +364,11 @@ module Aerospike | |
| 339 364 | 
             
                  # <li>(3, 3) = [11, 15]</li>
         | 
| 340 365 | 
             
                  # <li>(3, -3) = [0, 4, 5, 9, 11, 15]</li>
         | 
| 341 366 | 
             
                  # </ul>
         | 
| 342 | 
            -
                  def self.get_by_value_rel_rank_range(bin_name, value, rank, count = nil, return_type: ListReturnType::NONE)
         | 
| 367 | 
            +
                  def self.get_by_value_rel_rank_range(bin_name, value, rank, count = nil, ctx: nil, return_type: ListReturnType::NONE)
         | 
| 343 368 | 
             
                    if count
         | 
| 344 | 
            -
                      InvertibleListOp.new(Operation::CDT_READ, GET_BY_VALUE_REL_RANK_RANGE, bin_name, value, rank, count, return_type: return_type)
         | 
| 369 | 
            +
                      InvertibleListOp.new(Operation::CDT_READ, GET_BY_VALUE_REL_RANK_RANGE, bin_name, value, rank, count, ctx: ctx, return_type: return_type)
         | 
| 345 370 | 
             
                    else
         | 
| 346 | 
            -
                      InvertibleListOp.new(Operation::CDT_READ, GET_BY_VALUE_REL_RANK_RANGE, bin_name, value, rank, return_type: return_type)
         | 
| 371 | 
            +
                      InvertibleListOp.new(Operation::CDT_READ, GET_BY_VALUE_REL_RANK_RANGE, bin_name, value, rank, ctx: ctx, return_type: return_type)
         | 
| 347 372 | 
             
                    end
         | 
| 348 373 | 
             
                  end
         | 
| 349 374 |  | 
| @@ -352,8 +377,8 @@ module Aerospike | |
| 352 377 | 
             
                  # Server removes list item identified by index.
         | 
| 353 378 | 
             
                  #
         | 
| 354 379 | 
             
                  # Server returns selected data specified by return_type.
         | 
| 355 | 
            -
                  def self.remove_by_index(bin_name, index, return_type: ListReturnType::NONE)
         | 
| 356 | 
            -
                    ListOperation.new(Operation::CDT_MODIFY, REMOVE_BY_INDEX, bin_name, index, return_type: return_type)
         | 
| 380 | 
            +
                  def self.remove_by_index(bin_name, index, ctx: nil, return_type: ListReturnType::NONE)
         | 
| 381 | 
            +
                    ListOperation.new(Operation::CDT_MODIFY, REMOVE_BY_INDEX, bin_name, index, ctx: ctx, return_type: return_type)
         | 
| 357 382 | 
             
                  end
         | 
| 358 383 |  | 
| 359 384 | 
             
                  # Create list remove by index range operation.
         | 
| @@ -361,11 +386,11 @@ module Aerospike | |
| 361 386 | 
             
                  # Server removes list item identified by index range
         | 
| 362 387 | 
             
                  #
         | 
| 363 388 | 
             
                  # Server returns selected data specified by return_type.
         | 
| 364 | 
            -
                  def self.remove_by_index_range(bin_name, index, count=nil, return_type: ListReturnType::NONE)
         | 
| 389 | 
            +
                  def self.remove_by_index_range(bin_name, index, count=nil, ctx: nil, return_type: ListReturnType::NONE)
         | 
| 365 390 | 
             
                    if count
         | 
| 366 | 
            -
                      InvertibleListOp.new(Operation::CDT_MODIFY, REMOVE_BY_INDEX_RANGE, bin_name, index, count, return_type: return_type)
         | 
| 391 | 
            +
                      InvertibleListOp.new(Operation::CDT_MODIFY, REMOVE_BY_INDEX_RANGE, bin_name, index, count, ctx: ctx, return_type: return_type)
         | 
| 367 392 | 
             
                    else
         | 
| 368 | 
            -
                      InvertibleListOp.new(Operation::CDT_MODIFY, REMOVE_BY_INDEX_RANGE, bin_name, index, return_type: return_type)
         | 
| 393 | 
            +
                      InvertibleListOp.new(Operation::CDT_MODIFY, REMOVE_BY_INDEX_RANGE, bin_name, index, ctx: ctx, return_type: return_type)
         | 
| 369 394 | 
             
                    end
         | 
| 370 395 | 
             
                  end
         | 
| 371 396 |  | 
| @@ -374,8 +399,8 @@ module Aerospike | |
| 374 399 | 
             
                  # Server removes list item identified by rank.
         | 
| 375 400 | 
             
                  #
         | 
| 376 401 | 
             
                  # Server returns selected data specified by return_type.
         | 
| 377 | 
            -
                  def self.remove_by_rank(bin_name, rank, return_type: ListReturnType::NONE)
         | 
| 378 | 
            -
                    ListOperation.new(Operation::CDT_MODIFY, REMOVE_BY_RANK, bin_name, rank, return_type: return_type)
         | 
| 402 | 
            +
                  def self.remove_by_rank(bin_name, rank, ctx: nil, return_type: ListReturnType::NONE)
         | 
| 403 | 
            +
                    ListOperation.new(Operation::CDT_MODIFY, REMOVE_BY_RANK, bin_name, rank, ctx: ctx, return_type: return_type)
         | 
| 379 404 | 
             
                  end
         | 
| 380 405 |  | 
| 381 406 | 
             
                  # Create list remove by rank range operation.
         | 
| @@ -383,11 +408,11 @@ module Aerospike | |
| 383 408 | 
             
                  # Server removes list item identified by rank range.
         | 
| 384 409 | 
             
                  #
         | 
| 385 410 | 
             
                  # Server returns selected data specified by return_type.
         | 
| 386 | 
            -
                  def self.remove_by_rank_range(bin_name, rank, count=nil, return_type: ListReturnType::NONE)
         | 
| 411 | 
            +
                  def self.remove_by_rank_range(bin_name, rank, count=nil, ctx: nil, return_type: ListReturnType::NONE)
         | 
| 387 412 | 
             
                    if count
         | 
| 388 | 
            -
                      InvertibleListOp.new(Operation::CDT_MODIFY, REMOVE_BY_RANK_RANGE, bin_name, rank, count, return_type: return_type)
         | 
| 413 | 
            +
                      InvertibleListOp.new(Operation::CDT_MODIFY, REMOVE_BY_RANK_RANGE, bin_name, rank, count, ctx: ctx, return_type: return_type)
         | 
| 389 414 | 
             
                    else
         | 
| 390 | 
            -
                      InvertibleListOp.new(Operation::CDT_MODIFY, REMOVE_BY_RANK_RANGE, bin_name, rank, return_type: return_type)
         | 
| 415 | 
            +
                      InvertibleListOp.new(Operation::CDT_MODIFY, REMOVE_BY_RANK_RANGE, bin_name, rank, ctx: ctx, return_type: return_type)
         | 
| 391 416 | 
             
                    end
         | 
| 392 417 | 
             
                  end
         | 
| 393 418 |  | 
| @@ -396,8 +421,8 @@ module Aerospike | |
| 396 421 | 
             
                  # Server removes list items identified by value.
         | 
| 397 422 | 
             
                  #
         | 
| 398 423 | 
             
                  # Server returns selected data specified by return_type.
         | 
| 399 | 
            -
                  def self.remove_by_value(bin_name, value, return_type: ListReturnType::NONE)
         | 
| 400 | 
            -
                    InvertibleListOp.new(Operation::CDT_MODIFY, REMOVE_BY_VALUE, bin_name, value, return_type: return_type)
         | 
| 424 | 
            +
                  def self.remove_by_value(bin_name, value, ctx: nil, return_type: ListReturnType::NONE)
         | 
| 425 | 
            +
                    InvertibleListOp.new(Operation::CDT_MODIFY, REMOVE_BY_VALUE, bin_name, value, ctx: ctx, return_type: return_type)
         | 
| 401 426 | 
             
                  end
         | 
| 402 427 |  | 
| 403 428 | 
             
                  # Create list remove by value range operation.
         | 
| @@ -408,11 +433,11 @@ module Aerospike | |
| 408 433 | 
             
                  # equal to value_begin.
         | 
| 409 434 | 
             
                  #
         | 
| 410 435 | 
             
                  # Server returns selected data specified by return_type.
         | 
| 411 | 
            -
                  def self.remove_by_value_range(bin_name, value_begin, value_end = nil, return_type: ListReturnType::NONE)
         | 
| 436 | 
            +
                  def self.remove_by_value_range(bin_name, value_begin, value_end = nil, ctx: nil, return_type: ListReturnType::NONE)
         | 
| 412 437 | 
             
                    if value_end
         | 
| 413 | 
            -
                      InvertibleListOp.new(Operation::CDT_MODIFY, REMOVE_BY_VALUE_INTERVAL, bin_name, value_begin, value_end, return_type: return_type)
         | 
| 438 | 
            +
                      InvertibleListOp.new(Operation::CDT_MODIFY, REMOVE_BY_VALUE_INTERVAL, bin_name, value_begin, value_end, ctx: ctx, return_type: return_type)
         | 
| 414 439 | 
             
                    else
         | 
| 415 | 
            -
                      InvertibleListOp.new(Operation::CDT_MODIFY, REMOVE_BY_VALUE_INTERVAL, bin_name, value_begin, return_type: return_type)
         | 
| 440 | 
            +
                      InvertibleListOp.new(Operation::CDT_MODIFY, REMOVE_BY_VALUE_INTERVAL, bin_name, value_begin, ctx: ctx, return_type: return_type)
         | 
| 416 441 | 
             
                    end
         | 
| 417 442 | 
             
                  end
         | 
| 418 443 |  | 
| @@ -421,8 +446,8 @@ module Aerospike | |
| 421 446 | 
             
                  # Server removes list items identified by values.
         | 
| 422 447 | 
             
                  #
         | 
| 423 448 | 
             
                  # Server returns selected data specified by return_type.
         | 
| 424 | 
            -
                  def self.remove_by_value_list(bin_name, values, return_type: ListReturnType::NONE)
         | 
| 425 | 
            -
                    InvertibleListOp.new(Operation::CDT_MODIFY, REMOVE_BY_VALUE_LIST, bin_name, values, return_type: return_type)
         | 
| 449 | 
            +
                  def self.remove_by_value_list(bin_name, values, ctx: nil, return_type: ListReturnType::NONE)
         | 
| 450 | 
            +
                    InvertibleListOp.new(Operation::CDT_MODIFY, REMOVE_BY_VALUE_LIST, bin_name, values, ctx: ctx, return_type: return_type)
         | 
| 426 451 | 
             
                  end
         | 
| 427 452 |  | 
| 428 453 | 
             
                  # Create list remove by value relative to rank range list operation.
         | 
| @@ -455,11 +480,11 @@ module Aerospike | |
| 455 480 | 
             
                  # <li>(3, 3) = [11, 15]</li>
         | 
| 456 481 | 
             
                  # <li>(3, -3) = [0, 4, 5, 9, 11, 15]</li>
         | 
| 457 482 | 
             
                  # </ul>
         | 
| 458 | 
            -
                  def self.remove_by_value_rel_rank_range(bin_name, value, rank, count = nil, return_type: ListReturnType::NONE)
         | 
| 483 | 
            +
                  def self.remove_by_value_rel_rank_range(bin_name, value, rank, count = nil, ctx: nil, return_type: ListReturnType::NONE)
         | 
| 459 484 | 
             
                    if count
         | 
| 460 | 
            -
                      InvertibleListOp.new(Operation::CDT_MODIFY, REMOVE_BY_VALUE_REL_RANK_RANGE, bin_name, value, rank, count, return_type: return_type)
         | 
| 485 | 
            +
                      InvertibleListOp.new(Operation::CDT_MODIFY, REMOVE_BY_VALUE_REL_RANK_RANGE, bin_name, value, rank, count, ctx: ctx, return_type: return_type)
         | 
| 461 486 | 
             
                    else
         | 
| 462 | 
            -
                      InvertibleListOp.new(Operation::CDT_MODIFY, REMOVE_BY_VALUE_REL_RANK_RANGE, bin_name, value, rank, return_type: return_type)
         | 
| 487 | 
            +
                      InvertibleListOp.new(Operation::CDT_MODIFY, REMOVE_BY_VALUE_REL_RANK_RANGE, bin_name, value, rank, ctx: ctx, return_type: return_type)
         | 
| 463 488 | 
             
                    end
         | 
| 464 489 | 
             
                  end
         | 
| 465 490 |  | 
| @@ -481,16 +506,32 @@ module Aerospike | |
| 481 506 |  | 
| 482 507 | 
             
                  def pack_bin_value
         | 
| 483 508 | 
             
                    bytes = nil
         | 
| 509 | 
            +
             | 
| 510 | 
            +
                    args = arguments.dup
         | 
| 511 | 
            +
                    if return_type
         | 
| 512 | 
            +
                      rt = return_type
         | 
| 513 | 
            +
                      rt |= ListReturnType::INVERTED if invert_selection?
         | 
| 514 | 
            +
                      args.unshift(rt)
         | 
| 515 | 
            +
                    end
         | 
| 516 | 
            +
             | 
| 484 517 | 
             
                    Packer.use do |packer|
         | 
| 485 | 
            -
                       | 
| 486 | 
            -
             | 
| 487 | 
            -
             | 
| 488 | 
            -
             | 
| 489 | 
            -
                         | 
| 490 | 
            -
             | 
| 518 | 
            +
                      if @ctx != nil && @ctx.length > 0
         | 
| 519 | 
            +
                        packer.write_array_header(3)
         | 
| 520 | 
            +
                        Value.of(0xff).pack(packer)
         | 
| 521 | 
            +
             | 
| 522 | 
            +
                        pack_context(packer)
         | 
| 523 | 
            +
             | 
| 524 | 
            +
                        packer.write_array_header(args.length+1)
         | 
| 525 | 
            +
                        Value.of(@list_op).pack(packer)
         | 
| 526 | 
            +
                      else
         | 
| 527 | 
            +
                        packer.write_raw_short(@list_op)
         | 
| 528 | 
            +
             | 
| 529 | 
            +
                        if args.length > 0
         | 
| 530 | 
            +
                          packer.write_array_header(args.length)
         | 
| 531 | 
            +
                        end
         | 
| 491 532 | 
             
                      end
         | 
| 533 | 
            +
             | 
| 492 534 | 
             
                      if args.length > 0
         | 
| 493 | 
            -
                        packer.write_array_header(args.length)
         | 
| 494 535 | 
             
                        args.each do |value|
         | 
| 495 536 | 
             
                          Value.of(value).pack(packer)
         | 
| 496 537 | 
             
                        end
         | 
| @@ -499,6 +540,24 @@ module Aerospike | |
| 499 540 | 
             
                    end
         | 
| 500 541 | 
             
                    BytesValue.new(bytes)
         | 
| 501 542 | 
             
                  end
         | 
| 543 | 
            +
             | 
| 544 | 
            +
                  def pack_context(packer)
         | 
| 545 | 
            +
                    packer.write_array_header(@ctx.length*2)
         | 
| 546 | 
            +
                    if @flag
         | 
| 547 | 
            +
                      (1...@ctx.length).each do |i|
         | 
| 548 | 
            +
                        Value.of(@ctx[i].id).pack(packer)
         | 
| 549 | 
            +
                        Value.of(@ctx[i].value).pack(packer)
         | 
| 550 | 
            +
                      end
         | 
| 551 | 
            +
             | 
| 552 | 
            +
                      Value.of(@ctx[-1].id | @flag).pack(packer)
         | 
| 553 | 
            +
                      Value.of(@ctx[-1].value).pack(packer)
         | 
| 554 | 
            +
                    else
         | 
| 555 | 
            +
                      @ctx.each do |ctx|
         | 
| 556 | 
            +
                        Value.of(ctx.id).pack(packer)
         | 
| 557 | 
            +
                        Value.of(ctx.value).pack(packer)
         | 
| 558 | 
            +
                      end
         | 
| 559 | 
            +
                    end
         | 
| 560 | 
            +
                  end
         | 
| 502 561 | 
             
                end
         | 
| 503 562 |  | 
| 504 563 | 
             
                class InvertibleListOp < ListOperation
         |