fix handle_table_with_first_tablet_in_sys_ls about special_table_id = OB_INVALID_ID

This commit is contained in:
obdev 2023-04-04 04:54:42 +00:00 committed by ob-robot
parent 11c6dac906
commit ec33f21ef0
3 changed files with 26 additions and 26 deletions

View File

@ -446,7 +446,7 @@ int ObTabletChecksumValidator::validate_tablet_replica_checksum(
///////////////////////////////////////////////////////////////////////////////
ObCrossClusterTabletChecksumValidator::ObCrossClusterTabletChecksumValidator()
: major_merge_start_us_(-1), special_table_id_(OB_INVALID_ID)
: major_merge_start_us_(-1)
{
}
@ -832,9 +832,13 @@ int ObCrossClusterTabletChecksumValidator::handle_table_verification_finished(
LOG_WARN("fail to check if contains first tablet in sys ls", KR(ret), K_(tenant_id), K(pairs));
} else if (is_containing) {
// do not write tablet checksum and update report_scn of this table here.
// instead, just record the table_id of this table here. write tablet checksum
// and update report_scn of this table in the end of this round of major freeze.
special_table_id_ = table_id;
// instead, write tablet checksum and update report_scn of this table in the end
// of this round of major freeze.
if (MAJOR_MERGE_SPECIAL_TABLE_ID != table_id) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("table_id of the table containing first tablet in sys ls does not equal"
" to 1", KR(ret), K_(tenant_id), K(table_id));
}
need_update_report_scn = false;
LOG_INFO("this table contains first tablet in sys ls, write tablet checksum and update"
" report_scn of this table later", K(table_id), K(pairs));
@ -892,12 +896,11 @@ int ObCrossClusterTabletChecksumValidator::write_tablet_checksum_at_table_level(
bool is_exist = false;
FREEZE_TIME_GUARD;
if (OB_UNLIKELY(pairs.empty()
|| (!table_compaction_info.is_index_ckm_verified() && (table_id != special_table_id_))
|| (!table_compaction_info.is_verified() && (table_id == special_table_id_)
&& (OB_INVALID_ID != special_table_id_)))) {
|| (!table_compaction_info.is_index_ckm_verified() && (MAJOR_MERGE_SPECIAL_TABLE_ID != table_id))
|| (!table_compaction_info.is_verified() && (MAJOR_MERGE_SPECIAL_TABLE_ID == table_id)))) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("invalid argument", KR(ret), K(pairs), K(frozen_scn), K(table_compaction_info),
K(table_id), K_(special_table_id));
K(table_id));
} else if (stop) {
ret = OB_CANCELED;
LOG_WARN("already stop", KR(ret), K_(tenant_id));
@ -909,9 +912,8 @@ int ObCrossClusterTabletChecksumValidator::write_tablet_checksum_at_table_level(
if (table_compaction_info.can_skip_verifying()) {
// do not write tablet checksum items for tables that can skip verifying,
// since tablet checksum items of these tables must have already been written
} else if ((table_compaction_info.is_index_ckm_verified() && (table_id != special_table_id_))
|| (table_compaction_info.is_verified() && (table_id == special_table_id_)
&& (OB_INVALID_ID != special_table_id_))) {
} else if ((table_compaction_info.is_index_ckm_verified() && (MAJOR_MERGE_SPECIAL_TABLE_ID != table_id))
|| (table_compaction_info.is_verified() && (MAJOR_MERGE_SPECIAL_TABLE_ID == table_id))) {
const int64_t IMMEDIATE_RETRY_CNT = 5;
int64_t fail_count = 0;
int64_t sleep_time_us = 200 * 1000; // 200 ms

View File

@ -17,6 +17,7 @@
#include "share/ob_tablet_replica_checksum_iterator.h"
#include "share/ob_freeze_info_proxy.h"
#include "share/ob_zone_merge_info.h"
#include "share/inner_table/ob_inner_table_schema_constants.h"
namespace oceanbase
{
@ -161,7 +162,6 @@ public:
{
major_merge_start_us_ = major_merge_start_us;
}
uint64_t get_special_table_id() const { return special_table_id_; }
// sync data from __all_tablet_replica_checksum to __all_tablet_checksum at table granularity
int write_tablet_checksum_at_table_level(const volatile bool &stop,
const ObArray<share::ObTabletLSPair> &pairs,
@ -169,6 +169,8 @@ public:
const share::ObTableCompactionInfo &table_compaction_info,
const uint64_t table_id,
const int64_t expected_epoch);
// table_id of the table containing first tablet in sys ls
static const uint64_t MAJOR_MERGE_SPECIAL_TABLE_ID = share::OB_ALL_CORE_TABLE_TID;
private:
virtual int check_all_table_verification_finished(const volatile bool &stop,
@ -213,8 +215,6 @@ private:
const static int64_t MAX_BATCH_INSERT_COUNT = 100;
// record the time when starting to major merge, used for check_waiting_tablet_checksum_timeout
int64_t major_merge_start_us_;
// record the table_id of the table which contains first tablet in sys ls
uint64_t special_table_id_;
};
// Mainly to verify checksum between (global and local) index table and main table

View File

@ -157,33 +157,31 @@ int ObMajorMergeProgressChecker::handle_table_with_first_tablet_in_sys_ls(
ObSchemaGetterGuard schema_guard;
const ObSimpleTableSchemaV2 *simple_schema = nullptr;
ObTableCompactionInfo cur_compaction_info;
const uint64_t special_table_id = cross_cluster_validator_.get_special_table_id();
// table_id of the table containing first tablet in sys ls
const uint64_t major_merge_special_table_id = ObCrossClusterTabletChecksumValidator::MAJOR_MERGE_SPECIAL_TABLE_ID;
// only primary major_freeze_service need to handle table with frist tablet in sys ls here
if (!is_primary_service) {
} else if (OB_UNLIKELY(OB_INVALID_ID == special_table_id)) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("invalid special table id", KR(ret), K_(tenant_id), K(special_table_id));
} else if (OB_FAIL(ObMultiVersionSchemaService::get_instance().get_tenant_full_schema_guard(tenant_id_, schema_guard))) {
LOG_WARN("fail to get tenant schema guard", KR(ret), K_(tenant_id));
} else if (OB_FAIL(schema_guard.get_simple_table_schema(tenant_id_, special_table_id, simple_schema))) {
LOG_WARN("fail to get table schema", KR(ret), K_(tenant_id), K(special_table_id));
} else if (OB_FAIL(schema_guard.get_simple_table_schema(tenant_id_, major_merge_special_table_id, simple_schema))) {
LOG_WARN("fail to get table schema", KR(ret), K_(tenant_id), K(major_merge_special_table_id));
} else if (OB_ISNULL(simple_schema)) {
ret = OB_TABLE_NOT_EXIST;
LOG_WARN("table schema is null", KR(ret), K_(tenant_id), K(special_table_id));
LOG_WARN("table schema is null", KR(ret), K_(tenant_id), K(major_merge_special_table_id));
} else {
SMART_VAR(ObArray<ObTabletLSPair>, pairs) {
FREEZE_TIME_GUARD;
if (OB_FAIL(ObTabletReplicaChecksumOperator::get_tablet_ls_pairs(tenant_id_, *simple_schema,
*sql_proxy_, pairs))) {
LOG_WARN("fail to get tablet_ls pairs", KR(ret), K_(tenant_id), K(special_table_id));
LOG_WARN("fail to get tablet_ls pairs", KR(ret), K_(tenant_id), K(major_merge_special_table_id));
} else if (OB_UNLIKELY(pairs.count() < 1)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("fail to get tablet_ls pairs of current table schema", KR(ret), K_(tenant_id),
K(special_table_id));
} else if (OB_FAIL(table_compaction_map_.get_refactored(special_table_id, cur_compaction_info))) {
LOG_WARN("fail to get refactored", KR(ret), K(special_table_id));
K(major_merge_special_table_id));
} else if (OB_FAIL(table_compaction_map_.get_refactored(major_merge_special_table_id, cur_compaction_info))) {
LOG_WARN("fail to get refactored", KR(ret), K(major_merge_special_table_id));
} else if (OB_FAIL(cross_cluster_validator_.write_tablet_checksum_at_table_level(stop, pairs,
global_broadcast_scn, cur_compaction_info, special_table_id, expected_epoch))) {
global_broadcast_scn, cur_compaction_info, major_merge_special_table_id, expected_epoch))) {
LOG_WARN("fail to write tablet checksum at table level", KR(ret), K_(tenant_id), K(pairs));
} else if (OB_FAIL(ObTabletMetaTableCompactionOperator::batch_update_report_scn(
tenant_id_, global_broadcast_scn.get_val_for_tx(),