Przeglądaj źródła

chore: remove peercert from the state of connection processes

Shawn 2 lat temu
rodzic
commit
07ac2cd57a

+ 3 - 1
apps/emqx/src/emqx_channel.erl

@@ -276,7 +276,9 @@ init(
     ),
     {NClientInfo, NConnInfo} = take_ws_cookie(ClientInfo, ConnInfo),
     #channel{
-        conninfo = NConnInfo,
+        %% We remove the peercert because it duplicates to what's stored in the socket,
+        %% Saving a copy here causes unnecessary wast of memory (about 1KB per connection).
+        conninfo = maps:put(peercert, undefined, NConnInfo),
         clientinfo = NClientInfo,
         topic_aliases = #{
             inbound => #{},

+ 6 - 0
apps/emqx/test/emqx_client_SUITE.erl

@@ -390,4 +390,10 @@ tls_certcn_as_clientid(TLSVsn, RequiredTLSVsn) ->
     {ok, _} = emqtt:connect(Client),
     #{clientinfo := #{clientid := CN}} = emqx_cm:get_chan_info(CN),
     confirm_tls_version(Client, RequiredTLSVsn),
+    %% verify that the peercert won't be stored in the conninfo
+    [ChannPid] = emqx_cm:lookup_channels(CN),
+    SysState = sys:get_state(ChannPid),
+    ChannelRecord = lists:keyfind(channel, 1, tuple_to_list(SysState)),
+    ConnInfo = lists:nth(2, tuple_to_list(ChannelRecord)),
+    ?assertMatch(#{peercert := undefined}, ConnInfo),
     emqtt:disconnect(Client).