Fix observer core when das scan op release.

This commit is contained in:
obdev
2023-05-26 09:46:54 +00:00
committed by ob-robot
parent 0a0a5671ba
commit c5cf21da3e
2 changed files with 38 additions and 49 deletions

View File

@ -171,13 +171,6 @@ ObDASScanOp::ObDASScanOp(ObIAllocator &op_alloc)
ObDASScanOp::~ObDASScanOp()
{
if (result_ != nullptr && result_->get_type() == ObNewRowIterator::ObTableScanIterator) {
LOG_ERROR_RET(OB_ERR_UNEXPECTED, "table scan iter is not released, maybe some bug occured",
KPC(scan_ctdef_), K(scan_param_), KPC(scan_rtdef_));
#ifdef ENABLE_SANITY
abort();
#endif
}
scan_param_.destroy();
trans_info_array_.destroy();
}
@ -321,24 +314,36 @@ int ObDASScanOp::open_op()
int ObDASScanOp::release_op()
{
int ret = OB_SUCCESS;
int lookup_ret = OB_SUCCESS;
ObITabletScan &tsc_service = get_tsc_service();
if (result_ != nullptr) {
if (ObNewRowIterator::IterType::ObLocalIndexLookupIterator == result_->get_type() ||
ObNewRowIterator::IterType::ObGroupLookupOp == result_->get_type()) {
ObLocalIndexLookupOp *lookup_op = static_cast<ObLocalIndexLookupOp*>(result_);
if (OB_FAIL(tsc_service.revert_scan_iter(lookup_op->get_rowkey_iter()))) {
ret = tsc_service.revert_scan_iter(lookup_op->get_rowkey_iter());
if (OB_SUCCESS != ret) {
LOG_WARN("revert scan iterator failed", K(ret));
} else if (OB_FAIL(lookup_op->revert_iter())) {
LOG_WARN("revert lookup iterator failed", K(ret));
} else {
result_ = nullptr;
}
lookup_ret = lookup_op->revert_iter();
if (OB_SUCCESS != lookup_ret) {
LOG_WARN("revert lookup iterator failed", K(lookup_ret));
}
result_ = nullptr;
//if row_key revert is succ return look_up iter ret code.
//if row_key revert is fail return row_key iter ret code.
//In short if row_key and look_up iter all revert fail.
//We just ignore lookup_iter ret code.
if (OB_SUCCESS == ret) {
ret = lookup_ret;
}
} else {
if (OB_FAIL(tsc_service.revert_scan_iter(result_))) {
LOG_WARN("revert scan iterator failed", K(ret));
} else {
result_ = nullptr;
}
result_ = nullptr;
}
}
//need to clear the flag:need_switch_param_
@ -802,17 +807,7 @@ OB_SERIALIZE_MEMBER((ObDASScanResult, ObIDASTaskResult),
ObLocalIndexLookupOp::~ObLocalIndexLookupOp()
{
if (lookup_iter_ != nullptr && lookup_iter_->get_type() == ObNewRowIterator::ObTableScanIterator) {
LOG_ERROR_RET(OB_ERR_UNEXPECTED, "lookup_iter_ iter is not released, maybe some bug occured",
KPC(lookup_ctdef_), K(scan_param_), KPC(index_ctdef_),
K(lookup_rowkey_cnt_), K(lookup_row_cnt_));
}
if (rowkey_iter_ != nullptr && rowkey_iter_->get_type() == ObNewRowIterator::ObTableScanIterator) {
LOG_ERROR_RET(OB_ERR_UNEXPECTED, "rowkey_iter_ iter is not released, maybe some bug occured",
KPC(lookup_ctdef_), K(scan_param_), KPC(index_ctdef_),
K(lookup_rowkey_cnt_), K(lookup_row_cnt_));
}
}
int ObLocalIndexLookupOp::init(const ObDASScanCtDef *lookup_ctdef,