aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLouise Crow <louise.crow@gmail.com>2013-09-17 17:06:04 +0100
committerLouise Crow <louise.crow@gmail.com>2013-09-17 17:06:04 +0100
commit3ad489e49c0dc4b55bd5e980fd8f8020232e6c9f (patch)
treead756a942c520e490c9dc2802bdd1de549675950
parent09d6cc3313b9ec1f495ff09c74fe91e1b667f8b9 (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.rb18
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