replace ts related to ddl with scn.
This commit is contained in:
@ -36,6 +36,9 @@ ObTabletMemtableMgr::ObTabletMemtableMgr()
|
||||
: ls_(NULL),
|
||||
schema_recorder_()
|
||||
{
|
||||
#if defined(__x86_64__)
|
||||
static_assert(sizeof(ObTabletMemtableMgr) <= 352, "The size of ObTabletMemtableMgr will affect the meta memory manager, and the necessity of adding new fields needs to be considered.");
|
||||
#endif
|
||||
}
|
||||
|
||||
ObTabletMemtableMgr::~ObTabletMemtableMgr()
|
||||
@ -45,26 +48,24 @@ ObTabletMemtableMgr::~ObTabletMemtableMgr()
|
||||
|
||||
void ObTabletMemtableMgr::destroy()
|
||||
{
|
||||
TCWLockGuard lock_guard(lock_);
|
||||
SpinWLockGuard lock_guard(lock_);
|
||||
// release memtable
|
||||
memtable::ObIMemtable *imemtable = nullptr;
|
||||
int ret = OB_SUCCESS;
|
||||
for (int64_t pos = memtable_head_; pos < memtable_tail_; ++pos) {
|
||||
if (OB_FAIL(memtables_[get_memtable_idx_(pos)].get_memtable(imemtable))) {
|
||||
LOG_WARN("get_memtable failed in ObTabletMemtableMgr destroy", K(ret));
|
||||
imemtable = tables_[get_memtable_idx(pos)];
|
||||
if (OB_ISNULL(imemtable)) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
STORAGE_LOG(WARN, "memtable is nullptr", K(ret), KP(imemtable), K(pos));
|
||||
} else if (imemtable->is_data_memtable()) {
|
||||
memtable::ObMemtable *memtable = static_cast<memtable::ObMemtable *>(imemtable);
|
||||
memtable->remove_from_data_checkpoint(true);
|
||||
}
|
||||
memtables_[get_memtable_idx_(pos)].reset();
|
||||
}
|
||||
memtable_head_ = 0;
|
||||
memtable_tail_ = 0;
|
||||
reset_tables();
|
||||
tablet_id_ = 0;
|
||||
ls_ = NULL;
|
||||
t3m_ = nullptr;
|
||||
freezer_ = nullptr;
|
||||
ddl_kv_mgr_ = nullptr;
|
||||
schema_recorder_.reset();
|
||||
is_inited_ = false;
|
||||
}
|
||||
@ -72,8 +73,7 @@ void ObTabletMemtableMgr::destroy()
|
||||
int ObTabletMemtableMgr::init(const common::ObTabletID &tablet_id,
|
||||
const ObLSID &ls_id,
|
||||
ObFreezer *freezer,
|
||||
ObTenantMetaMemMgr *t3m,
|
||||
ObTabletDDLKvMgr *ddl_kv_mgr)
|
||||
ObTenantMetaMemMgr *t3m)
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
ObLSService *ls_service = MTL(storage::ObLSService *);
|
||||
@ -84,10 +84,9 @@ int ObTabletMemtableMgr::init(const common::ObTabletID &tablet_id,
|
||||
LOG_WARN("this has been initialized, not init again", K(ret), K_(is_inited));
|
||||
} else if (OB_UNLIKELY(!tablet_id.is_valid())
|
||||
|| OB_ISNULL(t3m)
|
||||
|| OB_ISNULL(freezer)
|
||||
|| OB_ISNULL(ddl_kv_mgr)) {
|
||||
|| OB_ISNULL(freezer)) {
|
||||
ret = OB_INVALID_ARGUMENT;
|
||||
LOG_WARN("invalid arguments", K(ret), K(tablet_id), KP(freezer), KP(t3m), KP(ddl_kv_mgr));
|
||||
LOG_WARN("invalid arguments", K(ret), K(tablet_id), KP(freezer), KP(t3m));
|
||||
} else if (OB_ISNULL(ls_service)) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
TRANS_LOG(WARN, "ls service should not be NULL", K(ret), KP(ls_service));
|
||||
@ -101,8 +100,8 @@ int ObTabletMemtableMgr::init(const common::ObTabletID &tablet_id,
|
||||
} else {
|
||||
tablet_id_ = tablet_id;
|
||||
t3m_ = t3m;
|
||||
table_type_ = ObITable::TableType::DATA_MEMTABLE;
|
||||
freezer_ = freezer;
|
||||
ddl_kv_mgr_ = ddl_kv_mgr;
|
||||
is_inited_ = true;
|
||||
TRANS_LOG(DEBUG, "succeeded to init tablet memtable mgr", K(ret), K(ls_id), K(tablet_id));
|
||||
}
|
||||
@ -126,6 +125,15 @@ int ObTabletMemtableMgr::init_storage_schema_recorder(
|
||||
return ret;
|
||||
}
|
||||
|
||||
int ObTabletMemtableMgr::destroy_storage_schema_recorder()
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
if (schema_recorder_.is_inited()) {
|
||||
schema_recorder_.reset();
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
// There are two cases:
|
||||
// 1. create the first memtable for tablet
|
||||
// 2. create the new memtable after freezing the old memtable
|
||||
@ -135,7 +143,7 @@ int ObTabletMemtableMgr::create_memtable(const palf::SCN clog_checkpoint_scn,
|
||||
{
|
||||
ObTimeGuard time_guard("ObTabletMemtableMgr::create_memtable", 1 * 1000 * 1000);
|
||||
// Write lock
|
||||
TCWLockGuard lock_guard(lock_);
|
||||
SpinWLockGuard lock_guard(lock_);
|
||||
time_guard.click("lock");
|
||||
|
||||
int ret = OB_SUCCESS;
|
||||
@ -161,7 +169,7 @@ int ObTabletMemtableMgr::create_memtable(const palf::SCN clog_checkpoint_scn,
|
||||
ObTableHandleV2 first_frozen_memtable;
|
||||
get_first_frozen_memtable_(first_frozen_memtable);
|
||||
LOG_WARN("cannot create more memtable", K(ret), K(ls_id), K(tablet_id_), K(MAX_MEMSTORE_CNT),
|
||||
K(memtable_head_), K(memtable_tail_), K(get_memtable_count_()),
|
||||
K(get_memtable_count_()),
|
||||
KPC(first_frozen_memtable.get_table()));
|
||||
}
|
||||
} else {
|
||||
@ -257,7 +265,7 @@ bool ObTabletMemtableMgr::has_active_memtable()
|
||||
ret = OB_NOT_INIT;
|
||||
LOG_WARN("not inited", K(ret), K_(is_inited));
|
||||
} else {
|
||||
TCRLockGuard lock_guard(lock_);
|
||||
SpinRLockGuard lock_guard(lock_);
|
||||
if (NULL != get_active_memtable_()) {
|
||||
bool_ret = true;
|
||||
}
|
||||
@ -267,22 +275,23 @@ bool ObTabletMemtableMgr::has_active_memtable()
|
||||
|
||||
int64_t ObTabletMemtableMgr::get_memtable_count() const
|
||||
{
|
||||
TCRLockGuard lock_guard(lock_);
|
||||
SpinRLockGuard lock_guard(lock_);
|
||||
return get_memtable_count_();
|
||||
}
|
||||
|
||||
int ObTabletMemtableMgr::get_boundary_memtable(ObTableHandleV2 &handle)
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
TCRLockGuard lock_guard(lock_);
|
||||
SpinRLockGuard lock_guard(lock_);
|
||||
memtable::ObIMemtable *memtable = nullptr;
|
||||
handle.reset();
|
||||
|
||||
if (OB_UNLIKELY(get_memtable_count_() == 0)) {
|
||||
ret = OB_ENTRY_NOT_EXIST;
|
||||
} else if (memtable_tail_ > memtable_head_) {
|
||||
handle = memtables_[get_memtable_idx_(memtable_tail_ - 1)];
|
||||
if (OB_FAIL(handle.get_memtable(memtable))) {
|
||||
if (OB_FAIL(get_ith_memtable(memtable_tail_ - 1, handle))) {
|
||||
STORAGE_LOG(WARN, "fail to get ith memtable", K(ret), K(memtable_tail_));
|
||||
} else if (OB_FAIL(handle.get_memtable(memtable))) {
|
||||
handle.reset();
|
||||
LOG_WARN("there is no boundary memtable", K(ret));
|
||||
}
|
||||
@ -294,7 +303,7 @@ int ObTabletMemtableMgr::get_boundary_memtable(ObTableHandleV2 &handle)
|
||||
int ObTabletMemtableMgr::get_active_memtable(ObTableHandleV2 &handle) const
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
TCRLockGuard lock_guard(lock_);
|
||||
SpinRLockGuard lock_guard(lock_);
|
||||
handle.reset();
|
||||
if (OB_UNLIKELY(!is_inited_)) {
|
||||
ret = OB_NOT_INIT;
|
||||
@ -316,8 +325,9 @@ int ObTabletMemtableMgr::get_active_memtable_(ObTableHandleV2 &handle) const
|
||||
LOG_DEBUG("no memtable exists", K(ret));
|
||||
} else if (memtable_tail_ > memtable_head_) {
|
||||
memtable::ObMemtable *memtable = nullptr;
|
||||
handle = memtables_[get_memtable_idx_(memtable_tail_ - 1)];
|
||||
if (OB_FAIL(handle.get_data_memtable(memtable))) {
|
||||
if (OB_FAIL(get_ith_memtable(memtable_tail_ - 1, handle))) {
|
||||
STORAGE_LOG(WARN, "fail to get ith memtable", K(ret), K(memtable_tail_));
|
||||
} else if (OB_FAIL(handle.get_data_memtable(memtable))) {
|
||||
LOG_WARN("fail to get memtable", K(ret));
|
||||
} else if (!memtable->is_active_memtable()) {
|
||||
handle.reset();
|
||||
@ -330,7 +340,7 @@ int ObTabletMemtableMgr::get_active_memtable_(ObTableHandleV2 &handle) const
|
||||
ObMemtable *ObTabletMemtableMgr::get_last_frozen_memtable() const
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
TCRLockGuard lock_guard(lock_);
|
||||
SpinRLockGuard lock_guard(lock_);
|
||||
memtable::ObMemtable *memtable = nullptr;
|
||||
|
||||
if (OB_UNLIKELY(!is_inited_)) {
|
||||
@ -462,11 +472,12 @@ int ObTabletMemtableMgr::get_memtable_for_replay(palf::SCN replay_scn,
|
||||
ret = OB_NOT_INIT;
|
||||
LOG_WARN("not inited", K(ret), K_(is_inited));
|
||||
} else {
|
||||
TCRLockGuard lock_guard(lock_);
|
||||
SpinRLockGuard lock_guard(lock_);
|
||||
int64_t i = 0;
|
||||
for (i = memtable_tail_ - 1; OB_SUCC(ret) && i >= memtable_head_; --i) {
|
||||
handle = memtables_[get_memtable_idx_(i)];
|
||||
if (OB_FAIL(handle.get_data_memtable(memtable))) {
|
||||
if (OB_FAIL(get_ith_memtable(i, handle))) {
|
||||
STORAGE_LOG(WARN, "fail to get ith memtable", K(ret), K(i));
|
||||
} else if (OB_FAIL(handle.get_data_memtable(memtable))) {
|
||||
handle.reset();
|
||||
LOG_WARN("fail to get data memtable", K(ret));
|
||||
} else {
|
||||
@ -507,7 +518,7 @@ int ObTabletMemtableMgr::get_memtables(
|
||||
ret = OB_NOT_INIT;
|
||||
LOG_WARN("not inited", K(ret), K_(is_inited));
|
||||
} else {
|
||||
TCRLockGuard lock_guard(lock_);
|
||||
SpinRLockGuard lock_guard(lock_);
|
||||
if (reset_handle) {
|
||||
handle.reset();
|
||||
}
|
||||
@ -535,7 +546,7 @@ int ObTabletMemtableMgr::get_memtables_nolock(ObTableHdlArray &handle)
|
||||
int ObTabletMemtableMgr::get_all_memtables(ObTableHdlArray &handle)
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
TCRLockGuard lock_guard(lock_);
|
||||
SpinRLockGuard lock_guard(lock_);
|
||||
if (OB_UNLIKELY(!is_inited_)) {
|
||||
ret = OB_NOT_INIT;
|
||||
LOG_WARN("not inited", K(ret), K_(is_inited));
|
||||
@ -555,9 +566,10 @@ int ObTabletMemtableMgr::release_head_empty_memtable(memtable::ObIMemtable *flus
|
||||
ret = OB_NOT_INIT;
|
||||
TRANS_LOG(WARN, "not inited", K(ret));
|
||||
} else {
|
||||
memtable::ObIMemtable *imemtable = nullptr;
|
||||
if (OB_FAIL(memtables_[get_memtable_idx_(memtable_head_)].get_memtable(imemtable))) {
|
||||
STORAGE_LOG(WARN, "fail to get memtable", K(ret));
|
||||
memtable::ObIMemtable *imemtable = tables_[get_memtable_idx(memtable_head_)];
|
||||
if (OB_ISNULL(imemtable)) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
STORAGE_LOG(WARN, "memtable is nullptr", K(ret), KP(imemtable), K(memtable_head_));
|
||||
} else if (flush_memtable == imemtable) {
|
||||
memtable::ObMemtable *memtable = static_cast<memtable::ObMemtable *>(imemtable);
|
||||
if (memtable->is_empty()) {
|
||||
@ -574,7 +586,7 @@ int ObTabletMemtableMgr::release_head_empty_memtable(memtable::ObIMemtable *flus
|
||||
}
|
||||
}
|
||||
}
|
||||
lock_.wrunlock();
|
||||
lock_.unlock();
|
||||
} else {
|
||||
ret = OB_EAGAIN;
|
||||
}
|
||||
@ -593,8 +605,8 @@ int ObTabletMemtableMgr::release_head_memtable_(memtable::ObIMemtable *imemtable
|
||||
if (OB_UNLIKELY(get_memtable_count_() <= 0)) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
} else {
|
||||
const int64_t idx = get_memtable_idx_(memtable_head_);
|
||||
if (memtables_[idx].is_valid() && memtable == memtables_[idx].get_table()) {
|
||||
const int64_t idx = get_memtable_idx(memtable_head_);
|
||||
if (nullptr != tables_[idx] && memtable == tables_[idx]) {
|
||||
LOG_INFO("release head memtable", K(ret), K(ls_id), KPC(memtable));
|
||||
memtable::ObMtStat& mt_stat = memtable->get_mt_stat();
|
||||
if (0 == mt_stat.release_time_) {
|
||||
@ -610,8 +622,7 @@ int ObTabletMemtableMgr::release_head_memtable_(memtable::ObIMemtable *imemtable
|
||||
memtable->remove_from_data_checkpoint(true);
|
||||
memtable->set_is_flushed();
|
||||
memtable->set_freeze_state(ObMemtableFreezeState::RELEASED);
|
||||
memtables_[idx].reset();
|
||||
++memtable_head_;
|
||||
release_head_memtable();
|
||||
FLOG_INFO("succeed to release head data memtable", K(ret), K(ls_id), K(tablet_id_));
|
||||
}
|
||||
}
|
||||
@ -623,7 +634,7 @@ int ObTabletMemtableMgr::get_first_frozen_memtable(ObTableHandleV2 &handle) cons
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
memtable::ObMemtable *memtable = NULL;
|
||||
TCRLockGuard guard(lock_);
|
||||
SpinRLockGuard guard(lock_);
|
||||
|
||||
if (OB_UNLIKELY(!is_inited_)) {
|
||||
ret = OB_NOT_INIT;
|
||||
@ -639,11 +650,12 @@ memtable::ObMemtable *ObTabletMemtableMgr::get_active_memtable_()
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
memtable::ObMemtable *memtable = nullptr;
|
||||
|
||||
if (memtable_tail_ > memtable_head_) {
|
||||
if (OB_FAIL(memtables_[get_memtable_idx_(memtable_tail_ - 1)].get_data_memtable(memtable))) {
|
||||
LOG_WARN("fail to get memtable", K(ret));
|
||||
} else if (OB_NOT_NULL(memtable) && !memtable->is_active_memtable()) {
|
||||
memtable = static_cast<memtable::ObMemtable *>(tables_[get_memtable_idx(memtable_tail_ - 1)]);
|
||||
if (OB_ISNULL(memtable)) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
STORAGE_LOG(WARN, "memtable is nullptr", K(ret), KP(memtable), K(memtable_tail_));
|
||||
} else if (!memtable->is_active_memtable()) {
|
||||
memtable = NULL;
|
||||
}
|
||||
}
|
||||
@ -654,9 +666,16 @@ memtable::ObMemtable *ObTabletMemtableMgr::get_active_memtable_()
|
||||
memtable::ObMemtable *ObTabletMemtableMgr::get_memtable_(const int64_t pos) const
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
const memtable::ObMemtable *memtable = nullptr;
|
||||
if (OB_FAIL(memtables_[get_memtable_idx_(pos)].get_data_memtable(memtable))) {
|
||||
LOG_WARN("fail to get memtable", K(ret));
|
||||
memtable::ObMemtable *memtable = nullptr;
|
||||
memtable::ObMemtable *table = static_cast<memtable::ObMemtable *>(tables_[get_memtable_idx(pos)]);
|
||||
if (OB_ISNULL(table)) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_ERROR("table is nullptr", K(ret), KP(table), K(pos));
|
||||
} else if (!table->is_data_memtable()) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_ERROR("not data memtable", K(ret), K(pos), K(table->get_key()));
|
||||
} else {
|
||||
memtable = table;
|
||||
}
|
||||
return const_cast<memtable::ObMemtable *>(memtable);
|
||||
}
|
||||
@ -679,14 +698,9 @@ int64_t ObTabletMemtableMgr::get_unmerged_memtable_count_() const
|
||||
|
||||
void ObTabletMemtableMgr::clean_tail_memtable_()
|
||||
{
|
||||
if (memtable_tail_ > memtable_head_) {
|
||||
const int64_t idx = get_memtable_idx_(memtable_tail_ - 1);
|
||||
memtables_[idx].reset();
|
||||
--memtable_tail_;
|
||||
}
|
||||
ObIMemtableMgr::release_tail_memtable();
|
||||
}
|
||||
|
||||
|
||||
int ObTabletMemtableMgr::get_memtables_(ObTableHdlArray &handle, const int64_t start_point,
|
||||
const bool include_active_memtable)
|
||||
{
|
||||
@ -713,8 +727,10 @@ int ObTabletMemtableMgr::add_tables_(
|
||||
if (OB_LIKELY(start_pos > -1)) {
|
||||
const int64_t last_pos = memtable_tail_ - 1;
|
||||
for (int64_t pos = start_pos; OB_SUCC(ret) && pos < last_pos; ++pos) {
|
||||
const ObTableHandleV2 &memtable_handle = memtables_[get_memtable_idx_(pos)];
|
||||
if (OB_UNLIKELY(!memtable_handle.is_valid())) {
|
||||
ObTableHandleV2 memtable_handle;
|
||||
if (OB_FAIL(get_ith_memtable(pos, memtable_handle))) {
|
||||
STORAGE_LOG(WARN, "fail to get ith memtable", K(ret), K(pos));
|
||||
} else if (OB_UNLIKELY(!memtable_handle.is_valid())) {
|
||||
ret = OB_ERR_SYS;
|
||||
LOG_ERROR("invalid memtable handle", K(ret), K(memtable_handle));
|
||||
} else if (OB_FAIL(handle.push_back(memtable_handle))) {
|
||||
@ -722,8 +738,10 @@ int ObTabletMemtableMgr::add_tables_(
|
||||
}
|
||||
}
|
||||
if (OB_SUCC(ret) && memtable_tail_ > memtable_head_) {
|
||||
const ObTableHandleV2 &last_memtable_handle =memtables_[get_memtable_idx_(last_pos)];
|
||||
if (OB_UNLIKELY(!last_memtable_handle.is_valid())) {
|
||||
ObTableHandleV2 last_memtable_handle;
|
||||
if (OB_FAIL(get_ith_memtable(last_pos, last_memtable_handle))) {
|
||||
STORAGE_LOG(WARN, "fail to get ith memtable", K(ret), K(last_pos));
|
||||
} else if (OB_UNLIKELY(!last_memtable_handle.is_valid())) {
|
||||
ret = OB_ERR_SYS;
|
||||
LOG_ERROR("invalid memtable handle", K(ret), K(last_memtable_handle));
|
||||
} else if (include_active_memtable || last_memtable_handle.get_table()->is_frozen_memtable()) {
|
||||
@ -768,7 +786,7 @@ int64_t ObTabletMemtableMgr::to_string(char *buf, const int64_t buf_len) const
|
||||
J_COLON();
|
||||
pos += ObIMemtableMgr::to_string(buf + pos, buf_len - pos);
|
||||
J_COMMA();
|
||||
TCRLockGuard lock_guard(lock_);
|
||||
SpinRLockGuard lock_guard(lock_);
|
||||
J_OBJ_START();
|
||||
J_ARRAY_START();
|
||||
for (int64_t i = memtable_head_; i < memtable_tail_; ++i) {
|
||||
@ -827,7 +845,7 @@ int ObTabletMemtableMgr::get_memtables_v2(
|
||||
ret = OB_NOT_INIT;
|
||||
LOG_WARN("not inited", K(ret), K_(is_inited));
|
||||
} else {
|
||||
TCRLockGuard guard(lock_);
|
||||
SpinRLockGuard guard(lock_);
|
||||
if (reset_handle) {
|
||||
handle.reset();
|
||||
}
|
||||
@ -849,9 +867,11 @@ int ObTabletMemtableMgr::get_first_frozen_memtable_(ObTableHandleV2 &handle) con
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
for (int64_t i = memtable_head_; OB_SUCC(ret) && i < memtable_tail_; i++) {
|
||||
const ObTableHandleV2 &m_handle = memtables_[get_memtable_idx_(i)];
|
||||
ObTableHandleV2 m_handle;
|
||||
const ObMemtable *memtable = nullptr;
|
||||
if (OB_UNLIKELY(!m_handle.is_valid())) {
|
||||
if (OB_FAIL(get_ith_memtable(i, m_handle))) {
|
||||
STORAGE_LOG(WARN, "fail to get ith memtable", K(ret), K(i));
|
||||
} else if (OB_UNLIKELY(!m_handle.is_valid())) {
|
||||
ret = OB_ERR_SYS;
|
||||
LOG_ERROR("memtable handle is invalid", K(ret), K(m_handle));
|
||||
} else if (OB_FAIL(m_handle.get_data_memtable(memtable))) {
|
||||
@ -872,7 +892,6 @@ int ObTabletMemtableMgr::get_multi_source_data_unit(
|
||||
ObIAllocator *allocator/*= nullptr*/) const
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
ObTableHandleV2 handle;
|
||||
memtable::ObMemtable *memtable = nullptr;
|
||||
multi_source_data_unit->reset();
|
||||
|
||||
@ -883,15 +902,14 @@ int ObTabletMemtableMgr::get_multi_source_data_unit(
|
||||
ret = OB_INVALID_ARGUMENT;
|
||||
LOG_WARN("invalid args", K(ret), KP(multi_source_data_unit));
|
||||
} else {
|
||||
TCRLockGuard lock_guard(lock_);
|
||||
SpinRLockGuard lock_guard(lock_);
|
||||
|
||||
if (!has_memtable_()) {
|
||||
ret = OB_ENTRY_NOT_EXIST;
|
||||
LOG_DEBUG("memtable does not exist", K(ret), K(memtable_head_), K(memtable_tail_));
|
||||
} else {
|
||||
for (int64_t i = memtable_tail_ - 1; (OB_ENTRY_NOT_EXIST == ret || OB_SUCC(ret)) && i >= memtable_head_; --i) {
|
||||
handle = memtables_[get_memtable_idx_(i)];
|
||||
memtable = static_cast<ObMemtable*>(handle.get_table());
|
||||
memtable = static_cast<ObMemtable*>(get_memtable_(i));
|
||||
if (OB_FAIL(memtable->get_multi_source_data_unit(multi_source_data_unit, allocator))) {
|
||||
if (OB_ENTRY_NOT_EXIST == ret) {
|
||||
} else {
|
||||
@ -927,15 +945,14 @@ int ObTabletMemtableMgr::get_memtable_for_multi_source_data_unit(
|
||||
ret = OB_NOT_INIT;
|
||||
LOG_WARN("not inited", K(ret), K_(is_inited));
|
||||
} else {
|
||||
TCRLockGuard lock_guard(lock_);
|
||||
SpinRLockGuard lock_guard(lock_);
|
||||
|
||||
if (!has_memtable_()) {
|
||||
ret = OB_ENTRY_NOT_EXIST;
|
||||
LOG_DEBUG("memtable does not exist", K(ret), K(memtable_head_), K(memtable_tail_));
|
||||
} else {
|
||||
for (int64_t i = memtable_tail_ - 1; OB_SUCC(ret) && i >= memtable_head_; --i) {
|
||||
handle = memtables_[get_memtable_idx_(i)];
|
||||
memtable = static_cast<ObMemtable*>(handle.get_table());
|
||||
memtable = static_cast<ObMemtable*>(tables_[get_memtable_idx(i)]);
|
||||
if (memtable->has_multi_source_data_unit(type)) {
|
||||
break;
|
||||
} else {
|
||||
@ -949,7 +966,7 @@ int ObTabletMemtableMgr::get_memtable_for_multi_source_data_unit(
|
||||
memtable = nullptr;
|
||||
} else if (OB_ISNULL(memtable)) {
|
||||
ret = OB_ENTRY_NOT_EXIST;
|
||||
LOG_WARN("failed to get memtable", K(ret));
|
||||
LOG_WARN("failed to get memtable", K(ret), K(type));
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
||||
Reference in New Issue
Block a user