[scn] rename log_ts to scn

This commit is contained in:
obdev
2022-11-28 02:29:00 +00:00
committed by ob-robot
parent 89c7502360
commit 59db61e110
316 changed files with 219033 additions and 6033 deletions

View File

@ -47,7 +47,7 @@ ObLogHandler::ObLogHandler() : self_(),
last_renew_loc_ts_(OB_INVALID_TIMESTAMP),
is_in_stop_state_(true),
is_inited_(false),
get_max_decided_log_ts_ns_debug_time_(OB_INVALID_TIMESTAMP)
get_max_decided_scn_debug_time_(OB_INVALID_TIMESTAMP)
{
}
@ -84,7 +84,7 @@ int ObLogHandler::init(const int64_t id,
ret = OB_ERR_UNEXPECTED;
CLOG_LOG(WARN, "apply status is not exist", K(ret), K(id));
} else {
get_max_decided_log_ts_ns_debug_time_ = OB_INVALID_TIMESTAMP;
get_max_decided_scn_debug_time_ = OB_INVALID_TIMESTAMP;
apply_service_ = apply_service;
replay_service_ = replay_service;
apply_status_->inc_ref();
@ -172,32 +172,10 @@ void ObLogHandler::destroy()
rpc_proxy_ = NULL;
palf_env_ = NULL;
id_ = -1;
get_max_decided_log_ts_ns_debug_time_ = OB_INVALID_TIMESTAMP;
get_max_decided_scn_debug_time_ = OB_INVALID_TIMESTAMP;
}
}
int ObLogHandler::append(const void *buffer,
const int64_t nbytes,
const int64_t ref_ts_ns,
const bool need_nonblock,
AppendCb *cb,
LSN &lsn,
int64_t &ts_ns)
{
int ret = OB_SUCCESS;
SCN ref_scn;
SCN scn;
if (OB_FAIL(ref_scn.convert_for_gts(ref_ts_ns))) {
PALF_LOG(WARN, "failed to convert_for_gts", K(ref_ts_ns), KPC(this));
} else if (OB_FAIL(append(buffer, nbytes, ref_scn, need_nonblock, cb, lsn, scn))) {
PALF_LOG(WARN, "failed to append", K(ret), KPC(this));
} else {
ts_ns = scn.get_val_for_lsn_allocator();
}
return ret;
}
int ObLogHandler::append(const void *buffer,
const int64_t nbytes,
const SCN &ref_scn,
@ -312,20 +290,6 @@ int ObLogHandler::get_access_mode(int64_t &mode_version, palf::AccessMode &acces
return ret;
}
int ObLogHandler::change_access_mode(const int64_t mode_version,
const palf::AccessMode &access_mode,
const int64_t ref_ts_ns)
{
int ret = OB_SUCCESS;
SCN ref_scn;
if (OB_FAIL(ref_scn.convert_for_gts(ref_ts_ns))) {
PALF_LOG(WARN, "failed to convert_for_gts", K(ret), K(ref_ts_ns));
} else if (OB_FAIL(change_access_mode(mode_version, access_mode, ref_scn))) {
PALF_LOG(WARN, "failed to change access mode", K(ret), K(mode_version), K(access_mode), K(ref_scn));
} else {/*do nothing*/}
return ret;
}
int ObLogHandler::change_access_mode(const int64_t mode_version,
const palf::AccessMode &access_mode,
const palf::SCN &ref_scn)
@ -362,14 +326,9 @@ int ObLogHandler::seek(const LSN &lsn, PalfGroupBufferIterator &iter)
}
int ObLogHandler::seek(const SCN &scn, palf::PalfGroupBufferIterator &iter)
{
return seek(scn.get_val_for_inner_table_field(), iter);
}
int ObLogHandler::seek(const int64_t ts_ns, palf::PalfGroupBufferIterator &iter)
{
RLockGuard guard(lock_);
return palf_handle_.seek(ts_ns, iter);
return palf_handle_.seek(scn, iter);
}
int ObLogHandler::set_initial_member_list(const common::ObMemberList &member_list,
@ -405,31 +364,12 @@ int ObLogHandler::locate_by_scn_coarsely(const SCN &scn, LSN &result_lsn)
return palf_handle_.locate_by_scn_coarsely(scn, result_lsn);
}
int ObLogHandler::locate_by_ts_ns_coarsely(const int64_t ts_ns, LSN &result_lsn)
{
SCN scn;
(void)scn.convert_for_gts(ts_ns);
return locate_by_scn_coarsely(scn, result_lsn);
}
int ObLogHandler::locate_by_lsn_coarsely(const LSN &lsn, palf::SCN &result_scn)
{
RLockGuard guard(lock_);
return palf_handle_.locate_by_lsn_coarsely(lsn, result_scn);
}
int ObLogHandler::locate_by_lsn_coarsely(const LSN &lsn, int64_t &result_ts_ns)
{
int ret = OB_SUCCESS;
SCN result_scn;
if (OB_FAIL(locate_by_lsn_coarsely(lsn, result_scn))) {
PALF_LOG(WARN, "failed to locate_by_lsn_coarsely", K(lsn), K(ret));
} else {
result_ts_ns = result_scn.get_val_for_lsn_allocator();
}
return ret;
}
int ObLogHandler::advance_base_lsn(const LSN &lsn)
{
RLockGuard guard(lock_);
@ -454,36 +394,12 @@ int ObLogHandler::get_max_scn(palf::SCN &scn) const
return palf_handle_.get_max_scn(scn);
}
int ObLogHandler::get_max_ts_ns(int64_t &ts_ns) const
{
int ret = OB_SUCCESS;
SCN scn;
if (OB_FAIL(get_max_scn(scn))) {
PALF_LOG(WARN, "failed to get_end_ts_ns", K(ret));
} else {
ts_ns = scn.get_val_for_lsn_allocator();
}
return ret;
}
int ObLogHandler::get_end_scn(palf::SCN &scn) const
{
RLockGuard guard(lock_);
return palf_handle_.get_end_scn(scn);
}
int ObLogHandler::get_end_ts_ns(int64_t &ts_ns) const
{
int ret = OB_SUCCESS;
SCN scn;
if (OB_FAIL(get_end_scn(scn))) {
PALF_LOG(WARN, "failed to get_end_ts_ns", K(ret));
} else {
ts_ns = scn.get_val_for_lsn_allocator();
}
return ret;
}
int ObLogHandler::get_paxos_member_list(common::ObMemberList &member_list, int64_t &paxos_replica_num) const
{
RLockGuard guard(lock_);
@ -600,9 +516,9 @@ int ObLogHandler::is_in_sync(bool &is_log_sync,
} else if (LEADER == role) {
is_log_sync = true;
} else if (OB_FAIL(palf_handle_.get_max_scn(local_max_scn)) || !local_max_scn.is_valid()) {
CLOG_LOG(WARN, "get_max_ts_ns failed", K(ret), K_(id), K(local_max_scn));
CLOG_LOG(WARN, "get_max_scn failed", K(ret), K_(id), K(local_max_scn));
} else if (palf_reach_time_interval(SYNC_GET_LEADER_INFO_INTERVAL_US, last_check_sync_ts_)) {
// if reachs time interval, get max_ts_ns of leader with sync RPC
// if reachs time interval, get max_scn of leader with sync RPC
if (OB_FAIL(get_leader_max_scn_(leader_max_scn))) {
CLOG_LOG(WARN, "get_palf_max_scn failed", K(ret), K_(id));
}
@ -633,7 +549,7 @@ int ObLogHandler::get_leader_max_scn_(SCN &max_scn) const
need_renew_leader = true;
} else if (OB_FAIL(rpc_proxy_->to(leader).timeout(500 * 1000).trace_time(true). \
by(MTL_ID()).get_palf_stat(req, resp))) {
CLOG_LOG(WARN, "get_palf_max_ts_ns failed", K(ret), K_(id));
CLOG_LOG(WARN, "get_palf_max_scn failed", K(ret), K_(id));
need_renew_leader = true;
} else {
max_scn = resp.max_scn_;
@ -1065,16 +981,16 @@ int ObLogHandler::submit_config_change_cmd_(const LogConfigChangeCmd &req)
CLOG_LOG(WARN, "invalid argument", KR(ret), K_(id), K(req));
} else {
constexpr int64_t MIN_CONN_TIMEOUT_US = 5 * 1000 * 1000; // 5s
constexpr int64_t RENEW_LEADER_INTERVAL_NS = 500 * 1000 * 1000L; // 500ms
const int64_t timeout_us = req.timeout_ns_ / 1000;
constexpr int64_t RENEW_LEADER_INTERVAL_US = 500 * 1000; // 500ms
const int64_t timeout_us = req.timeout_us_;
const int64_t conn_timeout_us = MIN(timeout_us, MIN_CONN_TIMEOUT_US);
const int64_t start_ts_ns = common::ObTimeUtility::current_time_ns();
int64_t last_renew_leader_ts_ns = OB_INVALID_TIMESTAMP;
const int64_t start_time_us = common::ObTimeUtility::current_time();
int64_t last_renew_leader_time_us = OB_INVALID_TIMESTAMP;
FLOG_INFO("config_change start", K_(id), K(req));
bool has_added_to_blacklist = false;
bool has_removed_from_blacklist = false;
while(OB_SUCCESS == ret || OB_NOT_MASTER == ret) {
if (common::ObTimeUtility::current_time_ns() - start_ts_ns >= req.timeout_ns_) {
if (common::ObTimeUtility::current_time() - start_time_us >= req.timeout_us_) {
ret = OB_TIMEOUT;
break;
}
@ -1110,7 +1026,7 @@ int ObLogHandler::submit_config_change_cmd_(const LogConfigChangeCmd &req)
}
} else if (OB_SUCC(resp.ret_)) {
FLOG_INFO("config_change finish", KR(ret), KPC(this), K(req),
"cost time(ns)", common::ObTimeUtility::current_time_ns() - start_ts_ns);
"cost time(ns)", common::ObTimeUtility::current_time() - start_time_us);
break;
} else if (OB_EAGAIN == ret) {
ret = OB_SUCCESS;
@ -1138,8 +1054,8 @@ int ObLogHandler::submit_config_change_cmd_(const LogConfigChangeCmd &req)
CLOG_LOG(WARN, "handle_config_change_cmd failed", KR(ret), KPC(this), K(req), K(leader));
}
if (need_renew_leader &&
common::ObTimeUtility::current_time_ns() - last_renew_leader_ts_ns > RENEW_LEADER_INTERVAL_NS) {
last_renew_leader_ts_ns = common::ObTimeUtility::current_time_ns();
common::ObTimeUtility::current_time() - last_renew_leader_time_us > RENEW_LEADER_INTERVAL_US) {
last_renew_leader_time_us = common::ObTimeUtility::current_time();
ret = lc_cb_->nonblock_renew_leader(id_);
CLOG_LOG(INFO, "renew location cache leader", KR(ret), K_(id));
}
@ -1196,17 +1112,8 @@ void ObLogHandler::wait_append_sync() {
WaitQuiescent(ls_qs_);
}
int ObLogHandler::enable_replay(const palf::LSN &initial_lsn,
const int64_t &log_ts)
{
SCN log_scn;
//TODO(yaoying.yyy)
log_scn.convert_for_gts(log_ts);
return enable_replay(initial_lsn, log_scn);
}
int ObLogHandler::enable_replay(const palf::LSN &lsn,
const palf::SCN &log_scn)
const palf::SCN &scn)
{
int ret = OB_SUCCESS;
RLockGuard guard(lock_);
@ -1214,13 +1121,13 @@ int ObLogHandler::enable_replay(const palf::LSN &lsn,
if (IS_NOT_INIT) {
ret = OB_NOT_INIT;
} else if (FALSE_IT(id = id_)) {
} else if (!lsn.is_valid() || !log_scn.is_valid()) {
} else if (!lsn.is_valid() || !scn.is_valid()) {
ret = OB_INVALID_ARGUMENT;
CLOG_LOG(WARN, "invalid argument", K(ret), K(id), K(lsn), K(log_scn));
} else if (OB_FAIL(replay_service_->enable(id, lsn, log_scn))) {
CLOG_LOG(WARN, "failed to enable replay", K(ret), K(id), K(lsn), K(log_scn));
CLOG_LOG(WARN, "invalid argument", K(ret), K(id), K(lsn), K(scn));
} else if (OB_FAIL(replay_service_->enable(id, lsn, scn))) {
CLOG_LOG(WARN, "failed to enable replay", K(ret), K(id), K(lsn), K(scn));
} else {
CLOG_LOG(INFO, "enable replay success", K(ret), K(id), K(lsn), K(log_scn));
CLOG_LOG(INFO, "enable replay success", K(ret), K(id), K(lsn), K(scn));
}
return ret;
}
@ -1241,18 +1148,6 @@ int ObLogHandler::disable_replay()
return ret;
}
int ObLogHandler::get_max_decided_log_ts_ns(int64_t &log_ts)
{
int ret = OB_SUCCESS;
SCN scn;
if (OB_FAIL(get_max_decided_scn(scn))) {
CLOG_LOG(WARN, "failed to get_max_decided_log_ts_ns", K(ret));
} else {
log_ts = scn.get_val_for_lsn_allocator();
}
return ret;
}
int ObLogHandler::pend_submit_replay_log()
{
int ret = OB_SUCCESS;
@ -1314,20 +1209,19 @@ int ObLogHandler::get_max_decided_scn(SCN &scn)
//和replay service统一返回4109
ret = OB_STATE_NOT_MATCH;
} else if (FALSE_IT(id = id_)) {
} else if (OB_FAIL(apply_service_->get_min_unapplied_log_scn(id, min_unapply_scn))) {
CLOG_LOG(WARN, "failed to get_min_unapplied_log_scn", K(ret), K(id));
} else if (OB_FAIL(replay_service_->get_min_unreplayed_log_scn(id, min_unreplay_scn))) {
} else if (OB_FAIL(apply_service_->get_min_unapplied_scn(id, min_unapply_scn))) {
CLOG_LOG(WARN, "failed to get_min_unapplied_scn", K(ret), K(id));
} else if (OB_FAIL(replay_service_->get_min_unreplayed_scn(id, min_unreplay_scn))) {
if (OB_STATE_NOT_MATCH != ret) {
CLOG_LOG(WARN, "failed to get_min_unreplayed_log_scn", K(ret), K(id));
} else if (palf_reach_time_interval(1000 * 1000, get_max_decided_log_ts_ns_debug_time_)) {
CLOG_LOG(WARN, "failed to get_min_unreplayed_log_ts_ns, replay status is not enabled", K(ret), K(id));
CLOG_LOG(WARN, "failed to get_min_unreplayed_scn", K(ret), K(id));
} else if (palf_reach_time_interval(1000 * 1000, get_max_decided_scn_debug_time_)) {
CLOG_LOG(WARN, "failed to get_min_unreplayed_scn, replay status is not enabled", K(ret), K(id));
}
if (OB_STATE_NOT_MATCH == ret && min_unapply_scn.is_valid()) {
//回放尚未enable,但是apply service中拿到的最大连续回调位点合法
ret = OB_SUCCESS;
if (min_unapply_scn > SCN::base_scn()) {
//TODO(scn):yaoying.yyy
scn.convert_for_gts(min_unapply_scn.get_val_for_lsn_allocator() - 1);
scn = SCN::scn_dec(min_unapply_scn);
ret = OB_SUCCESS;
} else {
scn.set_min();
@ -1338,8 +1232,7 @@ int ObLogHandler::get_max_decided_scn(SCN &scn)
} else {
SCN tmp_scn = SCN::max(min_unreplay_scn, min_unapply_scn);
if (tmp_scn > SCN::base_scn()) {
//TODO(scn):yaoying.yyy
scn.convert_for_gts(tmp_scn.get_val_for_lsn_allocator() - 1);
scn = SCN::scn_dec(tmp_scn);
} else {
scn.set_min();
}