fix backup memory leak when some item init failed
This commit is contained in:
@ -1213,7 +1213,8 @@ int ObLSBackupCtx::get_last_persist_macro_block_(const ObBackupRetryDesc &retry_
|
||||
param_.ls_id_,
|
||||
backup_data_type_,
|
||||
retry_desc.turn_id_,
|
||||
retry_desc.retry_id_))) {
|
||||
retry_desc.retry_id_,
|
||||
true/*need_read_inner_table*/))) {
|
||||
LOG_WARN("failed to init iterator", K(ret), K_(param));
|
||||
} else {
|
||||
ObArray<ObBackupMacroBlockIndex> index_list;
|
||||
@ -1354,7 +1355,8 @@ int ObLSBackupCtx::inner_recover_need_reuse_macro_block_(const ObBackupRetryDesc
|
||||
param_.ls_id_,
|
||||
backup_data_type_,
|
||||
retry_desc.turn_id_,
|
||||
retry_desc.retry_id_))) {
|
||||
retry_desc.retry_id_,
|
||||
true/*need_read_inner_table*/))) {
|
||||
LOG_WARN("failed to init iterator", K(ret), K_(param));
|
||||
} else {
|
||||
ObArray<ObBackupMacroBlockIndex> index_list;
|
||||
@ -1412,6 +1414,10 @@ int ObLSBackupCtx::prepare_tablet_id_reader_(ObILSTabletIdReader *&reader)
|
||||
LOG_WARN("failed to init tablet id reader", K(ret), K(param_));
|
||||
} else {
|
||||
reader = tmp_reader;
|
||||
tmp_reader = NULL;
|
||||
}
|
||||
if (OB_NOT_NULL(tmp_reader)) {
|
||||
ObLSBackupFactory::free(tmp_reader);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -197,6 +197,20 @@ void ObLSBackupFactory::free(ObIMacroBlockIndexIterator *&iterator)
|
||||
}
|
||||
}
|
||||
|
||||
void ObLSBackupFactory::free(ObBackupMacroBlockIndexIterator *&iterator)
|
||||
{
|
||||
if (OB_NOT_NULL(iterator)) {
|
||||
OB_DELETE(ObBackupMacroBlockIndexIterator, ObModIds::BACKUP, iterator);
|
||||
}
|
||||
}
|
||||
|
||||
void ObLSBackupFactory::free(ObBackupMacroRangeIndexIterator *&iterator)
|
||||
{
|
||||
if (OB_NOT_NULL(iterator)) {
|
||||
OB_DELETE(ObBackupMacroRangeIndexIterator, ObModIds::BACKUP, iterator);
|
||||
}
|
||||
}
|
||||
|
||||
void ObLSBackupFactory::free(ObIBackupTabletProvider *&provider)
|
||||
{
|
||||
if (OB_NOT_NULL(provider)) {
|
||||
@ -208,6 +222,13 @@ void ObLSBackupFactory::free(ObIBackupTabletProvider *&provider)
|
||||
}
|
||||
}
|
||||
|
||||
void ObLSBackupFactory::free(ObBackupTabletProvider *&provider)
|
||||
{
|
||||
if (OB_NOT_NULL(provider)) {
|
||||
OB_DELETE(ObBackupTabletProvider, ObModIds::BACKUP, provider);
|
||||
}
|
||||
}
|
||||
|
||||
void ObLSBackupFactory::free(ObIBackupMacroBlockIndexFuser *&fuser)
|
||||
{
|
||||
if (OB_NOT_NULL(fuser)) {
|
||||
|
||||
@ -40,7 +40,10 @@ public:
|
||||
static void free(ObITabletMetaBackupReader *&reader);
|
||||
static void free(ObBackupMetaIndexIterator *&iterator);
|
||||
static void free(ObIMacroBlockIndexIterator *&iterator);
|
||||
static void free(ObBackupMacroBlockIndexIterator *&iterator);
|
||||
static void free(ObBackupMacroRangeIndexIterator *&iterator);
|
||||
static void free(ObIBackupTabletProvider *&provider);
|
||||
static void free(ObBackupTabletProvider *&provider);
|
||||
static void free(ObIBackupMacroBlockIndexFuser *&fuser);
|
||||
static void free(ObBackupTabletCtx *&ctx);
|
||||
|
||||
|
||||
@ -903,8 +903,12 @@ int ObBackupMacroBlockIndexMerger::prepare_prev_backup_set_index_iter_(
|
||||
LOG_WARN("failed to init backup macro range index iterator", K(ret), K(merge_param), K(prev_backup_set_desc), K(prev_tenant_index_retry_id));
|
||||
} else {
|
||||
iter = tmp_iter;
|
||||
tmp_iter = NULL;
|
||||
LOG_INFO("prepare prev backup set index iter", K(prev_backup_set_desc), K(merge_param));
|
||||
}
|
||||
if (OB_NOT_NULL(tmp_iter)) {
|
||||
ObLSBackupFactory::free(tmp_iter);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -950,10 +954,15 @@ int ObBackupMacroBlockIndexMerger::alloc_merge_iter_(const bool tenant_level,
|
||||
ls_id,
|
||||
merge_param.backup_data_type_,
|
||||
turn_id,
|
||||
retry_id))) {
|
||||
retry_id,
|
||||
true/*need_read_inner_table*/))) {
|
||||
LOG_WARN("failed to init macro block index iterator", K(ret), K(merge_param), K(ls_id), K(turn_id));
|
||||
} else {
|
||||
iter = tmp_iter;
|
||||
tmp_iter = NULL;
|
||||
}
|
||||
if (OB_NOT_NULL(tmp_iter)) {
|
||||
ObLSBackupFactory::free(tmp_iter);
|
||||
}
|
||||
} else {
|
||||
const ObBackupIndexIteratorType type = BACKUP_MACRO_RANGE_INDEX_ITERATOR;
|
||||
@ -974,6 +983,10 @@ int ObBackupMacroBlockIndexMerger::alloc_merge_iter_(const bool tenant_level,
|
||||
"failed to init macro block index iterator", K(ret), K(merge_param), K(ls_id), K(turn_id), K(retry_id));
|
||||
} else {
|
||||
iter = tmp_iter;
|
||||
tmp_iter = NULL;
|
||||
}
|
||||
if (OB_NOT_NULL(tmp_iter)) {
|
||||
ObLSBackupFactory::free(tmp_iter);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1369,6 +1382,10 @@ int ObBackupMetaIndexMerger::alloc_merge_iter_(const ObBackupIndexMergeParam &me
|
||||
LOG_WARN("failed to init meta index iterator", K(ret), K(merge_param));
|
||||
} else {
|
||||
iter = tmp_iter;
|
||||
tmp_iter = NULL;
|
||||
}
|
||||
if (OB_NOT_NULL(tmp_iter)) {
|
||||
ObLSBackupFactory::free(tmp_iter);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -119,7 +119,7 @@ public:
|
||||
int init(const int64_t task_id, const share::ObBackupDest &backup_dest, const uint64_t tenant_id,
|
||||
const share::ObBackupSetDesc &backup_set_desc, const share::ObLSID &ls_id,
|
||||
const share::ObBackupDataType &backup_data_type, const int64_t turn_id, const int64_t retry_id,
|
||||
const bool need_read_inner_table = true);
|
||||
const bool need_read_inner_table);
|
||||
virtual int next() override;
|
||||
virtual bool is_iter_end() const override;
|
||||
virtual int get_cur_index(ObBackupMacroRangeIndex &index) override;
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
|
||||
@ -2050,6 +2050,10 @@ int ObBackupTabletProvider::prepare_tablet_logic_id_reader_(const common::ObTabl
|
||||
LOG_WARN("failed to init reader", K(ret), K(tablet_id), K(tablet_handle), K(table_key));
|
||||
} else {
|
||||
reader = tmp_reader;
|
||||
tmp_reader = NULL;
|
||||
}
|
||||
if (OB_NOT_NULL(tmp_reader)) {
|
||||
ObLSBackupFactory::free(tmp_reader);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user