github-actions[bot] commented on code in PR #68328:
URL: https://github.com/apache/doris/pull/68328#discussion_r4119554066


##########
be/src/service/internal_service.cpp:
##########
@@ -536,7 +565,7 @@ void 
PInternalService::tablet_writer_cancel(google::protobuf::RpcController* con
                                             const PTabletWriterCancelRequest* 
request,
                                             PTabletWriterCancelResult* 
response,
                                             google::protobuf::Closure* done) {
-    bool ret = _heavy_work_pool.try_offer([this, request, done]() {
+    bool ret = _load_light_work_pool.try_offer([this, request, done]() {

Review Comment:
   [P1] A cancel can now overtake an earlier `tablet_writer_open` that is 
queued behind saturated heavy workers. `LoadChannelMgr::cancel` records the 
load ID as canceled, but `LoadChannelMgr::open` does not check that record: 
when the queued open eventually runs, it creates a new live channel, and later 
add-blocks find that channel instead of the cancellation record. The former 
shared FIFO queue kept these queued RPCs in order. Please make an earlier 
cancel prevent a later open from recreating the load (or preserve per-load 
ordering across the pools).



##########
be/src/service/internal_service.cpp:
##########
@@ -549,7 +578,7 @@ void 
PInternalService::tablet_writer_cancel(google::protobuf::RpcController* con
         }
     });
     if (!ret) {
-        offer_failed(response, done, _heavy_work_pool);
+        offer_failed(response, done, _load_light_work_pool);

Review Comment:
   [P2] This rejection can lose a load cancellation. `TabletsChannel::close` 
holds its lock while waiting for flush and commit, and 
`BaseTabletsChannel::cancel` waits for that lock; 32 such waits occupy every 
default worker in this new pool. On an eight-core BE, once its 1,024-entry 
queue fills, this `offer_failed` path only logs because 
`PTabletWriterCancelResult` has no status field, and the sender's dummy 
callback does not retry. The rejected load channel can remain active until 
normal completion or background timeout cleanup (whose default timeout floor is 
20 minutes since its last update). The former heavy pool has 128 workers and a 
10,240-entry queue on that BE, so this failure occurs at a substantially 
smaller cancellation burst. Please ensure rejected cancels are recorded or 
retried.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to