fix lob macro block logic id duplicate after direct load.

This commit is contained in:
obdev
2024-04-02 04:24:02 +00:00
committed by ob-robot
parent 7485e7e275
commit 46511938dc
8 changed files with 139 additions and 44 deletions

View File

@ -264,7 +264,9 @@ public:
class ObDDLInsertRowIterator : public ObIStoreRowIterator
{
public:
ObDDLInsertRowIterator(
ObDDLInsertRowIterator();
virtual ~ObDDLInsertRowIterator();
int init(
sql::ObPxMultiPartSSTableInsertOp *op,
const bool is_slice_empty,
const share::ObLSID &ls_id,
@ -273,15 +275,14 @@ public:
const int64_t snapshot_version,
const int64_t context_id,
const int64_t parallel_idx);
virtual ~ObDDLInsertRowIterator();
virtual int get_next_row(const blocksstable::ObDatumRow *&row) override
{
const bool skip_lob = false;
return get_next_row(skip_lob, row);
}
int get_next_row(const bool skip_lob, const blocksstable::ObDatumRow *&row);
TO_STRING_KV(K_(ls_id), K_(current_tablet_id), K_(current_row), K_(is_slice_empty), K_(is_next_row_cached), K_(rowkey_count), K_(snapshot_version),
K_(lob_slice_id), K_(lob_id_cache), K_(context_id));
TO_STRING_KV(K_(is_inited), K_(ls_id), K_(current_tablet_id), K_(current_row), K_(is_slice_empty), K_(is_next_row_cached), K_(rowkey_count), K_(snapshot_version),
K_(lob_slice_id), K_(lob_id_cache), K_(context_id), K_(macro_seq));
public:
int switch_to_new_lob_slice();
int close_lob_sstable_slice();
@ -289,6 +290,7 @@ public:
inline share::ObTabletCacheInterval &get_lob_id_cache() { return lob_id_cache_; }
private:
static const int64_t AUTO_INC_CACHE_SIZE = 5000000; // 500w.
bool is_inited_;
ObArenaAllocator lob_allocator_;
sql::ObPxMultiPartSSTableInsertOp *op_;
share::ObLSID ls_id_;
@ -301,7 +303,7 @@ private:
int64_t lob_slice_id_;
share::ObTabletCacheInterval lob_id_cache_;
int64_t context_id_;
int64_t parallel_idx_;
blocksstable::ObMacroDataSeq macro_seq_;
};
class ObLobMetaRowIterator : public ObIStoreRowIterator
@ -393,6 +395,7 @@ public:
virtual int append_row(const blocksstable::ObDatumRow &datum_row) = 0;
virtual int close() = 0;
virtual int64_t get_row_count() const { return 0; } // dummy one
virtual int64_t get_next_block_start_seq() const { return -1; } // invalid block start seq.
DECLARE_PURE_VIRTUAL_TO_STRING;
};
@ -438,6 +441,7 @@ public:
const share::SCN &start_scn);
virtual int append_row(const blocksstable::ObDatumRow &datum_row) override;
virtual int close() override;
virtual int64_t get_next_block_start_seq() const override { return macro_block_writer_.get_last_macro_seq(); }
TO_STRING_KV(K(is_inited_), K(macro_block_writer_));
private:
bool is_inited_;
@ -510,6 +514,7 @@ public:
bool need_column_store() const { return need_column_store_; }
ObTabletSliceStore *get_slice_store() const { return slice_store_; }
void cancel() { ATOMIC_SET(&is_canceled_, true); }
int64_t get_next_block_start_seq() const { return nullptr == slice_store_ ? 0 /*slice empty*/ : slice_store_->get_next_block_start_seq(); }
TO_STRING_KV(K(is_inited_), K(need_column_store_), K(is_canceled_), K(start_seq_), KPC(slice_store_), K(row_offset_));
private:
int fill_lob_into_memtable( // for version < 4.3.0.0