You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by va...@apache.org on 2022/10/27 20:00:34 UTC
[couchdb] branch main updated: Fix smoosh get_priority/2 case clause
This is an automated email from the ASF dual-hosted git repository.
vatamane pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/couchdb.git
The following commit(s) were added to refs/heads/main by this push:
new c793487a1 Fix smoosh get_priority/2 case clause
c793487a1 is described below
commit c793487a142db841a43d28baa6012b6509dac53c
Author: Nick Vatamaniuc <va...@gmail.com>
AuthorDate: Thu Oct 27 14:39:03 2022 -0400
Fix smoosh get_priority/2 case clause
Fixes the case when get_index/3 returns a `database_not_found` error.
---
src/smoosh/src/smoosh_server.erl | 181 +++++++++++++++++++++------------------
1 file changed, 96 insertions(+), 85 deletions(-)
diff --git a/src/smoosh/src/smoosh_server.erl b/src/smoosh/src/smoosh_server.erl
index 5e66258c3..2a55082c1 100644
--- a/src/smoosh/src/smoosh_server.erl
+++ b/src/smoosh/src/smoosh_server.erl
@@ -360,6 +360,8 @@ get_priority(Channel, {Shard, GroupId}) ->
end;
{not_found, _Reason} ->
0;
+ {database_does_not_exist, _Stack} ->
+ 0;
{error, Reason} ->
couch_log:warning(
"Failed to get group_pid for ~p ~p ~p: ~p",
@@ -493,16 +495,22 @@ view_needs_upgrade(Props) ->
end.
-ifdef(TEST).
--include_lib("eunit/include/eunit.hrl").
+
+-include_lib("couch/include/couch_eunit.hrl").
setup_all() ->
- Ctx = test_util:start_couch([couch_log]),
- meck:new([config, couch_index, couch_index_server], [passthrough]),
+ Ctx = setup_all_no_mock(),
Pid = list_to_pid("<0.0.0>"),
meck:expect(couch_index_server, get_index, 3, {ok, Pid}),
meck:expect(config, get, fun(_, _, Default) -> Default end),
Ctx.
+setup_all_no_mock() ->
+ Ctx = test_util:start_couch([couch_log]),
+ meck:new([config, couch_index, couch_index_server], [passthrough]),
+ meck:expect(config, get, fun(_, _, Default) -> Default end),
+ Ctx.
+
teardown_all(Ctx) ->
meck:unload(),
test_util:stop_couch(Ctx).
@@ -523,7 +531,7 @@ config_change_test_() ->
fun() -> test_util:start_couch([smoosh]) end,
fun test_util:stop_couch/1,
[
- fun t_restart_config_listener/1
+ ?TDEF_FE(t_restart_config_listener)
]
}
}.
@@ -538,108 +546,111 @@ get_priority_test_() ->
fun setup/0,
fun teardown/1,
[
- fun t_ratio_view/1,
- fun t_slack_view/1,
- fun t_no_data_view/1,
- fun t_below_min_priority_view/1,
- fun t_below_min_size_view/1,
- fun t_timeout_view/1,
- fun t_missing_view/1,
- fun t_invalid_view/1
+ ?TDEF_FE(t_ratio_view),
+ ?TDEF_FE(t_slack_view),
+ ?TDEF_FE(t_no_data_view),
+ ?TDEF_FE(t_below_min_priority_view),
+ ?TDEF_FE(t_below_min_size_view),
+ ?TDEF_FE(t_timeout_view),
+ ?TDEF_FE(t_missing_view),
+ ?TDEF_FE(t_invalid_view)
+ ]
+ }
+ }.
+
+get_priority_no_mock_test_() ->
+ {
+ setup,
+ fun setup_all_no_mock/0,
+ fun teardown_all/1,
+ {
+ foreach,
+ fun setup/0,
+ fun teardown/1,
+ [
+ ?TDEF_FE(t_missing_db)
]
}
}.
t_restart_config_listener(_) ->
- ?_test(begin
- ConfigMonitor = config_listener_mon(),
- ?assert(is_process_alive(ConfigMonitor)),
- test_util:stop_sync(ConfigMonitor),
- ?assertNot(is_process_alive(ConfigMonitor)),
- NewConfigMonitor = test_util:wait(fun() ->
- case config_listener_mon() of
- undefined -> wait;
- Pid -> Pid
- end
- end),
- ?assert(is_process_alive(NewConfigMonitor))
- end).
+ ConfigMonitor = config_listener_mon(),
+ ?assert(is_process_alive(ConfigMonitor)),
+ test_util:stop_sync(ConfigMonitor),
+ ?assertNot(is_process_alive(ConfigMonitor)),
+ NewConfigMonitor = test_util:wait(fun() ->
+ case config_listener_mon() of
+ undefined -> wait;
+ Pid -> Pid
+ end
+ end),
+ ?assert(is_process_alive(NewConfigMonitor)).
t_ratio_view({ok, Shard, GroupId}) ->
- ?_test(begin
- meck:expect(couch_index, get_info, fun(_) ->
- {ok, [{sizes, {[{file, 5242880}, {active, 524288}]}}]}
- end),
- ?assertEqual(10.0, get_priority("ratio_views", {Shard, GroupId})),
- ?assertEqual(0, get_priority("slack_views", {Shard, GroupId})),
- ?assertEqual(0, get_priority("upgrade_views", {Shard, GroupId}))
- end).
+ meck:expect(couch_index, get_info, fun(_) ->
+ {ok, [{sizes, {[{file, 5242880}, {active, 524288}]}}]}
+ end),
+ ?assertEqual(10.0, get_priority("ratio_views", {Shard, GroupId})),
+ ?assertEqual(0, get_priority("slack_views", {Shard, GroupId})),
+ ?assertEqual(0, get_priority("upgrade_views", {Shard, GroupId})).
t_slack_view({ok, Shard, GroupId}) ->
- ?_test(begin
- meck:expect(couch_index, get_info, fun(_) ->
- {ok, [{sizes, {[{file, 1073741824}, {active, 536870911}]}}]}
- end),
- ?assertEqual(2.0000000037252903, get_priority("ratio_views", {Shard, GroupId})),
- ?assertEqual(536870913, get_priority("slack_views", {Shard, GroupId})),
- ?assertEqual(0, get_priority("upgrade_views", {Shard, GroupId}))
- end).
+ meck:expect(couch_index, get_info, fun(_) ->
+ {ok, [{sizes, {[{file, 1073741824}, {active, 536870911}]}}]}
+ end),
+ ?assertEqual(2.0000000037252903, get_priority("ratio_views", {Shard, GroupId})),
+ ?assertEqual(536870913, get_priority("slack_views", {Shard, GroupId})),
+ ?assertEqual(0, get_priority("upgrade_views", {Shard, GroupId})).
t_no_data_view({ok, Shard, GroupId}) ->
- ?_test(begin
- meck:expect(couch_index, get_info, fun(_) ->
- {ok, [{sizes, {[{file, 5242880}, {active, 0}]}}]}
- end),
- ?assertEqual(2.0, get_priority("ratio_views", {Shard, GroupId})),
- ?assertEqual(536870912, get_priority("slack_views", {Shard, GroupId})),
- ?assertEqual(2.0, get_priority("upgrade_views", {Shard, GroupId}))
- end).
+ meck:expect(couch_index, get_info, fun(_) ->
+ {ok, [{sizes, {[{file, 5242880}, {active, 0}]}}]}
+ end),
+ ?assertEqual(2.0, get_priority("ratio_views", {Shard, GroupId})),
+ ?assertEqual(536870912, get_priority("slack_views", {Shard, GroupId})),
+ ?assertEqual(2.0, get_priority("upgrade_views", {Shard, GroupId})).
t_below_min_priority_view({ok, Shard, GroupId}) ->
- ?_test(begin
- meck:expect(couch_index, get_info, fun(_) ->
- {ok, [{sizes, {[{file, 5242880}, {active, 1048576}]}}]}
- end),
- ?assertEqual(5.0, get_priority("ratio_views", {Shard, GroupId})),
- ?assertEqual(0, get_priority("slack_views", {Shard, GroupId})),
- ?assertEqual(0, get_priority("upgrade_views", {Shard, GroupId}))
- end).
+ meck:expect(couch_index, get_info, fun(_) ->
+ {ok, [{sizes, {[{file, 5242880}, {active, 1048576}]}}]}
+ end),
+ ?assertEqual(5.0, get_priority("ratio_views", {Shard, GroupId})),
+ ?assertEqual(0, get_priority("slack_views", {Shard, GroupId})),
+ ?assertEqual(0, get_priority("upgrade_views", {Shard, GroupId})).
t_below_min_size_view({ok, Shard, GroupId}) ->
- ?_test(begin
- meck:expect(couch_index, get_info, fun(_) ->
- {ok, [{sizes, {[{file, 1048576}, {active, 512000}]}}]}
- end),
- ?assertEqual(0, get_priority("ratio_views", {Shard, GroupId})),
- ?assertEqual(0, get_priority("slack_views", {Shard, GroupId})),
- ?assertEqual(0, get_priority("upgrade_views", {Shard, GroupId}))
- end).
+ meck:expect(couch_index, get_info, fun(_) ->
+ {ok, [{sizes, {[{file, 1048576}, {active, 512000}]}}]}
+ end),
+ ?assertEqual(0, get_priority("ratio_views", {Shard, GroupId})),
+ ?assertEqual(0, get_priority("slack_views", {Shard, GroupId})),
+ ?assertEqual(0, get_priority("upgrade_views", {Shard, GroupId})).
t_timeout_view({ok, Shard, GroupId}) ->
- ?_test(begin
- meck:expect(couch_index, get_info, fun(_) ->
- exit({timeout, get_info})
- end),
- ?assertEqual(0, get_priority("ratio_views", {Shard, GroupId})),
- ?assertEqual(0, get_priority("slack_views", {Shard, GroupId})),
- ?assertEqual(0, get_priority("upgrade_views", {Shard, GroupId}))
- end).
+ meck:expect(couch_index, get_info, fun(_) ->
+ exit({timeout, get_info})
+ end),
+ ?assertEqual(0, get_priority("ratio_views", {Shard, GroupId})),
+ ?assertEqual(0, get_priority("slack_views", {Shard, GroupId})),
+ ?assertEqual(0, get_priority("upgrade_views", {Shard, GroupId})).
+
+t_missing_db(_) ->
+ ShardGroup = {<<"shards/80000000-ffffffff/db2.1666895357">>, <<"x">>},
+ ?assertEqual(0, get_priority("ratio_views", ShardGroup)),
+ ?assertEqual(0, get_priority("slack_views", ShardGroup)),
+ ?assertEqual(0, get_priority("upgrade_views", ShardGroup)).
t_missing_view({ok, Shard, GroupId}) ->
- ?_test(begin
- meck:expect(couch_index_server, get_index, 3, {not_found, missing}),
- ?assertEqual(0, get_priority("ratio_views", {Shard, GroupId})),
- ?assertEqual(0, get_priority("slack_views", {Shard, GroupId})),
- ?assertEqual(0, get_priority("upgrade_views", {Shard, GroupId}))
- end).
+ meck:expect(couch_index_server, get_index, 3, {not_found, missing}),
+ ?assertEqual(0, get_priority("ratio_views", {Shard, GroupId})),
+ ?assertEqual(0, get_priority("slack_views", {Shard, GroupId})),
+ ?assertEqual(0, get_priority("upgrade_views", {Shard, GroupId})).
t_invalid_view({ok, Shard, GroupId}) ->
- ?_test(begin
- meck:expect(couch_index_server, get_index, 3, {error, undef}),
- ?assertEqual(0, get_priority("ratio_views", {Shard, GroupId})),
- ?assertEqual(0, get_priority("slack_views", {Shard, GroupId})),
- ?assertEqual(0, get_priority("upgrade_views", {Shard, GroupId}))
- end).
+ meck:expect(couch_index_server, get_index, 3, {error, undef}),
+ ?assertEqual(0, get_priority("ratio_views", {Shard, GroupId})),
+ ?assertEqual(0, get_priority("slack_views", {Shard, GroupId})),
+ ?assertEqual(0, get_priority("upgrade_views", {Shard, GroupId})).
config_listener_mon() ->
IsConfigMonitor = fun(P) ->