|
|
@@ -97,6 +97,12 @@ get_all_iterator_ids(Node) ->
|
|
|
emqx_ds_storage_layer:foldl_iterator_prefix(?DS_SHARD, <<>>, Fn, [])
|
|
|
end).
|
|
|
|
|
|
+get_session_iterators(Node, ClientId) ->
|
|
|
+ erpc:call(Node, fun() ->
|
|
|
+ [ConnPid] = emqx_cm:lookup_channels(ClientId),
|
|
|
+ emqx_connection:info({channel, {session, iterators}}, sys:get_state(ConnPid))
|
|
|
+ end).
|
|
|
+
|
|
|
wait_nodeup(Node) ->
|
|
|
?retry(
|
|
|
_Sleep0 = 500,
|
|
|
@@ -191,14 +197,18 @@ t_session_subscription_idempotency(Config) ->
|
|
|
{ok, _} = emqtt:connect(Client1),
|
|
|
ct:pal("subscribing 2"),
|
|
|
{ok, _, [2]} = emqtt:subscribe(Client1, SubTopicFilter, qos2),
|
|
|
+ SessionIterators = get_session_iterators(Node1, ClientId),
|
|
|
|
|
|
ok = emqtt:stop(Client1),
|
|
|
|
|
|
- ok
|
|
|
+ #{session_iterators => SessionIterators}
|
|
|
end,
|
|
|
- fun(Trace) ->
|
|
|
+ fun(Res, Trace) ->
|
|
|
ct:pal("trace:\n ~p", [Trace]),
|
|
|
+ #{session_iterators := SessionIterators} = Res,
|
|
|
%% Exactly one iterator should have been opened.
|
|
|
+ ?assertEqual(1, map_size(SessionIterators), #{iterators => SessionIterators}),
|
|
|
+ ?assertMatch(#{SubTopicFilter := _}, SessionIterators),
|
|
|
?assertMatch({ok, [_]}, get_all_iterator_ids(Node1)),
|
|
|
?assertMatch(
|
|
|
{_IsNew = false, ClientId},
|