From 57173123c42ee5e3efec94b9d1f450bb7e6a9fb0 Mon Sep 17 00:00:00 2001 From: obdev Date: Thu, 18 Apr 2024 04:25:42 +0000 Subject: [PATCH] [bugfix] fix request leak when receive request failed --- src/observer/omt/ob_tenant.cpp | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/observer/omt/ob_tenant.cpp b/src/observer/omt/ob_tenant.cpp index 8707438ce9..d5dda7fa8c 100644 --- a/src/observer/omt/ob_tenant.cpp +++ b/src/observer/omt/ob_tenant.cpp @@ -1558,12 +1558,16 @@ int ObTenant::recv_large_request(rpc::ObRequest &req) { int ret = OB_SUCCESS; req.set_enqueue_timestamp(ObTimeUtility::current_time()); - if (0 != req.get_group_id()) { + if (has_stopped()) { + ret = OB_TENANT_NOT_IN_SERVER; + LOG_WARN("receive large request but tenant has already stopped", K(ret), "tenant_id", id_); + } else if (0 != req.get_group_id()) { if (OB_FAIL(recv_group_request(req, req.get_group_id()))) { - LOG_WARN("tenant receive large retry request fail", K(ret)); + LOG_WARN("tenant receive large retry request fail", K(ret), + "tenant_id", id_, "group_id", req.get_group_id()); } } else if (OB_FAIL(recv_group_request(req, OBCG_LQ))){ - LOG_ERROR("recv large request failed", K(id_)); + LOG_ERROR("recv large request failed", "tenant_id", id_); } else { ObTenantStatEstGuard guard(id_); EVENT_INC(REQUEST_ENQUEUE_COUNT); @@ -1611,11 +1615,13 @@ void ObTenant::handle_retry_req(bool need_clear) if (nullptr != req) { if (req->large_retry_flag()) { if (OB_FAIL(recv_large_request(*req))) { - LOG_ERROR("tenant patrol push req into large_query queue fail", "tenant_id", id_, K(ret)); + on_translate_fail(req, ret); + LOG_WARN("tenant patrol push req into large_query queue fail", "tenant_id", id_, K(ret)); } } else { if (OB_FAIL(recv_request(*req))) { - LOG_ERROR("tenant patrol push req into common queue fail", "tenant_id", id_, K(ret)); + on_translate_fail(req, ret); + LOG_WARN("tenant patrol push req into common queue fail", "tenant_id", id_, K(ret)); } } } else {