You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by ch...@apache.org on 2015/05/21 23:32:50 UTC
[3/5] couchdb-cassim git commit: Add get_security retry logic for
handling conflicts
Add get_security retry logic for handling conflicts
Project: http://git-wip-us.apache.org/repos/asf/couchdb-cassim/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb-cassim/commit/ea38f7d5
Tree: http://git-wip-us.apache.org/repos/asf/couchdb-cassim/tree/ea38f7d5
Diff: http://git-wip-us.apache.org/repos/asf/couchdb-cassim/diff/ea38f7d5
Branch: refs/heads/master
Commit: ea38f7d58aed8855a34f9dedcd211639d9da7e0e
Parents: e67d7ee
Author: Russell Branca <ch...@apache.org>
Authored: Thu Apr 23 23:50:18 2015 +0000
Committer: Russell Branca <ch...@apache.org>
Committed: Thu May 21 21:07:47 2015 +0000
----------------------------------------------------------------------
src/cassim_security.erl | 20 +++++++++++++++++---
1 file changed, 17 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/couchdb-cassim/blob/ea38f7d5/src/cassim_security.erl
----------------------------------------------------------------------
diff --git a/src/cassim_security.erl b/src/cassim_security.erl
index 796cd67..9d616f7 100644
--- a/src/cassim_security.erl
+++ b/src/cassim_security.erl
@@ -52,14 +52,28 @@ get_security(DbName, Options) ->
end.
-get_security_doc(DbName0) when is_binary(DbName0) ->
+get_security_doc(DbName) when is_binary(DbName) ->
+ RetryCnt = config:get_integer("cassim", "get_security_retries", 3),
+ get_security_doc(DbName, RetryCnt).
+
+
+get_security_doc(DbName, RetryCnt) when RetryCnt =< 0 ->
+ couch_log:error(
+ "Exhausted retry limit loading security doc for db ~s", [DbName]
+ ),
+ throw({retries_limit_exhaused, "Exhaused security doc retry limit"});
+get_security_doc(DbName0, RetryCnt) ->
DbName = mem3:dbname(DbName0),
MetaId = cassim_metadata_cache:security_meta_id(DbName),
case cassim_metadata_cache:load_meta(MetaId) of
undefined ->
SecProps = fabric:get_security(DbName),
- {ok, SecDoc} = migrate_security_props(DbName, SecProps),
- SecDoc;
+ try migrate_security_props(DbName, SecProps) of
+ {ok, SecDoc} ->
+ SecDoc
+ catch conflict ->
+ get_security_doc(DbName0, RetryCnt-1)
+ end;
{error, Error} ->
throw(Error);
SecProps ->