[BUGFIX] fix table restore import lob over diff tenant
This commit is contained in:
@ -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_));
|
||||||
|
|||||||
@ -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()));
|
||||||
|
|||||||
@ -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)) {
|
||||||
|
|||||||
@ -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_;
|
||||||
|
|||||||
@ -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));
|
||||||
|
|||||||
@ -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);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user