[FEAT MERGE] impl new type materialized view support fast refresh by major merge
Co-authored-by: fforkboat <fforkboat@gmail.com> Co-authored-by: haitaoyang <haitaoy3.14@gmail.com> Co-authored-by: chimyue <chimyue@gmail.com>
This commit is contained in:
@ -90,6 +90,7 @@
|
||||
#include "logservice/ob_server_log_block_mgr.h"
|
||||
#include "rootserver/ob_admin_drtask_util.h"
|
||||
#include "storage/ddl/ob_tablet_ddl_kv.h"
|
||||
#include "storage/mview/ob_major_mv_merge_info.h"
|
||||
#ifdef OB_BUILD_SHARED_STORAGE
|
||||
#include "close_modules/shared_storage/storage/shared_storage/ob_ss_micro_cache.h"
|
||||
#include "close_modules/shared_storage/storage/shared_storage/ob_ss_micro_cache_io_helper.h"
|
||||
@ -3583,6 +3584,97 @@ int ObResourceLimitCalculatorP::process()
|
||||
return ret;
|
||||
}
|
||||
|
||||
int ObCollectMvMergeInfoP::process()
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
ObMajorMVMergeInfo merge_info;
|
||||
const share::ObLSID ls_id = arg_.get_ls_id();
|
||||
const uint64_t tenant_id = arg_.get_tenant_id();
|
||||
int64_t proposal_id = 0;
|
||||
|
||||
MTL_SWITCH(tenant_id) {
|
||||
if (arg_.need_update() &&
|
||||
OB_FAIL(ObMVCheckReplicaHelper::get_and_update_merge_info(ls_id, merge_info))) {
|
||||
LOG_WARN("get and update merge info failed", K(ret));
|
||||
} else if (!arg_.need_update() &&
|
||||
OB_FAIL(ObMVCheckReplicaHelper::get_merge_info(ls_id, merge_info))) {
|
||||
LOG_WARN("get merge info failed", K(ret));
|
||||
} else if (arg_.need_check_leader()) {
|
||||
ObRole role;
|
||||
logservice::ObLogService *log_service = nullptr;
|
||||
if (OB_ISNULL(log_service = MTL(logservice::ObLogService*))) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("log service should not be NULL", K(ret), KP(log_service));
|
||||
} else if (OB_FAIL(log_service->get_palf_role(ls_id, role, proposal_id))) {
|
||||
LOG_WARN("failed to get role", K(ret), K(arg_));
|
||||
} else if (!is_strong_leader(role)) {
|
||||
ret = OB_LS_NOT_LEADER;
|
||||
LOG_WARN("it is not leader, cannot collect merge info", K(ret), K(ls_id), K(role), K(arg_));
|
||||
}
|
||||
}
|
||||
if (OB_FAIL(ret)) {
|
||||
} else if (OB_FAIL(result_.init(merge_info, ret))) {
|
||||
LOG_WARN("init collect mv merge info result failed", K(ret));
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
int ObFetchStableMemberListP::process()
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
const share::ObLSID ls_id = arg_.get_ls_id();
|
||||
const uint64_t tenant_id = arg_.get_tenant_id();
|
||||
// todo siyu :: use new stable member list interface
|
||||
MTL_SWITCH(tenant_id) {
|
||||
ObLSService *ls_svr = NULL;
|
||||
ObLSHandle ls_handle;
|
||||
ObLS *ls = NULL;
|
||||
logservice::ObLogHandler *log_handler = NULL;
|
||||
common::ObMemberList member_list;
|
||||
GlobalLearnerList learn_list;
|
||||
int64_t paxos_replica_num = 0;
|
||||
logservice::ObLogService *log_service = nullptr;
|
||||
palf::LogConfigVersion log_config_version;
|
||||
ObRole role;
|
||||
int64_t proposal_id = 0;
|
||||
int64_t proposal_id_new = 0;
|
||||
|
||||
if (OB_ISNULL(log_service = MTL(logservice::ObLogService*))) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("log service should not be NULL", K(ret), KP(log_service));
|
||||
} else if (OB_FAIL(log_service->get_palf_role(ls_id, role, proposal_id))) {
|
||||
LOG_WARN("failed to get role", K(ret), K(arg_));
|
||||
} else if (!is_strong_leader(role)) {
|
||||
ret = OB_LS_NOT_LEADER;
|
||||
LOG_WARN("ls is not leader, cannot get member list", K(ret), K(role), K(arg_));
|
||||
} else if (OB_ISNULL(ls_svr = MTL(ObLSService *))) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("ls service should not be null", K(ret));
|
||||
} else if (OB_FAIL(ls_svr->get_ls(ls_id, ls_handle, ObLSGetMod::STORAGE_MOD))) {
|
||||
LOG_WARN("failed to get ls", K(ret), K(ls_id));
|
||||
} else if (OB_ISNULL(ls = ls_handle.get_ls())) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("ls should not be null", K(ret));
|
||||
} else if (OB_ISNULL(log_handler = ls->get_log_handler())) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("log handler should not be NULL", K(ret));
|
||||
} else if (OB_FAIL(log_handler->get_stable_membership(log_config_version, member_list,
|
||||
paxos_replica_num, learn_list))) {
|
||||
LOG_WARN("failed to get paxos member list and log config version", K(ret));
|
||||
} else if (OB_FAIL(result_.init(member_list, log_config_version))) {
|
||||
LOG_WARN("failed to int member list and config version", K(ret), K(member_list), K(log_config_version));
|
||||
} else if (OB_FAIL(log_service->get_palf_role(ls_id, role, proposal_id_new))) {
|
||||
LOG_WARN("failed to get role", K(ret), K(arg_));
|
||||
} else if (proposal_id_new != proposal_id || !is_strong_leader(role)) {
|
||||
// double check for get stable memberlist
|
||||
ret = OB_LS_NOT_LEADER;
|
||||
LOG_WARN("ls is not leader, cannot get member list", K(ret), K(role), K(arg_));
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
#ifdef OB_BUILD_SHARED_STORAGE
|
||||
int ObGetSSMacroBlockP::process()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user