[scn] mv definition of SCN to dir of share
This commit is contained in:
@ -32,8 +32,11 @@
|
||||
|
||||
namespace oceanbase
|
||||
{
|
||||
using namespace blocksstable;
|
||||
using namespace common;
|
||||
using namespace share;
|
||||
using namespace storage;
|
||||
using namespace memtable;
|
||||
using namespace blocksstable;
|
||||
namespace compaction
|
||||
{
|
||||
|
||||
@ -602,6 +605,9 @@ int ObTabletMergePrepareTask::process()
|
||||
&& !MTL(ObTenantTabletScheduler *)->could_major_merge_start())) {
|
||||
ret = OB_CANCELED;
|
||||
LOG_INFO("Merge has been paused", K(ret), K(ctx));
|
||||
} else if (ctx->ls_handle_.get_ls()->is_offline()) {
|
||||
ret = OB_CANCELED;
|
||||
LOG_INFO("ls offline, skip merge", K(ret), K(ctx));
|
||||
} else if (FALSE_IT(ctx->time_guard_.click(ObCompactionTimeGuard::DAG_WAIT_TO_SCHEDULE))) {
|
||||
} else if (OB_FAIL(ctx->ls_handle_.get_ls()->get_tablet(ctx->param_.tablet_id_,
|
||||
ctx->tablet_handle_,
|
||||
@ -879,9 +885,7 @@ int ObTabletMergeFinishTask::process()
|
||||
}
|
||||
if (OB_SUCC(ret) && ctx.param_.is_major_merge() && NULL != ctx.param_.report_) {
|
||||
int tmp_ret = OB_SUCCESS;
|
||||
if (OB_TMP_FAIL(ctx.param_.report_->submit_tablet_checksums_task(MTL_ID(), ctx.param_.ls_id_, tablet_id))) {
|
||||
LOG_WARN("failed to submit tablet checksums task to report", K(tmp_ret), K(MTL_ID()), K(ctx.param_.ls_id_), K(tablet_id));
|
||||
} else if (OB_TMP_FAIL(ctx.param_.report_->submit_tablet_update_task(MTL_ID(), ctx.param_.ls_id_, tablet_id))) {
|
||||
if (OB_TMP_FAIL(ctx.param_.report_->submit_tablet_update_task(MTL_ID(), ctx.param_.ls_id_, tablet_id))) {
|
||||
LOG_WARN("failed to submit tablet update task to report", K(tmp_ret), K(MTL_ID()), K(ctx.param_.ls_id_), K(tablet_id));
|
||||
} else if (OB_TMP_FAIL(ctx.ls_handle_.get_ls()->get_tablet_svr()->update_tablet_report_status(tablet_id))) {
|
||||
LOG_WARN("failed to update tablet report status", K(tmp_ret), K(MTL_ID()), K(tablet_id));
|
||||
@ -890,6 +894,10 @@ int ObTabletMergeFinishTask::process()
|
||||
|
||||
if (OB_SUCC(ret) && OB_NOT_NULL(ctx.merge_progress_)) {
|
||||
int tmp_ret = OB_SUCCESS;
|
||||
// update merge info
|
||||
if (OB_TMP_FAIL(ctx.merge_progress_->update_merge_info(ctx.merge_info_.get_sstable_merge_info()))) {
|
||||
STORAGE_LOG(WARN, "fail to update update merge info", K(tmp_ret));
|
||||
}
|
||||
if (OB_TMP_FAIL(compaction::ObCompactionSuggestionMgr::get_instance().analyze_merge_info(
|
||||
ctx.merge_info_,
|
||||
*ctx.merge_progress_))) {
|
||||
@ -963,7 +971,7 @@ int ObTabletMergeFinishTask::add_sstable_for_merge(ObTabletMergeCtx &ctx)
|
||||
}
|
||||
|
||||
if (OB_SUCC(ret)) {
|
||||
palf::SCN clog_checkpoint_scn = ctx.param_.is_mini_merge() ? ctx.merged_table_handle_.get_table()->get_end_scn() : palf::SCN::min_scn();
|
||||
SCN clog_checkpoint_scn = ctx.param_.is_mini_merge() ? ctx.merged_table_handle_.get_table()->get_end_scn() : SCN::min_scn();
|
||||
ObUpdateTableStoreParam param(ctx.merged_table_handle_,
|
||||
ctx.sstable_version_range_.snapshot_version_,
|
||||
ctx.sstable_version_range_.multi_version_start_,
|
||||
@ -977,7 +985,9 @@ int ObTabletMergeFinishTask::add_sstable_for_merge(ObTabletMergeCtx &ctx)
|
||||
if (ctx.param_.tablet_id_.is_special_merge_tablet()) {
|
||||
param.multi_version_start_ = 1;
|
||||
}
|
||||
if (OB_FAIL(ret)) {
|
||||
// for mini merge, read all msd from frozen memtable
|
||||
if (ctx.param_.is_mini_merge() && OB_FAIL(read_msd_from_memtable(ctx, param))) {
|
||||
LOG_WARN("failed to read msd from memtable", K(ret), K(ctx));
|
||||
} else if (OB_FAIL(ctx.ls_handle_.get_ls()->update_tablet_table_store(
|
||||
ctx.param_.tablet_id_, param, new_tablet_handle))) {
|
||||
LOG_WARN("failed to update tablet table store", K(ret), K(param));
|
||||
@ -1011,6 +1021,69 @@ int ObTabletMergeFinishTask::add_sstable_for_merge(ObTabletMergeCtx &ctx)
|
||||
return ret;
|
||||
}
|
||||
|
||||
int ObTabletMergeFinishTask::read_msd_from_memtable(ObTabletMergeCtx &ctx, ObUpdateTableStoreParam ¶m)
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
|
||||
if (OB_FAIL(traverse_all_memtables(ctx, ¶m.tx_data_, MultiSourceDataUnitType::TABLET_TX_DATA))) {
|
||||
LOG_WARN("failed to read tx data from memtables", K(ret));
|
||||
} else if (OB_FAIL(traverse_all_memtables(ctx, ¶m.binding_info_, MultiSourceDataUnitType::TABLET_BINDING_INFO))) {
|
||||
LOG_WARN("failed to read tx data from memtables", K(ret));
|
||||
} else if (OB_FAIL(traverse_all_memtables(ctx, ¶m.auto_inc_seq_, MultiSourceDataUnitType::TABLET_SEQ))) {
|
||||
LOG_WARN("failed to read tx data from memtables", K(ret));
|
||||
} else {
|
||||
LOG_INFO("succeeded to read msd from memtable", K(ret),
|
||||
"ls_id", ctx.param_.ls_id_,
|
||||
"tablet_id", ctx.param_.tablet_id_,
|
||||
"tx_data", param.tx_data_,
|
||||
"binding_info", param.binding_info_,
|
||||
"auto_inc_seq", param.auto_inc_seq_);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int ObTabletMergeFinishTask::traverse_all_memtables(
|
||||
ObTabletMergeCtx &ctx,
|
||||
ObIMultiSourceDataUnit *msd,
|
||||
const MultiSourceDataUnitType &type)
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
ObIArray<ObITable*> &tables = ctx.tables_handle_.get_tables();
|
||||
ObITable *table = nullptr;
|
||||
ObMemtable *memtable = nullptr;
|
||||
|
||||
if (OB_ISNULL(msd)) {
|
||||
ret = OB_INVALID_ARGUMENT;
|
||||
LOG_WARN("invalid args", K(ret));
|
||||
}
|
||||
|
||||
for (int64_t i = tables.count() - 1; OB_SUCC(ret) && i >= 0; --i) {
|
||||
if (OB_ISNULL(table = tables.at(i))) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("table is null", K(ret), K(tables), KP(table));
|
||||
} else if (OB_UNLIKELY(!table->is_memtable())) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("table is not memtable", K(ret), K(tables), KPC(table));
|
||||
} else if (OB_UNLIKELY(!table->is_frozen_memtable())) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("table is not frozen memtable", K(ret), K(tables), KPC(table));
|
||||
} else if (table->is_data_memtable()) {
|
||||
memtable = static_cast<ObMemtable*>(table);
|
||||
if (memtable->has_multi_source_data_unit(type)) {
|
||||
if (OB_FAIL(memtable->get_multi_source_data_unit(msd, nullptr/*allocator*/))) {
|
||||
LOG_WARN("failed to get msd from memtable", K(ret), K(type));
|
||||
} else {
|
||||
// succeeded to get msd, just break
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int ObTabletMergeFinishTask::try_schedule_compaction_after_mini(
|
||||
ObTabletMergeCtx &ctx,
|
||||
ObTabletHandle &tablet_handle)
|
||||
|
||||
Reference in New Issue
Block a user