module Elos::Index::Reindexable
Public Instance Methods
alias_index(alias_name, index_name)
click to toggle source
# File lib/elos/index/reindexable.rb, line 98 def alias_index(alias_name, index_name) client.indices.update_aliases body: { actions: [ { add: { index: index_name, alias: alias_name } } ] } end
aliased_index_name(alias_name)
click to toggle source
# File lib/elos/index/reindexable.rb, line 90 def aliased_index_name(alias_name) aliased_index_names(alias_name).first end
aliased_index_names(alias_name)
click to toggle source
# File lib/elos/index/reindexable.rb, line 94 def aliased_index_names(alias_name) client.indices.get_alias(index: "#{index_name}*", name: alias_name).keys end
create_index_with_random_name()
click to toggle source
# File lib/elos/index/reindexable.rb, line 123 def create_index_with_random_name create_index(name = random_index_name) name end
initialize_for_reindex(force = false)
click to toggle source
# File lib/elos/index/reindexable.rb, line 12 def initialize_for_reindex(force = false) return false if !force && client.indices.exists_alias(name: read_alias_name) && client.indices.exists_alias(name: write_alias_name) Elos::Lock.unlock(lock_key) if force delete_index("#{index_name}*") index_name = random_index_name unless client.indices.exists(index: index_name) client.indices.create(index: index_name, body: index_parameters) alias_index(read_alias_name, index_name) alias_index(write_alias_name, index_name) return true end false end
lock_key()
click to toggle source
# File lib/elos/index/reindexable.rb, line 73 def lock_key "elos:reindex_or_migrate:#{name.underscore}" end
random_index_name()
click to toggle source
# File lib/elos/index/reindexable.rb, line 128 def random_index_name "#{index_name}#{SecureRandom.uuid}" end
read_index_name()
click to toggle source
# File lib/elos/index/reindexable.rb, line 61 def read_index_name aliased_index_name(read_alias_name) end
reindex(set_block = nil, &block)
click to toggle source
# File lib/elos/index/reindexable.rb, line 26 def reindex(set_block = nil, &block) return set_reindex(set_block) if set_block proc = block || self.reindex_block long_args = proc.parameters.length == 2 Elos::Lock.lock(lock_key) do initialize_for_reindex old_index_name = read_index_name unless write_index_names == [old_index_name] repair_for_reindex end return unless new_index_name = create_index_with_random_name begin alias_index(write_alias_name, new_index_name) if long_args proc.(old_index_name, new_index_name) else proc.() end switch_pointed_index(read_alias_name, old_index_name, new_index_name) unalias_index(write_alias_name, old_index_name) rescue Exception => e if read_index_name == old_index_name if write_index_names.include?(new_index_name) unalias_index(write_alias_name, new_index_name) end delete_index(new_index_name) end raise e end delete_index(old_index_name) end end
repair_for_reindex()
click to toggle source
# File lib/elos/index/reindexable.rb, line 81 def repair_for_reindex (write_index_names - [read_index_name]).each do |name| unalias_index(write_alias_name, name) delete_index(name) end return if write_index_name == read_index_name alias_index(write_alias_name, read_index_name) end
set_reindex(block)
click to toggle source
# File lib/elos/index/reindexable.rb, line 77 def set_reindex(block) self.reindex_block = block end
switch_pointed_index(alias_name, from_index_name, to_index_name)
click to toggle source
# File lib/elos/index/reindexable.rb, line 114 def switch_pointed_index(alias_name, from_index_name, to_index_name) client.indices.update_aliases body: { actions: [ { remove: { index: from_index_name, alias: alias_name } }, { add: { index: to_index_name, alias: alias_name } } ] } end
unalias_index(alias_name, index_name)
click to toggle source
# File lib/elos/index/reindexable.rb, line 106 def unalias_index(alias_name, index_name) client.indices.update_aliases body: { actions: [ { remove: { index: index_name, alias: alias_name } } ] } end
write_index_name()
click to toggle source
# File lib/elos/index/reindexable.rb, line 65 def write_index_name write_index_names.first end
write_index_names()
click to toggle source
# File lib/elos/index/reindexable.rb, line 69 def write_index_names aliased_index_names(write_alias_name) end