Module: Gitlab::Redis::ClusterUtil

Defined in:
lib/gitlab/redis/cluster_util.rb

Class Method Summary collapse

Class Method Details



20
21
22
23
24
25
26
27
28
# File 'lib/gitlab/redis/cluster_util.rb', line 20

def batch_unlink(keys, redis)
  expired_count = 0
  keys.each_slice(1000) do |subset|
    expired_count += Gitlab::Redis::CrossSlot::Pipeline.new(redis).pipelined do |pipeline|
      subset.each { |key| pipeline.unlink(key) }
    end.sum
  end
  expired_count
end

.cluster?(obj) ⇒ Boolean

clusters? is used to select Redis command types, on ‘true`, the subsequent commands should be compatible with Redis Cluster.

When working with MultiStore, if even 1 of 2 stores is a Redis::Cluster, we should err on the side of caution and return ‘true `,

Returns:



12
13
14
15
16
17
18
# File 'lib/gitlab/redis/cluster_util.rb', line 12

def cluster?(obj)
  if obj.is_a?(MultiStore)
    cluster?(obj.primary_store) || cluster?(obj.secondary_store)
  else
    obj.respond_to?(:_client) && obj._client.is_a?(::Redis::Cluster)
  end
end