fix virtual_table bug
This commit is contained in:
@ -66,25 +66,10 @@ int ObAllVirtualTabletBufferInfo::inner_get_next_row(common::ObNewRow *&row)
|
|||||||
int ObAllVirtualTabletBufferInfo::get_tablet_pool_infos()
|
int ObAllVirtualTabletBufferInfo::get_tablet_pool_infos()
|
||||||
{
|
{
|
||||||
int ret = OB_SUCCESS;
|
int ret = OB_SUCCESS;
|
||||||
buffer_infos_.reuse();
|
|
||||||
ObMemAttr attr(MTL_ID(), "TabletBuffer");
|
ObMemAttr attr(MTL_ID(), "TabletBuffer");
|
||||||
buffer_infos_.set_attr(attr);
|
buffer_infos_.set_attr(attr);
|
||||||
ObTenantMetaMemMgr *t3m = MTL(ObTenantMetaMemMgr*);
|
if (OB_FAIL(MTL(ObTenantMetaMemMgr*)->get_tablet_buffer_infos(buffer_infos_))) {
|
||||||
if (ObTabletPoolType::TP_MAX == pool_type_) {
|
SERVER_LOG(WARN, "fail to get tablet buffer infos", K(ret));
|
||||||
pool_type_ = ObTabletPoolType::TP_NORMAL;
|
|
||||||
} else if (ObTabletPoolType::TP_NORMAL == pool_type_) {
|
|
||||||
pool_type_ = ObTabletPoolType::TP_LARGE;
|
|
||||||
} else {
|
|
||||||
pool_type_ = ObTabletPoolType::TP_MAX;
|
|
||||||
ret = OB_ITER_END;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (OB_FAIL(ret)) {
|
|
||||||
// do nothing
|
|
||||||
} else if (OB_FAIL(t3m->get_tablet_buffer_infos(pool_type_, buffer_infos_))) {
|
|
||||||
SERVER_LOG(WARN, "fail to get tablet buffer infos", K_(pool_type));
|
|
||||||
} else {
|
|
||||||
index_ = 0;
|
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -101,35 +86,26 @@ bool ObAllVirtualTabletBufferInfo::is_need_process(uint64_t tenant_id)
|
|||||||
|
|
||||||
int ObAllVirtualTabletBufferInfo::process_curr_tenant(common::ObNewRow *&row)
|
int ObAllVirtualTabletBufferInfo::process_curr_tenant(common::ObNewRow *&row)
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
int ret = OB_SUCCESS;
|
int ret = OB_SUCCESS;
|
||||||
if (OB_ISNULL(cur_row_.cells_)) {
|
if (OB_ISNULL(cur_row_.cells_)) {
|
||||||
ret = OB_ERR_UNEXPECTED;
|
ret = OB_ERR_UNEXPECTED;
|
||||||
SERVER_LOG(ERROR, "cur row cell is nullptr", K(ret));
|
SERVER_LOG(ERROR, "cur row cell is nullptr", K(ret));
|
||||||
|
} else if (0 == buffer_infos_.size() && OB_FAIL(get_tablet_pool_infos())) {
|
||||||
|
SERVER_LOG(WARN, "fail to get tablet pool infos", K(ret));
|
||||||
} else if (buffer_infos_.size() <= index_) {
|
} else if (buffer_infos_.size() <= index_) {
|
||||||
if (OB_FAIL(get_tablet_pool_infos())) {
|
ret = OB_ITER_END;
|
||||||
if (OB_ITER_END != ret) {
|
|
||||||
SERVER_LOG(WARN, "fail to get tablet pool infos", K(ret));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (OB_FAIL(ret)) {
|
|
||||||
// do nothing
|
|
||||||
} else if (OB_FAIL(gen_row(buffer_infos_[index_], row))) {
|
} else if (OB_FAIL(gen_row(buffer_infos_[index_], row))) {
|
||||||
SERVER_LOG(WARN, "fail to gen_row", K(ret));
|
SERVER_LOG(WARN, "fail to gen_row", K(ret));
|
||||||
} else {
|
} else {
|
||||||
index_++;
|
index_++;
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
*/
|
|
||||||
UNUSED(row);
|
|
||||||
return OB_ITER_END;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ObAllVirtualTabletBufferInfo::release_last_tenant()
|
void ObAllVirtualTabletBufferInfo::release_last_tenant()
|
||||||
{
|
{
|
||||||
buffer_infos_.reset();
|
buffer_infos_.reset();
|
||||||
|
index_ = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ObAllVirtualTabletBufferInfo::gen_row(
|
int ObAllVirtualTabletBufferInfo::gen_row(
|
||||||
|
@ -1547,46 +1547,43 @@ int ObTenantMetaMemMgr::get_tablet_with_allocator(
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ObTenantMetaMemMgr::get_tablet_buffer_infos(
|
int ObTenantMetaMemMgr::get_tablet_buffer_infos(ObIArray<ObTabletBufferInfo> &buffer_infos)
|
||||||
const ObTabletPoolType &pool_type,
|
|
||||||
ObIArray<ObTabletBufferInfo> &buffer_infos)
|
|
||||||
{
|
{
|
||||||
int ret = OB_SUCCESS;
|
int ret = OB_SUCCESS;
|
||||||
int64_t size = 0;
|
|
||||||
if (OB_UNLIKELY(!is_inited_)) {
|
if (OB_UNLIKELY(!is_inited_)) {
|
||||||
ret = OB_NOT_INIT;
|
ret = OB_NOT_INIT;
|
||||||
LOG_WARN("ObTenantMetaMemMgr hasn't been initialized", K(ret));
|
LOG_WARN("ObTenantMetaMemMgr hasn't been initialized", K(ret));
|
||||||
} else {
|
} else {
|
||||||
ObMetaObjBufferNode *tablet_buffer_node = nullptr;
|
|
||||||
ObMetaObjBufferNode *header = nullptr;
|
|
||||||
SpinRLockGuard guard(wash_lock_);
|
SpinRLockGuard guard(wash_lock_);
|
||||||
if (pool_type == ObTabletPoolType::TP_LARGE) {
|
const int64_t size = normal_tablet_header_.get_size() + large_tablet_header_.get_size();
|
||||||
tablet_buffer_node = large_tablet_header_.get_first();
|
if (OB_FAIL(buffer_infos.reserve(size))) {
|
||||||
header = large_tablet_header_.get_header();
|
|
||||||
size = large_tablet_header_.get_size();
|
|
||||||
} else if (pool_type == ObTabletPoolType::TP_NORMAL) {
|
|
||||||
tablet_buffer_node = normal_tablet_header_.get_first();
|
|
||||||
header = normal_tablet_header_.get_header();
|
|
||||||
size = normal_tablet_header_.get_size();
|
|
||||||
} else {
|
|
||||||
ret = OB_ERR_UNEXPECTED;
|
|
||||||
LOG_WARN("tablet pool type is invalid", K(ret), K(pool_type));
|
|
||||||
}
|
|
||||||
if (OB_FAIL(ret)) {
|
|
||||||
// do nothing
|
|
||||||
} else if (OB_FAIL(buffer_infos.reserve(size))) {
|
|
||||||
LOG_WARN("fail to reserve memory for buffer_infos", K(ret), K(size));
|
LOG_WARN("fail to reserve memory for buffer_infos", K(ret), K(size));
|
||||||
|
} else if (OB_FAIL(fill_buffer_infos(
|
||||||
|
ObTabletPoolType::TP_NORMAL, normal_tablet_header_.get_header(), buffer_infos))) {
|
||||||
|
LOG_WARN("fail to fill normal buffer infos", K(ret), KP(normal_tablet_header_.get_first()));
|
||||||
|
} else if (OB_FAIL(fill_buffer_infos(
|
||||||
|
ObTabletPoolType::TP_LARGE, large_tablet_header_.get_header(), buffer_infos))) {
|
||||||
|
LOG_WARN("fail to fill large buffer infos", K(ret), KP(large_tablet_header_.get_header()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ObTenantMetaMemMgr::fill_buffer_infos(
|
||||||
|
const ObTabletPoolType pool_type,
|
||||||
|
ObMetaObjBufferNode *tablet_buffer_node,
|
||||||
|
ObIArray<ObTabletBufferInfo> &buffer_infos)
|
||||||
|
{
|
||||||
|
int ret = OB_SUCCESS;
|
||||||
|
ObMetaObjBufferNode *cur_node = tablet_buffer_node->get_next();
|
||||||
|
while (OB_SUCC(ret) && cur_node != tablet_buffer_node) {
|
||||||
|
ObTabletBufferInfo buffer_info;
|
||||||
|
if (OB_FAIL(buffer_info.fill_info(pool_type, cur_node))) {
|
||||||
|
LOG_WARN("fail to fill tablet buffer info", K(ret), K(pool_type), KP(tablet_buffer_node), KP(cur_node));
|
||||||
|
} else if (OB_FAIL(buffer_infos.push_back(buffer_info))) {
|
||||||
|
LOG_WARN("fail to push back buffer info", K(ret), K(buffer_info));
|
||||||
} else {
|
} else {
|
||||||
while (OB_SUCC(ret) && header != tablet_buffer_node) {
|
cur_node = cur_node->get_next();
|
||||||
ObTabletBufferInfo buffer_info;
|
|
||||||
if (OB_FAIL(buffer_info.fill_info(pool_type, tablet_buffer_node))) {
|
|
||||||
LOG_WARN("fail to fill tablet buffer info", K(ret));
|
|
||||||
} else if (OB_FAIL(buffer_infos.push_back(buffer_info))) {
|
|
||||||
LOG_WARN("fail to push back buffer info", K(ret), K(buffer_info));
|
|
||||||
} else {
|
|
||||||
tablet_buffer_node = tablet_buffer_node->get_next();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -245,7 +245,7 @@ public:
|
|||||||
common::ObArenaAllocator &allocator,
|
common::ObArenaAllocator &allocator,
|
||||||
ObTabletHandle &handle,
|
ObTabletHandle &handle,
|
||||||
const bool force_alloc_new = false);
|
const bool force_alloc_new = false);
|
||||||
int get_tablet_buffer_infos(const ObTabletPoolType &pool_type, ObIArray<ObTabletBufferInfo> &buffer_infos);
|
int get_tablet_buffer_infos(ObIArray<ObTabletBufferInfo> &buffer_infos);
|
||||||
int get_tablet_addr(const ObTabletMapKey &key, ObMetaDiskAddr &addr);
|
int get_tablet_addr(const ObTabletMapKey &key, ObMetaDiskAddr &addr);
|
||||||
int has_tablet(const ObTabletMapKey &key, bool &is_exist);
|
int has_tablet(const ObTabletMapKey &key, bool &is_exist);
|
||||||
int del_tablet(const ObTabletMapKey &key);
|
int del_tablet(const ObTabletMapKey &key);
|
||||||
@ -275,6 +275,10 @@ public:
|
|||||||
|
|
||||||
TO_STRING_KV(K_(tenant_id), K_(is_inited), "tablet count", tablet_map_.count());
|
TO_STRING_KV(K_(tenant_id), K_(is_inited), "tablet count", tablet_map_.count());
|
||||||
private:
|
private:
|
||||||
|
int fill_buffer_infos(
|
||||||
|
const ObTabletPoolType pool_type,
|
||||||
|
ObMetaObjBufferNode *tablet_buffer_node,
|
||||||
|
ObIArray<ObTabletBufferInfo> &buffer_infos);
|
||||||
int64_t cal_adaptive_bucket_num();
|
int64_t cal_adaptive_bucket_num();
|
||||||
int push_tablet_into_gc_queue(ObTablet *tablet);
|
int push_tablet_into_gc_queue(ObTablet *tablet);
|
||||||
void push_tablet_list_into_gc_queue(ObTablet *tablet);
|
void push_tablet_list_into_gc_queue(ObTablet *tablet);
|
||||||
|
Reference in New Issue
Block a user