[BUGFIX] fix table restore import lob over diff tenant

This commit is contained in:
skylhd
2023-12-27 09:13:39 +00:00
committed by ob-robot
parent a25e14fe74
commit d4d4ffda92
6 changed files with 25 additions and 13 deletions

View File

@ -1265,6 +1265,7 @@ int ObComplementWriteTask::append_lob(
slice_info.data_tablet_id_ = param_->dest_tablet_id_; slice_info.data_tablet_id_ = param_->dest_tablet_id_;
slice_info.slice_id_ = iterator.get_lob_slice_id(); slice_info.slice_id_ = iterator.get_lob_slice_id();
slice_info.context_id_ = context_->context_id_; slice_info.context_id_ = context_->context_id_;
slice_info.src_tenant_id_ = param_->orig_tenant_id_;
if (OB_FAIL(MTL(ObTenantDirectLoadMgr *)->fill_lob_sstable_slice(lob_allocator, slice_info, if (OB_FAIL(MTL(ObTenantDirectLoadMgr *)->fill_lob_sstable_slice(lob_allocator, slice_info,
iterator.get_lob_id_cache(), lob_column_idxs, col_types, write_row_))) { iterator.get_lob_id_cache(), lob_column_idxs, col_types, write_row_))) {
LOG_WARN("fill batch lob sstable slice failed", K(ret), K(slice_info), K(write_row_)); LOG_WARN("fill batch lob sstable slice failed", K(ret), K(slice_info), K(write_row_));

View File

@ -1329,7 +1329,7 @@ int ObTabletDirectLoadMgr::fill_lob_sstable_slice(
ObDirectLoadSliceWriter *slice_writer = nullptr; ObDirectLoadSliceWriter *slice_writer = nullptr;
const int64_t trans_version = is_full_direct_load(direct_load_type_) ? table_key_.get_snapshot_version() : INT64_MAX; const int64_t trans_version = is_full_direct_load(direct_load_type_) ? table_key_.get_snapshot_version() : INT64_MAX;
ObBatchSliceWriteInfo info(tablet_id_, ls_id_, trans_version, direct_load_type_, sqc_build_ctx_.build_param_.runtime_only_param_.trans_id_, ObBatchSliceWriteInfo info(tablet_id_, ls_id_, trans_version, direct_load_type_, sqc_build_ctx_.build_param_.runtime_only_param_.trans_id_,
sqc_build_ctx_.build_param_.runtime_only_param_.seq_no_); sqc_build_ctx_.build_param_.runtime_only_param_.seq_no_, slice_info.src_tenant_id_);
if (OB_FAIL(lob_mgr_handle_.get_obj()->get_sqc_build_ctx().slice_mgr_map_.get_refactored(slice_info.slice_id_, slice_writer))) { if (OB_FAIL(lob_mgr_handle_.get_obj()->get_sqc_build_ctx().slice_mgr_map_.get_refactored(slice_info.slice_id_, slice_writer))) {
LOG_WARN("get refactored failed", K(ret), K(slice_info), K(sqc_build_ctx_.slice_mgr_map_.size())); LOG_WARN("get refactored failed", K(ret), K(slice_info), K(sqc_build_ctx_.slice_mgr_map_.size()));
@ -1390,7 +1390,7 @@ int ObTabletDirectLoadMgr::fill_lob_sstable_slice(
ObDirectLoadSliceWriter *slice_writer = nullptr; ObDirectLoadSliceWriter *slice_writer = nullptr;
const int64_t trans_version = is_full_direct_load(direct_load_type_) ? table_key_.get_snapshot_version() : INT64_MAX; const int64_t trans_version = is_full_direct_load(direct_load_type_) ? table_key_.get_snapshot_version() : INT64_MAX;
ObBatchSliceWriteInfo info(tablet_id_, ls_id_, trans_version, direct_load_type_, sqc_build_ctx_.build_param_.runtime_only_param_.trans_id_, ObBatchSliceWriteInfo info(tablet_id_, ls_id_, trans_version, direct_load_type_, sqc_build_ctx_.build_param_.runtime_only_param_.trans_id_,
sqc_build_ctx_.build_param_.runtime_only_param_.seq_no_); sqc_build_ctx_.build_param_.runtime_only_param_.seq_no_, slice_info.src_tenant_id_);
if (OB_FAIL(lob_mgr_handle_.get_obj()->get_sqc_build_ctx().slice_mgr_map_.get_refactored(slice_info.slice_id_, slice_writer))) { if (OB_FAIL(lob_mgr_handle_.get_obj()->get_sqc_build_ctx().slice_mgr_map_.get_refactored(slice_info.slice_id_, slice_writer))) {
LOG_WARN("get refactored failed", K(ret), K(slice_info), K(sqc_build_ctx_.slice_mgr_map_.size())); LOG_WARN("get refactored failed", K(ret), K(slice_info), K(sqc_build_ctx_.slice_mgr_map_.size()));

View File

@ -619,6 +619,7 @@ int ObDirectLoadSliceWriter::prepare_iters(
const int64_t seq_no, const int64_t seq_no,
const int64_t timeout_ts, const int64_t timeout_ts,
const int64_t lob_inrow_threshold, const int64_t lob_inrow_threshold,
const uint64_t src_tenant_id,
ObLobMetaRowIterator *&row_iter) ObLobMetaRowIterator *&row_iter)
{ {
int ret = OB_SUCCESS; int ret = OB_SUCCESS;
@ -652,8 +653,9 @@ int ObDirectLoadSliceWriter::prepare_iters(
lob_storage_param.inrow_threshold_ = lob_inrow_threshold; lob_storage_param.inrow_threshold_ = lob_inrow_threshold;
int64_t unused_affected_rows = 0; int64_t unused_affected_rows = 0;
if (OB_FAIL(ObInsertLobColumnHelper::insert_lob_column( if (OB_FAIL(ObInsertLobColumnHelper::insert_lob_column(
allocator, nullptr, ls_id, tablet_id, lob_id, cs_type, lob_storage_param, datum, timeout_ts, true/*has_lob_header*/, *meta_write_iter_))) { allocator, nullptr, ls_id, tablet_id, lob_id, cs_type, lob_storage_param, datum,
LOG_WARN("fail to insert_lob_col", K(ret), K(ls_id), K(tablet_id), K(lob_id)); timeout_ts, true/*has_lob_header*/, src_tenant_id, *meta_write_iter_))) {
LOG_WARN("fail to insert_lob_col", K(ret), K(ls_id), K(tablet_id), K(lob_id), K(src_tenant_id));
} else if (OB_FAIL(row_iterator_->init(meta_write_iter_, trans_id, } else if (OB_FAIL(row_iterator_->init(meta_write_iter_, trans_id,
trans_version, seq_no))) { trans_version, seq_no))) {
LOG_WARN("fail to lob meta row iterator", K(ret), K(trans_id), K(trans_version), K(seq_no)); LOG_WARN("fail to lob meta row iterator", K(ret), K(trans_id), K(trans_version), K(seq_no));
@ -711,7 +713,7 @@ int ObDirectLoadSliceWriter::fill_lob_into_memtable(
lob_storage_param.inrow_threshold_ = lob_inrow_threshold; lob_storage_param.inrow_threshold_ = lob_inrow_threshold;
if (OB_FAIL(ObInsertLobColumnHelper::insert_lob_column( if (OB_FAIL(ObInsertLobColumnHelper::insert_lob_column(
allocator, info.ls_id_, info.data_tablet_id_, col_types.at(i).get_collation_type(), allocator, info.ls_id_, info.data_tablet_id_, col_types.at(i).get_collation_type(),
lob_storage_param, datum, timeout_ts, true/*has_lob_header*/, MTL_ID()))) { lob_storage_param, datum, timeout_ts, true/*has_lob_header*/, info.src_tenant_id_))) {
LOG_WARN("fail to insert_lob_col", K(ret), K(datum)); LOG_WARN("fail to insert_lob_col", K(ret), K(datum));
} }
} }
@ -748,7 +750,7 @@ int ObDirectLoadSliceWriter::fill_lob_into_macro_block(
ObLobMetaRowIterator *row_iter = nullptr; ObLobMetaRowIterator *row_iter = nullptr;
if (OB_FAIL(prepare_iters(allocator, iter_allocator, datum, info.ls_id_, if (OB_FAIL(prepare_iters(allocator, iter_allocator, datum, info.ls_id_,
info.data_tablet_id_, info.trans_version_, col_types.at(i).get_collation_type(), lob_id, info.data_tablet_id_, info.trans_version_, col_types.at(i).get_collation_type(), lob_id,
info.trans_id_, info.seq_no_, timeout_ts, lob_inrow_threshold, row_iter))) { info.trans_id_, info.seq_no_, timeout_ts, lob_inrow_threshold, info.src_tenant_id_, row_iter))) {
LOG_WARN("fail to prepare iters", K(ret), KP(row_iter), K(datum)); LOG_WARN("fail to prepare iters", K(ret), KP(row_iter), K(datum));
} else { } else {
while (OB_SUCC(ret)) { while (OB_SUCC(ret)) {

View File

@ -52,20 +52,23 @@ public:
trans_version_(0), trans_version_(0),
direct_load_type_(), direct_load_type_(),
trans_id_(), trans_id_(),
seq_no_(0) seq_no_(0),
src_tenant_id_(0)
{ } { }
ObBatchSliceWriteInfo(const common::ObTabletID &tablet_id, const share::ObLSID &ls_id, const int64_t &trans_version, ObBatchSliceWriteInfo(const common::ObTabletID &tablet_id, const share::ObLSID &ls_id, const int64_t &trans_version,
const ObDirectLoadType &direct_load_type, const transaction::ObTransID &trans_id, const int64_t &seq_no) const ObDirectLoadType &direct_load_type, const transaction::ObTransID &trans_id, const int64_t &seq_no,
const uint64_t src_tenant_id)
: data_tablet_id_(tablet_id), : data_tablet_id_(tablet_id),
ls_id_(ls_id), ls_id_(ls_id),
trans_version_(trans_version), trans_version_(trans_version),
direct_load_type_(direct_load_type), direct_load_type_(direct_load_type),
trans_id_(trans_id), trans_id_(trans_id),
seq_no_(seq_no) seq_no_(seq_no),
src_tenant_id_(src_tenant_id)
{ } { }
~ObBatchSliceWriteInfo() = default; ~ObBatchSliceWriteInfo() = default;
TO_STRING_KV(K(ls_id_), K(data_tablet_id_), K(trans_version_), K(direct_load_type_)); TO_STRING_KV(K(ls_id_), K(data_tablet_id_), K(trans_version_), K(direct_load_type_), K(src_tenant_id_));
public: public:
common::ObTabletID data_tablet_id_; common::ObTabletID data_tablet_id_;
share::ObLSID ls_id_; share::ObLSID ls_id_;
@ -73,6 +76,7 @@ public:
ObDirectLoadType direct_load_type_; ObDirectLoadType direct_load_type_;
transaction::ObTransID trans_id_; transaction::ObTransID trans_id_;
int64_t seq_no_; // int64_t seq_no_; //
uint64_t src_tenant_id_;
}; };
struct ObTabletDirectLoadMgrKey final struct ObTabletDirectLoadMgrKey final
@ -103,11 +107,11 @@ struct ObDirectLoadSliceInfo final
public: public:
ObDirectLoadSliceInfo() ObDirectLoadSliceInfo()
: is_full_direct_load_(false), is_lob_slice_(false), ls_id_(), data_tablet_id_(), slice_id_(-1), : is_full_direct_load_(false), is_lob_slice_(false), ls_id_(), data_tablet_id_(), slice_id_(-1),
context_id_(0) context_id_(0), src_tenant_id_(MTL_ID())
{ } { }
~ObDirectLoadSliceInfo() = default; ~ObDirectLoadSliceInfo() = default;
bool is_valid() const { return ls_id_.is_valid() && data_tablet_id_.is_valid() && slice_id_ >= 0 && context_id_ >= 0; } bool is_valid() const { return ls_id_.is_valid() && data_tablet_id_.is_valid() && slice_id_ >= 0 && context_id_ >= 0 && src_tenant_id_ > 0; }
TO_STRING_KV(K_(is_full_direct_load), K_(is_lob_slice), K_(ls_id), K_(data_tablet_id), K_(slice_id), K_(context_id)); TO_STRING_KV(K_(is_full_direct_load), K_(is_lob_slice), K_(ls_id), K_(data_tablet_id), K_(slice_id), K_(context_id), K_(src_tenant_id));
public: public:
bool is_full_direct_load_; bool is_full_direct_load_;
bool is_lob_slice_; bool is_lob_slice_;
@ -115,6 +119,7 @@ public:
common::ObTabletID data_tablet_id_; common::ObTabletID data_tablet_id_;
int64_t slice_id_; int64_t slice_id_;
int64_t context_id_; int64_t context_id_;
uint64_t src_tenant_id_;
DISALLOW_COPY_AND_ASSIGN(ObDirectLoadSliceInfo); DISALLOW_COPY_AND_ASSIGN(ObDirectLoadSliceInfo);
}; };
@ -527,6 +532,7 @@ private:
const int64_t seq_no, const int64_t seq_no,
const int64_t timeout_ts, const int64_t timeout_ts,
const int64_t lob_inrow_threshold, const int64_t lob_inrow_threshold,
const uint64_t src_tenant_id,
ObLobMetaRowIterator *&row_iter); ObLobMetaRowIterator *&row_iter);
private: private:
bool is_inited_; bool is_inited_;

View File

@ -221,6 +221,7 @@ int ObInsertLobColumnHelper::insert_lob_column(ObIAllocator &allocator,
blocksstable::ObStorageDatum &datum, blocksstable::ObStorageDatum &datum,
const int64_t timeout_ts, const int64_t timeout_ts,
const bool has_lob_header, const bool has_lob_header,
const uint64_t src_tenant_id,
ObLobMetaWriteIter &iter) ObLobMetaWriteIter &iter)
{ {
int ret = OB_SUCCESS; int ret = OB_SUCCESS;
@ -272,6 +273,7 @@ int ObInsertLobColumnHelper::insert_lob_column(ObIAllocator &allocator,
lob_param.offset_ = 0; lob_param.offset_ = 0;
lob_param.spec_lob_id_ = lob_id; lob_param.spec_lob_id_ = lob_id;
lob_param.inrow_threshold_ = lob_storage_param.inrow_threshold_; lob_param.inrow_threshold_ = lob_storage_param.inrow_threshold_;
lob_param.src_tenant_id_ = src_tenant_id;
if (!src.is_valid()) { if (!src.is_valid()) {
ret = OB_ERR_UNEXPECTED; ret = OB_ERR_UNEXPECTED;
LOG_WARN("invalid src lob locator.", K(ret)); LOG_WARN("invalid src lob locator.", K(ret));

View File

@ -249,6 +249,7 @@ public:
blocksstable::ObStorageDatum &datum, blocksstable::ObStorageDatum &datum,
const int64_t timeout_ts, const int64_t timeout_ts,
const bool has_lob_header, const bool has_lob_header,
const uint64_t src_tenant_id,
ObLobMetaWriteIter &iter); ObLobMetaWriteIter &iter);
}; };