From b4bfa011ceaef428782dcb65ae89190c40b78c2f Mon Sep 17 00:00:00 2001 From: obdev Date: Fri, 15 Jul 2022 11:14:18 +0800 Subject: [PATCH] [CP] [CP] fix bug that a tranction span tenant --- src/rootserver/ob_global_index_builder.cpp | 6 ++++++ src/rootserver/ob_index_builder.cpp | 4 ++++ src/rootserver/ob_snapshot_info_manager.cpp | 6 ++---- src/rootserver/ob_snapshot_info_manager.h | 6 ++---- 4 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/rootserver/ob_global_index_builder.cpp b/src/rootserver/ob_global_index_builder.cpp index 0117d9d680..d26276756a 100644 --- a/src/rootserver/ob_global_index_builder.cpp +++ b/src/rootserver/ob_global_index_builder.cpp @@ -1216,6 +1216,12 @@ int ObGlobalIndexBuilder::hold_snapshot(const ObGlobalIndexTask* task, const int LOG_WARN("fail to start trans", K(ret)); } else if (OB_FAIL(ddl_service_->get_snapshot_mgr().acquire_snapshot(trans, info1))) { LOG_WARN("fail to acquire snapshot", K(ret)); + } else if (!info2.is_valid()) { + ret = OB_INVALID_ARGUMENT; + LOG_WARN("invalid argument", K(ret), K(info2)); + } else if (OB_FAIL(ddl_service_->get_snapshot_mgr().set_index_building_snapshot( + proxy, info2.table_id_, info2.snapshot_ts_))) { + LOG_WARN("fail to set index building snapshot", KR(ret), K(info2)); } else if (OB_FAIL(ddl_service_->get_snapshot_mgr().acquire_snapshot_for_building_index( trans, info2, info2.table_id_))) { LOG_WARN("fail to acquire snapshot", K(ret)); diff --git a/src/rootserver/ob_index_builder.cpp b/src/rootserver/ob_index_builder.cpp index 59166345bb..a92399da15 100644 --- a/src/rootserver/ob_index_builder.cpp +++ b/src/rootserver/ob_index_builder.cpp @@ -931,9 +931,13 @@ int ObRSBuildIndexTask::acquire_snapshot(const int64_t snapshot_version, const i info.schema_version_ = schema_version; info.tenant_id_ = extract_tenant_id(index_id_); info.table_id_ = data_table_id; + common::ObMySQLProxy &proxy = ddl_service_->get_sql_proxy(); if (!info.is_valid()) { ret = OB_INVALID_ARGUMENT; LOG_WARN("invalid argument", K(ret), K(info)); + } else if (OB_FAIL(ddl_service_->get_snapshot_mgr().set_index_building_snapshot( + proxy, info.table_id_, info.snapshot_ts_))) { + LOG_WARN("fail to set index building snapshot", KR(ret), K(info)); } else if (OB_FAIL(ddl_service_->get_snapshot_mgr().acquire_snapshot_for_building_index(trans, info, index_id_))) { LOG_WARN("fail to acquire snapshot", K(ret), K(index_id_), K(data_table_id), K(info)); } diff --git a/src/rootserver/ob_snapshot_info_manager.cpp b/src/rootserver/ob_snapshot_info_manager.cpp index 4e2d60dc3c..5951304e78 100644 --- a/src/rootserver/ob_snapshot_info_manager.cpp +++ b/src/rootserver/ob_snapshot_info_manager.cpp @@ -34,7 +34,7 @@ int ObSnapshotInfoManager::init(const ObAddr& self_addr) } int ObSnapshotInfoManager::set_index_building_snapshot( - common::ObMySQLTransaction& trans, const int64_t index_table_id, const int64_t snapshot_ts) + common::ObMySQLProxy &proxy, const int64_t index_table_id, const int64_t snapshot_ts) { int ret = OB_SUCCESS; ObSqlString sql; @@ -49,7 +49,7 @@ int ObSnapshotInfoManager::set_index_building_snapshot( ObSchemaUtils::get_extract_schema_id(tenant_id, index_table_id), ObSchemaUtils::get_extract_tenant_id(tenant_id, tenant_id)))) { LOG_WARN("fail to update index building snapshot", KR(ret), K(index_table_id), K(snapshot_ts)); - } else if (OB_FAIL(trans.write(tenant_id, sql.ptr(), affected_rows))) { + } else if (OB_FAIL(proxy.write(tenant_id, sql.ptr(), affected_rows))) { LOG_WARN("fail to write sql", KR(ret), K(sql)); } else if (1 != affected_rows && 0 != affected_rows) { ret = OB_ERR_UNEXPECTED; @@ -66,8 +66,6 @@ int ObSnapshotInfoManager::acquire_snapshot_for_building_index( if (!snapshot.is_valid()) { ret = OB_INVALID_ARGUMENT; LOG_WARN("invalid argument", K(ret), K(snapshot)); - } else if (OB_FAIL(set_index_building_snapshot(trans, index_table_id, snapshot.snapshot_ts_))) { - LOG_WARN("fail to set index building snapshot", KR(ret), K(snapshot)); } else if (OB_FAIL(snapshot_proxy.add_snapshot(trans, snapshot))) { LOG_WARN("fail to add snapshot", K(ret)); } diff --git a/src/rootserver/ob_snapshot_info_manager.h b/src/rootserver/ob_snapshot_info_manager.h index a713b9b0fa..4b6068630a 100644 --- a/src/rootserver/ob_snapshot_info_manager.h +++ b/src/rootserver/ob_snapshot_info_manager.h @@ -39,12 +39,10 @@ public: int check_restore_point(common::ObMySQLProxy& proxy, const int64_t tenant_id, const int64_t table_id, bool& is_exist); int get_snapshot_count( - common::ObMySQLProxy& proxy, const int64_t tenant_id, share::ObSnapShotType snapshot_type, int64_t& count); + common::ObMySQLProxy &proxy, const int64_t tenant_id, share::ObSnapShotType snapshot_type, int64_t &count); + int set_index_building_snapshot(common::ObMySQLProxy &proxy, const int64_t index_table_id, const int64_t snapshot_ts); private: - int set_index_building_snapshot( - common::ObMySQLTransaction& trans, const int64_t index_table_id, const int64_t snapshot_ts); - DISALLOW_COPY_AND_ASSIGN(ObSnapshotInfoManager); private: -- GitLab