Przeglądaj źródła

Merge pull request #13080 from zmstone/0521-default-retry_interval-to-infinity

change `mqtt.retry_interval` default value to `infinity`
zmstone 1 rok temu
rodzic
commit
12fd1f6a48

+ 2 - 2
apps/emqx/src/emqx_schema.erl

@@ -3630,9 +3630,9 @@ mqtt_general() ->
             )},
         {"retry_interval",
             sc(
-                duration(),
+                hoconsc:union([infinity, duration()]),
                 #{
-                    default => <<"30s">>,
+                    default => infinity,
                     desc => ?DESC(mqtt_retry_interval)
                 }
             )},

+ 3 - 3
apps/emqx/src/emqx_session_mem.erl

@@ -602,9 +602,9 @@ handle_timeout(ClientInfo, expire_awaiting_rel, Session) ->
 %%--------------------------------------------------------------------
 
 -spec retry(clientinfo(), session()) ->
-    {ok, replies(), session()}.
-retry(ClientInfo, Session = #session{inflight = Inflight}) ->
-    case emqx_inflight:is_empty(Inflight) of
+    {ok, replies(), session()} | {ok, replies(), timeout(), session()}.
+retry(ClientInfo, Session = #session{inflight = Inflight, retry_interval = Interval}) ->
+    case emqx_inflight:is_empty(Inflight) orelse Interval =:= infinity of
         true ->
             {ok, [], Session};
         false ->

+ 1 - 1
apps/emqx/test/emqx_config_SUITE.erl

@@ -444,7 +444,7 @@ zone_global_defaults() ->
                 peer_cert_as_username => disabled,
                 response_information => [],
                 retain_available => true,
-                retry_interval => 30000,
+                retry_interval => infinity,
                 message_expiry_interval => infinity,
                 server_keepalive => disabled,
                 session_expiry_interval => 7200000,

+ 2 - 2
apps/emqx/test/emqx_session_mem_SUITE.erl

@@ -78,7 +78,7 @@ t_session_init(_) ->
     ?assertEqual(0, emqx_session_mem:info(inflight_cnt, Session)),
     ?assertEqual(64, emqx_session_mem:info(inflight_max, Session)),
     ?assertEqual(1, emqx_session_mem:info(next_pkt_id, Session)),
-    ?assertEqual(30000, emqx_session_mem:info(retry_interval, Session)),
+    ?assertEqual(infinity, emqx_session_mem:info(retry_interval, Session)),
     ?assertEqual(0, emqx_mqueue:len(emqx_session_mem:info(mqueue, Session))),
     ?assertEqual(0, emqx_session_mem:info(awaiting_rel_cnt, Session)),
     ?assertEqual(100, emqx_session_mem:info(awaiting_rel_max, Session)),
@@ -95,7 +95,7 @@ t_session_info(_) ->
         #{
             subscriptions := #{},
             upgrade_qos := false,
-            retry_interval := 30000,
+            retry_interval := infinity,
             await_rel_timeout := 300000
         },
         maps:from_list(emqx_session_mem:info(Keys, session()))

+ 8 - 0
changes/ce/breaking-13080.en.md

@@ -0,0 +1,8 @@
+Change `mqtt.retry_interval` config default to `infinity`.
+
+Previously, the default value for `retry_interval` was 30 seconds.
+
+The new default has been changed to 'infinity'. With this update, EMQX will not automatically retry message deliveries by default.
+
+Aligning with MQTT specification standards, in-session message delivery retries are not typically compliant.
+We recognize that some users depend on this feature, so the option to configure retries remains available for backward compatibility.