You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by be...@apache.org on 2014/02/13 17:43:40 UTC

[38/50] lager commit: updated refs/heads/import-master to da4419e

Don't use the proplists module when decoding error_logger messages

Proplist module is a lot slower than lists:keyfind, which is a BIF,
because proplists has to work with 'bare' atoms as well as 2-tuples.

This should marginally improve the throughput when printing many
error_logger messages.


Project: http://git-wip-us.apache.org/repos/asf/couchdb-lager/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb-lager/commit/32ea9286
Tree: http://git-wip-us.apache.org/repos/asf/couchdb-lager/tree/32ea9286
Diff: http://git-wip-us.apache.org/repos/asf/couchdb-lager/diff/32ea9286

Branch: refs/heads/import-master
Commit: 32ea9286944210fd78d8764be12243eb0ce96c0c
Parents: 73a1207
Author: Andrew Thompson <an...@hijacked.us>
Authored: Mon Feb 3 13:32:31 2014 -0500
Committer: Andrew Thompson <an...@hijacked.us>
Committed: Mon Feb 3 13:32:31 2014 -0500

----------------------------------------------------------------------
 src/error_logger_lager_h.erl | 30 ++++++++++++++++++++----------
 1 file changed, 20 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/couchdb-lager/blob/32ea9286/src/error_logger_lager_h.erl
----------------------------------------------------------------------
diff --git a/src/error_logger_lager_h.erl b/src/error_logger_lager_h.erl
index 1c7e092..3874f31 100644
--- a/src/error_logger_lager_h.erl
+++ b/src/error_logger_lager_h.erl
@@ -235,8 +235,8 @@ log_event(Event, State) ->
                     ?LOGFMT(info, P, "Application ~w started on node ~w",
                         [App, Node]);
                 [{started, Started}, {supervisor, Name}] ->
-                    MFA = format_mfa(proplists:get_value(mfargs, Started)),
-                    Pid = proplists:get_value(pid, Started),
+                    MFA = format_mfa(get_value(mfargs, Started)),
+                    Pid = get_value(pid, Started),
                     ?LOGFMT(debug, P, "Supervisor ~w started ~s at pid ~w",
                         [supervisor_name(Name), MFA, Pid]);
                 _ ->
@@ -248,13 +248,13 @@ log_event(Event, State) ->
     {ok, State}.
 
 format_crash_report(Report, Neighbours) ->
-    Name = case proplists:get_value(registered_name, Report, []) of
+    Name = case get_value(registered_name, Report, []) of
         [] ->
             %% process_info(Pid, registered_name) returns [] for unregistered processes
-            proplists:get_value(pid, Report);
+            get_value(pid, Report);
         Atom -> Atom
     end,
-    {Class, Reason, Trace} = proplists:get_value(error_info, Report),
+    {Class, Reason, Trace} = get_value(error_info, Report),
     ReasonStr = format_reason({Reason, Trace}),
     Type = case Class of
         exit -> "exited";
@@ -264,17 +264,17 @@ format_crash_report(Report, Neighbours) ->
         [Name, length(Neighbours), Type, ReasonStr]).
 
 format_offender(Off) ->
-    case proplists:get_value(mfargs, Off) of
+    case get_value(mfargs, Off) of
         undefined ->
             %% supervisor_bridge
             io_lib:format("at module ~w at ~w",
-                [proplists:get_value(mod, Off), proplists:get_value(pid, Off)]);
+                [get_value(mod, Off), get_value(pid, Off)]);
         MFArgs ->
             %% regular supervisor
             MFA = format_mfa(MFArgs),
-            Name = proplists:get_value(name, Off),
+            Name = get_value(name, Off),
             io_lib:format("~p started with ~s at ~w",
-                [Name, MFA, proplists:get_value(pid, Off)])
+                [Name, MFA, get_value(pid, Off)])
     end.
 
 format_reason({'function not exported', [{M, F, A},MFA|_]}) ->
@@ -361,7 +361,7 @@ format_mfa({M, F, A}) when is_list(A) ->
 format_mfa({M, F, A}) when is_integer(A) ->
     io_lib:format("~w:~w/~w", [M, F, A]);
 format_mfa({M, F, A, Props}) when is_list(Props) ->
-    case proplists:get_value(line, Props) of
+    case get_value(line, Props) of
         undefined ->
             format_mfa({M, F, A});
         Line ->
@@ -405,6 +405,16 @@ print_val(Val) ->
     {Str, _} = lager_trunc_io:print(Val, 500),
     Str.
 
+
+get_value(Key, Value) ->
+    get_value(Key, Value, undefined).
+
+get_value(Key, List, Default) ->
+    case lists:keyfind(Key, 1, List) of
+        false -> Default;
+        {Key, Value} -> Value
+    end.
+
 supervisor_name({local, Name}) -> Name;
 supervisor_name(Name) -> Name.
 -ifdef(TEST).