fix infinite loop in compaction progress

This commit is contained in:
a1iive
2023-07-05 04:12:13 +00:00
committed by ob-robot
parent 5bd57e04b8
commit fec62d37b1

View File

@ -318,10 +318,14 @@ int ObTenantCompactionProgressMgr::get_pos_(const int64_t major_snapshot_version
{ {
int ret = OB_SUCCESS; int ret = OB_SUCCESS;
pos = ObInfoRingArray::get_last_pos(); pos = ObInfoRingArray::get_last_pos();
while (OB_SUCC(ret)) { int64_t loop_cnt = max_cnt_;
while (OB_SUCC(ret) && 0 < loop_cnt) {
if (array_[pos].merge_version_ == major_snapshot_version) { if (array_[pos].merge_version_ == major_snapshot_version) {
break; break;
} else if (array_[pos].merge_version_ > major_snapshot_version) { } else if (array_[pos].merge_version_ > major_snapshot_version) {
LOG_DEBUG("merge_version is larger than major_snapshot_version", K(pos),
"merge_version", array_[pos].merge_version_,
K(major_snapshot_version));
pos = pos == 0 ? max_cnt_ - 1 : pos - 1; pos = pos == 0 ? max_cnt_ - 1 : pos - 1;
} else { } else {
pos = -1; pos = -1;
@ -329,6 +333,7 @@ int ObTenantCompactionProgressMgr::get_pos_(const int64_t major_snapshot_version
LOG_DEBUG("entry not exits", K(ret), K(pos), K(major_snapshot_version)); LOG_DEBUG("entry not exits", K(ret), K(pos), K(major_snapshot_version));
break; break;
} }
--loop_cnt;
} }
if (OB_SUCC(ret) && pos >= 0 && pos < SERVER_PROGRESS_MAX_CNT if (OB_SUCC(ret) && pos >= 0 && pos < SERVER_PROGRESS_MAX_CNT
&& array_[pos].merge_version_ != major_snapshot_version) { && array_[pos].merge_version_ != major_snapshot_version) {