fix bk update report_scn & use cluster_version to compat

This commit is contained in:
obdev
2023-02-24 15:18:01 +00:00
committed by ob-robot
parent 0daf19f115
commit 12b7109333
6 changed files with 30 additions and 27 deletions

View File

@ -209,8 +209,7 @@ int ObTabletMetaTableCompactionOperator::batch_update_unequal_report_scn_tablet(
} else if (OB_FAIL(append_tablet_id_array(tenant_id, input_tablet_id_array, start_idx, end_idx, sql))) {
LOG_WARN("fail to append tablet id array", KR(ret), K(tenant_id),
K(input_tablet_id_array.count()), K(start_idx), K(end_idx));
} else if (OB_FAIL(sql.append_fmt(") AND compaction_scn = '%lu' AND report_scn < '%lu'",
major_frozen_scn, major_frozen_scn))) {
} else if (OB_FAIL(sql.append_fmt(") AND report_scn < '%lu'", major_frozen_scn))) {
LOG_WARN("failed to assign sql", K(ret), K(tenant_id), K(start_idx));
} else {
SMART_VAR(ObISQLClient::ReadResult, result) {
@ -303,21 +302,23 @@ int ObTabletMetaTableCompactionOperator::inner_batch_update_unequal_report_scn_t
int64_t affected_rows = 0;
const uint64_t meta_tenant_id = gen_meta_tenant_id(tenant_id);
ObSqlString sql;
if (OB_FAIL(sql.append_fmt("UPDATE %s SET report_scn='%lu' WHERE tenant_id='%lu' AND ls_id='%ld' AND tablet_id IN (",
OB_ALL_TABLET_META_TABLE_TNAME,
major_frozen_scn,
tenant_id,
ls_id.id()))) {
if (OB_FAIL(sql.append_fmt(
"UPDATE %s t1 SET report_scn=if(compaction_scn>'%lu' ,'%lu', compaction_scn) WHERE "
"tenant_id='%lu' AND ls_id='%ld' AND tablet_id IN (",
OB_ALL_TABLET_META_TABLE_TNAME, major_frozen_scn, major_frozen_scn,
tenant_id, ls_id.id()))) {
LOG_WARN("failed to append fmt", K(ret), K(tenant_id), K(ls_id));
} else if (OB_FAIL(append_tablet_id_array(tenant_id, unequal_tablet_id_array, 0, unequal_tablet_id_array.count(), sql))) {
} else if (OB_FAIL(append_tablet_id_array(tenant_id, unequal_tablet_id_array,
0, unequal_tablet_id_array.count(),
sql))) {
LOG_WARN("fail to append tablet id array", KR(ret), K(tenant_id), K(unequal_tablet_id_array));
} else if (OB_FAIL(sql.append_fmt(") AND compaction_scn >= '%lu' AND report_scn <'%lu'",
major_frozen_scn, major_frozen_scn))) {
} else if (OB_FAIL(sql.append_fmt(") AND report_scn <'%lu'", major_frozen_scn))) {
LOG_WARN("failed to assign sql", K(ret), K(tenant_id), K(ls_id));
} else if (OB_FAIL(GCTX.sql_proxy_->write(meta_tenant_id, sql.ptr(), affected_rows))) {
} else if (OB_FAIL(GCTX.sql_proxy_->write(meta_tenant_id, sql.ptr(),
affected_rows))) {
LOG_WARN("fail to execute sql", KR(ret), K(tenant_id), K(meta_tenant_id), K(sql));
} else if (affected_rows > 0) {
LOG_INFO("success to update unequal report_scn", K(ret), K(tenant_id), K(ls_id), K(unequal_tablet_id_array.count()));
LOG_INFO("success to update unequal report_scn", K(ret), K(sql), K(tenant_id), K(ls_id), K(unequal_tablet_id_array.count()));
}
return ret;
}
@ -360,7 +361,7 @@ int ObTabletMetaTableCompactionOperator::batch_update_report_scn(
} else if (OB_FAIL(GET_MIN_DATA_VERSION(tenant_id, compat_version))) {
LOG_WARN("fail to get data version", KR(ret), K(tenant_id));
} else if (compat_version < DATA_VERSION_4_1_0_0) {
// do nothing
// do nothing until schema upgrade
} else {
ObMySQLTransaction trans;
int64_t affected_rows = 0;
@ -409,7 +410,7 @@ int ObTabletMetaTableCompactionOperator::batch_update_status(
} else if (OB_FAIL(GET_MIN_DATA_VERSION(tenant_id, compat_version))) {
LOG_WARN("fail to get data version", KR(ret), K(tenant_id));
} else if (compat_version < DATA_VERSION_4_1_0_0) {
// do nothing
// do nothing until schema upgrade
} else {
ObMySQLTransaction trans;
int64_t affected_rows = 0;

View File

@ -279,6 +279,9 @@ int ObMediumCompactionScheduleFunc::get_max_reserved_snapshot(int64_t &max_reser
if (0 == table_store.get_major_sstables().count()) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("major sstable should not be empty", K(ret), K(tablet_));
} else if (0 == ls_.get_min_reserved_snapshot()) {
ret = OB_NO_NEED_MERGE;
// not sync reserved snapshot yet, should not schedule now
} else if (FALSE_IT(max_merged_snapshot = table_store.get_major_sstables().get_boundary_table(true/*last*/)->get_snapshot_version())) {
} else if (OB_FAIL(MTL(ObTenantFreezeInfoMgr*)->get_min_reserved_snapshot(
tablet_.get_tablet_meta().tablet_id_, max_merged_snapshot, min_reserved_snapshot))) {

View File

@ -22,7 +22,7 @@ namespace compaction
{
const char *ObServerCompactionEvent::ObCompactionEventStr[] = {
"GET_COMPACTION_INFO",
"RECEIVE_BROADCAST_SCN",
"GET_FREEZE_INFO",
"WEAK_READ_TS_READY",
"SCHEDULER_LOOP",
@ -34,7 +34,7 @@ const char *ObServerCompactionEvent::get_comp_event_str(enum ObCompactionEvent e
{
STATIC_ASSERT(static_cast<int64_t>(COMPACTION_EVENT_MAX) == ARRAYSIZEOF(ObCompactionEventStr), "events str len is mismatch");
const char *str = "";
if (event >= COMPACTION_EVENT_MAX || event < GET_COMPACTION_INFO) {
if (event >= COMPACTION_EVENT_MAX || event < RECEIVE_BROADCAST_SCN) {
str = "invalid_type";
} else {
str = ObCompactionEventStr[event];

View File

@ -25,7 +25,7 @@ struct ObServerCompactionEvent
public:
enum ObCompactionEvent
{
GET_COMPACTION_INFO = 0,
RECEIVE_BROADCAST_SCN = 0,
GET_FREEZE_INFO,
WEAK_READ_TS_READY,
SCHEDULER_LOOP,

View File

@ -523,7 +523,7 @@ int ObTenantTabletScheduler::schedule_merge(const int64_t broadcast_version)
MTL_ID(),
MAJOR_MERGE,
broadcast_version,
ObServerCompactionEvent::GET_COMPACTION_INFO,
ObServerCompactionEvent::RECEIVE_BROADCAST_SCN,
schedule_stats_.start_timestamp_,
"last_merged_version",
merged_version_);
@ -1197,6 +1197,7 @@ int ObTenantTabletScheduler::get_min_dependent_schema_version(int64_t &min_schem
int ObTenantTabletScheduler::update_report_scn_as_ls_leader(ObLS &ls)
{
int ret = OB_SUCCESS;
const ObLSID &ls_id = ls.get_ls_id();
ObRole role = INVALID_ROLE;
const int64_t major_merged_scn = get_inner_table_merged_scn();
bool need_merge = false;
@ -1204,10 +1205,11 @@ int ObTenantTabletScheduler::update_report_scn_as_ls_leader(ObLS &ls)
LOG_WARN("failed to check ls state", K(ret), K(ls_id));
} else if (!need_merge) {
// do nothing
} else if (OB_FAIL(ls.get_ls_role(role))) {
LOG_WARN("failed to get ls role", K(ret), K(ls));
} else if (LEADER == role) {
const ObLSID &ls_id = ls.get_ls_id();
} else if (OB_FAIL(ObMediumCompactionScheduleFunc::get_palf_role(ls_id, role))) {
if (OB_LS_NOT_EXIST != ret) {
LOG_WARN("failed to get palf handle role", K(ret), K(ls_id));
}
} else if (is_leader_by_election(role)) {
ObSEArray<ObTabletID, 200> tablet_id_array;
if (OB_FAIL(ls.get_tablet_svr()->get_all_tablet_ids(true/*except_ls_inner_tablet*/, tablet_id_array))) {
LOG_WARN("failed to get tablet id", K(ret), K(ls_id));

View File

@ -2474,11 +2474,8 @@ int ObTablet::get_kept_multi_version_start(
LOG_WARN("failed to get min medium snapshot", K(ret), K(tablet));
}
// for compat, if cluster not upgrade to 4.1, should not consider ls.get_min_reserved_snapshot()
uint64_t compat_version = 0;
if (OB_TMP_FAIL(GET_MIN_DATA_VERSION(MTL_ID(), compat_version))) {
LOG_WARN("fail to get data version", K(tmp_ret));
} else if (compat_version >= DATA_VERSION_4_1_0_0 && ls.get_min_reserved_snapshot() > 0) {
// for compat, if receive ls_reserved_snapshot clog, should consider ls.get_min_reserved_snapshot()
if (ls.get_min_reserved_snapshot() > 0) {
ls_min_reserved_snapshot = ls.get_min_reserved_snapshot();
}
if (OB_SUCC(ret)) {