From 736cf3ea55242aeb57cf07f65aa8f22c5f4e501b Mon Sep 17 00:00:00 2001 From: wxhwang Date: Tue, 29 Aug 2023 13:10:26 +0000 Subject: [PATCH] fix restore failed --- src/share/backup/ob_archive_store.cpp | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/share/backup/ob_archive_store.cpp b/src/share/backup/ob_archive_store.cpp index 744d6677db..b77728f3c9 100644 --- a/src/share/backup/ob_archive_store.cpp +++ b/src/share/backup/ob_archive_store.cpp @@ -1461,9 +1461,24 @@ int ObArchiveStore::get_round_max_checkpoint_scn(const int64_t dest_id, const in LOG_WARN("ObArchiveStore not init", K(ret)); } else if (OB_FAIL(get_piece_range(dest_id, round_id, min_piece_id, max_piece_id))) { LOG_WARN("failed to get piece range", K(ret), K(dest_id), K(round_id)); - } else if (OB_FALSE_IT(piece_id = max_piece_id)) { - } else if (OB_FAIL(get_piece_max_checkpoint_scn(dest_id, round_id, piece_id, max_checkpoint_scn))) { - LOG_WARN("failed to get piece max checkpoint scn", K(ret), K(dest_id), K(round_id), K(min_piece_id), K(max_checkpoint_scn)); + } else { + piece_id = max_piece_id; + // filter empty piece + while (OB_SUCC(ret)) { + if (piece_id < min_piece_id) { + ret = OB_ENTRY_NOT_EXIST; + LOG_WARN("no valid piece exist", K(ret), K(dest_id), K(round_id), K(min_piece_id), K(max_piece_id), K(piece_id), K(max_checkpoint_scn)); + } else if (OB_FAIL(get_piece_max_checkpoint_scn(dest_id, round_id, piece_id, max_checkpoint_scn))) { + LOG_WARN("failed to get piece max checkpoint scn", K(ret), K(dest_id), K(round_id), K(min_piece_id), K(max_checkpoint_scn)); + } else if (max_checkpoint_scn.is_min()) { + // empty piece + LOG_INFO("ignore empty piece", K(dest_id), K(round_id), K(min_piece_id), K(max_piece_id), K(piece_id)); + --piece_id; + } else { + LOG_INFO("get max checkpoint scn", K(dest_id), K(round_id), K(min_piece_id), K(max_piece_id), K(piece_id), K(max_checkpoint_scn)); + break; + } + } } return ret;