adjust wash map node strategy
This commit is contained in:
		
							
								
								
									
										9
									
								
								src/share/cache/ob_kvcache_map.cpp
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										9
									
								
								src/share/cache/ob_kvcache_map.cpp
									
									
									
									
										vendored
									
									
								
							@ -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;
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user