summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorelijah <elijah@riseup.net>2015-05-14 15:28:02 -0700
committerelijah <elijah@riseup.net>2015-05-14 15:28:02 -0700
commit23b557c6fb07929a9b04e5fb75375a85a4734370 (patch)
tree91ad64b0a40cf84ddcb2021e0b261ba578467aaf
parent02c2f59dd1725cc0bd83e346259d54ea46a5ba1f (diff)
ensure that set_document raises an exception or a valid result, but never nil. resolves #6850, i think.
-rw-r--r--files/couch-doc-update26
1 files 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