From 62f802f76aca1c8c7f829b0352390e69b5d59af5 Mon Sep 17 00:00:00 2001 From: yy0 Date: Thu, 9 Sep 2021 15:29:26 +0800 Subject: [PATCH] fix backup point missing problem --- src/storage/ob_reserved_data_mgr.cpp | 44 +++++++++++++++------------- src/storage/ob_reserved_data_mgr.h | 8 ++--- 2 files changed, 27 insertions(+), 25 deletions(-) diff --git a/src/storage/ob_reserved_data_mgr.cpp b/src/storage/ob_reserved_data_mgr.cpp index b310625b36..ed4f2072d8 100644 --- a/src/storage/ob_reserved_data_mgr.cpp +++ b/src/storage/ob_reserved_data_mgr.cpp @@ -1647,8 +1647,8 @@ int ObRecoveryDataMgr::init(const ObPartitionKey& pg_key) } int ObRecoveryDataMgr::add_recovery_point_(const ObRecoveryPointType point_type, const int64_t snapshot_version, - const ObPartitionGroupMeta& pg_meta, const ObIArray& partition_store_metas, - const ObTablesHandle& tables_handle, ObRecoveryData& recovery_data) + const ObPartitionGroupMeta &pg_meta, const ObIArray &partition_store_metas, + const ObTablesHandle &tables_handle) { int ret = OB_SUCCESS; ObRecoveryPointData* new_data = NULL; @@ -1658,19 +1658,24 @@ int ObRecoveryDataMgr::add_recovery_point_(const ObRecoveryPointType point_type, } else if (OB_UNLIKELY(snapshot_version <= 0) || OB_UNLIKELY(!pg_meta.is_valid())) { ret = OB_INVALID_ARGUMENT; LOG_WARN("pg meta is not valid", K(ret), K(snapshot_version), K(pg_meta)); - } else if (OB_FAIL(recovery_data.create_recovery_point( - snapshot_version, pg_meta, partition_store_metas, tables_handle, new_data))) { - LOG_WARN("failed to alllocate recovery point data", K(ret)); - } else if (OB_FAIL(write_add_data_slog_(point_type, *new_data))) { - LOG_WARN("failed to write add recovery point data slog", K(ret)); - } else if (OB_FAIL(recovery_data.insert_recovery_point(new_data))) { - LOG_WARN("failed to add recovery point data", K(ret)); - ob_abort(); } else { - LOG_INFO("succeed to add a new recovery point data", KPC(new_data)); - } - if (OB_FAIL(ret) && NULL != new_data) { - recovery_data.free_recovery_point(new_data); + // There must be only restore point and backup point + ObRecoveryData &recovery_data = + (point_type == ObRecoveryPointType::RESTORE_POINT ? restore_point_data_ : backup_point_data_); + if (OB_FAIL(recovery_data.create_recovery_point( + snapshot_version, pg_meta, partition_store_metas, tables_handle, new_data))) { + LOG_WARN("failed to alllocate recovery point data", K(ret)); + } else if (OB_FAIL(write_add_data_slog_(point_type, *new_data))) { + LOG_WARN("failed to write add recovery point data slog", K(ret)); + } else if (OB_FAIL(recovery_data.insert_recovery_point(new_data))) { + LOG_WARN("failed to add recovery point data", K(ret)); + ob_abort(); + } else { + LOG_INFO("succeed to add a new recovery point data", KPC(new_data)); + } + if (OB_FAIL(ret) && NULL != new_data) { + recovery_data.free_recovery_point(new_data); + } } return ret; } @@ -1914,9 +1919,8 @@ int ObRecoveryDataMgr::add_restore_point(const int64_t snapshot_version, const O snapshot_version, pg_meta, partition_store_metas, - tables_handle, - restore_point_data_))) { - LOG_WARN("failed to add restore point", K(ret), K(pg_meta)); + tables_handle))) { + LOG_WARN("faild to add restore point", K(ret), K(pg_meta)); } return ret; } @@ -2112,8 +2116,7 @@ int ObRecoveryDataMgr::add_backup_point(const int64_t snapshot_version, const Ob snapshot_version, pg_meta, partition_store_metas, - tables_handle, - backup_point_data_))) { + tables_handle))) { LOG_WARN("failed to add backup point", K(ret), K(pg_meta)); } return ret; @@ -2452,8 +2455,7 @@ int ObRecoveryDataMgr::add_recovery_point(const ObRecoveryPointKey& recovery_poi recovery_point_key.snapshot_version_, recovery_point_meta_info.pg_meta_, recovery_point_meta_info.partition_store_metas_, - tables_handle, - restore_point_data_))) { + tables_handle))) { LOG_WARN("faild to add restore point", K(ret), K(recovery_point_meta_info)); } return ret; diff --git a/src/storage/ob_reserved_data_mgr.h b/src/storage/ob_reserved_data_mgr.h index 59f2394799..99848e30f2 100644 --- a/src/storage/ob_reserved_data_mgr.h +++ b/src/storage/ob_reserved_data_mgr.h @@ -280,10 +280,10 @@ public: private: int add_recovery_point_(const ObRecoveryPointType point_type, const int64_t snapshot_version, - const ObPartitionGroupMeta& pg_meta, const ObIArray& partition_store_metas, - const ObTablesHandle& tables_handle, ObRecoveryData& recovery_data); - int write_add_data_slog_(const ObRecoveryPointType point_type, ObRecoveryPointData& point_data); - int write_remove_data_slogs_(const ObRecoveryPointType point_type, ObIArray& points_data); + const ObPartitionGroupMeta &pg_meta, const ObIArray &partition_store_metas, + const ObTablesHandle &tables_handle); + int write_add_data_slog_(const ObRecoveryPointType point_type, ObRecoveryPointData &point_data); + int write_remove_data_slogs_(const ObRecoveryPointType point_type, ObIArray &points_data); // for restore point int replay_add_restore_point_(const ObRecoveryPointData& point_data); int replay_remove_restore_point_(const int64_t snapshot_version); -- GitLab