Module: Redcord::Migration::Index

Extended by:
T::Sig
Included in:
Redcord::Migration
Defined in:
lib/redcord/migration/index.rb

Overview

typed: strict

Instance Method Summary collapse

Instance Method Details

#_del_set(model, key) ⇒ Object



39
40
41
42
43
44
45
46
# File 'lib/redcord/migration/index.rb', line 39

def _del_set(model, key)
  # Use SPOP here to minimize blocking
  loop do
    break unless model.redis.spop(key)
  end

  model.redis.del(key)
end

#_del_zset(model, key) ⇒ Object



49
50
51
52
53
54
55
56
# File 'lib/redcord/migration/index.rb', line 49

def _del_zset(model, key)
  # ZPOPMIN might not be avaliable on old redis servers
  model.redis.zscan_each(match: key) do |id, _|
    model.redis.zrem(key, id)
  end

  model.redis.del(key)
end

#_remove_index_from_attr_set(model:, attr_set_name:, index_name:) ⇒ Object



34
35
36
# File 'lib/redcord/migration/index.rb', line 34

def _remove_index_from_attr_set(model:, attr_set_name:, index_name:)
  model.redis.srem("#{model.model_key}:#{attr_set_name}", index_name)
end

#remove_custom_index(model, index_name) ⇒ Object



20
21
22
23
24
25
# File 'lib/redcord/migration/index.rb', line 20

def remove_custom_index(model, index_name)
  index_key = "#{model.model_key}:custom_index:#{index_name}"
  index_content_key = "#{model.model_key}:custom_index:#{index_name}_content"
  model.redis.scan_each_shard("#{index_key}*") { |key| model.redis.unlink(key) }
  model.redis.scan_each_shard("#{index_content_key}*") { |key| model.redis.unlink(key) }
end

#remove_index(model, index_name) ⇒ Object



9
10
11
12
13
14
15
16
17
# File 'lib/redcord/migration/index.rb', line 9

def remove_index(model, index_name)
  model.redis.scan_each_shard("#{model.model_key}:#{index_name}:*") { |key| _del_set(model, key) }

  attr_set = "#{model.model_key}:#{index_name}"
  nil_attr_set = "#{attr_set}:"

  model.redis.scan_each_shard("#{nil_attr_set}*") { |key| _del_set(model, key) }
  model.redis.scan_each_shard("#{attr_set}*") { |key| _del_zset(model, key) }
end