Skip to content

Commit

Permalink
Merge pull request #356 from algolia/fix/use-temporary-index
Browse files Browse the repository at this point in the history
Use temporary index to preserve synonmys, settings, and rules
  • Loading branch information
julienbourdeau authored Jun 27, 2019
2 parents 0a75928 + 44b8752 commit 27f441f
Show file tree
Hide file tree
Showing 5 changed files with 25 additions and 11 deletions.
7 changes: 7 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
# CHANGELOG

## [1.23.2](https://github.com/algolia/algoliasearch-rails/releases/tag/1.23.2) (2019-06-26)

**Fixed**

* Use `copy_index` when initiating a temporary index to preserve settings, synonyms, and rules.


## [1.23.0](https://github.com/algolia/algoliasearch-rails/releases/tag/1.23.0) (2019-06-25)

**Added**
Expand Down
2 changes: 1 addition & 1 deletion Gemfile
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
source "http://rubygems.org"

gem 'json', '~> 1.8', '>= 1.8.6'
gem 'algoliasearch', '>= 1.23.0', '< 2.0.0'
gem 'algoliasearch', '>= 1.26.0', '< 2.0.0'

if defined?(RUBY_ENGINE) && RUBY_ENGINE == 'rbx'
gem 'rubysl', '~> 2.0', :platform => :rbx
Expand Down
6 changes: 3 additions & 3 deletions algoliasearch-rails.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -79,19 +79,19 @@ Gem::Specification.new do |s|

if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
s.add_runtime_dependency(%q<json>, [">= 1.5.1"])
s.add_runtime_dependency(%q<algoliasearch>, [">= 1.23.0", "< 2.0.0"])
s.add_runtime_dependency(%q<algoliasearch>, [">= 1.26.0", "< 2.0.0"])
s.add_development_dependency(%q<will_paginate>, [">= 2.3.15"])
s.add_development_dependency(%q<kaminari>, [">= 0"])
s.add_development_dependency "travis"
s.add_development_dependency "rake"
s.add_development_dependency "rdoc"
else
s.add_dependency(%q<json>, [">= 1.5.1"])
s.add_dependency(%q<algoliasearch>, [">= 1.23.0", "< 2.0.0"])
s.add_dependency(%q<algoliasearch>, [">= 1.26.0", "< 2.0.0"])
end
else
s.add_dependency(%q<json>, [">= 1.5.1"])
s.add_dependency(%q<algoliasearch>, [">= 1.23.0", "< 2.0.0"])
s.add_dependency(%q<algoliasearch>, [">= 1.26.0", "< 2.0.0"])
end
end

19 changes: 13 additions & 6 deletions lib/algoliasearch-rails.rb
Original file line number Diff line number Diff line change
Expand Up @@ -555,22 +555,29 @@ def algolia_reindex(batch_size = AlgoliaSearch::IndexSettings::DEFAULT_BATCH_SIZ
master_settings.delete 'replicas'

# init temporary index
index_name = algolia_index_name(options)
tmp_options = options.merge({ :index_name => "#{index_name}.tmp" })
src_index_name = algolia_index_name(options)
tmp_index_name = "#{src_index_name}.tmp"
tmp_options = options.merge({ :index_name => tmp_index_name })
tmp_options.delete(:per_environment) # already included in the temporary index_name
tmp_settings = settings.dup
tmp_index = algolia_ensure_init(tmp_options, tmp_settings, master_settings)

algolia_find_in_batches(batch_size) do |group|
if algolia_conditional_index?(tmp_options)
if options[:check_settings] == false
::Algolia::copy_index!(src_index_name, tmp_index_name, %w(settings synonyms rules))
tmp_index = SafeIndex.new(tmp_index_name, !!options[:raise_on_failure])
else
tmp_index = algolia_ensure_init(tmp_options, tmp_settings, master_settings)
end

algolia_find_in_batches(batch_size) do |group|
if algolia_conditional_index?(options)
# select only indexable objects
group = group.select { |o| algolia_indexable?(o, tmp_options) }
end
objects = group.map { |o| tmp_settings.get_attributes(o).merge 'objectID' => algolia_object_id_of(o, tmp_options) }
tmp_index.save_objects(objects)
end

move_task = SafeIndex.move_index(tmp_index.name, index_name)
move_task = SafeIndex.move_index(tmp_index.name, src_index_name)
master_index.wait_task(move_task["taskID"]) if synchronous || options[:synchronous]
end
nil
Expand Down
2 changes: 1 addition & 1 deletion lib/algoliasearch/version.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
module AlgoliaSearch
VERSION = '1.23.1'
VERSION = '1.23.2'
end

0 comments on commit 27f441f

Please sign in to comment.