fix: incorrect message order when batch is enabled
This commit is contained in:
parent
0ef0b68de4
commit
33c9c7d497
|
@ -303,11 +303,12 @@ flush(#{acc := []} = St) ->
|
|||
flush(
|
||||
#{
|
||||
id := Id,
|
||||
acc := Batch,
|
||||
acc := Batch0,
|
||||
batch_size := Size,
|
||||
queue := Q0
|
||||
} = St
|
||||
) ->
|
||||
Batch = lists:reverse(Batch0),
|
||||
QueryOpts = #{
|
||||
inflight_name => maps:get(name, St),
|
||||
inflight_window => maps:get(async_inflight_window, St)
|
||||
|
@ -393,12 +394,12 @@ handle_query_result(Id, ?RESOURCE_ERROR_M(Reason, _), BlockWorker) ->
|
|||
emqx_metrics_worker:inc(?RES_METRICS, Id, 'dropped'),
|
||||
emqx_metrics_worker:inc(?RES_METRICS, Id, 'dropped.other'),
|
||||
BlockWorker;
|
||||
handle_query_result(Id, {error, _}, BlockWorker) ->
|
||||
emqx_metrics_worker:inc(?RES_METRICS, Id, 'sent.failed'),
|
||||
BlockWorker;
|
||||
handle_query_result(Id, {error, {recoverable_error, _}}, _BlockWorker) ->
|
||||
emqx_metrics_worker:inc(?RES_METRICS, Id, 'sent', -1),
|
||||
true;
|
||||
handle_query_result(Id, {error, _}, BlockWorker) ->
|
||||
emqx_metrics_worker:inc(?RES_METRICS, Id, 'sent.failed'),
|
||||
BlockWorker;
|
||||
handle_query_result(_Id, {async_return, inflight_full}, _BlockWorker) ->
|
||||
true;
|
||||
handle_query_result(Id, {async_return, {error, _}}, BlockWorker) ->
|
||||
|
@ -449,7 +450,15 @@ call_query(QM0, Id, Query, QueryOpts) ->
|
|||
apply_query_fun(sync, Mod, Id, ?QUERY(_, Request) = _Query, ResSt, _QueryOpts) ->
|
||||
?tp(call_query, #{id => Id, mod => Mod, query => _Query, res_st => ResSt}),
|
||||
ok = emqx_metrics_worker:inc(?RES_METRICS, Id, 'sent'),
|
||||
?APPLY_RESOURCE(Mod:on_query(Id, Request, ResSt), Request);
|
||||
?APPLY_RESOURCE(
|
||||
begin
|
||||
ok = emqx_metrics_worker:inc(?RES_METRICS, Id, 'sent.inflight'),
|
||||
Result = Mod:on_query(Id, Request, ResSt),
|
||||
ok = emqx_metrics_worker:inc(?RES_METRICS, Id, 'sent.inflight', -1),
|
||||
Result
|
||||
end,
|
||||
Request
|
||||
);
|
||||
apply_query_fun(async, Mod, Id, ?QUERY(_, Request) = Query, ResSt, QueryOpts) ->
|
||||
?tp(call_query_async, #{id => Id, mod => Mod, query => Query, res_st => ResSt}),
|
||||
Name = maps:get(inflight_name, QueryOpts, undefined),
|
||||
|
@ -475,7 +484,15 @@ apply_query_fun(sync, Mod, Id, [?QUERY(_, _) | _] = Batch, ResSt, _QueryOpts) ->
|
|||
?tp(call_batch_query, #{id => Id, mod => Mod, batch => Batch, res_st => ResSt}),
|
||||
Requests = [Request || ?QUERY(_From, Request) <- Batch],
|
||||
ok = emqx_metrics_worker:inc(?RES_METRICS, Id, 'sent', length(Batch)),
|
||||
?APPLY_RESOURCE(Mod:on_batch_query(Id, Requests, ResSt), Batch);
|
||||
?APPLY_RESOURCE(
|
||||
begin
|
||||
ok = emqx_metrics_worker:inc(?RES_METRICS, Id, 'sent.inflight'),
|
||||
Result = Mod:on_batch_query(Id, Requests, ResSt),
|
||||
ok = emqx_metrics_worker:inc(?RES_METRICS, Id, 'sent.inflight', -1),
|
||||
Result
|
||||
end,
|
||||
Batch
|
||||
);
|
||||
apply_query_fun(async, Mod, Id, [?QUERY(_, _) | _] = Batch, ResSt, QueryOpts) ->
|
||||
?tp(call_batch_query_async, #{id => Id, mod => Mod, batch => Batch, res_st => ResSt}),
|
||||
Name = maps:get(inflight_name, QueryOpts, undefined),
|
||||
|
|
Loading…
Reference in New Issue