File 2795-logger-Make-handler-level-use-persistent_term.patch of Package erlang

From 7292eae13a0a78dd44fb3bda78cf202df373a4ad Mon Sep 17 00:00:00 2001
From: Lukas Larsson <lukas@erlang.org>
Date: Fri, 6 Sep 2019 12:27:47 +0200
Subject: [PATCH 5/7] logger: Make handler level use persistent_term

---
 lib/kernel/src/logger_config.erl | 41 ++++++++++++++++++++--------------------
 lib/kernel/test/logger_SUITE.erl |  4 ++--
 2 files changed, 22 insertions(+), 23 deletions(-)

diff --git a/lib/kernel/src/logger_config.erl b/lib/kernel/src/logger_config.erl
index 31b5480cde..5c393d0ed3 100644
--- a/lib/kernel/src/logger_config.erl
+++ b/lib/kernel/src/logger_config.erl
@@ -89,51 +89,50 @@ get_primary_level() ->
 
 get(Tid,What) ->
     case ets:lookup(Tid,table_key(What)) of
-        [{_,_,Config}] ->
-            {ok,Config};
-        [{_,Config}] when What=:=proxy ->
+        [{_,Config}] ->
             {ok,Config};
         [] ->
             {error,{not_found,What}}
     end.
 
 get(Tid,What,Level) ->
-    MS = [{{table_key(What),'$1','$2'},
-           [{'>=','$1',level_to_int(Level)}],
-           ['$2']}],
-    case ets:select(Tid,MS) of
-        [] -> error;
-        [Data] -> {ok,Data}
+    TableKey = table_key(What),
+    case persistent_term:get({?MODULE,TableKey},undefined) of
+        undefined ->
+            %% The handler is not installed at the moment
+            {error,{not_found,What}};
+        ConfLevel ->
+            case less_or_equal_level(Level,ConfLevel) of
+                true ->
+                    get(Tid, What);
+                false ->
+                    error
+            end
     end.
 
 create(Tid,proxy,Config) ->
     ets:insert(Tid,{table_key(proxy),Config});
 create(Tid,What,Config) ->
     LevelInt = level_to_int(maps:get(level,Config)),
-    case What of
-        primary ->
-            ok = persistent_term:put({?MODULE,?PRIMARY_KEY}, LevelInt);
-        _ ->
-            ok
-    end,
-    ets:insert(Tid,{table_key(What),LevelInt,Config}).
+    ok = persistent_term:put({?MODULE,table_key(What)}, LevelInt),
+    ets:insert(Tid,{table_key(What),Config}).
 
 set(Tid,proxy,Config) ->
     ets:insert(Tid,{table_key(proxy),Config}),
     ok;
 set(Tid,What,Config) ->
     LevelInt = level_to_int(maps:get(level,Config)),
+    ok = persistent_term:put({?MODULE,table_key(What)}, LevelInt),
     case What of
         primary ->
-            ok = persistent_term:put({?MODULE,?PRIMARY_KEY}, LevelInt),
-            [persistent_term:put(Key, ?PRIMARY_TO_CACHE(LevelInt))
-             || {{?MODULE, Module} = Key,L} <- persistent_term:get(),
-                Module =/= ?PRIMARY_KEY, L > ?LOG_ALL],
+            [persistent_term:put(Key,?PRIMARY_TO_CACHE(LevelInt))
+             || {{?MODULE,Module} = Key,Level} <- persistent_term:get(),
+                ?IS_MODULE(Module), ?IS_CACHED(Level)],
             ok;
         _ ->
             ok
     end,
-    ets:update_element(Tid,table_key(What),[{2,LevelInt},{3,Config}]),
+    ets:insert(Tid,{table_key(What),Config}),
     ok.
 
 set_module_level(_Tid,Modules,Level) ->
diff --git a/lib/kernel/test/logger_SUITE.erl b/lib/kernel/test/logger_SUITE.erl
index c6b563e4a9..2e101a388d 100644
--- a/lib/kernel/test/logger_SUITE.erl
+++ b/lib/kernel/test/logger_SUITE.erl
@@ -276,7 +276,7 @@ change_config(_Config) ->
         logger:get_primary_config(),
     3 = maps:size(PC1),
     %% Check that internal 'handlers' field has not been changed
-    MS = [{{{?HANDLER_KEY,'$1'},'_','_'},[],['$1']}],
+    MS = [{{{?HANDLER_KEY,'$1'},'_'},[],['$1']}],
     HIds1 = lists:sort(ets:select(?LOGGER_TABLE,MS)), % dirty, internal data
     HIds2 = lists:sort(logger:get_handler_ids()),
     HIds1 = HIds2,
@@ -1147,7 +1147,7 @@ kernel_config(Config) ->
 
     ok.
 
-pretty_print(Config) ->
+pretty_print(_Config) ->
     ok = logger:add_handler(?FUNCTION_NAME,logger_std_h,#{}),
     ok = logger:set_module_level([module1,module2],debug),
 
-- 
2.16.4

openSUSE Build Service is sponsored by