[bug fix]hold first_sstable when create ddl sstable

This commit is contained in:
renju96
2024-02-06 16:31:41 +00:00
committed by ob-robot
parent 84d9d1ebe2
commit 164c215a7b
3 changed files with 4 additions and 2 deletions

View File

@ -520,11 +520,11 @@ int ObTabletDDLUtil::prepare_index_data_desc(ObTablet &tablet,
} }
int ObTabletDDLUtil::try_get_first_ddl_sstable(ObTablet &tablet, int ObTabletDDLUtil::try_get_first_ddl_sstable(ObTablet &tablet,
ObTableStoreIterator &ddl_table_iter,
blocksstable::ObSSTable *&first_sstable) blocksstable::ObSSTable *&first_sstable)
{ {
int ret = OB_SUCCESS; int ret = OB_SUCCESS;
first_sstable = nullptr; first_sstable = nullptr;
ObTableStoreIterator ddl_table_iter;
ObITable *first_ddl_sstable = nullptr; ObITable *first_ddl_sstable = nullptr;
if (OB_FAIL(tablet.get_ddl_sstables(ddl_table_iter))) { if (OB_FAIL(tablet.get_ddl_sstables(ddl_table_iter))) {

View File

@ -150,6 +150,7 @@ public:
const blocksstable::ObSSTable *first_ddl_sstable, const blocksstable::ObSSTable *first_ddl_sstable,
blocksstable::ObWholeDataStoreDesc &data_desc); blocksstable::ObWholeDataStoreDesc &data_desc);
static int try_get_first_ddl_sstable(ObTablet &tablet, static int try_get_first_ddl_sstable(ObTablet &tablet,
ObTableStoreIterator &ddl_table_iter,
blocksstable::ObSSTable *&first_sstable); blocksstable::ObSSTable *&first_sstable);
static int create_ddl_sstable(ObTablet &tablet, static int create_ddl_sstable(ObTablet &tablet,
const ObTabletDDLParam &ddl_param, const ObTabletDDLParam &ddl_param,

View File

@ -709,8 +709,9 @@ int ObDDLKV::close(ObTablet &tablet)
ddl_param.start_scn_ = ddl_start_scn_; ddl_param.start_scn_ = ddl_start_scn_;
ddl_param.snapshot_version_ = snapshot_version_; ddl_param.snapshot_version_ = snapshot_version_;
ddl_param.data_format_version_ = data_format_version_; ddl_param.data_format_version_ = data_format_version_;
ObTableStoreIterator ddl_table_iter; // need to hold first_sstable until finish
ObSSTable *first_sstable = nullptr; ObSSTable *first_sstable = nullptr;
if (OB_FAIL(ObTabletDDLUtil::try_get_first_ddl_sstable(tablet, first_sstable))) { if (OB_FAIL(ObTabletDDLUtil::try_get_first_ddl_sstable(tablet, ddl_table_iter, first_sstable))) {
LOG_WARN("fail to get first sstable", K(ret), K(tablet)); LOG_WARN("fail to get first sstable", K(ret), K(tablet));
} else if (OB_FAIL(ObTabletDDLUtil::create_ddl_sstable(tablet, ddl_param, meta_array, first_sstable, allocator, sstable))) { } else if (OB_FAIL(ObTabletDDLUtil::create_ddl_sstable(tablet, ddl_param, meta_array, first_sstable, allocator, sstable))) {
LOG_WARN("create ddl sstable failed", K(ret), K(ddl_param), KP(first_sstable)); LOG_WARN("create ddl sstable failed", K(ret), K(ddl_param), KP(first_sstable));