diff options
author | Louise Crow <louise.crow@gmail.com> | 2013-09-17 17:06:04 +0100 |
---|---|---|
committer | Louise Crow <louise.crow@gmail.com> | 2013-09-17 17:06:04 +0100 |
commit | 3ad489e49c0dc4b55bd5e980fd8f8020232e6c9f (patch) | |
tree | ad756a942c520e490c9dc2802bdd1de549675950 | |
parent | 09d6cc3313b9ec1f495ff09c74fe91e1b667f8b9 (diff) |
Handle a race condition in index update requests.
Conflicts:
vendor/plugins/acts_as_xapian/lib/acts_as_xapian.rb
-rw-r--r-- | vendor/plugins/acts_as_xapian/lib/acts_as_xapian.rb | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/vendor/plugins/acts_as_xapian/lib/acts_as_xapian.rb b/vendor/plugins/acts_as_xapian/lib/acts_as_xapian.rb index a4447371e..fcf7a778d 100644 --- a/vendor/plugins/acts_as_xapian/lib/acts_as_xapian.rb +++ b/vendor/plugins/acts_as_xapian/lib/acts_as_xapian.rb @@ -927,12 +927,18 @@ module ActsAsXapian end def xapian_create_job(action, model, model_id) - ActiveRecord::Base.transaction do - ActsAsXapianJob.delete_all([ "model = ? and model_id = ?", model, model_id]) - xapian_before_create_job_hook(action, model, model_id) - ActsAsXapianJob.create!(:model => model, - :model_id => model_id, - :action => action) + begin + ActiveRecord::Base.transaction do + ActsAsXapianJob.delete_all([ "model = ? and model_id = ?", model, model_id]) + xapian_before_create_job_hook(action, model, model_id) + ActsAsXapianJob.create!(:model => model, + :model_id => model_id, + :action => action) + end + rescue ActiveRecord::RecordNotUnique => e + # Given the error handling in ActsAsXapian::update_index, we can just fail silently if + # another process has inserted an acts_as_xapian_jobs record for this model. + raise unless (e.message =~ /duplicate key value violates unique constraint "index_acts_as_xapian_jobs_on_model_and_model_id"/) end end |