Remove get_mode_version's lock for iterator.

This commit is contained in:
obdev
2023-02-09 21:07:09 +08:00
committed by ob-robot
parent b516b155e8
commit e628976b4d
4 changed files with 30 additions and 6 deletions

View File

@ -119,6 +119,18 @@ int LogModeMgr::get_access_mode(AccessMode &access_mode) const
return ret;
}
int LogModeMgr::get_mode_version(int64_t &mode_version) const
{
int ret = OB_SUCCESS;
if (IS_NOT_INIT) {
ret = OB_NOT_INIT;
PALF_LOG(WARN, "LogModeMgr has inited", K(ret));
} else {
mode_version = ATOMIC_LOAD(reinterpret_cast<const int64_t *>(&applied_mode_meta_.mode_version_));
}
return ret;
}
int LogModeMgr::get_access_mode(int64_t &mode_version, AccessMode &access_mode) const
{
int ret = OB_SUCCESS;

View File

@ -56,6 +56,7 @@ public:
virtual void destroy();
virtual void reset_status();
virtual int get_access_mode(AccessMode &access_mode) const;
virtual int get_mode_version(int64_t &mode_version) const;
virtual int get_access_mode(int64_t &mode_version, AccessMode &access_mode) const;
virtual int get_ref_scn(int64_t &mode_version, share::SCN &ref_scn) const;
bool can_append() const;

View File

@ -1684,6 +1684,18 @@ int PalfHandleImpl::get_access_mode(AccessMode &access_mode) const
return ret;
}
int PalfHandleImpl::get_access_mode_version(int64_t &mode_version) const
{
int ret = OB_SUCCESS;
if (IS_NOT_INIT) {
ret = OB_NOT_INIT;
PALF_LOG(WARN, "PalfHandleImpl is not inited", K(ret), KPC(this));
} else if (OB_FAIL(mode_mgr_.get_mode_version(mode_version))) {
PALF_LOG(WARN, "get_mode_version failed", K(ret), KPC(this));
}
return ret;
}
int PalfHandleImpl::get_access_mode(int64_t &mode_version, AccessMode &access_mode) const
{
int ret = OB_SUCCESS;
@ -1710,10 +1722,9 @@ int PalfHandleImpl::alloc_palf_buffer_iterator(const LSN &offset,
};
auto get_mode_version = [this]() -> int64_t {
int64_t mode_version = INVALID_PROPOSAL_ID;
AccessMode curr_access_mode;
int ret = OB_SUCCESS;
if (OB_FAIL(this->get_access_mode(mode_version, curr_access_mode))) {
PALF_LOG(WARN, "get_access_mode failed", K(ret), KPC(this));
if (OB_FAIL(this->get_access_mode_version(mode_version))) {
PALF_LOG(WARN, "get_access_mode_version failed", K(ret), KPC(this));
mode_version = INVALID_PROPOSAL_ID;
}
return mode_version;
@ -1738,10 +1749,9 @@ int PalfHandleImpl::alloc_palf_group_buffer_iterator(const LSN &offset,
};
auto get_mode_version = [this]() -> int64_t {
int64_t mode_version = INVALID_PROPOSAL_ID;
AccessMode curr_access_mode;
int ret = OB_SUCCESS;
if (OB_FAIL(this->get_access_mode(mode_version, curr_access_mode))) {
PALF_LOG(WARN, "get_access_mode failed", K(ret), KPC(this));
if (OB_FAIL(this->get_access_mode_version(mode_version))) {
PALF_LOG(WARN, "get_access_mode_version failed", K(ret), KPC(this));
mode_version = INVALID_PROPOSAL_ID;
}
return mode_version;

View File

@ -683,6 +683,7 @@ public:
const share::SCN &ref_scn) override final;
int get_access_mode(int64_t &mode_version, AccessMode &access_mode) const override final;
int get_access_mode(AccessMode &access_mode) const override final;
int get_access_mode_version(int64_t &mode_version) const;
// =========================== Iterator start ============================
int alloc_palf_buffer_iterator(const LSN &offset, PalfBufferIterator &iterator) override final;
int alloc_palf_group_buffer_iterator(const LSN &offset, PalfGroupBufferIterator &iterator) override final;