This is an automated email from the ASF dual-hosted git repository.

jaydoane pushed a commit to branch 3.x
in repository https://gitbox.apache.org/repos/asf/couchdb.git

commit 5edab6273855e597d11a93645cf62a01d24fbe8d
Author: Jay Doane <[email protected]>
AuthorDate: Sun Mar 27 17:01:29 2022 -0700

    Implement configurable compaction log levels
    
    Create new config options in `couchdb` and `smoosh` sections to enable
    finer control of compaction logging levels.
---
 rel/overlay/etc/default.ini              |  6 ++++++
 src/couch/src/couch_bt_engine.erl        |  7 ++++++-
 src/couch/src/couch_db_updater.erl       |  7 ++++++-
 src/smoosh/src/smoosh_channel.erl        | 30 +++++++++++++++++++++---------
 src/smoosh/src/smoosh_priority_queue.erl |  6 ++++--
 src/smoosh/src/smoosh_server.erl         | 12 ++++++++----
 src/smoosh/src/smoosh_utils.erl          |  7 ++++++-
 7 files changed, 57 insertions(+), 18 deletions(-)

diff --git a/rel/overlay/etc/default.ini b/rel/overlay/etc/default.ini
index 5def66c..7535501 100644
--- a/rel/overlay/etc/default.ini
+++ b/rel/overlay/etc/default.ini
@@ -84,6 +84,9 @@ view_index_dir = {{view_index_dir}}
 ; to request attachment data before returning a response to the client.
 ;attachment_writer_timeout = 300000
 
+; Sets the log level for informational compaction related entries.
+;compaction_log_level = info
+
 [purge]
 ; Allowed maximum number of documents in one purge request
 ;max_document_id_number = 100
@@ -647,6 +650,9 @@ partitioned||* = true
 ; Directory to store the state of smoosh
 state_dir = {{state_dir}}
 
+; Sets the log level for informational compaction related entries.
+;compaction_log_level = notice
+
 [ioq]
 ; The maximum number of concurrent in-flight IO requests that
 ;concurrency = 10
diff --git a/src/couch/src/couch_bt_engine.erl 
b/src/couch/src/couch_bt_engine.erl
index 42dbed2..ca0828b 100644
--- a/src/couch/src/couch_bt_engine.erl
+++ b/src/couch/src/couch_bt_engine.erl
@@ -644,7 +644,12 @@ finish_compaction(OldState, DbName, Options, 
CompactFilePath) ->
         true ->
             finish_compaction_int(OldState, NewState1);
         false ->
