You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by wo...@apache.org on 2019/01/31 00:06:27 UTC
[couchdb] branch master updated: Compaction: Add snooze_period_ms
for finer tuning (#1880)
This is an automated email from the ASF dual-hosted git repository.
wohali pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/couchdb.git
The following commit(s) were added to refs/heads/master by this push:
new 5471694 Compaction: Add snooze_period_ms for finer tuning (#1880)
5471694 is described below
commit 547169447067e9111dbd31f2ae86d49afe980fda
Author: Adrien Vergé <ad...@gmail.com>
AuthorDate: Thu Jan 31 01:06:21 2019 +0100
Compaction: Add snooze_period_ms for finer tuning (#1880)
This commit introduces a new option `snooze_period_ms` (measured in
milliseconds), and deprecates `snooze_period` while still supporting it
for obvious legacy reasons.
---
rel/overlay/etc/default.ini | 7 ++-
src/couch/src/couch_compaction_daemon.erl | 71 ++++++++++++++++++++--
src/couch/test/couchdb_compaction_daemon_tests.erl | 2 +-
3 files changed, 72 insertions(+), 8 deletions(-)
diff --git a/rel/overlay/etc/default.ini b/rel/overlay/etc/default.ini
index b9d51af..24428f3 100644
--- a/rel/overlay/etc/default.ini
+++ b/rel/overlay/etc/default.ini
@@ -434,9 +434,10 @@ min_file_size = 131072
; With lots of databases and/or with lots of design docs in one or more
; databases, the compaction_daemon can create significant CPU load when
; checking whether databases and view indexes need compacting. The
-; snooze_period setting ensures a smoother CPU load. Defaults to
-; 3 seconds wait.
-; snooze_period = 3
+; snooze_period_ms setting ensures a smoother CPU load. Defaults to
+; 3000 milliseconds wait. Note that this option was formerly called
+; snooze_period, measured in seconds (it is currently still supported).
+; snooze_period_ms = 3000
[compactions]
; List of compaction rules for the compaction daemon.
diff --git a/src/couch/src/couch_compaction_daemon.erl b/src/couch/src/couch_compaction_daemon.erl
index 115a9a8..2a46c3f 100644
--- a/src/couch/src/couch_compaction_daemon.erl
+++ b/src/couch/src/couch_compaction_daemon.erl
@@ -125,8 +125,16 @@ handle_config_terminate(_, stop, _) ->
handle_config_terminate(_Server, _Reason, _State) ->
erlang:send_after(?RELISTEN_DELAY, whereis(?MODULE), restart_config_listener).
+get_snooze_period() ->
+ % The snooze_period_ms option should be used, but snooze_period is supported
+ % for legacy reasons.
+ Default = config:get_integer("compaction_daemon", "snooze_period", 3),
+ case config:get_integer("compaction_daemon", "snooze_period_ms", -1) of
+ -1 -> Default * 1000;
+ SnoozePeriod -> SnoozePeriod
+ end.
+
compact_loop(Parent) ->
- SnoozePeriod = config:get_integer("compaction_daemon", "snooze_period", 3),
{ok, _} = couch_server:all_databases(
fun(DbName, Acc) ->
case ets:info(?CONFIG_ETS, size) =:= 0 of
@@ -140,7 +148,7 @@ compact_loop(Parent) ->
case check_period(Config) of
true ->
maybe_compact_db(Parent, DbName, Config),
- ok = timer:sleep(SnoozePeriod * 1000);
+ ok = timer:sleep(get_snooze_period());
false ->
ok
end
@@ -231,8 +239,7 @@ maybe_compact_views(DbName, [DDocName | Rest], Config) ->
timeout ->
ok
end,
- SnoozePeriod = config:get_integer("compaction_daemon", "snooze_period", 3),
- ok = timer:sleep(SnoozePeriod * 1000);
+ ok = timer:sleep(get_snooze_period());
false ->
ok
end.
@@ -597,4 +604,60 @@ abs_path2_test() ->
?assertEqual({ok, "/a/b/"}, abs_path2("/a/b")),
ok.
+get_snooze_period_test_() ->
+ {
+ foreach,
+ fun() ->
+ meck:new(config, [passthrough])
+ end,
+ fun(_) ->
+ meck:unload()
+ end,
+ [
+ {"should return default value without config attributes",
+ fun should_default_without_config/0},
+ {"should respect old config attribute",
+ fun should_respect_old_config/0},
+ {"should respect old config set to zero",
+ fun should_respect_old_config_zero/0},
+ {"should respect new config attribute",
+ fun should_respect_new_config/0},
+ {"should respect new config set to zero",
+ fun should_respect_new_config_zero/0}
+ ]
+ }.
+
+should_default_without_config() ->
+ ?assertEqual(3000, get_snooze_period()).
+
+should_respect_old_config() ->
+ meck:expect(config, get_integer, fun
+ ("compaction_daemon", "snooze_period", _) -> 1;
+ (_, _, Default) -> Default
+ end),
+ ?assertEqual(1000, get_snooze_period()).
+
+should_respect_old_config_zero() ->
+ meck:expect(config, get_integer, fun
+ ("compaction_daemon", "snooze_period", _) -> 0;
+ (_, _, Default) -> Default
+ end),
+ ?assertEqual(0, get_snooze_period()).
+
+should_respect_new_config() ->
+ meck:expect(config, get_integer, fun
+ ("compaction_daemon", "snooze_period", _) -> 1;
+ ("compaction_daemon", "snooze_period_ms", _) -> 300;
+ (_, _, Default) -> Default
+ end),
+ ?assertEqual(300, get_snooze_period()).
+
+should_respect_new_config_zero() ->
+ meck:expect(config, get_integer, fun
+ ("compaction_daemon", "snooze_period", _) -> 1;
+ ("compaction_daemon", "snooze_period_ms", _) -> 0;
+ (_, _, Default) -> Default
+ end),
+ ?assertEqual(0, get_snooze_period()).
+
-endif.
diff --git a/src/couch/test/couchdb_compaction_daemon_tests.erl b/src/couch/test/couchdb_compaction_daemon_tests.erl
index c10ddee..0ef2a40 100644
--- a/src/couch/test/couchdb_compaction_daemon_tests.erl
+++ b/src/couch/test/couchdb_compaction_daemon_tests.erl
@@ -24,7 +24,7 @@
start() ->
Ctx = test_util:start_couch(),
ok = config:set("compaction_daemon", "check_interval", "3", false),
- ok = config:set("compaction_daemon", "snooze_period", "0", false),
+ ok = config:set("compaction_daemon", "snooze_period_ms", "0", false),
ok = config:set("compaction_daemon", "min_file_size", "100000", false),
ok = config:delete("compactions", "_default", false),
ok = meck:new(?MODS_TO_MOCK, [passthrough]),