Fix observer core when das scan op release.
This commit is contained in:
@ -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,
|
||||
|
||||
Reference in New Issue
Block a user