-            couch_log:info(
+            Level = list_to_existing_atom(
+                config:get(
+                    "couchdb", "compaction_log_level", "info"
+                )
+            ),
+            couch_log:Level(
                 "Compaction file still behind main file "
                 "(update seq=~p. compact update seq=~p). Retrying.",
                 [OldSeq, NewSeq]
diff --git a/src/couch/src/couch_db_updater.erl 
b/src/couch/src/couch_db_updater.erl
index 710b705..17a1e91 100644
--- a/src/couch/src/couch_db_updater.erl
+++ b/src/couch/src/couch_db_updater.erl
@@ -139,7 +139,12 @@ handle_cast(start_compact, Db) ->
             % type to compact to with a new copy compactor.
             UpdateSeq = couch_db_engine:get_update_seq(Db),
             Args = [Db#db.name, UpdateSeq],
-            couch_log:info("Starting compaction for db \"~s\" at ~p", Args),
+            Level = list_to_existing_atom(
+                config:get(
+                    "couchdb", "compaction_log_level", "info"
+                )
+            ),
+            couch_log:Level("Starting compaction for db \"~s\" at ~p", Args),
             {ok, Db2} = couch_db_engine:start_compaction(Db),
             ok = couch_server:db_updated(Db2),
             {noreply, Db2, idle_limit()};
diff --git a/src/smoosh/src/smoosh_channel.erl 
b/src/smoosh/src/smoosh_channel.erl
index 2f4c7bf..da8bacf 100644
--- a/src/smoosh/src/smoosh_channel.erl
+++ b/src/smoosh/src/smoosh_channel.erl
@@ -148,7 +148,8 @@ handle_cast({enqueue, _Object, 0}, #state{} = State) ->
 handle_cast({enqueue, Object, Priority}, #state{activated = true} = State) ->
     {noreply, maybe_start_compaction(add_to_queue(Object, Priority, State))};
 handle_cast({enqueue, Object, Priority}, #state{activated = false, requests = 
Requests} = State0) ->
-    couch_log:notice(
+    Level = smoosh_utils:log_level("compaction_log_level", "notice"),
+    couch_log:Level(
         "~p Channel is not activated yet. Adding ~p to requests with priority 
~p.", [
             ?MODULE,
             Object,
@@ -197,7 +198,8 @@ handle_info({'DOWN', Ref, _, Job, Reason}, State) ->
 handle_info({Ref, {ok, Pid}}, State) when is_reference(Ref) ->
     case lists:keytake(Ref, 1, State#state.starting) of
         {value, {_, Key}, Starting1} ->
-            couch_log:notice(
+            Level = smoosh_utils:log_level("compaction_log_level", "notice"),
+            couch_log:Level(
                 "~s: Started compaction for ~s",
                 [State#state.name, smoosh_utils:stringify(Key)]
             ),
@@ -252,7 +254,8 @@ handle_info(start_recovery, #state{name = Name, waiting = 
Waiting0} = State0) ->
         RecActive
     ),
     State1 = maybe_start_compaction(State0#state{paused = false, waiting = 
Waiting1}),
-    couch_log:notice(
+    Level = smoosh_utils:log_level("compaction_log_level", "notice"),
+    couch_log:Level(
         "~p Previously active compaction jobs (if any) have been successfully 
recovered and restarted.",
         [?MODULE]
     ),
@@ -289,7 +292,8 @@ do_recover(FilePath) ->
             <<Vsn, Binary/binary>> = Content,
             try parse_state(Vsn, ?VSN, Binary) of
                 Term ->
-                    couch_log:notice(
+                    Level = smoosh_utils:log_level("compaction_log_level", 
"notice"),
+                    couch_log:Level(
                         "~p Successfully restored state file ~s", [?MODULE, 
FilePath]
                     ),
                     {ok, Term}
@@ -302,7 +306,8 @@ do_recover(FilePath) ->
                     error
             end;
         {error, enoent} ->
-            couch_log:notice(
+            Level = smoosh_utils:log_level("compaction_log_level", "notice"),
+            couch_log:Level(
                 "~p (~p) State file ~s does not exist. Not restoring.", 
[?MODULE, enoent, FilePath]
             ),
             error;
@@ -353,7 +358,8 @@ add_to_queue(Key, Priority, State) ->
             State;
         false ->
             Capacity = list_to_integer(smoosh_utils:get(State#state.name, 
"capacity", "9999")),
-            couch_log:notice(
+            Level = smoosh_utils:log_level("compaction_log_level", "notice"),
+            couch_log:Level(
                 "~s: adding ~p to internal compactor queue with priority ~p",
                 [State#state.name, Key, Priority]
             ),
@@ -425,7 +431,11 @@ maybe_start_compaction(State) ->
                                 false ->
                                     State;
                                 State1 ->
-                                    couch_log:notice(
+                                    Level = smoosh_utils:log_level(
+                                        "compaction_log_level",
+                                        "notice"
+                                    ),
+                                    couch_log:Level(
                                         "~s: Starting compaction for ~s 
(priority ~p)",
                                         [State#state.name, 
smoosh_utils:stringify(Key), Priority]
                                     ),
@@ -498,7 +508,8 @@ start_compact(State, Db) ->
                     State#state{starting = [{Ref, Key} | 
State#state.starting]};
                 % Compaction is already running, so monitor existing 
compaction pid.
                 CPid ->
-                    couch_log:notice(
+                    Level = smoosh_utils:log_level("compaction_log_level", 
"notice"),
+                    couch_log:Level(
                         "Db ~s continuing compaction",
                         [smoosh_utils:stringify(Key)]
                     ),
@@ -520,7 +531,8 @@ maybe_remonitor_cpid(State, DbName, Reason) when 
is_binary(DbName) ->
             {ok, _} = timer:apply_after(5000, smoosh_server, enqueue, 
[DbName]),
             State;
         CPid ->
-            couch_log:notice(
+            Level = smoosh_utils:log_level("compaction_log_level", "notice"),
+            couch_log:Level(
                 "~s compaction already running. Re-monitor Pid ~p",
                 [smoosh_utils:stringify(DbName), CPid]
             ),
diff --git a/src/smoosh/src/smoosh_priority_queue.erl 
b/src/smoosh/src/smoosh_priority_queue.erl
index 83c9366..000297a 100644
--- a/src/smoosh/src/smoosh_priority_queue.erl
+++ b/src/smoosh/src/smoosh_priority_queue.erl
@@ -144,7 +144,8 @@ do_recover(FilePath) ->
             <<Vsn, Binary/binary>> = Content,
             try parse_queue(Vsn, ?VSN, Binary) of
                 Bin ->
-                    couch_log:notice(
+                    Level = smoosh_utils:log_level("compaction_log_level", 
"notice"),
+                    couch_log:Level(
                         "~p Successfully restored state file ~s", [?MODULE, 
FilePath]
                     ),
                     {ok, Bin}
@@ -157,7 +158,8 @@ do_recover(FilePath) ->
                     error
             end;
         {error, enoent} ->
-            couch_log:notice(
+            Level = smoosh_utils:log_level("compaction_log_level", "notice"),
+            couch_log:Level(
                 "~p (~p) Queue file ~s does not exist. Not restoring.", 
[?MODULE, enoent, FilePath]
             ),
             error;
diff --git a/src/smoosh/src/smoosh_server.erl b/src/smoosh/src/smoosh_server.erl
index cfde748..f0260e9 100644
--- a/src/smoosh/src/smoosh_server.erl
+++ b/src/smoosh/src/smoosh_server.erl
@@ -173,7 +173,8 @@ handle_call({enqueue, Object}, _From, State) ->
 handle_call(suspend, _From, State) ->
     ets:foldl(
         fun(#channel{name = Name, pid = P}, _) ->
-            couch_log:notice("Suspending ~p", [Name]),
+            Level = smoosh_utils:log_level("compaction_log_level", "notice"),
+            couch_log:Level("Suspending ~p", [Name]),
             smoosh_channel:suspend(P)
         end,
         0,
@@ -183,7 +184,8 @@ handle_call(suspend, _From, State) ->
 handle_call(resume, _From, State) ->
     ets:foldl(
         fun(#channel{name = Name, pid = P}, _) ->
-            couch_log:notice("Resuming ~p", [Name]),
+            Level = smoosh_utils:log_level("compaction_log_level", "notice"),
+            couch_log:Level("Resuming ~p", [Name]),
             smoosh_channel:resume(P)
         end,
         0,
@@ -222,11 +224,13 @@ handle_cast({enqueue, Object}, State) ->
     end.
 
 handle_info({'EXIT', Pid, Reason}, #state{event_listener = Pid} = State) ->
-    couch_log:notice("update notifier died ~p", [Reason]),
+    Level = smoosh_utils:log_level("compaction_log_level", "notice"),
+    couch_log:Level("update notifier died ~p", [Reason]),
     {ok, Pid1} = start_event_listener(),
     {noreply, State#state{event_listener = Pid1}};
 handle_info({'EXIT', Pid, Reason}, State) ->
-    couch_log:notice("~p ~p died ~p", [?MODULE, Pid, Reason]),
+    Level = smoosh_utils:log_level("compaction_log_level", "notice"),
+    couch_log:Level("~p ~p died ~p", [?MODULE, Pid, Reason]),
     case ets:match_object(State#state.tab, #channel{pid = Pid, _ = '_'}) of
         [#channel{name = Name}] ->
             ets:delete(State#state.tab, Name);
diff --git a/src/smoosh/src/smoosh_utils.erl b/src/smoosh/src/smoosh_utils.erl
index 625a9e4..72be585 100644
--- a/src/smoosh/src/smoosh_utils.erl
+++ b/src/smoosh/src/smoosh_utils.erl
@@ -15,6 +15,7 @@
 
 -export([get/2, get/3, group_pid/1, split/1, stringify/1, ignore_db/1]).
 -export([in_allowed_window/1, write_to_file/3]).
+-export([log_level/2]).
 
 group_pid({Shard, GroupId}) ->
     case couch_view_group:open_db_group(Shard, GroupId) of
@@ -87,7 +88,8 @@ throw_on_error(Args, {error, Reason}) ->
     throw({error, {Reason, Args}}).
 
 write_to_file(Content, FileName, VSN) ->
-    couch_log:notice("~p Writing state to state file ~s", [?MODULE, FileName]),
+    Level = log_level("compaction_log_level", "notice"),
+    couch_log:Level("~p Writing state ~s", [?MODULE, FileName]),
     OnDisk = <<VSN, (erlang:term_to_binary(Content, [compressed, 
{minor_version, 1}]))/binary>>,
     TmpFileName = FileName ++ ".tmp",
     try
@@ -116,3 +118,6 @@ parse_time(String, Default) ->
             couch_log:error("Malformed compaction schedule configuration: ~s", 
[String]),
             Default
     end.
+
+log_level(Key, Default) when is_list(Key), is_list(Default) ->
+    list_to_existing_atom(config:get("smoosh", Key, Default)).

Reply via email to