dont't reuse allocator until prefetch.end
This commit is contained in:
		@ -721,8 +721,9 @@ int ObDDLSStableAllRangeIterator::get_index_row_count(const ObDatumRange &range,
 | 
			
		||||
    bool tmp_reach_cursor_end = false;
 | 
			
		||||
    ObMicroIndexRowItem tmp_index_item;
 | 
			
		||||
    int64_t tmp_row_offset = 0;
 | 
			
		||||
    ObArenaAllocator idx_row_allocator("DDL_Row_Cnt", OB_MALLOC_NORMAL_BLOCK_SIZE, MTL_ID());
 | 
			
		||||
    while (OB_SUCC(ret)) {
 | 
			
		||||
      if (OB_FAIL(tmp_index_macro_iter.get_next_idx_row(idx_row_allocator_, tmp_index_item, tmp_row_offset, tmp_reach_cursor_end))) {
 | 
			
		||||
      if (OB_FAIL(tmp_index_macro_iter.get_next_idx_row(idx_row_allocator, tmp_index_item, tmp_row_offset, tmp_reach_cursor_end))) {
 | 
			
		||||
        if (OB_ITER_END != ret) {
 | 
			
		||||
        LOG_WARN("fail to get next idx info", K(ret), K(tmp_index_item), K(tmp_reach_cursor_end), K(tmp_index_macro_iter));
 | 
			
		||||
        } else {
 | 
			
		||||
@ -736,6 +737,8 @@ int ObDDLSStableAllRangeIterator::get_index_row_count(const ObDatumRange &range,
 | 
			
		||||
    if (OB_FAIL(ret)) {
 | 
			
		||||
      index_row_count = 0;
 | 
			
		||||
    }
 | 
			
		||||
    tmp_index_item.reset();
 | 
			
		||||
    idx_row_allocator.reset();
 | 
			
		||||
  }
 | 
			
		||||
  return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -48,9 +48,17 @@ int ObMicroIndexRowItem::init(ObIAllocator &allocator,
 | 
			
		||||
    LOG_WARN("invalid arguemen", K(ret), KP(idx_row_header), KP(endkey), KP(idx_minor_info), KP(agg_row_buf));
 | 
			
		||||
  } else {
 | 
			
		||||
    allocator_ = &allocator;
 | 
			
		||||
    endkey_ = endkey; // already deep_copied outside
 | 
			
		||||
    agg_buf_size_ = agg_buf_size;
 | 
			
		||||
 | 
			
		||||
    void *key_buf = nullptr;
 | 
			
		||||
    if (OB_ISNULL(key_buf = allocator_->alloc(sizeof(ObDatumRowkey)))) {
 | 
			
		||||
      ret = OB_ALLOCATE_MEMORY_FAILED;
 | 
			
		||||
      LOG_WARN("allocate memory failed", K(ret), K(sizeof(ObDatumRowkey)));
 | 
			
		||||
    } else if (FALSE_IT(endkey_ = new (key_buf) ObDatumRowkey())) {
 | 
			
		||||
    } else if (OB_FAIL(endkey->deep_copy(*endkey_, allocator))) {
 | 
			
		||||
      LOG_WARN("fail to deep copy rowkey", K(ret), KPC(endkey_), KPC(endkey));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void *header_buf = nullptr;
 | 
			
		||||
    if (OB_ISNULL(header_buf = allocator_->alloc(sizeof(ObIndexBlockRowHeader)))) {
 | 
			
		||||
      ret = OB_ALLOCATE_MEMORY_FAILED;
 | 
			
		||||
@ -86,9 +94,13 @@ int ObMicroIndexRowItem::init(ObIAllocator &allocator,
 | 
			
		||||
void ObMicroIndexRowItem::reset()
 | 
			
		||||
{
 | 
			
		||||
  int ret = OB_SUCCESS;
 | 
			
		||||
  endkey_ = nullptr;
 | 
			
		||||
  agg_buf_size_ = 0;
 | 
			
		||||
  if (OB_NOT_NULL(allocator_)) {
 | 
			
		||||
    if (OB_NOT_NULL(endkey_)){
 | 
			
		||||
      endkey_->~ObDatumRowkey();
 | 
			
		||||
      allocator_->free(endkey_);
 | 
			
		||||
      endkey_ = nullptr;
 | 
			
		||||
    }
 | 
			
		||||
    if (OB_NOT_NULL(idx_row_header_)){
 | 
			
		||||
      idx_row_header_->~ObIndexBlockRowHeader();
 | 
			
		||||
      allocator_->free(idx_row_header_);
 | 
			
		||||
@ -107,6 +119,17 @@ void ObMicroIndexRowItem::reset()
 | 
			
		||||
  allocator_ = nullptr;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ObMicroIndexRowItem::reuse()
 | 
			
		||||
{
 | 
			
		||||
  int ret = OB_SUCCESS;
 | 
			
		||||
  endkey_ = nullptr;
 | 
			
		||||
  agg_buf_size_ = 0;
 | 
			
		||||
  idx_row_header_ = nullptr;
 | 
			
		||||
  idx_minor_info_ = nullptr;
 | 
			
		||||
  agg_row_buf_ = nullptr;
 | 
			
		||||
  allocator_ = nullptr;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ObIndexBlockMacroIterator::ObIndexBlockMacroIterator()
 | 
			
		||||
  : sstable_(nullptr), iter_range_(nullptr),
 | 
			
		||||
    tree_cursor_(), allocator_(nullptr),
 | 
			
		||||
@ -361,8 +384,7 @@ int ObIndexBlockMacroIterator::get_next_idx_row(ObIAllocator &item_allocator, Ob
 | 
			
		||||
      LOG_WARN("Fail to get current endkey", K(ret), K_(tree_cursor));
 | 
			
		||||
    } else if (OB_FAIL(deep_copy_rowkey(rowkey, curr_key_, curr_key_buf_))) {
 | 
			
		||||
      STORAGE_LOG(WARN, "Failed to save curr key", K(ret), K(rowkey));
 | 
			
		||||
    } else if (FALSE_IT(macro_index_item.reset())) {
 | 
			
		||||
    } else if (FALSE_IT(item_allocator.reuse())) {
 | 
			
		||||
    } else if (FALSE_IT(macro_index_item.reuse())) {
 | 
			
		||||
    } else if (OB_FAIL(macro_index_item.init(item_allocator, idx_row_header, &curr_key_, minor_meta_info, agg_row_buf, agg_buf_size))) {
 | 
			
		||||
      STORAGE_LOG(WARN, "Failed to init macro index item", K(ret), K(macro_index_item));
 | 
			
		||||
    } else if (OB_FAIL(tree_cursor_.move_forward(is_reverse_scan_))) {
 | 
			
		||||
 | 
			
		||||
@ -80,11 +80,12 @@ public:
 | 
			
		||||
            const char *agg_row_buf,
 | 
			
		||||
            const int64_t agg_buf_size);
 | 
			
		||||
  void reset();
 | 
			
		||||
  void reuse();
 | 
			
		||||
  TO_STRING_KV(KPC(idx_row_header_), KPC(endkey_), KPC(idx_minor_info_), K(agg_row_buf_), K(agg_buf_size_), KP(allocator_));
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
  ObIAllocator *allocator_;
 | 
			
		||||
  const blocksstable::ObDatumRowkey *endkey_;
 | 
			
		||||
  blocksstable::ObDatumRowkey *endkey_;
 | 
			
		||||
  ObIndexBlockRowHeader *idx_row_header_;
 | 
			
		||||
  ObIndexBlockRowMinorMetaInfo *idx_minor_info_;
 | 
			
		||||
  char *agg_row_buf_; //max 1024
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user