fix obtest cases about the max value of SCN and add merge time statistics
This commit is contained in:
@ -16,6 +16,7 @@
|
|||||||
#include "rootserver/freeze/ob_freeze_info_manager.h"
|
#include "rootserver/freeze/ob_freeze_info_manager.h"
|
||||||
#include "rootserver/freeze/ob_zone_merge_manager.h"
|
#include "rootserver/freeze/ob_zone_merge_manager.h"
|
||||||
#include "rootserver/freeze/ob_major_freeze_util.h"
|
#include "rootserver/freeze/ob_major_freeze_util.h"
|
||||||
|
#include "rootserver/freeze/ob_major_merge_progress_checker.h"
|
||||||
#include "rootserver/ob_root_utils.h"
|
#include "rootserver/ob_root_utils.h"
|
||||||
#include "lib/mysqlclient/ob_mysql_proxy.h"
|
#include "lib/mysqlclient/ob_mysql_proxy.h"
|
||||||
#include "lib/mysqlclient/ob_isql_client.h"
|
#include "lib/mysqlclient/ob_isql_client.h"
|
||||||
@ -103,6 +104,7 @@ int ObChecksumValidatorBase::validate_checksum(
|
|||||||
const hash::ObHashMap<ObTabletLSPair, ObTabletCompactionStatus> &tablet_compaction_map,
|
const hash::ObHashMap<ObTabletLSPair, ObTabletCompactionStatus> &tablet_compaction_map,
|
||||||
int64_t &table_count,
|
int64_t &table_count,
|
||||||
hash::ObHashMap<uint64_t, ObTableCompactionInfo> &table_compaction_map,
|
hash::ObHashMap<uint64_t, ObTableCompactionInfo> &table_compaction_map,
|
||||||
|
ObMergeTimeStatistics &merge_time_statistics,
|
||||||
const int64_t expected_epoch)
|
const int64_t expected_epoch)
|
||||||
{
|
{
|
||||||
int ret = OB_SUCCESS;
|
int ret = OB_SUCCESS;
|
||||||
@ -116,7 +118,7 @@ int ObChecksumValidatorBase::validate_checksum(
|
|||||||
ret = OB_INVALID_ARGUMENT;
|
ret = OB_INVALID_ARGUMENT;
|
||||||
LOG_WARN("invalid argument", KR(ret), K_(tenant_id), K(frozen_scn));
|
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,
|
} else if (OB_FAIL(check_all_table_verification_finished(stop, frozen_scn, tablet_compaction_map,
|
||||||
table_count, table_compaction_map, expected_epoch))) {
|
table_count, table_compaction_map, merge_time_statistics, expected_epoch))) {
|
||||||
LOG_WARN("fail to check all table verification finished", KR(ret), K_(tenant_id), K(frozen_scn));
|
LOG_WARN("fail to check all table verification finished", KR(ret), K_(tenant_id), K(frozen_scn));
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
@ -199,12 +201,14 @@ int ObTabletChecksumValidator::check_all_table_verification_finished(
|
|||||||
const hash::ObHashMap<ObTabletLSPair, ObTabletCompactionStatus> &tablet_compaction_map,
|
const hash::ObHashMap<ObTabletLSPair, ObTabletCompactionStatus> &tablet_compaction_map,
|
||||||
int64_t &table_count,
|
int64_t &table_count,
|
||||||
hash::ObHashMap<uint64_t, ObTableCompactionInfo> &table_compaction_map,
|
hash::ObHashMap<uint64_t, ObTableCompactionInfo> &table_compaction_map,
|
||||||
|
ObMergeTimeStatistics &merge_time_statistics,
|
||||||
const int64_t expected_epoch)
|
const int64_t expected_epoch)
|
||||||
{
|
{
|
||||||
int ret = OB_SUCCESS;
|
int ret = OB_SUCCESS;
|
||||||
int check_ret = OB_SUCCESS;
|
int check_ret = OB_SUCCESS;
|
||||||
UNUSED(expected_epoch);
|
UNUSED(expected_epoch);
|
||||||
|
|
||||||
|
const int64_t start_time_us = ObTimeUtil::current_time();
|
||||||
if (OB_UNLIKELY(!frozen_scn.is_valid())) {
|
if (OB_UNLIKELY(!frozen_scn.is_valid())) {
|
||||||
ret = OB_INVALID_ARGUMENT;
|
ret = OB_INVALID_ARGUMENT;
|
||||||
LOG_WARN("invalid argument", KR(ret), K_(tenant_id), K(frozen_scn));
|
LOG_WARN("invalid argument", KR(ret), K_(tenant_id), K(frozen_scn));
|
||||||
@ -254,6 +258,8 @@ int ObTabletChecksumValidator::check_all_table_verification_finished(
|
|||||||
if (OB_CHECKSUM_ERROR == check_ret) {
|
if (OB_CHECKSUM_ERROR == check_ret) {
|
||||||
ret = check_ret;
|
ret = check_ret;
|
||||||
}
|
}
|
||||||
|
const int64_t cost_time_us = ObTimeUtil::current_time() - start_time_us;
|
||||||
|
merge_time_statistics.update_merge_status_us_.tablet_validator_us_ = cost_time_us;
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -413,11 +419,13 @@ int ObCrossClusterTabletChecksumValidator::check_all_table_verification_finished
|
|||||||
const hash::ObHashMap<share::ObTabletLSPair, share::ObTabletCompactionStatus> &tablet_compaction_map,
|
const hash::ObHashMap<share::ObTabletLSPair, share::ObTabletCompactionStatus> &tablet_compaction_map,
|
||||||
int64_t &table_count,
|
int64_t &table_count,
|
||||||
hash::ObHashMap<uint64_t, share::ObTableCompactionInfo> &table_compaction_map,
|
hash::ObHashMap<uint64_t, share::ObTableCompactionInfo> &table_compaction_map,
|
||||||
|
ObMergeTimeStatistics &merge_time_statistics,
|
||||||
const int64_t expected_epoch)
|
const int64_t expected_epoch)
|
||||||
{
|
{
|
||||||
int ret = OB_SUCCESS;
|
int ret = OB_SUCCESS;
|
||||||
int check_ret = OB_SUCCESS;
|
int check_ret = OB_SUCCESS;
|
||||||
|
|
||||||
|
const int64_t start_time_us = ObTimeUtil::current_time();
|
||||||
if (OB_UNLIKELY(!frozen_scn.is_valid() || tablet_compaction_map.empty())) {
|
if (OB_UNLIKELY(!frozen_scn.is_valid() || tablet_compaction_map.empty())) {
|
||||||
ret = OB_INVALID_ARGUMENT;
|
ret = OB_INVALID_ARGUMENT;
|
||||||
LOG_WARN("invalid argument", KR(ret), K_(tenant_id), K(frozen_scn),
|
LOG_WARN("invalid argument", KR(ret), K_(tenant_id), K(frozen_scn),
|
||||||
@ -481,7 +489,7 @@ int ObCrossClusterTabletChecksumValidator::check_all_table_verification_finished
|
|||||||
K(frozen_scn), KPC(table_schema));
|
K(frozen_scn), KPC(table_schema));
|
||||||
}
|
}
|
||||||
} else if (OB_FAIL(handle_table_verification_finished(stop, table_schema, frozen_scn,
|
} else if (OB_FAIL(handle_table_verification_finished(stop, table_schema, frozen_scn,
|
||||||
table_compaction_map, expected_epoch))) {
|
table_compaction_map, merge_time_statistics, expected_epoch))) {
|
||||||
LOG_WARN("fail to handle table verification finished", KR(ret), K_(tenant_id),
|
LOG_WARN("fail to handle table verification finished", KR(ret), K_(tenant_id),
|
||||||
K(frozen_scn), KPC(table_schema));
|
K(frozen_scn), KPC(table_schema));
|
||||||
}
|
}
|
||||||
@ -492,7 +500,7 @@ int ObCrossClusterTabletChecksumValidator::check_all_table_verification_finished
|
|||||||
}
|
}
|
||||||
} else { // no need to validate cross-cluster checksum
|
} else { // no need to validate cross-cluster checksum
|
||||||
if (OB_FAIL(handle_table_verification_finished(stop, table_schema, frozen_scn,
|
if (OB_FAIL(handle_table_verification_finished(stop, table_schema, frozen_scn,
|
||||||
table_compaction_map, expected_epoch))) {
|
table_compaction_map, merge_time_statistics, expected_epoch))) {
|
||||||
LOG_WARN("fail to handle table verification finished", KR(ret), K_(tenant_id),
|
LOG_WARN("fail to handle table verification finished", KR(ret), K_(tenant_id),
|
||||||
K(frozen_scn), KPC(table_schema));
|
K(frozen_scn), KPC(table_schema));
|
||||||
}
|
}
|
||||||
@ -501,7 +509,7 @@ int ObCrossClusterTabletChecksumValidator::check_all_table_verification_finished
|
|||||||
} else { // like VIEW that has no tablet, update report_scn for this table and mark it as VERIFIED
|
} else { // like VIEW that has no tablet, update report_scn for this table and mark it as VERIFIED
|
||||||
if (cur_compaction_info.is_index_ckm_verified()) {
|
if (cur_compaction_info.is_index_ckm_verified()) {
|
||||||
if (OB_FAIL(handle_table_verification_finished(stop, table_schema, frozen_scn,
|
if (OB_FAIL(handle_table_verification_finished(stop, table_schema, frozen_scn,
|
||||||
table_compaction_map, expected_epoch))) {
|
table_compaction_map, merge_time_statistics, expected_epoch))) {
|
||||||
LOG_WARN("fail to handle table verification finished", KR(ret), K_(tenant_id),
|
LOG_WARN("fail to handle table verification finished", KR(ret), K_(tenant_id),
|
||||||
K(frozen_scn), KPC(table_schema));
|
K(frozen_scn), KPC(table_schema));
|
||||||
}
|
}
|
||||||
@ -526,6 +534,8 @@ int ObCrossClusterTabletChecksumValidator::check_all_table_verification_finished
|
|||||||
if (OB_CHECKSUM_ERROR == check_ret) {
|
if (OB_CHECKSUM_ERROR == check_ret) {
|
||||||
ret = check_ret;
|
ret = check_ret;
|
||||||
}
|
}
|
||||||
|
const int64_t cost_time_us = ObTimeUtil::current_time() - start_time_us;
|
||||||
|
merge_time_statistics.update_merge_status_us_.cross_cluster_validator_us_ = cost_time_us;
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -656,6 +666,7 @@ int ObCrossClusterTabletChecksumValidator::handle_table_verification_finished(
|
|||||||
const ObTableSchema *table_schema,
|
const ObTableSchema *table_schema,
|
||||||
const SCN &frozen_scn,
|
const SCN &frozen_scn,
|
||||||
hash::ObHashMap<uint64_t, ObTableCompactionInfo> &table_compaction_map,
|
hash::ObHashMap<uint64_t, ObTableCompactionInfo> &table_compaction_map,
|
||||||
|
ObMergeTimeStatistics &merge_time_statistics,
|
||||||
const int64_t expected_epoch)
|
const int64_t expected_epoch)
|
||||||
{
|
{
|
||||||
int ret = OB_SUCCESS;
|
int ret = OB_SUCCESS;
|
||||||
@ -684,6 +695,7 @@ int ObCrossClusterTabletChecksumValidator::handle_table_verification_finished(
|
|||||||
LOG_WARN("fail to get tablet_ls pairs of current table schema", KR(ret), K_(tenant_id), K(table_id));
|
LOG_WARN("fail to get tablet_ls pairs of current table schema", KR(ret), K_(tenant_id), K(table_id));
|
||||||
} else {
|
} else {
|
||||||
if (is_primary_service_) { // only primary major_freeze_service need to write tablet checksum
|
if (is_primary_service_) { // only primary major_freeze_service need to write tablet checksum
|
||||||
|
const int64_t write_start_time_us = ObTimeUtil::current_time();
|
||||||
if (OB_FAIL(contains_first_tablet_in_sys_ls(pairs, is_containing))) {
|
if (OB_FAIL(contains_first_tablet_in_sys_ls(pairs, is_containing))) {
|
||||||
LOG_WARN("fail to check if contains first tablet in sys ls", KR(ret), K_(tenant_id), K(pairs));
|
LOG_WARN("fail to check if contains first tablet in sys ls", KR(ret), K_(tenant_id), K(pairs));
|
||||||
} else if (is_containing) {
|
} else if (is_containing) {
|
||||||
@ -697,12 +709,17 @@ int ObCrossClusterTabletChecksumValidator::handle_table_verification_finished(
|
|||||||
cur_compaction_info, table_id, expected_epoch))) {
|
cur_compaction_info, table_id, expected_epoch))) {
|
||||||
LOG_WARN("fail to write tablet checksum at table level", KR(ret), K_(tenant_id), K(pairs));
|
LOG_WARN("fail to write tablet checksum at table level", KR(ret), K_(tenant_id), K(pairs));
|
||||||
}
|
}
|
||||||
|
const int64_t write_cost_time_us = ObTimeUtil::current_time() - write_start_time_us;
|
||||||
|
merge_time_statistics.update_merge_status_us_.write_tablet_checksum_us_ += write_cost_time_us;
|
||||||
}
|
}
|
||||||
|
const int64_t update_start_time_us = ObTimeUtil::current_time();
|
||||||
if (FAILEDx(ObTabletMetaTableCompactionOperator::batch_update_report_scn(
|
if (FAILEDx(ObTabletMetaTableCompactionOperator::batch_update_report_scn(
|
||||||
tenant_id_, frozen_scn.get_val_for_tx(),
|
tenant_id_, frozen_scn.get_val_for_tx(),
|
||||||
pairs, ObTabletReplica::ScnStatus::SCN_STATUS_ERROR))) {
|
pairs, ObTabletReplica::ScnStatus::SCN_STATUS_ERROR))) {
|
||||||
LOG_WARN("fail to batch update report_scn", KR(ret), K_(tenant_id), K(pairs));
|
LOG_WARN("fail to batch update report_scn", KR(ret), K_(tenant_id), K(pairs));
|
||||||
}
|
}
|
||||||
|
const int64_t update_cost_time_us = ObTimeUtil::current_time() - update_start_time_us;
|
||||||
|
merge_time_statistics.update_merge_status_us_.update_report_scn_us_ += update_cost_time_us;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -925,11 +942,13 @@ int ObIndexChecksumValidator::check_all_table_verification_finished(
|
|||||||
const hash::ObHashMap<ObTabletLSPair, ObTabletCompactionStatus> &tablet_compaction_map,
|
const hash::ObHashMap<ObTabletLSPair, ObTabletCompactionStatus> &tablet_compaction_map,
|
||||||
int64_t &table_count,
|
int64_t &table_count,
|
||||||
hash::ObHashMap<uint64_t, ObTableCompactionInfo> &table_compaction_map,
|
hash::ObHashMap<uint64_t, ObTableCompactionInfo> &table_compaction_map,
|
||||||
|
ObMergeTimeStatistics &merge_time_statistics,
|
||||||
const int64_t expected_epoch)
|
const int64_t expected_epoch)
|
||||||
{
|
{
|
||||||
int ret = OB_SUCCESS;
|
int ret = OB_SUCCESS;
|
||||||
int check_ret = OB_SUCCESS;
|
int check_ret = OB_SUCCESS;
|
||||||
|
|
||||||
|
const int64_t start_time_us = ObTimeUtil::current_time();
|
||||||
if (OB_UNLIKELY(!frozen_scn.is_valid() || tablet_compaction_map.empty())) {
|
if (OB_UNLIKELY(!frozen_scn.is_valid() || tablet_compaction_map.empty())) {
|
||||||
ret = OB_INVALID_ARGUMENT;
|
ret = OB_INVALID_ARGUMENT;
|
||||||
LOG_WARN("invalid argument", KR(ret), K_(tenant_id), K(frozen_scn),
|
LOG_WARN("invalid argument", KR(ret), K_(tenant_id), K(frozen_scn),
|
||||||
@ -1080,6 +1099,8 @@ int ObIndexChecksumValidator::check_all_table_verification_finished(
|
|||||||
if (OB_CHECKSUM_ERROR == check_ret) {
|
if (OB_CHECKSUM_ERROR == check_ret) {
|
||||||
ret = check_ret;
|
ret = check_ret;
|
||||||
}
|
}
|
||||||
|
const int64_t cost_time_us = ObTimeUtil::current_time() - start_time_us;
|
||||||
|
merge_time_statistics.update_merge_status_us_.index_validator_us_ = cost_time_us;
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -29,6 +29,7 @@ namespace rootserver
|
|||||||
class ObZoneMergeManager;
|
class ObZoneMergeManager;
|
||||||
class ObFreezeInfoManager;
|
class ObFreezeInfoManager;
|
||||||
class ObServerManager;
|
class ObServerManager;
|
||||||
|
struct ObMergeTimeStatistics;
|
||||||
|
|
||||||
class ObMergeErrorCallback
|
class ObMergeErrorCallback
|
||||||
{
|
{
|
||||||
@ -69,6 +70,7 @@ public:
|
|||||||
const hash::ObHashMap<share::ObTabletLSPair, share::ObTabletCompactionStatus> &tablet_compaction_map,
|
const hash::ObHashMap<share::ObTabletLSPair, share::ObTabletCompactionStatus> &tablet_compaction_map,
|
||||||
int64_t &table_count,
|
int64_t &table_count,
|
||||||
hash::ObHashMap<uint64_t, share::ObTableCompactionInfo> &table_compaction_map,
|
hash::ObHashMap<uint64_t, share::ObTableCompactionInfo> &table_compaction_map,
|
||||||
|
ObMergeTimeStatistics &merge_time_statistics,
|
||||||
const int64_t expected_epoch);
|
const int64_t expected_epoch);
|
||||||
|
|
||||||
static const int64_t MIN_CHECK_INTERVAL = 10 * 1000 * 1000LL;
|
static const int64_t MIN_CHECK_INTERVAL = 10 * 1000 * 1000LL;
|
||||||
@ -91,6 +93,7 @@ private:
|
|||||||
const hash::ObHashMap<share::ObTabletLSPair, share::ObTabletCompactionStatus> &tablet_compaction_map,
|
const hash::ObHashMap<share::ObTabletLSPair, share::ObTabletCompactionStatus> &tablet_compaction_map,
|
||||||
int64_t &table_count,
|
int64_t &table_count,
|
||||||
hash::ObHashMap<uint64_t, share::ObTableCompactionInfo> &table_compaction_map,
|
hash::ObHashMap<uint64_t, share::ObTableCompactionInfo> &table_compaction_map,
|
||||||
|
ObMergeTimeStatistics &merge_time_statistics,
|
||||||
const int64_t expected_epoch) = 0;
|
const int64_t expected_epoch) = 0;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@ -118,6 +121,7 @@ private:
|
|||||||
const hash::ObHashMap<share::ObTabletLSPair, share::ObTabletCompactionStatus> &tablet_compaction_map,
|
const hash::ObHashMap<share::ObTabletLSPair, share::ObTabletCompactionStatus> &tablet_compaction_map,
|
||||||
int64_t &table_count,
|
int64_t &table_count,
|
||||||
hash::ObHashMap<uint64_t, share::ObTableCompactionInfo> &table_compaction_map,
|
hash::ObHashMap<uint64_t, share::ObTableCompactionInfo> &table_compaction_map,
|
||||||
|
ObMergeTimeStatistics &merge_time_statistics,
|
||||||
const int64_t expected_epoch) override;
|
const int64_t expected_epoch) override;
|
||||||
// check whether all tablets of this table finished compaction or not,
|
// check whether all tablets of this table finished compaction or not,
|
||||||
// and execute tablet replica checksum verification if this table has tablet.
|
// and execute tablet replica checksum verification if this table has tablet.
|
||||||
@ -154,6 +158,7 @@ private:
|
|||||||
const hash::ObHashMap<share::ObTabletLSPair, share::ObTabletCompactionStatus> &tablet_compaction_map,
|
const hash::ObHashMap<share::ObTabletLSPair, share::ObTabletCompactionStatus> &tablet_compaction_map,
|
||||||
int64_t &table_count,
|
int64_t &table_count,
|
||||||
hash::ObHashMap<uint64_t, share::ObTableCompactionInfo> &table_compaction_map,
|
hash::ObHashMap<uint64_t, share::ObTableCompactionInfo> &table_compaction_map,
|
||||||
|
ObMergeTimeStatistics &merge_time_statistics,
|
||||||
const int64_t expected_epoch) override;
|
const int64_t expected_epoch) override;
|
||||||
int check_need_validate(const bool is_primary_service,
|
int check_need_validate(const bool is_primary_service,
|
||||||
const share::SCN &frozen_scn,
|
const share::SCN &frozen_scn,
|
||||||
@ -169,6 +174,7 @@ private:
|
|||||||
const share::schema::ObTableSchema *table_schema,
|
const share::schema::ObTableSchema *table_schema,
|
||||||
const share::SCN &frozen_scn,
|
const share::SCN &frozen_scn,
|
||||||
hash::ObHashMap<uint64_t, share::ObTableCompactionInfo> &table_compaction_map,
|
hash::ObHashMap<uint64_t, share::ObTableCompactionInfo> &table_compaction_map,
|
||||||
|
ObMergeTimeStatistics &merge_time_statistics,
|
||||||
const int64_t expected_epoch);
|
const int64_t expected_epoch);
|
||||||
int try_update_tablet_checksum_items(const volatile bool &stop,
|
int try_update_tablet_checksum_items(const volatile bool &stop,
|
||||||
const ObArray<share::ObTabletLSPair> &pairs,
|
const ObArray<share::ObTabletLSPair> &pairs,
|
||||||
@ -200,6 +206,7 @@ private:
|
|||||||
const hash::ObHashMap<share::ObTabletLSPair, share::ObTabletCompactionStatus> &tablet_compaction_map,
|
const hash::ObHashMap<share::ObTabletLSPair, share::ObTabletCompactionStatus> &tablet_compaction_map,
|
||||||
int64_t &table_count,
|
int64_t &table_count,
|
||||||
hash::ObHashMap<uint64_t, share::ObTableCompactionInfo> &table_compaction_map,
|
hash::ObHashMap<uint64_t, share::ObTableCompactionInfo> &table_compaction_map,
|
||||||
|
ObMergeTimeStatistics &merge_time_statistics,
|
||||||
const int64_t expected_epoch) override;
|
const int64_t expected_epoch) override;
|
||||||
void check_need_validate(const bool is_primary_service, bool &need_validate) const;
|
void check_need_validate(const bool is_primary_service, bool &need_validate) const;
|
||||||
// handle data table which has tablet and index table(s). its all index tables may finish virification or not
|
// handle data table which has tablet and index table(s). its all index tables may finish virification or not
|
||||||
|
@ -34,7 +34,7 @@ using namespace oceanbase::share;
|
|||||||
using namespace oceanbase::share::schema;
|
using namespace oceanbase::share::schema;
|
||||||
|
|
||||||
ObMajorMergeProgressChecker::ObMajorMergeProgressChecker()
|
ObMajorMergeProgressChecker::ObMajorMergeProgressChecker()
|
||||||
: is_inited_(false), tenant_id_(OB_INVALID_ID), sql_proxy_(nullptr),
|
: merge_time_statistics_(), is_inited_(false), tenant_id_(OB_INVALID_ID), sql_proxy_(nullptr),
|
||||||
schema_service_(nullptr), zone_merge_mgr_(nullptr), lst_operator_(nullptr),
|
schema_service_(nullptr), zone_merge_mgr_(nullptr), lst_operator_(nullptr),
|
||||||
server_trace_(nullptr), tablet_compaction_map_(), table_count_(0), table_ids_(),
|
server_trace_(nullptr), tablet_compaction_map_(), table_count_(0), table_ids_(),
|
||||||
table_compaction_map_(), tablet_validator_(), index_validator_(), cross_cluster_validator_()
|
table_compaction_map_(), tablet_validator_(), index_validator_(), cross_cluster_validator_()
|
||||||
@ -274,6 +274,7 @@ int ObMajorMergeProgressChecker::check_merge_progress(
|
|||||||
}
|
}
|
||||||
|
|
||||||
const int64_t cost_us = ObTimeUtility::current_time() - start_time;
|
const int64_t cost_us = ObTimeUtility::current_time() - start_time;
|
||||||
|
merge_time_statistics_.update_merge_status_us_.check_merge_progress_us_ = cost_us;
|
||||||
if (OB_SUCC(ret)) {
|
if (OB_SUCC(ret)) {
|
||||||
LOG_INFO("succ to check merge progress", K_(tenant_id), K(global_broadcast_scn), K(cost_us));
|
LOG_INFO("succ to check merge progress", K_(tenant_id), K(global_broadcast_scn), K(cost_us));
|
||||||
} else {
|
} else {
|
||||||
@ -563,14 +564,14 @@ int ObMajorMergeProgressChecker::check_verification(
|
|||||||
} else if (OB_FAIL(cross_cluster_validator_.check_and_set_validate(is_primary_service, global_broadcast_scn))) {
|
} 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));
|
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_,
|
} else if (OB_FAIL(tablet_validator_.validate_checksum(stop, global_broadcast_scn, tablet_compaction_map_,
|
||||||
table_count_, table_compaction_map_, expected_epoch))) {
|
table_count_, table_compaction_map_, merge_time_statistics_, expected_epoch))) {
|
||||||
LOG_WARN("fail to validate checksum of tablet validator", KR(ret), K(global_broadcast_scn));
|
LOG_WARN("fail to validate checksum of tablet validator", KR(ret), K(global_broadcast_scn));
|
||||||
} else if (!tablet_compaction_map_.empty()) {
|
} else if (!tablet_compaction_map_.empty()) {
|
||||||
if (OB_FAIL(index_validator_.validate_checksum(stop, global_broadcast_scn,
|
if (OB_FAIL(index_validator_.validate_checksum(stop, global_broadcast_scn,
|
||||||
tablet_compaction_map_, table_count_, table_compaction_map_, expected_epoch))) {
|
tablet_compaction_map_, table_count_, table_compaction_map_, merge_time_statistics_, expected_epoch))) {
|
||||||
LOG_WARN("fail to validate checksum of index validator", KR(ret), K(global_broadcast_scn));
|
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,
|
} else if (OB_FAIL(cross_cluster_validator_.validate_checksum(stop, global_broadcast_scn,
|
||||||
tablet_compaction_map_, table_count_, table_compaction_map_, expected_epoch))) {
|
tablet_compaction_map_, table_count_, table_compaction_map_, merge_time_statistics_, expected_epoch))) {
|
||||||
LOG_WARN("fail to validate checksum of cross cluster validator", KR(ret), K(global_broadcast_scn));
|
LOG_WARN("fail to validate checksum of cross cluster validator", KR(ret), K(global_broadcast_scn));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -43,6 +43,82 @@ namespace rootserver
|
|||||||
{
|
{
|
||||||
class ObZoneMergeManager;
|
class ObZoneMergeManager;
|
||||||
|
|
||||||
|
struct ObUpdateMergeStatusTime
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
ObUpdateMergeStatusTime()
|
||||||
|
: check_merge_progress_us_(0), tablet_validator_us_(0), index_validator_us_(0),
|
||||||
|
cross_cluster_validator_us_(0), update_report_scn_us_(0), write_tablet_checksum_us_(0)
|
||||||
|
{}
|
||||||
|
|
||||||
|
void reset()
|
||||||
|
{
|
||||||
|
check_merge_progress_us_ = 0;
|
||||||
|
tablet_validator_us_ = 0;
|
||||||
|
index_validator_us_ = 0;
|
||||||
|
cross_cluster_validator_us_ = 0;
|
||||||
|
update_report_scn_us_ = 0;
|
||||||
|
write_tablet_checksum_us_ = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int64_t get_total_time_us() const
|
||||||
|
{
|
||||||
|
// Note: update_report_scn_us_ and write_tablet_checksum_us_ are included in
|
||||||
|
// cross_cluster_validator_us_ now (may be excluded later).
|
||||||
|
return (check_merge_progress_us_ + tablet_validator_us_ +
|
||||||
|
index_validator_us_ + cross_cluster_validator_us_);
|
||||||
|
}
|
||||||
|
|
||||||
|
ObUpdateMergeStatusTime &operator+=(const ObUpdateMergeStatusTime &o)
|
||||||
|
{
|
||||||
|
check_merge_progress_us_ += o.check_merge_progress_us_;
|
||||||
|
tablet_validator_us_ += o.tablet_validator_us_;
|
||||||
|
index_validator_us_ += o.index_validator_us_;
|
||||||
|
cross_cluster_validator_us_ += o.cross_cluster_validator_us_;
|
||||||
|
update_report_scn_us_ += o.update_report_scn_us_;
|
||||||
|
write_tablet_checksum_us_ += o.write_tablet_checksum_us_;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
TO_STRING_KV("total_us", get_total_time_us(), K_(check_merge_progress_us),
|
||||||
|
K_(tablet_validator_us), K_(index_validator_us), K_(cross_cluster_validator_us),
|
||||||
|
K_(update_report_scn_us), K_(write_tablet_checksum_us));
|
||||||
|
|
||||||
|
int64_t check_merge_progress_us_;
|
||||||
|
int64_t tablet_validator_us_;
|
||||||
|
int64_t index_validator_us_;
|
||||||
|
int64_t cross_cluster_validator_us_;
|
||||||
|
int64_t update_report_scn_us_;
|
||||||
|
int64_t write_tablet_checksum_us_;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ObMergeTimeStatistics
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
ObMergeTimeStatistics()
|
||||||
|
: update_merge_status_us_(), idle_us_(0)
|
||||||
|
{}
|
||||||
|
|
||||||
|
void reset()
|
||||||
|
{
|
||||||
|
update_merge_status_us_.reset();
|
||||||
|
idle_us_ = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
ObMergeTimeStatistics &operator+=(const ObMergeTimeStatistics &o)
|
||||||
|
{
|
||||||
|
update_merge_status_us_ += o.update_merge_status_us_;
|
||||||
|
idle_us_ += o.idle_us_;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
TO_STRING_KV("total_us", update_merge_status_us_.get_total_time_us() + idle_us_,
|
||||||
|
K_(update_merge_status_us), K_(idle_us));
|
||||||
|
|
||||||
|
ObUpdateMergeStatusTime update_merge_status_us_;
|
||||||
|
int64_t idle_us_;
|
||||||
|
};
|
||||||
|
|
||||||
class ObMajorMergeProgressChecker
|
class ObMajorMergeProgressChecker
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -80,6 +156,9 @@ public:
|
|||||||
|
|
||||||
void set_major_merge_start_time(const int64_t major_merge_start_us);
|
void set_major_merge_start_time(const int64_t major_merge_start_us);
|
||||||
|
|
||||||
|
public:
|
||||||
|
ObMergeTimeStatistics merge_time_statistics_;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int check_tablet(const share::ObTabletInfo &tablet_info,
|
int check_tablet(const share::ObTabletInfo &tablet_info,
|
||||||
const common::hash::ObHashMap<ObTabletID, uint64_t> &tablet_map,
|
const common::hash::ObHashMap<ObTabletID, uint64_t> &tablet_map,
|
||||||
|
@ -27,6 +27,7 @@
|
|||||||
#include "lib/container/ob_se_array_iterator.h"
|
#include "lib/container/ob_se_array_iterator.h"
|
||||||
#include "lib/allocator/page_arena.h"
|
#include "lib/allocator/page_arena.h"
|
||||||
#include "lib/profile/ob_trace_id.h"
|
#include "lib/profile/ob_trace_id.h"
|
||||||
|
#include "lib/time/ob_time_utility.h"
|
||||||
#include "share/ob_errno.h"
|
#include "share/ob_errno.h"
|
||||||
#include "share/config/ob_server_config.h"
|
#include "share/config/ob_server_config.h"
|
||||||
#include "share/tablet/ob_tablet_table_iterator.h"
|
#include "share/tablet/ob_tablet_table_iterator.h"
|
||||||
@ -168,6 +169,7 @@ int ObMajorMergeScheduler::try_idle(
|
|||||||
const int64_t IMMEDIATE_RETRY_CNT = 3;
|
const int64_t IMMEDIATE_RETRY_CNT = 3;
|
||||||
int64_t idle_time_us = ori_idle_time_us;
|
int64_t idle_time_us = ori_idle_time_us;
|
||||||
int64_t merger_check_interval = idling_.get_idle_interval_us();
|
int64_t merger_check_interval = idling_.get_idle_interval_us();
|
||||||
|
const int64_t start_time_us = ObTimeUtil::current_time();
|
||||||
|
|
||||||
if (OB_SUCC(work_ret)) {
|
if (OB_SUCC(work_ret)) {
|
||||||
fail_count_ = 0;
|
fail_count_ = 0;
|
||||||
@ -203,6 +205,8 @@ int ObMajorMergeScheduler::try_idle(
|
|||||||
} else if (OB_FAIL(idling_.idle(idle_time_us))) {
|
} else if (OB_FAIL(idling_.idle(idle_time_us))) {
|
||||||
LOG_WARN("fail to idle", KR(ret), K(idle_time_us));
|
LOG_WARN("fail to idle", KR(ret), K(idle_time_us));
|
||||||
}
|
}
|
||||||
|
const int64_t cost_time_us = ObTimeUtil::current_time() - start_time_us;
|
||||||
|
progress_checker_.merge_time_statistics_.idle_us_ = cost_time_us;
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -286,6 +290,7 @@ int ObMajorMergeScheduler::do_one_round_major_merge(const int64_t expected_epoch
|
|||||||
int ret = OB_SUCCESS;
|
int ret = OB_SUCCESS;
|
||||||
int tmp_ret = OB_SUCCESS;
|
int tmp_ret = OB_SUCCESS;
|
||||||
|
|
||||||
|
ObMergeTimeStatistics total_merge_time_statistics;
|
||||||
HEAP_VARS_2((ObZoneMergeInfoArray, info_array), (ObGlobalMergeInfo, global_info)) {
|
HEAP_VARS_2((ObZoneMergeInfoArray, info_array), (ObGlobalMergeInfo, global_info)) {
|
||||||
LOG_INFO("start to do one round major_merge", K(expected_epoch));
|
LOG_INFO("start to do one round major_merge", K(expected_epoch));
|
||||||
// loop until 'this round major merge finished' or 'epoch changed'
|
// loop until 'this round major merge finished' or 'epoch changed'
|
||||||
@ -293,6 +298,7 @@ int ObMajorMergeScheduler::do_one_round_major_merge(const int64_t expected_epoch
|
|||||||
update_last_run_timestamp();
|
update_last_run_timestamp();
|
||||||
ObCurTraceId::init(GCONF.self_addr_);
|
ObCurTraceId::init(GCONF.self_addr_);
|
||||||
ObZoneArray to_merge_zone;
|
ObZoneArray to_merge_zone;
|
||||||
|
progress_checker_.merge_time_statistics_.reset();
|
||||||
// Place is_last_merge_complete() to the head of this while loop.
|
// Place is_last_merge_complete() to the head of this while loop.
|
||||||
// So as to break this loop at once, when the last merge is complete.
|
// So as to break this loop at once, when the last merge is complete.
|
||||||
// Otherwise, may run one extra loop that should not run, and thus incur error.
|
// Otherwise, may run one extra loop that should not run, and thus incur error.
|
||||||
@ -331,8 +337,12 @@ int ObMajorMergeScheduler::do_one_round_major_merge(const int64_t expected_epoch
|
|||||||
tmp_ret = OB_SUCCESS;
|
tmp_ret = OB_SUCCESS;
|
||||||
// treat as is_merging = true, even though last merge complete
|
// treat as is_merging = true, even though last merge complete
|
||||||
check_merge_interval_time(true);
|
check_merge_interval_time(true);
|
||||||
|
total_merge_time_statistics += progress_checker_.merge_time_statistics_;
|
||||||
|
LOG_INFO("finish one round of loop in do_one_round_major_merge", K(expected_epoch),
|
||||||
|
"merge_time_statistics", progress_checker_.merge_time_statistics_);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
LOG_INFO("finish do_one_round_major_merge", K(expected_epoch), K(total_merge_time_statistics));
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user