This is an automated email from the ASF dual-hosted git repository. rnewson pushed a commit to branch user-partitioned-dbs-wip in repository https://gitbox.apache.org/repos/asf/couchdb.git
commit c36edd52f509dcccd9482e7c3e093ee00ba1bbce Author: Robert Newson <[email protected]> AuthorDate: Tue Jul 10 15:40:19 2018 +0100 Only consult the shards holding the partition in question --- src/fabric/src/fabric_util.erl | 1 - src/fabric/src/fabric_view.erl | 11 ++++++++--- src/mem3/src/mem3.erl | 8 +++++++- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/fabric/src/fabric_util.erl b/src/fabric/src/fabric_util.erl index dd4b80d..4d2f2c7 100644 --- a/src/fabric/src/fabric_util.erl +++ b/src/fabric/src/fabric_util.erl @@ -64,7 +64,6 @@ stream_start(Workers0, Keypos, StartFun, Replacements) -> Timeout = request_timeout(), case rexi_utils:recv(Workers0, Keypos, Fun, Acc, Timeout, infinity) of {ok, #stream_acc{workers=Workers}} -> - true = fabric_view:is_progress_possible(Workers), AckedWorkers = fabric_dict:fold(fun(Worker, From, WorkerAcc) -> rexi:stream_start(From), [Worker | WorkerAcc] diff --git a/src/fabric/src/fabric_view.erl b/src/fabric/src/fabric_view.erl index bf4d64e..32ad422 100644 --- a/src/fabric/src/fabric_view.erl +++ b/src/fabric/src/fabric_view.erl @@ -317,10 +317,15 @@ index_of(X, [X|_Rest], I) -> index_of(X, [_|Rest], I) -> index_of(X, Rest, I+1). -get_shards(DbName, #mrargs{stable=true}) -> +get_shards(DbName, #mrargs{partitioned=false,stable=true}) -> mem3:ushards(DbName); -get_shards(DbName, #mrargs{stable=false}) -> - mem3:shards(DbName). +get_shards(DbName, #mrargs{partitioned=false,stable=false}) -> + mem3:shards(DbName); +get_shards(DbName, #mrargs{partitioned=true,stable=true}=Args) -> + mem3:ushards(DbName, Args#mrargs.partition); +get_shards(DbName, #mrargs{partitioned=true,stable=false}=Args) -> + mem3:shards(DbName, Args#mrargs.partition). + maybe_update_others(DbName, DDoc, ShardsInvolved, ViewName, #mrargs{update=lazy} = Args) -> diff --git a/src/mem3/src/mem3.erl b/src/mem3/src/mem3.erl index f4bed76..7cdadba 100644 --- a/src/mem3/src/mem3.erl +++ b/src/mem3/src/mem3.erl @@ -13,7 +13,7 @@ -module(mem3). -export([start/0, stop/0, restart/0, nodes/0, node_info/2, shards/1, shards/2, - choose_shards/2, n/1, n/2, dbname/1, ushards/1]). + choose_shards/2, n/1, n/2, dbname/1, ushards/1, ushards/2]). -export([get_shard/3, local_shards/1, shard_suffix/1, fold_shards/2]). -export([sync_security/0, sync_security/1]). -export([compare_nodelists/0, compare_shards/1]). @@ -133,6 +133,12 @@ ushards(DbName) -> Shards = ushards(DbName, live_shards(DbName, Nodes, [ordered]), ZoneMap), mem3_util:downcast(Shards). +-spec ushards(DbName::iodata(), DocId::binary()) -> [#shard{}]. +ushards(DbName, DocId) -> + Shards = shards_int(DbName, DocId, [ordered]), + Shard = hd(Shards), + mem3_util:downcast([Shard]). + ushards(DbName, Shards0, ZoneMap) -> {L,S,D} = group_by_proximity(Shards0, ZoneMap), % Prefer shards in the local zone over shards in a different zone,
