try get first ddl_sstable when close ddl_kv

This commit is contained in:
renju96
2023-08-15 13:44:30 +00:00
committed by ob-robot
parent de963c1e97
commit 410b4dca84
3 changed files with 32 additions and 3 deletions

View File

@ -539,6 +539,31 @@ int ObTabletDDLUtil::prepare_index_data_desc(ObTablet &tablet,
return ret;
}
int ObTabletDDLUtil::try_get_first_ddl_sstable(ObTablet &tablet,
blocksstable::ObSSTable *&first_sstable)
{
int ret = OB_SUCCESS;
first_sstable = nullptr;
ObTableStoreIterator ddl_table_iter;
ObITable *first_ddl_sstable = nullptr;
if (OB_FAIL(tablet.get_ddl_sstables(ddl_table_iter))) {
LOG_WARN("get ddl sstable handles failed", K(ret));
} else if (ddl_table_iter.count() > 0) {
if (OB_FAIL(ddl_table_iter.get_boundary_table(false/*is_last*/, first_ddl_sstable))) {
LOG_WARN("failed to get boundary table", K(ret));
} else if (OB_ISNULL(first_ddl_sstable)) {
ret = OB_ERR_UNEXPECTED;
LOG_ERROR("first_ddl_sstable must not null", K(ret));
}
}
if (OB_NOT_NULL(first_ddl_sstable)) {
first_sstable = static_cast<ObSSTable *>(first_ddl_sstable);
}
return ret;
}
int ObTabletDDLUtil::create_ddl_sstable(ObTablet &tablet,
const ObTabletDDLParam &ddl_param,
const ObIArray<const ObDataMacroBlockMeta *> &meta_array,

View File

@ -150,7 +150,8 @@ public:
const int64_t ddl_format_version,
const blocksstable::ObSSTable *first_ddl_sstable,
blocksstable::ObDataStoreDesc &data_desc);
static int try_get_first_ddl_sstable(ObTablet &tablet,
blocksstable::ObSSTable *&first_sstable);
static int create_ddl_sstable(ObTablet &tablet,
const ObTabletDDLParam &ddl_param,
const ObIArray<const blocksstable::ObDataMacroBlockMeta *> &meta_array,

View File

@ -688,8 +688,11 @@ int ObDDLKV::close(ObTablet &tablet)
ddl_param.start_scn_ = ddl_start_scn_;
ddl_param.snapshot_version_ = snapshot_version_;
ddl_param.data_format_version_ = data_format_version_;
if (OB_FAIL(ObTabletDDLUtil::create_ddl_sstable(tablet, ddl_param, meta_array, nullptr/*first_ddl_sstable*/, allocator, sstable))) {
LOG_WARN("create ddl sstable failed", K(ret), K(ddl_param));
ObSSTable *first_sstable = nullptr;
if (OB_FAIL(ObTabletDDLUtil::try_get_first_ddl_sstable(tablet, first_sstable))) {
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))) {
LOG_WARN("create ddl sstable failed", K(ret), K(ddl_param), KP(first_sstable));
} else if (OB_FAIL(ObTabletDDLUtil::update_ddl_table_store(tablet, ddl_param, allocator, sstable))) {
LOG_WARN("update ddl table store failed", K(ret), K(ddl_param), K(sstable));
} else {