fix index_checksum_validator about added index

This commit is contained in:
obdev
2023-03-14 10:41:18 +00:00
committed by ob-robot
parent 21748483c5
commit 7f703344b6
3 changed files with 29 additions and 12 deletions

View File

@ -104,6 +104,7 @@ int ObChecksumValidatorBase::validate_checksum(
const hash::ObHashMap<ObTabletLSPair, ObTabletCompactionStatus> &tablet_compaction_map,
int64_t &table_count,
hash::ObHashMap<uint64_t, ObTableCompactionInfo> &table_compaction_map,
const ObIArray<uint64_t> &ori_table_ids,
ObMergeTimeStatistics &merge_time_statistics,
const int64_t expected_epoch)
{
@ -118,7 +119,7 @@ int ObChecksumValidatorBase::validate_checksum(
ret = OB_INVALID_ARGUMENT;
LOG_WARN("invalid argument", KR(ret), K_(tenant_id), K(frozen_scn));
} else if (OB_FAIL(check_all_table_verification_finished(stop, frozen_scn, tablet_compaction_map,
table_count, table_compaction_map, merge_time_statistics, expected_epoch))) {
table_count, table_compaction_map, ori_table_ids, merge_time_statistics, expected_epoch))) {
LOG_WARN("fail to check all table verification finished", KR(ret), K_(tenant_id), K(frozen_scn));
}
return ret;
@ -221,11 +222,13 @@ int ObTabletChecksumValidator::check_all_table_verification_finished(
const hash::ObHashMap<ObTabletLSPair, ObTabletCompactionStatus> &tablet_compaction_map,
int64_t &table_count,
hash::ObHashMap<uint64_t, ObTableCompactionInfo> &table_compaction_map,
const ObIArray<uint64_t> &ori_table_ids,
ObMergeTimeStatistics &merge_time_statistics,
const int64_t expected_epoch)
{
int ret = OB_SUCCESS;
int check_ret = OB_SUCCESS;
UNUSED(ori_table_ids);
UNUSED(expected_epoch);
const int64_t start_time_us = ObTimeUtil::current_time();
@ -498,11 +501,13 @@ int ObCrossClusterTabletChecksumValidator::check_all_table_verification_finished
const hash::ObHashMap<share::ObTabletLSPair, share::ObTabletCompactionStatus> &tablet_compaction_map,
int64_t &table_count,
hash::ObHashMap<uint64_t, share::ObTableCompactionInfo> &table_compaction_map,
const ObIArray<uint64_t> &ori_table_ids,
ObMergeTimeStatistics &merge_time_statistics,
const int64_t expected_epoch)
{
int ret = OB_SUCCESS;
int check_ret = OB_SUCCESS;
UNUSED(ori_table_ids);
const int64_t start_time_us = ObTimeUtil::current_time();
if (OB_UNLIKELY(!frozen_scn.is_valid() || tablet_compaction_map.empty())) {
@ -1092,6 +1097,7 @@ int ObIndexChecksumValidator::check_all_table_verification_finished(
const hash::ObHashMap<ObTabletLSPair, ObTabletCompactionStatus> &tablet_compaction_map,
int64_t &table_count,
hash::ObHashMap<uint64_t, ObTableCompactionInfo> &table_compaction_map,
const ObIArray<uint64_t> &ori_table_ids,
ObMergeTimeStatistics &merge_time_statistics,
const int64_t expected_epoch)
{
@ -1181,7 +1187,8 @@ int ObIndexChecksumValidator::check_all_table_verification_finished(
if (OB_SUCC(ret) && (OB_SUCCESS == check_ret)) {
// for data table with index, if all its index tables finished verification,
// then mark it as INDEX_CKM_VERIFIED.
if (OB_FAIL(handle_data_table_with_index(stop, frozen_scn, table_ids, table_schemas, table_compaction_map))) {
if (OB_FAIL(handle_data_table_with_index(stop, frozen_scn, table_ids, table_schemas,
ori_table_ids, table_compaction_map))) {
LOG_WARN("fail to handle data table with index", KR(ret), K_(tenant_id), K(stop), K(frozen_scn));
} else if (OB_FAIL(remove_not_exist_table(table_ids, table_compaction_map))) {
LOG_WARN("fail to remove not exist table", KR(ret), K_(tenant_id), K(frozen_scn));
@ -1251,12 +1258,14 @@ int ObIndexChecksumValidator::handle_data_table_with_index(
const SCN &frozen_scn,
const ObIArray<uint64_t> &table_ids,
const ObIArray<const ObSimpleTableSchemaV2 *> &table_schemas,
const ObIArray<uint64_t> &ori_table_ids,
hash::ObHashMap<uint64_t, ObTableCompactionInfo> &table_compaction_map)
{
int ret = OB_SUCCESS;
SMART_VAR(ObArray<uint64_t>, data_tables_to_update) {
// check data tables with index, return those need to be marked as INDEX_CKM_VERIFIED
if (OB_FAIL(check_data_table_with_index(table_schemas, table_compaction_map, data_tables_to_update))) {
if (OB_FAIL(check_data_table_with_index(table_schemas, table_compaction_map, ori_table_ids,
data_tables_to_update))) {
LOG_WARN("fail to check data table with index", KR(ret), K_(tenant_id), K(frozen_scn));
}
// mark data tables whose all index tables finished verification as INDEX_CKM_VERIFIED
@ -1280,6 +1289,7 @@ int ObIndexChecksumValidator::handle_data_table_with_index(
int ObIndexChecksumValidator::check_data_table_with_index(
const ObIArray<const ObSimpleTableSchemaV2 *> &table_schemas,
hash::ObHashMap<uint64_t, ObTableCompactionInfo> &table_compaction_map,
const ObIArray<uint64_t> &ori_table_ids,
ObIArray<uint64_t> &data_tables_to_update)
{
int ret = OB_SUCCESS;
@ -1307,9 +1317,9 @@ int ObIndexChecksumValidator::check_data_table_with_index(
ret = OB_ERR_UNEXPECTED;
LOG_WARN("unexpected error, simple schema is null", KR(ret), K_(tenant_id));
} else if (simple_schema->is_index_table()) {
if (simple_schema->can_read_index()) {
const uint64_t index_table_id = simple_schema->get_table_id();
const uint64_t data_table_id = simple_schema->get_data_table_id();
const uint64_t index_table_id = simple_schema->get_table_id();
const uint64_t data_table_id = simple_schema->get_data_table_id();
if (simple_schema->can_read_index() && has_exist_in_array(ori_table_ids, index_table_id)) {
ObTableCompactionInfo index_table_compaction_info;
if (OB_FAIL(table_compaction_map.get_refactored(index_table_id, index_table_compaction_info))) {
LOG_WARN("fail to get refactored", KR(ret), K(index_table_id));
@ -1322,8 +1332,8 @@ int ObIndexChecksumValidator::check_data_table_with_index(
}
}
}
} else { // !simple_schema->can_read_index()
// ignore index table can not read
} else { // !simple_schema->can_read_index() || !has_exist_in_array(ori_table_ids, index_table_id)
// ignore index table that can not read or does not exist in ori_table_ids
}
}
}

View File

@ -70,6 +70,7 @@ public:
const hash::ObHashMap<share::ObTabletLSPair, share::ObTabletCompactionStatus> &tablet_compaction_map,
int64_t &table_count,
hash::ObHashMap<uint64_t, share::ObTableCompactionInfo> &table_compaction_map,
const common::ObIArray<uint64_t> &ori_table_ids,
ObMergeTimeStatistics &merge_time_statistics,
const int64_t expected_epoch);
@ -98,6 +99,7 @@ private:
const hash::ObHashMap<share::ObTabletLSPair, share::ObTabletCompactionStatus> &tablet_compaction_map,
int64_t &table_count,
hash::ObHashMap<uint64_t, share::ObTableCompactionInfo> &table_compaction_map,
const common::ObIArray<uint64_t> &ori_table_ids,
ObMergeTimeStatistics &merge_time_statistics,
const int64_t expected_epoch) = 0;
@ -126,6 +128,7 @@ private:
const hash::ObHashMap<share::ObTabletLSPair, share::ObTabletCompactionStatus> &tablet_compaction_map,
int64_t &table_count,
hash::ObHashMap<uint64_t, share::ObTableCompactionInfo> &table_compaction_map,
const common::ObIArray<uint64_t> &ori_table_ids,
ObMergeTimeStatistics &merge_time_statistics,
const int64_t expected_epoch) override;
// check whether all tablets of this table finished compaction or not,
@ -173,6 +176,7 @@ private:
const hash::ObHashMap<share::ObTabletLSPair, share::ObTabletCompactionStatus> &tablet_compaction_map,
int64_t &table_count,
hash::ObHashMap<uint64_t, share::ObTableCompactionInfo> &table_compaction_map,
const common::ObIArray<uint64_t> &ori_table_ids,
ObMergeTimeStatistics &merge_time_statistics,
const int64_t expected_epoch) override;
int validate_cross_cluster_checksum(const volatile bool &stop,
@ -227,6 +231,7 @@ private:
const hash::ObHashMap<share::ObTabletLSPair, share::ObTabletCompactionStatus> &tablet_compaction_map,
int64_t &table_count,
hash::ObHashMap<uint64_t, share::ObTableCompactionInfo> &table_compaction_map,
const common::ObIArray<uint64_t> &ori_table_ids,
ObMergeTimeStatistics &merge_time_statistics,
const int64_t expected_epoch) override;
void check_need_validate(const bool is_primary_service, bool &need_validate) const;
@ -244,11 +249,13 @@ private:
int handle_data_table_with_index(const volatile bool &stop,
const share::SCN &frozen_scn,
const common::ObIArray<uint64_t> &table_ids,
const ObIArray<const share::schema::ObSimpleTableSchemaV2 *> &table_schemas,
const common::ObIArray<const share::schema::ObSimpleTableSchemaV2 *> &table_schemas,
const common::ObIArray<uint64_t> &ori_table_ids,
hash::ObHashMap<uint64_t, share::ObTableCompactionInfo> &table_compaction_map);
// check data tables with index, return those need to be marked as INDEX_CKM_VERIFIED
int check_data_table_with_index(const common::ObIArray<const share::schema::ObSimpleTableSchemaV2 *> &table_schemas,
hash::ObHashMap<uint64_t, share::ObTableCompactionInfo> &table_compaction_map,
const common::ObIArray<uint64_t> &ori_table_ids,
common::ObIArray<uint64_t> &data_tables_to_update);
// handle index tables. validate column checksum if needed, and mark index tables as INDEX_CKM_VERIFIED
int handle_index_table(const share::SCN &frozen_scn,

View File

@ -503,14 +503,14 @@ int ObMajorMergeProgressChecker::check_verification(
} else if (OB_FAIL(cross_cluster_validator_.check_and_set_validate(is_primary_service, global_broadcast_scn))) {
LOG_WARN("fail to check and set validate for cross_cluster_validator", KR(ret), K(global_broadcast_scn));
} else if (OB_FAIL(tablet_validator_.validate_checksum(stop, global_broadcast_scn, tablet_compaction_map_,
table_count_, table_compaction_map_, merge_time_statistics_, expected_epoch))) {
table_count_, table_compaction_map_, table_ids_, merge_time_statistics_, expected_epoch))) {
LOG_WARN("fail to validate checksum of tablet validator", KR(ret), K(global_broadcast_scn));
} else if (!tablet_compaction_map_.empty()) {
if (OB_FAIL(index_validator_.validate_checksum(stop, global_broadcast_scn,
tablet_compaction_map_, table_count_, table_compaction_map_, merge_time_statistics_, expected_epoch))) {
tablet_compaction_map_, table_count_, table_compaction_map_, table_ids_, merge_time_statistics_, expected_epoch))) {
LOG_WARN("fail to validate checksum of index validator", KR(ret), K(global_broadcast_scn));
} else if (OB_FAIL(cross_cluster_validator_.validate_checksum(stop, global_broadcast_scn,
tablet_compaction_map_, table_count_, table_compaction_map_, merge_time_statistics_, expected_epoch))) {
tablet_compaction_map_, table_count_, table_compaction_map_, table_ids_, merge_time_statistics_, expected_epoch))) {
LOG_WARN("fail to validate checksum of cross cluster validator", KR(ret), K(global_broadcast_scn));
}
} else {