You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@impala.apache.org by st...@apache.org on 2025/05/19 03:17:19 UTC
(impala) 01/02: IMPALA-13850 (part 3): Fix TSAN issue at AcceptRequest
This is an automated email from the ASF dual-hosted git repository.
stigahuang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/impala.git
commit 16eaedf4e5e74d961d2ffe1a4b1818f8087e6e97
Author: Riza Suminto <ri...@cloudera.com>
AuthorDate: Fri May 16 08:24:44 2025 -0700
IMPALA-13850 (part 3): Fix TSAN issue at AcceptRequest
Nightly TSAN build reveal issue in part 2 patch. This patch attempt to
fix is by changing the boolean variable into AtomicBoolean.
Testing:
Pass TSAN core tests.
Change-Id: I8dcd3c8e105d8dc6ac04096060dbf6e185651aa5
Reviewed-on: http://gerrit.cloudera.org:8080/22907
Reviewed-by: Joe McDonnell <jo...@cloudera.com>
Tested-by: Impala Public Jenkins <im...@cloudera.com>
---
be/src/catalog/catalog-server.cc | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/be/src/catalog/catalog-server.cc b/be/src/catalog/catalog-server.cc
index 875853e0b..afeaf9011 100644
--- a/be/src/catalog/catalog-server.cc
+++ b/be/src/catalog/catalog-server.cc
@@ -550,7 +550,7 @@ class CatalogServiceThriftIf : public CatalogServiceIf {
private:
CatalogServer* catalog_server_;
string server_address_;
- bool has_initiated_first_reset_ = false;
+ AtomicBool has_initiated_first_reset_{false};
// Check if catalog protocols are compatible between client and catalog server.
// Return Status::OK() if the protocols are compatible and catalog server is active.
@@ -563,12 +563,14 @@ class CatalogServiceThriftIf : public CatalogServiceIf {
status = Status(Substitute("Request for Catalog service is rejected since "
"catalogd $0 is in standby mode", server_address_));
}
- while (status.ok() && !has_initiated_first_reset_) {
+ if (!status.ok()) return status;
+
+ while (!has_initiated_first_reset_.Load()) {
long current_catalog_version = 0;
status = catalog_server_->catalog()->GetCatalogVersion(¤t_catalog_version);
if (!status.ok()) break;
if (current_catalog_version >= MIN_CATALOG_VERSION_TO_ACCEPT_REQUEST) {
- has_initiated_first_reset_ = true;
+ has_initiated_first_reset_.Store(true);
} else {
VLOG(1) << "Catalog is not initialized yet. Waiting for catalog version ("
<< current_catalog_version << ") to be >= "