[FEAT MERGE] merge transfer

Co-authored-by: wxhwang <wxhwang@126.com>
Co-authored-by: godyangfight <godyangfight@gmail.com>
Co-authored-by: Tyshawn <tuyunshan@gmail.com>
This commit is contained in:
xuhuleon
2023-06-21 11:42:26 +00:00
committed by ob-robot
parent d06678002e
commit 9dae112952
1280 changed files with 149724 additions and 48813 deletions

View File

@ -235,7 +235,7 @@ ObUpdateTableStoreParam::ObUpdateTableStoreParam(
const int64_t multi_version_start,
const ObStorageSchema *storage_schema,
const int64_t rebuild_seq)
: table_handle_(),
: sstable_(nullptr),
snapshot_version_(snapshot_version),
clog_checkpoint_scn_(),
multi_version_start_(multi_version_start),
@ -248,15 +248,14 @@ ObUpdateTableStoreParam::ObUpdateTableStoreParam(
allow_duplicate_sstable_(false),
tx_data_(),
binding_info_(),
auto_inc_seq_(),
medium_info_list_(nullptr),
autoinc_seq_(),
merge_type_(MERGE_TYPE_MAX)
{
clog_checkpoint_scn_.set_min();
}
ObUpdateTableStoreParam::ObUpdateTableStoreParam(
const ObTableHandleV2 &table_handle,
const blocksstable::ObSSTable *sstable,
const int64_t snapshot_version,
const int64_t multi_version_start,
const ObStorageSchema *storage_schema,
@ -265,9 +264,8 @@ ObUpdateTableStoreParam::ObUpdateTableStoreParam(
const SCN clog_checkpoint_scn,
const bool need_check_sstable,
const bool allow_duplicate_sstable,
const compaction::ObMediumCompactionInfoList *medium_info_list,
const ObMergeType merge_type)
: table_handle_(table_handle),
: sstable_(sstable),
snapshot_version_(snapshot_version),
clog_checkpoint_scn_(),
multi_version_start_(multi_version_start),
@ -280,22 +278,22 @@ ObUpdateTableStoreParam::ObUpdateTableStoreParam(
allow_duplicate_sstable_(allow_duplicate_sstable),
tx_data_(),
binding_info_(),
auto_inc_seq_(),
medium_info_list_(medium_info_list),
autoinc_seq_(),
merge_type_(merge_type)
{
clog_checkpoint_scn_ = clog_checkpoint_scn;
}
ObUpdateTableStoreParam::ObUpdateTableStoreParam(
const ObTableHandleV2 &table_handle,
const blocksstable::ObSSTable *sstable,
const int64_t snapshot_version,
const int64_t multi_version_start,
const int64_t rebuild_seq,
const ObStorageSchema *storage_schema,
const bool update_with_major_flag,
const ObMergeType merge_type,
const bool need_report)
: table_handle_(table_handle),
: sstable_(sstable),
snapshot_version_(snapshot_version),
clog_checkpoint_scn_(),
multi_version_start_(multi_version_start),
@ -308,9 +306,8 @@ ObUpdateTableStoreParam::ObUpdateTableStoreParam(
allow_duplicate_sstable_(false),
tx_data_(),
binding_info_(),
auto_inc_seq_(),
medium_info_list_(nullptr),
merge_type_(MERGE_TYPE_MAX)
autoinc_seq_(),
merge_type_(merge_type)
{
clog_checkpoint_scn_.set_min();
}
@ -330,9 +327,12 @@ ObBatchUpdateTableStoreParam::ObBatchUpdateTableStoreParam()
: tables_handle_(),
rebuild_seq_(OB_INVALID_VERSION),
update_logical_minor_sstable_(false),
is_transfer_replace_(false),
start_scn_(SCN::min_scn()),
tablet_meta_(nullptr)
tablet_meta_(nullptr),
update_ddl_sstable_(false)
{
ha_status_.init_status();
}
void ObBatchUpdateTableStoreParam::reset()
@ -340,15 +340,19 @@ void ObBatchUpdateTableStoreParam::reset()
tables_handle_.reset();
rebuild_seq_ = OB_INVALID_VERSION;
update_logical_minor_sstable_ = false;
is_transfer_replace_ = false;
start_scn_.set_min();
tablet_meta_ = nullptr;
update_ddl_sstable_ = false;
ha_status_.init_status();
}
bool ObBatchUpdateTableStoreParam::is_valid() const
{
return rebuild_seq_ > OB_INVALID_VERSION
&& (!update_logical_minor_sstable_
|| (update_logical_minor_sstable_ && start_scn_ > SCN::min_scn() && OB_ISNULL(tablet_meta_)));
|| (update_logical_minor_sstable_ && start_scn_ > SCN::min_scn() && OB_ISNULL(tablet_meta_)))
&& ha_status_.is_valid();
}
int ObBatchUpdateTableStoreParam::assign(
@ -363,8 +367,11 @@ int ObBatchUpdateTableStoreParam::assign(
} else {
rebuild_seq_ = param.rebuild_seq_;
update_logical_minor_sstable_ = param.update_logical_minor_sstable_;
is_transfer_replace_ = param.is_transfer_replace_;
start_scn_ = param.start_scn_;
tablet_meta_ = param.tablet_meta_;
update_ddl_sstable_ = param.update_ddl_sstable_;
ha_status_ = param.ha_status_;
}
return ret;
}
@ -431,202 +438,6 @@ void ObPartitionReadableInfo::reset()
force_ = false;
}
int ObMigrateStatusHelper::trans_replica_op(const ObReplicaOpType &op_type, ObMigrateStatus &migrate_status)
{
int ret = OB_SUCCESS;
migrate_status = OB_MIGRATE_STATUS_MAX;
if (!is_replica_op_valid(op_type)) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("invalid args", K(ret), K(op_type));
} else {
switch (op_type) {
case ADD_REPLICA_OP: {
migrate_status = OB_MIGRATE_STATUS_ADD;
break;
}
case FAST_MIGRATE_REPLICA_OP:
case MIGRATE_REPLICA_OP: {
migrate_status = OB_MIGRATE_STATUS_MIGRATE;
break;
}
case REBUILD_REPLICA_OP: {
migrate_status = OB_MIGRATE_STATUS_REBUILD;
break;
}
case CHANGE_REPLICA_OP: {
migrate_status = OB_MIGRATE_STATUS_CHANGE;
break;
}
case RESTORE_REPLICA_OP: {
migrate_status = OB_MIGRATE_STATUS_RESTORE;
break;
}
case COPY_GLOBAL_INDEX_OP: {
migrate_status = OB_MIGRATE_STATUS_COPY_GLOBAL_INDEX;
break;
}
case COPY_LOCAL_INDEX_OP: {
migrate_status = OB_MIGRATE_STATUS_COPY_LOCAL_INDEX;
break;
}
case RESTORE_FOLLOWER_REPLICA_OP: {
migrate_status = OB_MIGRATE_STATUS_RESTORE_FOLLOWER;
break;
}
case RESTORE_STANDBY_OP: {
migrate_status = OB_MIGRATE_STATUS_RESTORE_STANDBY;
break;
}
case LINK_SHARE_MAJOR_OP: {
migrate_status = OB_MIGRATE_STATUS_LINK_MAJOR;
break;
}
default: {
ret = OB_INVALID_ARGUMENT;
LOG_ERROR("unknown op type", K(ret), K(op_type));
}
}
}
return ret;
}
int ObMigrateStatusHelper::trans_fail_status(const ObMigrateStatus &cur_status, ObMigrateStatus &fail_status)
{
int ret = OB_SUCCESS;
fail_status = OB_MIGRATE_STATUS_MAX;
if (cur_status < OB_MIGRATE_STATUS_NONE || cur_status >= OB_MIGRATE_STATUS_MAX) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("invalid args", K(ret), K(cur_status));
} else {
switch (cur_status) {
case OB_MIGRATE_STATUS_ADD: {
fail_status = OB_MIGRATE_STATUS_ADD_FAIL;
break;
}
case OB_MIGRATE_STATUS_MIGRATE: {
fail_status = OB_MIGRATE_STATUS_MIGRATE_FAIL;
break;
}
case OB_MIGRATE_STATUS_REBUILD: {
fail_status = OB_MIGRATE_STATUS_NONE;
break;
}
case OB_MIGRATE_STATUS_CHANGE: {
fail_status = OB_MIGRATE_STATUS_NONE;
break;
}
case OB_MIGRATE_STATUS_RESTORE: {
//allow observer self reentry
fail_status = OB_MIGRATE_STATUS_NONE;
break;
}
case OB_MIGRATE_STATUS_COPY_GLOBAL_INDEX: {
fail_status = OB_MIGRATE_STATUS_NONE;
break;
}
case OB_MIGRATE_STATUS_COPY_LOCAL_INDEX: {
fail_status = OB_MIGRATE_STATUS_NONE;
break;
}
case OB_MIGRATE_STATUS_HOLD: {
fail_status = OB_MIGRATE_STATUS_NONE;
break;
}
case OB_MIGRATE_STATUS_RESTORE_FOLLOWER : {
//allow observer self reentry
fail_status = OB_MIGRATE_STATUS_NONE;
break;
}
case OB_MIGRATE_STATUS_RESTORE_STANDBY : {
//allow observer self reentry
fail_status = OB_MIGRATE_STATUS_NONE;
break;
}
case OB_MIGRATE_STATUS_LINK_MAJOR : {
fail_status = OB_MIGRATE_STATUS_NONE;
break;
}
default: {
ret = OB_INVALID_ARGUMENT;
LOG_ERROR("invalid cur status for fail", K(ret), K(cur_status));
}
}
}
return ret;
}
int ObMigrateStatusHelper::trans_reboot_status(const ObMigrateStatus &cur_status, ObMigrateStatus &reboot_status)
{
int ret = OB_SUCCESS;
reboot_status = OB_MIGRATE_STATUS_MAX;
if (cur_status < OB_MIGRATE_STATUS_NONE || cur_status >= OB_MIGRATE_STATUS_MAX) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("invalid args", K(ret), K(cur_status));
} else {
switch (cur_status) {
case OB_MIGRATE_STATUS_NONE: {
reboot_status = OB_MIGRATE_STATUS_NONE;
break;
}
case OB_MIGRATE_STATUS_ADD:
case OB_MIGRATE_STATUS_ADD_FAIL: {
reboot_status = OB_MIGRATE_STATUS_ADD_FAIL;
break;
}
case OB_MIGRATE_STATUS_MIGRATE:
case OB_MIGRATE_STATUS_MIGRATE_FAIL: {
reboot_status = OB_MIGRATE_STATUS_MIGRATE_FAIL;
break;
}
case OB_MIGRATE_STATUS_REBUILD: {
reboot_status = OB_MIGRATE_STATUS_NONE;
break;
}
case OB_MIGRATE_STATUS_CHANGE: {
reboot_status = OB_MIGRATE_STATUS_NONE;
break;
}
case OB_MIGRATE_STATUS_RESTORE:
case OB_MIGRATE_STATUS_RESTORE_FOLLOWER:
case OB_MIGRATE_STATUS_RESTORE_STANDBY: {
reboot_status = OB_MIGRATE_STATUS_NONE;
break;
}
case OB_MIGRATE_STATUS_RESTORE_FAIL: {
reboot_status = OB_MIGRATE_STATUS_RESTORE_FAIL;
break;
}
case OB_MIGRATE_STATUS_COPY_GLOBAL_INDEX: {
reboot_status = OB_MIGRATE_STATUS_NONE;
break;
}
case OB_MIGRATE_STATUS_COPY_LOCAL_INDEX: {
reboot_status = OB_MIGRATE_STATUS_NONE;
break;
}
case OB_MIGRATE_STATUS_HOLD: {
reboot_status = OB_MIGRATE_STATUS_NONE;
break;
}
case OB_MIGRATE_STATUS_LINK_MAJOR: {
reboot_status = OB_MIGRATE_STATUS_NONE;
break;
}
default: {
ret = OB_INVALID_ARGUMENT;
LOG_ERROR("invalid cur status for fail", K(ret), K(cur_status));
}
}
}
return ret;
}
int ObCreateSSTableParamExtraInfo::assign(const ObCreateSSTableParamExtraInfo &other)
{
int ret = OB_SUCCESS;