From 23b557c6fb07929a9b04e5fb75375a85a4734370 Mon Sep 17 00:00:00 2001 From: elijah Date: Thu, 14 May 2015 15:28:02 -0700 Subject: ensure that set_document raises an exception or a valid result, but never nil. resolves #6850, i think. --- files/couch-doc-update | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/files/couch-doc-update b/files/couch-doc-update index 4ae811e..18d4f8a 100644 --- a/files/couch-doc-update +++ b/files/couch-doc-update @@ -117,34 +117,36 @@ def get_document(db, doc_id) end end +# if the response status code is one of these +# then retry instead of failing. +RETRY_CODES = [500, 422].freeze + def update_document(db, doc, data) - attempt ||= 1 + attempts ||= 1 doc.reject! {|k,v| !["_id", "_rev"].include? k} doc.merge! data db.save_doc(doc) rescue RestClient::ExceptionWithResponse => e - if e.response.nil? - raise e - elsif [500, 422].include?(e.response.code) - raise if attempt > 5 - attempt += 1 + if attempts < 6 && !e.response.nil? && RETRY_CODES.include?(e.response.code) + attempts += 1 sleep 10 retry + else + raise e end end def create_document(db, doc_id, data) - attempt ||= 1 + attempts ||= 1 data["_id"] = doc_id db.save_doc(data) rescue RestClient::ExceptionWithResponse => e - if e.response.nil? - raise e - elsif [500, 422].include?(e.response.code) - raise if attempt > 5 - attempt += 1 + if attempts < 6 && !e.response.nil? && RETRY_CODES.include?(e.response.code) + attempts += 1 sleep 10 retry + else + raise e end end -- cgit v1.2.3