module Redcord::Migration::Index

typed: strict

Public Instance Methods

_del_set(model, key) click to toggle source
# 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) click to toggle source
# 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:) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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