Skip to content

Commit

Permalink
[CP] fix sstable gc logic
Browse files Browse the repository at this point in the history
  • Loading branch information
obdev authored and ob-robot committed Aug 25, 2023
1 parent f6886b8 commit e7686d8
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 28 deletions.
20 changes: 1 addition & 19 deletions src/storage/ls/ob_ls_tablet_service.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1971,25 +1971,7 @@ int ObLSTabletService::create_tablet(
table_store_flag.set_with_major_sstable();
tablet_handle.reset();

// ddl schema version defense
if (table_schema.is_index_table()) {
const int64_t table_schema_version = table_schema.get_schema_version();
ObTenantFreezeInfoMgr::FreezeInfo freeze_info;

if (OB_FAIL(MTL_CALL_FREEZE_INFO_MGR(get_freeze_info_behind_snapshot_version, snapshot_version, freeze_info))) {
if (OB_ENTRY_NOT_EXIST != ret) {
LOG_WARN("failed to get freeze info behind snapshot version", K(ret), K(snapshot_version));
} else {
ret = OB_SUCCESS;
}
} else if (OB_UNLIKELY(table_schema_version > freeze_info.schema_version)) {
ret = OB_SCHEMA_ERROR;
LOG_ERROR("schema version in freeze info is less than table schema version", K(ret), K(ls_id), K(tablet_id), K(data_tablet_id),
K(snapshot_version), K(table_schema_version), K(freeze_info), K(create_scn), K(table_schema));
}
}

if (FAILEDx(ObTabletCreateDeleteHelper::prepare_create_msd_tablet())) {
if (OB_FAIL(ObTabletCreateDeleteHelper::prepare_create_msd_tablet())) {
LOG_WARN("fail to prepare create msd tablet", K(ret));
}

Expand Down
11 changes: 6 additions & 5 deletions src/storage/tablet/ob_tablet.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3907,7 +3907,7 @@ int ObTablet::get_kept_multi_version_start(
int ret = OB_SUCCESS;
int tmp_ret = OB_SUCCESS;
multi_version_start = 0;
int64_t max_merged_snapshot = 0;
int64_t last_major_snapshot_version = 0;
int64_t min_reserved_snapshot = 0;
int64_t min_medium_snapshot = INT64_MAX;
int64_t ls_min_reserved_snapshot = INT64_MAX;
Expand All @@ -3922,13 +3922,13 @@ int ObTablet::get_kept_multi_version_start(
} else if (OB_FAIL(table_store_wrapper.get_member(table_store))) {
LOG_WARN("fail to get table store", K(ret), K(table_store_wrapper));
} else if (0 != table_store->get_major_sstables().count()) {
max_merged_snapshot = table_store->get_major_sstables().get_boundary_table(true/*last*/)->get_snapshot_version();
last_major_snapshot_version = table_store->get_major_sstables().get_boundary_table(true/*last*/)->get_snapshot_version();
}

if (OB_FAIL(ret)) {
} else if (FALSE_IT(multi_version_start = tablet.get_multi_version_start())) {
} else if (OB_FAIL(MTL(ObTenantFreezeInfoMgr*)->get_min_reserved_snapshot(
tablet_id, max_merged_snapshot, min_reserved_snapshot))) {
tablet_id, last_major_snapshot_version, min_reserved_snapshot))) {
LOG_WARN("failed to get multi version from freeze info mgr", K(ret), K(tablet_id));
} else if (!tablet.is_ls_inner_tablet()) {
ObTabletMediumInfoReader medium_info_reader(tablet);
Expand All @@ -3955,13 +3955,14 @@ int ObTablet::get_kept_multi_version_start(
if (REACH_TENANT_TIME_INTERVAL(10 * 1000 * 1000L /*10s*/)) {
LOG_INFO("tablet multi version start not advance for a long time", K(ret), K(ls_id), K(tablet_id),
K(multi_version_start), K(old_min_reserved_snapshot), K(min_medium_snapshot),
"ls_min_reserved_snapshot", ls.get_min_reserved_snapshot(), K(tablet));
K(ls_min_reserved_snapshot), "old_tablet_multi_version_start", tablet.get_multi_version_start(),
"old_tablet_snaphsot_version", tablet.get_snapshot_version(), K(tablet));
}
}
}
LOG_DEBUG("get multi version start", K(ret), K(ls_id), K(tablet_id),
K(multi_version_start), K(min_reserved_snapshot), K(min_medium_snapshot),
K(ls.get_min_reserved_snapshot()), K(max_merged_snapshot));
K(ls_min_reserved_snapshot), K(last_major_snapshot_version));
return ret;
}

Expand Down
6 changes: 2 additions & 4 deletions src/storage/tablet/ob_tablet_table_store.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1606,7 +1606,7 @@ int ObTabletTableStore::check_ready_for_read(const ObTablet &tablet)
const SCN &last_minor_end_scn = minor_tables_.get_boundary_table(true/*last*/)->get_end_scn();
if (OB_UNLIKELY(clog_checkpoint_scn != last_minor_end_scn)) {
ret = OB_ERR_UNEXPECTED;
LOG_ERROR("last minor table's end_scn must be equal to clog_checkpoint_scn",
LOG_WARN("last minor table's end_scn must be equal to clog_checkpoint_scn",
K(ret), K(last_minor_end_scn), K(clog_checkpoint_scn), KPC(this), K(tablet));
} else {
is_ready_for_read_ = true;
Expand Down Expand Up @@ -1804,9 +1804,7 @@ int ObTabletTableStore::need_remove_old_table(
} else if (multi_version_start <= 0) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("get invalid arguments", K(ret), K(multi_version_start));
} else if (minor_tables_.empty() || INT64_MAX == minor_tables_[0]->get_upper_trans_version()) {
// do nothing
} else if (minor_tables_[0]->get_upper_trans_version() <= major_tables_[0]->get_snapshot_version()) {
} else if (minor_tables_.count() > 0 && minor_tables_[0]->get_upper_trans_version() <= major_tables_[0]->get_snapshot_version()) {
// at least one minor sstable is coverd by major sstable
// don't need to care about kept_multi_version_start here
// becase major_tables_[0]::snapshot_version must <= kept_multi_version_start
Expand Down

0 comments on commit e7686d8

Please sign in to comment.