summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRussell Branca <chewbranca@apache.org>2021-06-24 16:58:21 -0700
committerRussell Branca <chewbranca@apache.org>2021-06-24 16:58:21 -0700
commitb518f753339f9efa70ac82187afacd3b1d57cfed (patch)
tree009513f41a73f9351740589ccf86b5a7edae4091
parentafcb455ce9295a36fc0435d7a27cae36b2f263dd (diff)
downloadcouchdb-3631-3.x-fix-pq-shard-creation-alt.tar.gz
Alternative approach for mem3 shard creation3631-3.x-fix-pq-shard-creation-alt
-rw-r--r--src/fabric/src/fabric_rpc.erl2
-rw-r--r--src/fabric/src/fabric_util.erl4
-rw-r--r--src/mem3/src/mem3_util.erl11
3 files changed, 9 insertions, 8 deletions
diff --git a/src/fabric/src/fabric_rpc.erl b/src/fabric/src/fabric_rpc.erl
index 7776bd9fe..f58f4bced 100644
--- a/src/fabric/src/fabric_rpc.erl
+++ b/src/fabric/src/fabric_rpc.erl
@@ -304,7 +304,7 @@ reset_validation_funs(DbName) ->
open_shard(Name, Opts) ->
set_io_priority(Name, Opts),
try
- rexi:reply(couch_db:open(Name, Opts))
+ rexi:reply(mem3_util:get_or_create_db(Name, Opts))
catch exit:{timeout, _} ->
couch_stats:increment_counter([fabric, open_shard, timeouts])
end.
diff --git a/src/fabric/src/fabric_util.erl b/src/fabric/src/fabric_util.erl
index e528261ce..84ffef122 100644
--- a/src/fabric/src/fabric_util.erl
+++ b/src/fabric/src/fabric_util.erl
@@ -105,9 +105,7 @@ get_db(DbName, Options) ->
Nodes = [node()|erlang:nodes()],
Live = [S || #shard{node = N} = S <- Shards, lists:member(N, Nodes)],
Factor = list_to_integer(config:get("fabric", "shard_timeout_factor", "2")),
- Options1 = [{create_if_missing, true} | Options],
- Options2 = mem3_util:add_db_config_options(DbName, Options1),
- get_shard(Live, Options2, 100, Factor).
+ get_shard(Live, Options, 100, Factor).
get_shard([], _Opts, _Timeout, _Factor) ->
erlang:error({internal_server_error, "No DB shards could be opened."});
diff --git a/src/mem3/src/mem3_util.erl b/src/mem3/src/mem3_util.erl
index 9a953f895..d56c55cac 100644
--- a/src/mem3/src/mem3_util.erl
+++ b/src/mem3/src/mem3_util.erl
@@ -18,7 +18,6 @@
-export([is_deleted/1, rotate_list/2]).
-export([get_shard_opts/1, get_engine_opt/1, get_props_opt/1]).
-export([get_shard_props/1, find_dirty_shards/0]).
--export([add_db_config_options/2]).
-export([
iso8601_timestamp/0,
live_nodes/0,
@@ -521,15 +520,19 @@ add_db_config_options(DbName, Options) ->
merge_opts(DbOpts, Options).
-get_or_create_db(DbName, Options) ->
- case couch_db:open_int(DbName, Options) of
+get_or_create_db(DbName, Options0) ->
+ Options = case proplists:get_value(user_ctx, Options0, undefined) of
+ undefined -> [?ADMIN_CTX | Options0];
+ _ -> Options0
+ end,
+ case couch_db:open(DbName, Options) of
{ok, _} = OkDb ->
OkDb;
{not_found, no_db_file} ->
try
Options1 = [{create_if_missing, true} | Options],
Options2 = add_db_config_options(DbName, Options1),
- couch_db:open_int(DbName, Options2)
+ couch_db:open(DbName, Options2)
catch error:database_does_not_exist ->
throw({error, missing_target})
end;