feat(sessds): handle recoverable errors in stream scheduler
This commit is contained in:
parent
fa66a640c3
commit
35c43eb8a0
|
@ -571,7 +571,7 @@ replay(ClientInfo, [], Session0 = #{s := S0}) ->
|
||||||
Session = replay_streams(Session0#{replay => Streams}, ClientInfo),
|
Session = replay_streams(Session0#{replay => Streams}, ClientInfo),
|
||||||
{ok, [], Session}.
|
{ok, [], Session}.
|
||||||
|
|
||||||
replay_streams(Session0 = #{replay := [{_StreamKey, Srs0} | Rest]}, ClientInfo) ->
|
replay_streams(Session0 = #{replay := [{StreamKey, Srs0} | Rest]}, ClientInfo) ->
|
||||||
case replay_batch(Srs0, Session0, ClientInfo) of
|
case replay_batch(Srs0, Session0, ClientInfo) of
|
||||||
Session = #{} ->
|
Session = #{} ->
|
||||||
replay_streams(Session#{replay := Rest}, ClientInfo);
|
replay_streams(Session#{replay := Rest}, ClientInfo);
|
||||||
|
@ -579,7 +579,7 @@ replay_streams(Session0 = #{replay := [{_StreamKey, Srs0} | Rest]}, ClientInfo)
|
||||||
RetryTimeout = ?TIMEOUT_RETRY_REPLAY,
|
RetryTimeout = ?TIMEOUT_RETRY_REPLAY,
|
||||||
?SLOG(warning, #{
|
?SLOG(warning, #{
|
||||||
msg => "failed_to_fetch_replay_batch",
|
msg => "failed_to_fetch_replay_batch",
|
||||||
stream => Srs0,
|
stream => StreamKey,
|
||||||
reason => Reason,
|
reason => Reason,
|
||||||
class => recoverable,
|
class => recoverable,
|
||||||
retry_in_ms => RetryTimeout
|
retry_in_ms => RetryTimeout
|
||||||
|
@ -867,7 +867,7 @@ new_batch({StreamKey, Srs0}, BatchSize, Session0 = #{s := S0}, ClientInfo) ->
|
||||||
%% TODO: Handle unrecoverable error.
|
%% TODO: Handle unrecoverable error.
|
||||||
?SLOG(info, #{
|
?SLOG(info, #{
|
||||||
msg => "failed_to_fetch_batch",
|
msg => "failed_to_fetch_batch",
|
||||||
stream => Srs1,
|
stream => StreamKey,
|
||||||
reason => Reason,
|
reason => Reason,
|
||||||
class => Class
|
class => Class
|
||||||
}),
|
}),
|
||||||
|
|
|
@ -208,9 +208,8 @@ ensure_iterator(TopicFilter, StartTime, SubId, {{RankX, RankY}, Stream}, S) ->
|
||||||
?SLOG(debug, #{
|
?SLOG(debug, #{
|
||||||
msg => new_stream, key => Key, stream => Stream
|
msg => new_stream, key => Key, stream => Stream
|
||||||
}),
|
}),
|
||||||
{ok, Iterator} = emqx_ds:make_iterator(
|
case emqx_ds:make_iterator(?PERSISTENT_MESSAGE_DB, Stream, TopicFilter, StartTime) of
|
||||||
?PERSISTENT_MESSAGE_DB, Stream, TopicFilter, StartTime
|
{ok, Iterator} ->
|
||||||
),
|
|
||||||
NewStreamState = #srs{
|
NewStreamState = #srs{
|
||||||
rank_x = RankX,
|
rank_x = RankX,
|
||||||
rank_y = RankY,
|
rank_y = RankY,
|
||||||
|
@ -218,6 +217,15 @@ ensure_iterator(TopicFilter, StartTime, SubId, {{RankX, RankY}, Stream}, S) ->
|
||||||
it_end = Iterator
|
it_end = Iterator
|
||||||
},
|
},
|
||||||
emqx_persistent_session_ds_state:put_stream(Key, NewStreamState, S);
|
emqx_persistent_session_ds_state:put_stream(Key, NewStreamState, S);
|
||||||
|
{error, recoverable, Reason} ->
|
||||||
|
?SLOG(warning, #{
|
||||||
|
msg => "failed_to_initialize_stream_iterator",
|
||||||
|
stream => Stream,
|
||||||
|
class => recoverable,
|
||||||
|
reason => Reason
|
||||||
|
}),
|
||||||
|
S
|
||||||
|
end;
|
||||||
#srs{} ->
|
#srs{} ->
|
||||||
S
|
S
|
||||||
end.
|
end.
|
||||||
|
|
Loading…
Reference in New Issue