You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by da...@apache.org on 2014/01/17 22:54:41 UTC
[23/50] git commit: Check security objects during internal replication
Check security objects during internal replication
If we detect that two shards have different values for a security object
during internal replication we automatically trigger a security object
synchronization.
BugzId: 11602
Project: http://git-wip-us.apache.org/repos/asf/couchdb-mem3/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb-mem3/commit/32578e40
Tree: http://git-wip-us.apache.org/repos/asf/couchdb-mem3/tree/32578e40
Diff: http://git-wip-us.apache.org/repos/asf/couchdb-mem3/diff/32578e40
Branch: refs/heads/import
Commit: 32578e40de6892a9df0b4a078000e444777344ac
Parents: d358892
Author: Paul J. Davis <pa...@gmail.com>
Authored: Tue Sep 25 13:06:45 2012 -0500
Committer: Paul J. Davis <pa...@gmail.com>
Committed: Tue Sep 25 22:24:58 2012 -0500
----------------------------------------------------------------------
src/mem3_rep.erl | 1 +
src/mem3_sync_security.erl | 32 ++++++++++++++++++++++++++++++++
2 files changed, 33 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/couchdb-mem3/blob/32578e40/src/mem3_rep.erl
----------------------------------------------------------------------
diff --git a/src/mem3_rep.erl b/src/mem3_rep.erl
index cafb1c0..64cf931 100644
--- a/src/mem3_rep.erl
+++ b/src/mem3_rep.erl
@@ -26,6 +26,7 @@ go(DbName, Node, Opts) when is_binary(DbName), is_atom(Node) ->
go(#shard{name=DbName, node=node()}, #shard{name=DbName, node=Node}, Opts);
go(#shard{} = Source, #shard{} = Target, Opts) ->
+ mem3_sync_security:maybe_sync(Source, Target),
BatchSize = case proplists:get_value(batch_size, Opts) of
BS when is_integer(BS), BS > 0 -> BS;
_ -> 100
http://git-wip-us.apache.org/repos/asf/couchdb-mem3/blob/32578e40/src/mem3_sync_security.erl
----------------------------------------------------------------------
diff --git a/src/mem3_sync_security.erl b/src/mem3_sync_security.erl
index 5a45dbb..c436e56 100644
--- a/src/mem3_sync_security.erl
+++ b/src/mem3_sync_security.erl
@@ -14,8 +14,34 @@
-module(mem3_sync_security).
+-export([maybe_sync/2, maybe_sync_int/2]).
-export([go/0, go/1]).
+-include("mem3.hrl").
+
+
+maybe_sync(#shard{}=Src, #shard{}=Dst) ->
+ case is_local(Src#shard.name) of
+ false ->
+ erlang:spawn(?MODULE, maybe_sync_int, [Src, Dst]);
+ true ->
+ ok
+ end.
+
+maybe_sync_int(#shard{name=Name}=Src, Dst) ->
+ DbName = mem3:dbname(Name),
+ case fabric:get_all_security(DbName, [{shards, [Src, Dst]}]) of
+ {ok, WorkerObjs} ->
+ Objs = [Obj || {_Worker, Obj} <- WorkerObjs],
+ case length(lists:usort(Objs)) of
+ 1 -> ok;
+ 2 -> go(DbName)
+ end;
+ Else ->
+ Args = [DbName, Else],
+ twig:log(err, "Error checking security objects for ~s :: ~p", Args)
+ end.
+
go() ->
{ok, Dbs} = fabric:all_dbs(),
lists:foreach(fun handle_db/1, Dbs).
@@ -73,3 +99,9 @@ is_ok(_, _) ->
% Anything else requires human intervention
broken.
+
+is_local(<<"shards/", _/binary>>) ->
+ false;
+is_local(_) ->
+ true.
+