adjust wash map node strategy

This commit is contained in:
obdev
2024-02-10 03:41:55 +00:00
committed by ob-robot
parent 61f5ac2dea
commit 7802bc1858

View File

@ -678,18 +678,25 @@ int ObKVCacheMap::replace_fragment_node(int64_t &start_pos, int64_t &replace_nod
if (OB_FAIL(guard.get_ret())) { if (OB_FAIL(guard.get_ret())) {
COMMON_LOG(WARN, "Fail to write lock bucket", K(ret), K(i)); COMMON_LOG(WARN, "Fail to write lock bucket", K(ret), K(i));
} else { } else {
const int64_t start = common::ObClockGenerator::getClock();
Node *&bucket_ptr = get_bucket_node(i); Node *&bucket_ptr = get_bucket_node(i);
prev = NULL; prev = NULL;
iter = bucket_ptr; iter = bucket_ptr;
int64_t node_count = 0;
while (NULL != iter) { while (NULL != iter) {
if (iter->inst_->node_allocator_.is_fragment(iter)) { if (iter->inst_->node_allocator_.is_fragment(iter)) {
internal_map_replace(hazard_guard, prev, iter, bucket_ptr); internal_map_replace(hazard_guard, prev, iter, bucket_ptr);
++replace_node_count; ++node_count;
} }
prev = iter; prev = iter;
iter = iter->next_; iter = iter->next_;
if (common::ObClockGenerator::getClock() - start >= 1 * 1000 * 1000) {
COMMON_LOG(INFO, "replace map node cost too much time", K(node_count), K(replace_node_count), K(replace_start_pos), K(i));
break;
} }
} }
replace_node_count += node_count;
}
} }
} // hazard version guard } // hazard version guard
start_pos = replace_end_pos >= bucket_num_ ? 0 : replace_end_pos; start_pos = replace_end_pos >= bucket_num_ ? 0 : replace_end_pos;