From 5e4539421725bdfb06c1fc7a4df5ad8588b4c7b6 Mon Sep 17 00:00:00 2001 From: ZenoWang Date: Tue, 14 Feb 2023 07:14:32 +0000 Subject: [PATCH] [FIX] use major sstable end_scn to recycle tx data when the tablet do not have minor/mini sstable --- src/storage/tx_table/ob_tx_data_table.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/storage/tx_table/ob_tx_data_table.cpp b/src/storage/tx_table/ob_tx_data_table.cpp index 5d9eb30ef..556826b4f 100644 --- a/src/storage/tx_table/ob_tx_data_table.cpp +++ b/src/storage/tx_table/ob_tx_data_table.cpp @@ -781,13 +781,20 @@ int ObTxDataTable::get_min_end_scn_from_single_tablet_(ObTabletHandle &tablet_ha } else if (tablet->get_tablet_meta().tablet_id_.is_ls_inner_tablet()) { // skip inner tablet } else { - end_scn = tablet->get_tablet_meta().clog_checkpoint_scn_; ObTabletTableStore &table_store = tablet->get_table_store(); - ObITable *first_minor_mini_sstable - = table_store.get_minor_sstables().get_boundary_table(false /*is_last*/); + ObITable *first_minor_mini_sstable = table_store.get_minor_sstables().get_boundary_table(false /*is_last*/); + ObITable *last_major_sstable = nullptr; if (OB_NOT_NULL(first_minor_mini_sstable)) { + // step 1 : get end_scn if minor/mini sstable exist end_scn = first_minor_mini_sstable->get_end_scn(); + } else if (FALSE_IT(last_major_sstable = table_store.get_major_sstables().get_boundary_table(true /*is_last*/))) { + } else if (OB_NOT_NULL(last_major_sstable)) { + // step 2 : if minor/mini sstable do not exist, get end_scn from major sstable + end_scn = last_major_sstable->get_end_scn(); + } else { + // step 3 : if minor/major sstable do not exist, get end_scn from tablet clog_checkpoint + end_scn = tablet->get_tablet_meta().clog_checkpoint_scn_; } } return ret;