提交 eab142b0 编写于 作者: G godyangfight 提交者: wangzelin.wzl

[CP] [CP] [CP] Fix backup point create do not filter local sstable which is...

[CP] [CP] [CP] Fix backup point create do not filter local sstable which is avaiable after backup point create
上级 5af4cb27
...@@ -450,6 +450,8 @@ public: ...@@ -450,6 +450,8 @@ public:
EN_BACKUP_DATA_CLEAN_ERROR = 189, EN_BACKUP_DATA_CLEAN_ERROR = 189,
EN_BACKUP_COMMON_HEADER_NOT_COMPLETED = 190, EN_BACKUP_COMMON_HEADER_NOT_COMPLETED = 190,
EN_BACKUP_SCHEDULER_WEAK_READ = 191, EN_BACKUP_SCHEDULER_WEAK_READ = 191,
EN_CREATE_BACKUP_POINT_ERROR = 193,
EN_CHECK_STANDBY_CLUSTER_SCHEMA_CONDITION = 201, EN_CHECK_STANDBY_CLUSTER_SCHEMA_CONDITION = 201,
EN_ALLOCATE_LOB_BUF_FAILED = 202, EN_ALLOCATE_LOB_BUF_FAILED = 202,
EN_ALLOCATE_DESERIALIZE_LOB_BUF_FAILED = 203, EN_ALLOCATE_DESERIALIZE_LOB_BUF_FAILED = 203,
......
...@@ -898,6 +898,8 @@ int ObPartitionGroupMetaRestoreReaderV2::init(common::ObInOutBandwidthThrottle & ...@@ -898,6 +898,8 @@ int ObPartitionGroupMetaRestoreReaderV2::init(common::ObInOutBandwidthThrottle &
ObBackupInfoMgr::get_instance().get_base_data_restore_schema_version(tenant_id, restore_schema_version))) { ObBackupInfoMgr::get_instance().get_base_data_restore_schema_version(tenant_id, restore_schema_version))) {
STORAGE_LOG(WARN, "failed to get base data restore schema version", K(ret), K(tenant_id), K(restore_info)); STORAGE_LOG(WARN, "failed to get base data restore schema version", K(ret), K(tenant_id), K(restore_info));
} else { } else {
// here get min schema because restore may cut data. pg meta record schema version for cut data if restore
// snapshot version is smaller than backup point create end snapshot.
current_schema_version = std::min(pg_meta_.storage_info_.get_data_info().get_schema_version(), current_schema_version = std::min(pg_meta_.storage_info_.get_data_info().get_schema_version(),
backup_pg_meta_info_.pg_meta_.storage_info_.get_data_info().get_schema_version()); backup_pg_meta_info_.pg_meta_.storage_info_.get_data_info().get_schema_version());
} }
......
...@@ -4552,6 +4552,7 @@ int ObPartitionStore::get_restore_point_normal_tables_(const int64_t snapshot_ve ...@@ -4552,6 +4552,7 @@ int ObPartitionStore::get_restore_point_normal_tables_(const int64_t snapshot_ve
ObTablesHandle tmp_handle; ObTablesHandle tmp_handle;
ObTablesHandle new_handle; ObTablesHandle new_handle;
ObMultiVersionTableStore *table_store = NULL; ObMultiVersionTableStore *table_store = NULL;
bool is_exist = false;
if (OB_FAIL(store_map_->get(index_id, table_store))) { if (OB_FAIL(store_map_->get(index_id, table_store))) {
LOG_WARN("failed to get table store", K(ret), K(index_id)); LOG_WARN("failed to get table store", K(ret), K(index_id));
} else if (OB_ISNULL(table_store)) { } else if (OB_ISNULL(table_store)) {
...@@ -4559,7 +4560,9 @@ int ObPartitionStore::get_restore_point_normal_tables_(const int64_t snapshot_ve ...@@ -4559,7 +4560,9 @@ int ObPartitionStore::get_restore_point_normal_tables_(const int64_t snapshot_ve
LOG_WARN("table store should not be null", K(ret), "index_id", index_id); LOG_WARN("table store should not be null", K(ret), "index_id", index_id);
} else if (OB_FAIL(table_store->get_multi_version_start(multi_version_start))) { } else if (OB_FAIL(table_store->get_multi_version_start(multi_version_start))) {
LOG_WARN("failed to get multi_version_start", K(ret), K(pkey_), K(index_id)); LOG_WARN("failed to get multi_version_start", K(ret), K(pkey_), K(index_id));
} else if (meta_->create_timestamp_ < snapshot_version && multi_version_start > snapshot_version) { } else if (OB_FAIL(schema_filter.check_table_exist_in_recovery_schema(index_id, is_exist))) {
LOG_WARN("failed to check table exist in recovery schema", K(ret), K(index_id));
} else if (is_exist && meta_->create_timestamp_ < snapshot_version && multi_version_start > snapshot_version) {
ret = OB_ERR_UNEXPECTED; ret = OB_ERR_UNEXPECTED;
LOG_WARN("table store has not kept multi version", LOG_WARN("table store has not kept multi version",
K(ret), K(ret),
......
...@@ -8119,6 +8119,16 @@ int ObPGStorage::update_backup_points( ...@@ -8119,6 +8119,16 @@ int ObPGStorage::update_backup_points(
int ret = OB_SUCCESS; int ret = OB_SUCCESS;
ObSEArray<int64_t, 1> snapshot_versions; ObSEArray<int64_t, 1> snapshot_versions;
const bool is_restore_point = false; const bool is_restore_point = false;
#ifdef ERRSIM
if (OB_SUCC(ret)) {
ret = E(EventTable::EN_CREATE_BACKUP_POINT_ERROR) OB_SUCCESS;
if (OB_FAIL(ret)) {
STORAGE_LOG(ERROR, "fake EN_CREATE_BACKUP_POINT_ERROR", K(ret));
}
}
#endif
for (int64_t i = 0; OB_SUCC(ret) && i < backup_points.count(); i++) { for (int64_t i = 0; OB_SUCC(ret) && i < backup_points.count(); i++) {
const int64_t snapshot_ts = backup_points.at(i); const int64_t snapshot_ts = backup_points.at(i);
const int64_t schema_version = schema_versions.at(i); const int64_t schema_version = schema_versions.at(i);
......
...@@ -1258,6 +1258,25 @@ int ObRecoveryPointSchemaFilter::get_table_ids_in_pg_(const ObPartitionKey &pgke ...@@ -1258,6 +1258,25 @@ int ObRecoveryPointSchemaFilter::get_table_ids_in_pg_(const ObPartitionKey &pgke
return ret; return ret;
} }
int ObRecoveryPointSchemaFilter::check_table_exist_in_recovery_schema(const uint64_t table_id, bool &is_exist)
{
int ret = OB_SUCCESS;
ObSchemaGetterGuard *schema_guard = NULL;
is_exist = false;
if (!is_inited_) {
ret = OB_NOT_INIT;
LOG_WARN("recovery point schema filter do not init", K(ret));
} else if (OB_INVALID_ID == table_id) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("check table is local index get invalid argument");
} else if (FALSE_IT(schema_guard = &recovery_point_schema_guard_)) {
} else if (OB_FAIL(check_table_exist_(table_id, *schema_guard, is_exist))) {
STORAGE_LOG(WARN, "failed to check table exist", K(ret), K(table_id));
}
return ret;
}
/***********************ObBackupRestoreTableSchemaChecker***************************/ /***********************ObBackupRestoreTableSchemaChecker***************************/
int ObBackupRestoreTableSchemaChecker::check_backup_restore_need_skip_table( int ObBackupRestoreTableSchemaChecker::check_backup_restore_need_skip_table(
const share::schema::ObTableSchema *table_schema, bool &need_skip, const bool is_restore_point) const share::schema::ObTableSchema *table_schema, bool &need_skip, const bool is_restore_point)
......
...@@ -625,6 +625,7 @@ public: ...@@ -625,6 +625,7 @@ public:
int do_filter_pg_partitions(const common::ObPartitionKey& pg_key, common::ObPartitionArray& partitions); int do_filter_pg_partitions(const common::ObPartitionKey& pg_key, common::ObPartitionArray& partitions);
int check_if_table_miss_by_schema( int check_if_table_miss_by_schema(
const common::ObPartitionKey& pgkey, const common::hash::ObHashSet<uint64_t>& table_ids); const common::ObPartitionKey& pgkey, const common::hash::ObHashSet<uint64_t>& table_ids);
int check_table_exist_in_recovery_schema(const uint64_t table_id, bool &is_exist);
TO_STRING_KV( TO_STRING_KV(
K_(is_inited), K_(tenant_id), K_(tenant_recovery_point_schema_version), K_(tenant_current_schema_version)); K_(is_inited), K_(tenant_id), K_(tenant_recovery_point_schema_version), K_(tenant_current_schema_version));
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册