cs replica support recover restore table

This commit is contained in:
Tsunaou 2024-10-28 05:18:49 +00:00 committed by ob-robot
parent c9d4139a06
commit 3895cfc3e4
4 changed files with 21 additions and 37 deletions

View File

@ -15977,32 +15977,8 @@ int ObDDLService::recover_restore_table_ddl_task(
} else {
ObDDLOperator ddl_operator(*schema_service_, *sql_proxy_);
bool is_dest_table_column_store = false;
if (tenant_data_version >= DATA_VERSION_4_3_3_0) {
const share::schema::ObTenantSchema *dst_tenant_schema = nullptr;
if (OB_FAIL(dst_tenant_schema_guard->get_tenant_info(dst_tenant_id, dst_tenant_schema))) {
LOG_WARN("fail to get tenant schema", K(ret), K(dst_tenant_id));
} else if (OB_UNLIKELY(OB_ISNULL(dst_tenant_schema) || !dst_tenant_schema->is_valid())) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("tenant schema is null or invalid", K(ret), K(dst_tenant_id), KPC(dst_tenant_schema));
} else {
common::ObArray<share::ObZoneReplicaAttrSet> zone_locality;
if (OB_FAIL(dst_tenant_schema->get_zone_replica_attr_array(zone_locality))) {
LOG_WARN("fail to get locality from schema", K(ret), KPC(dst_tenant_schema));
} else {
for (int64_t i = 0; OB_SUCC(ret) && i < zone_locality.count(); ++i) {
const share::ObZoneReplicaAttrSet &this_set = zone_locality.at(i);
if (0 != this_set.get_columnstore_replica_num()) {
ret = OB_NOT_SUPPORTED;
LOG_WARN("not supported to retore table with tenant with column store replica", K(ret), K(arg));
LOG_USER_ERROR(OB_NOT_SUPPORTED, "Can not restore table with tenant with C-Replica");
}
}
}
}
}
if (FAILEDx(dst_tenant_trans.start(sql_proxy_, dst_tenant_id, refreshed_dst_tenant_version))) {
ObString index_name("");
if (OB_FAIL(dst_tenant_trans.start(sql_proxy_, dst_tenant_id, refreshed_dst_tenant_version))) {
LOG_WARN("start transaction failed", K(ret), K(dst_tenant_id), K(refreshed_dst_tenant_version));
} else if (OB_FAIL(dst_table_schema.assign(arg.target_schema_))) {
LOG_WARN("assign failed", K(ret), K(session_id), K(arg));
@ -16013,7 +15989,7 @@ int ObDDLService::recover_restore_table_ddl_task(
LOG_WARN("not supported to retore table with column store", K(ret), K(arg));
} else if (OB_FAIL(create_user_hidden_table(*src_table_schema, dst_table_schema, nullptr/*sequence_ddl_arg*/,
false/*bind_tablets*/, *src_tenant_schema_guard, *dst_tenant_schema_guard, ddl_operator,
dst_tenant_trans, allocator, tenant_data_version))) {
dst_tenant_trans, allocator, tenant_data_version, index_name, true /*ignore_cs_replica*/))) {
LOG_WARN("create user hidden table failed", K(ret), K(arg), K(tenant_data_version));
} else {
ObPrepareAlterTableArgParam param;
@ -19348,7 +19324,8 @@ int ObDDLService::create_user_hidden_table(const ObTableSchema &orig_table_schem
ObMySQLTransaction &trans,
ObIAllocator &allocator,
const uint64_t tenant_data_version,
const ObString &index_name/*default ""*/)
const ObString &index_name/*default ""*/,
const bool ignore_cs_replica/*= false*/)
{
int ret = OB_SUCCESS;
const uint64_t tenant_id = hidden_table_schema.get_tenant_id();
@ -19492,7 +19469,8 @@ int ObDDLService::create_user_hidden_table(const ObTableSchema &orig_table_schem
schemas,
ls_id_array,
tenant_data_version,
need_create_empty_majors/*need_create_empty_major_sstable*/))) {
need_create_empty_majors/*need_create_empty_major_sstable*/,
ignore_cs_replica))) {
LOG_WARN("create table tablets failed", K(ret), K(hidden_table_schema));
} else if (bind_tablets && OB_FAIL(table_creator.add_create_bind_tablets_of_hidden_table_arg(
orig_table_schema,

View File

@ -1651,7 +1651,8 @@ private:
common::ObMySQLTransaction &trans,
common::ObIAllocator &allocator,
const uint64_t tenant_data_version,
const ObString &index_name = ObString(""));
const ObString &index_name = ObString(""),
const bool ignore_cs_replica = false);
int rebuild_triggers_on_hidden_table(
const share::schema::ObTableSchema &orig_table_schema,
const share::schema::ObTableSchema &hidden_table_schema,

View File

@ -150,7 +150,8 @@ int ObTableCreator::add_create_tablets_of_tables_arg(
const common::ObIArray<const share::schema::ObTableSchema*> &schemas,
const common::ObIArray<share::ObLSID> &ls_id_array,
const uint64_t tenant_data_version,
const common::ObIArray<bool> &need_create_empty_majors)
const common::ObIArray<bool> &need_create_empty_majors,
const bool ignore_cs_replica /*=false*/)
{
int ret = OB_SUCCESS;
if (OB_UNLIKELY(tenant_data_version <= 0
@ -183,7 +184,7 @@ int ObTableCreator::add_create_tablets_of_tables_arg(
}
if (OB_FAIL(ret)) {
} else if (OB_FAIL(add_create_tablets_of_tables_arg_(
schemas, NULL, ls_id_array, tenant_data_version, need_create_empty_majors))) {
schemas, NULL, ls_id_array, tenant_data_version, need_create_empty_majors, ignore_cs_replica))) {
LOG_WARN("fail to add_create_tablets_of_tables_arg_", KR(ret), K(schemas));
}
return ret;
@ -197,7 +198,8 @@ int ObTableCreator::add_create_tablets_of_tables_arg_(
const share::schema::ObTableSchema *data_table_schema,
const common::ObIArray<share::ObLSID> &ls_id_array,
const uint64_t tenant_data_version,
const common::ObIArray<bool> &need_create_empty_majors)
const common::ObIArray<bool> &need_create_empty_majors,
const bool ignore_cs_replica /*=false*/)
{
int ret = OB_SUCCESS;
int tmp_ret = OB_SUCCESS;
@ -272,7 +274,8 @@ int ObTableCreator::add_create_tablets_of_tables_arg_(
}
// try init, but ignore ret. not blocking create tablet if query inner_table failed or other error
if (OB_TMP_FAIL(cs_replica_mgr.try_init(tenant_id_, ls_id_array_))) {
if (ignore_cs_replica) {
} else if (OB_TMP_FAIL(cs_replica_mgr.try_init(tenant_id_, ls_id_array_))) {
LOG_WARN("fail to init cs_replica_mgr", KR(tmp_ret));
}
@ -377,7 +380,7 @@ int ObTableCreator::add_create_tablets_of_tables_arg_(
KR(ret), K_(tenant_id), K(schema_version));
}
int64_t end_time = ObTimeUtility::current_time();
LOG_INFO("finish create_tablet_to_table_history", KR(ret), K(table_schema.get_tenant_id()),
LOG_INFO("finish create_tablet_to_table_history", KR(ret), K(table_schema.get_tenant_id()), K(ignore_cs_replica),
K(table_schema.get_table_id()), "cost_ts", end_time - start_time);
}
}

View File

@ -52,7 +52,8 @@ public:
const common::ObIArray<const share::schema::ObTableSchema*> &schemas,
const common::ObIArray<share::ObLSID> &ls_id_array,
const uint64_t tenant_data_version,
const common::ObIArray<bool> &need_create_empty_majors);
const common::ObIArray<bool> &need_create_empty_majors,
const bool ignore_cs_replica = false);
// create tablets for local aux tables(include local_index/aux_lob_table), which are belong to a data table.
//
@ -86,7 +87,8 @@ private:
const share::schema::ObTableSchema *data_table_schema,
const common::ObIArray<share::ObLSID> &ls_id_array,
const uint64_t tenant_data_version,
const common::ObIArray<bool> &need_create_empty_majors);
const common::ObIArray<bool> &need_create_empty_majors,
const bool ignore_cs_replica = false);
int generate_create_tablet_arg_(
const common::ObIArray<const share::schema::ObTableSchema*> &schemas,
const ObTableSchema &data_table_schema,