fix migrate init medium list twice

This commit is contained in:
obdev
2023-03-14 07:10:57 +00:00
committed by ob-robot
parent 92c3e8a96f
commit 312db5a0f2
4 changed files with 37 additions and 11 deletions

View File

@ -849,7 +849,7 @@ int ObMediumCompactionScheduleFunc::schedule_tablet_medium_merge(
if (!scheduler_called) { // should not visit inner table, wait for scheduler loop
} else if (OB_FAIL(get_status_from_inner_table(ls_id, tablet_id, ret_info))) {
LOG_WARN("failed to get status from inner tablet", K(ret), K(ls_id), K(tablet_id));
} else if (ret_info.could_schedule_next_round(last_major->get_snapshot_version())) {
} else if (ret_info.could_schedule_next_round(medium_list.get_last_compaction_scn())) {
LOG_INFO("success to check RS major checksum validation finished", K(ret), K(ls_id), K(tablet_id));
schedule_flag = true;
}

View File

@ -839,17 +839,21 @@ int ObStorageHATabletsBuilder::hold_local_reuse_sstable_(
}
} else if (OB_FAIL(hold_local_complete_tablet_sstable_(tablet, tables_handle))) {
LOG_WARN("failed to hold local complete tablet sstable", K(ret), KP(tablet));
} else if (!storage_schema.is_valid()
} else {
if (!storage_schema.is_valid()
|| storage_schema.get_schema_version() < tablet->get_storage_schema().get_schema_version()) {
allocator.reset();
storage_schema.reset();
if (OB_FAIL(storage_schema.init(allocator, tablet->get_storage_schema()))) {
LOG_WARN("failed to init storage schema", K(ret), KPC(tablet));
storage_schema.reset();
if (OB_FAIL(storage_schema.init(allocator, tablet->get_storage_schema()))) {
LOG_WARN("failed to init storage schema", K(ret), KPC(tablet));
}
}
}
if (OB_SUCC(ret)) {
if (OB_FAIL(medium_info_list.init(allocator, &tablet->get_medium_compaction_info_list()))) {
LOG_WARN("failed to init medium info list", K(ret), K(tablet->get_medium_compaction_info_list()));
if (OB_SUCC(ret)
&& (!medium_info_list.is_valid()
|| medium_info_list.get_last_compaction_scn() < tablet->get_medium_compaction_info_list().get_last_compaction_scn())) {
medium_info_list.reset();
if (OB_FAIL(medium_info_list.init(allocator, &tablet->get_medium_compaction_info_list()))) {
LOG_WARN("failed to init medium info list", K(ret), K(tablet->get_medium_compaction_info_list()));
}
}
}
@ -863,7 +867,7 @@ int ObStorageHATabletsBuilder::hold_local_reuse_sstable_(
LOG_WARN("tablet should not be NULL", K(ret), KP(tablet), K(tablet_id));
}
}
}
} // end of while
}
return ret;
}

View File

@ -252,6 +252,8 @@ int ObTablet::init(
} else if (OB_FAIL(check_max_sync_schema_version())) {
LOG_WARN("unexpected max sync schema version", K(ret), K(param), K(old_tablet),
K(max_sync_schema_version), K(storage_schema_));
} else if (OB_FAIL(check_medium_list())) {
LOG_WARN("failed to check medium list", K(ret), K(param), K(old_tablet), K(medium_info_list_));
} else if (OB_FAIL(check_sstable_column_checksum())) {
LOG_WARN("failed to check sstable column checksum", K(ret), KPC(this));
} else {
@ -323,6 +325,8 @@ int ObTablet::init(
LOG_WARN("failed to pre-transform sstable root block", K(ret), K(full_read_info_));
} else if (OB_FAIL(check_max_sync_schema_version())) {
LOG_WARN("unexpected max sync schema version", K(ret), K(param), K(is_update), K(storage_schema_));
} else if (OB_FAIL(check_medium_list())) {
LOG_WARN("failed to check medium list", K(ret), K(param), K(medium_info_list_));
} else if (OB_FAIL(check_sstable_column_checksum())) {
LOG_WARN("failed to check sstable column checksum", K(ret), KPC(this));
} else {
@ -440,6 +444,8 @@ int ObTablet::init(
LOG_WARN("failed to pre-transform sstable root block", K(ret), K(full_read_info_));
} else if (OB_FAIL(check_max_sync_schema_version())) {
LOG_WARN("unexpected max sync schema version", K(ret), K(param), K(old_tablet), K(storage_schema_));
} else if (OB_FAIL(check_medium_list())) {
LOG_WARN("failed to check medium list", K(ret), K(param), K(old_tablet), K(medium_info_list_));
} else if (OB_FAIL(check_sstable_column_checksum())) {
LOG_WARN("failed to check sstable column checksum", K(ret), KPC(this));
} else {
@ -3281,6 +3287,21 @@ int ObTablet::check_max_sync_schema_version() const
return ret;
}
int ObTablet::check_medium_list() const
{
int ret = OB_SUCCESS;
ObITable *last_major = nullptr;
if (tablet_meta_.ha_status_.is_none()
&& nullptr != (last_major = table_store_.get_major_sstables().get_boundary_table(true/*last*/))
&& get_medium_compaction_info_list().get_last_compaction_scn() > 0) { // for compat
if (OB_UNLIKELY(get_medium_compaction_info_list().get_last_compaction_scn() != last_major->get_snapshot_version())) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("medium list is invalid for last major sstable", K(ret), "medium_list", get_medium_compaction_info_list(),
KPC(last_major));
}
}
return ret;
}
int ObTablet::set_memtable_clog_checkpoint_scn(
const ObMigrationTabletParam *tablet_meta)
{

View File

@ -484,6 +484,7 @@ private:
const bool is_callback = false);
int set_tx_data_in_tablet_pointer(const ObTabletTxMultiSourceDataUnit &tx_data);
int check_max_sync_schema_version() const;
int check_medium_list() const;
int check_sstable_column_checksum() const;
template<class T>