This is an automated email from the ASF dual-hosted git repository. kxiao pushed a commit to branch branch-2.0 in repository https://gitbox.apache.org/repos/asf/doris.git
commit 13aa031811d8163ac8a94e1523dc188d0ba85d62 Author: Pxl <[email protected]> AuthorDate: Wed Jul 19 00:47:19 2023 +0800 [Bug](storage) add lock on base tablet when create_tablet #21915 --- be/src/olap/tablet_manager.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/be/src/olap/tablet_manager.cpp b/be/src/olap/tablet_manager.cpp index f37e1e1408..4f1c7ecf5e 100644 --- a/be/src/olap/tablet_manager.cpp +++ b/be/src/olap/tablet_manager.cpp @@ -29,6 +29,7 @@ #include <algorithm> #include <list> +#include <mutex> #include <ostream> // IWYU pragma: no_include <opentelemetry/common/threadlocal.h> @@ -261,7 +262,12 @@ Status TabletManager::create_tablet(const TCreateTabletReq& request, std::vector // If the CreateTabletReq has base_tablet_id then it is a alter-tablet request if (request.__isset.base_tablet_id && request.base_tablet_id > 0) { is_schema_change = true; - base_tablet = _get_tablet_unlocked(request.base_tablet_id); + // if base_tablet_id's lock diffrent with new_tablet_id, we need lock it. + if ((_tablets_shards_mask & request.base_tablet_id) != (_tablets_shards_mask & tablet_id)) { + base_tablet = get_tablet(request.base_tablet_id); + } else { + base_tablet = _get_tablet_unlocked(request.base_tablet_id); + } if (base_tablet == nullptr) { DorisMetrics::instance()->create_tablet_requests_failed->increment(1); return Status::Error<TABLE_CREATE_META_ERROR>( --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
