fix backup memory leak when some item init failed

This commit is contained in:
oceanoverflow
2023-10-10 10:40:14 +00:00
committed by ob-robot
parent 03509f5f3b
commit 71a1ce0cce
7 changed files with 68 additions and 5 deletions

View File

@ -768,13 +768,17 @@ int ObLSBackupDataDagNet::prepare_backup_tablet_provider_(const ObLSBackupParam
if (!param.is_valid()) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("get invalid args", K(ret), K(param));
} else if (OB_ISNULL(tmp_provider = static_cast<ObBackupTabletProvider *>(ObLSBackupFactory::get_backup_tablet_provider(type, param.tenant_id_)))) {
} else if (OB_ISNULL(tmp_provider = static_cast<ObBackupTabletProvider *>(ObLSBackupFactory::get_backup_tablet_provider(type, param.tenant_id_)))) {
ret = OB_ALLOCATE_MEMORY_FAILED;
LOG_WARN("failed to allocate provider", K(ret), K(param));
} else if (OB_FAIL(tmp_provider->init(param, backup_data_type, ls_backup_ctx, index_kv_cache, sql_proxy))) {
LOG_WARN("failed to init provider", K(ret), K(param), K(backup_data_type));
} else {
provider = tmp_provider;
tmp_provider = NULL;
}
if (OB_NOT_NULL(tmp_provider)) {
ObLSBackupFactory::free(tmp_provider);
}
return ret;
}
@ -3025,8 +3029,12 @@ int ObLSBackupDataTask::prepare_macro_block_reader_(const uint64_t tenant_id,
LOG_WARN("failed to init", K(ret), K(list));
} else {
reader = tmp_reader;
tmp_reader = NULL;
LOG_INFO("prepare macro block reader", K(list));
}
if (OB_NOT_NULL(tmp_reader)) {
ObLSBackupFactory::free(tmp_reader);
}
return ret;
}
@ -3046,8 +3054,12 @@ int ObLSBackupDataTask::prepare_tablet_meta_reader_(const common::ObTabletID &ta
LOG_WARN("failed to init", K(ret), K(tablet_id), K_(backup_data_type));
} else {
reader = tmp_reader;
tmp_reader = NULL;
LOG_INFO("prepare tablet meta reader", K(tablet_id), K(reader_type));
}
if (OB_NOT_NULL(tmp_reader)) {
ObLSBackupFactory::free(tmp_reader);
}
return ret;
}