diff options
author | Jan Lehnardt <jan@apache.org> | 2018-03-05 16:06:21 +0100 |
---|---|---|
committer | Jan Lehnardt <jan@apache.org> | 2018-03-05 18:03:01 +0100 |
commit | 284ff1529830723f794c4893720f52722a8503ea (patch) | |
tree | 2d96d4f1ebc7eb079ce6517963fdc8a8577d1416 | |
parent | 9b997226bd608200cb583f0dd410f513a2f6fce7 (diff) | |
download | couchdb-284ff1529830723f794c4893720f52722a8503ea.tar.gz |
feat: introduce snooze_period to reduce compaction_daemon load.
This commit introduces a snooze period for the compaction daemon
to apply inbetween moving on from one database compaction to
another, and from one view group to another.
The result is that on db-per-user setups, the compaction daemon
doesn’t cause a CPU spike every check_interval seconds.
-rw-r--r-- | src/couch/src/couch_compaction_daemon.erl | 8 | ||||
-rw-r--r-- | src/couch/test/couchdb_compaction_daemon_tests.erl | 1 |
2 files changed, 7 insertions, 2 deletions
diff --git a/src/couch/src/couch_compaction_daemon.erl b/src/couch/src/couch_compaction_daemon.erl index 9371119b0..59555f1ba 100644 --- a/src/couch/src/couch_compaction_daemon.erl +++ b/src/couch/src/couch_compaction_daemon.erl @@ -126,6 +126,7 @@ handle_config_terminate(_Server, _Reason, _State) -> erlang:send_after(?RELISTEN_DELAY, whereis(?MODULE), restart_config_listener). 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 @@ -138,7 +139,8 @@ compact_loop(Parent) -> {ok, Config} -> case check_period(Config) of true -> - maybe_compact_db(Parent, DbName, Config); + maybe_compact_db(Parent, DbName, Config), + ok = timer:sleep(SnoozePeriod * 1000); false -> ok end @@ -229,7 +231,9 @@ maybe_compact_views(DbName, [DDocName | Rest], Config) -> maybe_compact_views(DbName, Rest, Config); timeout -> ok - end; + end, + SnoozePeriod = config:get_integer("compaction_daemon", "snooze_period", 3), + ok = timer:sleep(SnoozePeriod * 1000); false -> ok end. diff --git a/src/couch/test/couchdb_compaction_daemon_tests.erl b/src/couch/test/couchdb_compaction_daemon_tests.erl index 47f35a073..c10ddee12 100644 --- a/src/couch/test/couchdb_compaction_daemon_tests.erl +++ b/src/couch/test/couchdb_compaction_daemon_tests.erl @@ -24,6 +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", "min_file_size", "100000", false), ok = config:delete("compactions", "_default", false), ok = meck:new(?MODS_TO_MOCK, [passthrough]), |