]> git.ipfire.org Git - thirdparty/bacula.git/commitdiff
All the missing Leave() in cloud code
authornorbert.bizet <norbert.bizet@baculasystems.com>
Tue, 7 Nov 2023 13:43:23 +0000 (08:43 -0500)
committerEric Bollengier <eric@baculasystems.com>
Tue, 13 Feb 2024 09:36:02 +0000 (10:36 +0100)
bacula/src/stored/cloud_dev.c
bacula/src/stored/file_driver.c
bacula/src/stored/s3_driver.c

index ab43506cbdf68f366b32aa79ae0f72adc2223b94..e8fe758fddea9472c3a20f21d43a20726c44217d 100644 (file)
@@ -441,6 +441,7 @@ bool cloud_dev::upload_part_to_cloud(DCR *dcr, const char *VolumeName, uint32_t
             cache_fname, be.bstrerror());
          Dmsg1(dbglvl, "%s", errmsg);
          free_pool_memory(cache_fname);
+         Leave(dbglvl);
          return false;
       }
       file_size = statbuf.st_size;
@@ -448,6 +449,7 @@ bool cloud_dev::upload_part_to_cloud(DCR *dcr, const char *VolumeName, uint32_t
       /* Nothing to do with this empty part */
       if (file_size == 0) {
          free_pool_memory(cache_fname);
+         Leave(dbglvl);
          return true; /* consider the transfer OK */
       }
 
@@ -489,7 +491,7 @@ bool cloud_dev::upload_part_to_cloud(DCR *dcr, const char *VolumeName, uint32_t
        * uploaded, but we may call it to update VolCatParts or VolLastPartBytes.
        */
    }
-
+   Leave(dbglvl);
    return ret;
 }
 
index ba1b03701a7cac2076945cd11765ad1e3f5de83c..d4e0c7aec52cd7657b9175a32a4d9586876d46a4 100644 (file)
@@ -325,7 +325,7 @@ get_out:
    }
 
    free_pool_memory(vol_dir);
-
+   Leave(dbglvl);
    return ok;
 }
 
@@ -336,6 +336,7 @@ void file_driver::make_cloud_filename(POOLMEM *&filename,
    pm_strcpy(filename, hostName);
    cloud_driver::add_vol_and_part(filename, VolumeName, file, part);
    Dmsg1(dbglvl, "make_cloud_filename: %s\n", filename);
+   Leave(dbglvl);
 }
 
 void file_driver::make_cloud_filename(POOLMEM *&filename,
@@ -345,6 +346,7 @@ void file_driver::make_cloud_filename(POOLMEM *&filename,
    pm_strcpy(filename, hostName);
    cloud_driver::add_vol_and_part(filename, VolumeName, file);
    Dmsg1(dbglvl, "make_cloud_filename: %s\n", filename);
+   Leave(dbglvl);
 }
 
 /*
@@ -359,6 +361,7 @@ bool file_driver::copy_cache_part_to_cloud(transfer *xfer)
    Dmsg1(dbglvl, "objects_default_tier: %d\n", objects_default_tier);
    bool rtn = put_object(xfer, xfer->m_cache_fname, cloud_fname, &upload_limit);
    free_pool_memory(cloud_fname);
+   Leave(dbglvl);
    return rtn;
 }
 
@@ -383,6 +386,7 @@ bool file_driver::move_cloud_part(const char *VolumeName, uint32_t apart , const
    }
    free_pool_memory(cloud_dest_name);
    free_pool_memory(cloud_source_name);
+   Leave(dbglvl);
    return rtn;
 }
 
@@ -398,15 +402,19 @@ int file_driver::copy_cloud_part_to_cache(transfer *xfer)
    
    if (getenv("CLOUD_FILE_DRIVER_SIMULATE_DELAYED_TRANSFER") && xfer->m_debug_retry) {
       restore_cloud_object(xfer, cloud_fname.c_str());
+      Leave(dbglvl);
       return CLOUD_DRIVER_COPY_PART_TO_CACHE_RETRY;
    } else {
       int ret = put_object(xfer, cloud_fname.c_str(), xfer->m_cache_fname, &download_limit);
       if (ret) {
+         Leave(dbglvl);
          return CLOUD_DRIVER_COPY_PART_TO_CACHE_OK;
       } else {
+         Leave(dbglvl);
          return CLOUD_DRIVER_COPY_PART_TO_CACHE_ERROR;
       }
    }
+   Leave(dbglvl);
    return CLOUD_DRIVER_COPY_PART_TO_CACHE_OK;
 }
 
@@ -479,6 +487,7 @@ bool file_driver::get_cloud_volume_parts_list(const char* VolumeName, ilist *par
 
    if (parts == NULL || strlen(VolumeName) == 0) {
       pm_strcpy(err, "Invalid argument");
+      Leave(dbglvl);
       return false;
    }
 
@@ -589,6 +598,7 @@ get_out:
 
    free_pool_memory(vol_dir);
 
+   Leave(dbglvl);
    return ok;
 }
 
@@ -676,5 +686,6 @@ get_out:
 
    free_pool_memory(fullpath);
 
+   Leave(dbglvl);
    return ok;
 }
index b592b8e878f3389ba2b184d904330bf4e3fe1a16..b263fc24211f0cb8025b702d8e10bdd5627186c5 100644 (file)
@@ -373,6 +373,7 @@ static void responseCompleteCallback(
          pm_strcat(ctx->errMsg, oops->extraDetails[i].value);
       }
    }
+   Leave(dbglvl);
    return;
 }
 
@@ -490,7 +491,7 @@ get_out:
    } else {
       Dmsg1(dbglvl, "put_object ERROR: %s\n", ctx.errMsg);
    }
-
+   Leave(dbglvl);
    return ctx.status;
 }
 
@@ -505,6 +506,7 @@ static S3Status getObjectDataCallback(int buf_len, const char *buf,
       POOL_MEM msg;
       Mmsg(msg, _("Job cancelled.\n"));
       pm_strcat(ctx->errMsg, msg);
+      Leave(dbglvl);
       return S3StatusAbortedByCallback;
    }
    /* Write buffer to output file */
@@ -515,12 +517,14 @@ static S3Status getObjectDataCallback(int buf_len, const char *buf,
       Mmsg(msg, "%s Error writing output file: ERR=%s\n",
          ctx->caller, be.bstrerror());
       pm_strcat(ctx->errMsg, msg);
+      Leave(dbglvl);
       return S3StatusAbortedByCallback;
    }
    ctx->xfer->increment_processed_size(wbytes);
    if (ctx->limit) {
       ctx->limit->control_bwlimit(wbytes);
    }
+   Leave(dbglvl);
    return ((wbytes < buf_len) ?
             S3StatusAbortedByCallback : S3StatusOK);
 }
@@ -586,8 +590,18 @@ int s3_driver::get_cloud_object(transfer *xfer, const char *cloud_fname, const c
    }
 
 get_out:
-   if (retry) return CLOUD_DRIVER_COPY_PART_TO_CACHE_RETRY;
-   return (ctx.errMsg[0] == 0) ? CLOUD_DRIVER_COPY_PART_TO_CACHE_OK : CLOUD_DRIVER_COPY_PART_TO_CACHE_ERROR;
+   if (retry) 
+   {
+      Leave(dbglvl);
+      return CLOUD_DRIVER_COPY_PART_TO_CACHE_RETRY;
+   }
+   if (ctx.errMsg[0] == 0) {
+      Leave(dbglvl);
+      return CLOUD_DRIVER_COPY_PART_TO_CACHE_OK;
+   } else {
+      Leave(dbglvl);
+      return CLOUD_DRIVER_COPY_PART_TO_CACHE_ERROR;
+   }
 }
 
 bool s3_driver::move_cloud_part(const char *VolumeName, uint32_t apart, const char *to, cancel_callback *cancel_cb, POOLMEM *&err, int& exists)
@@ -670,6 +684,7 @@ static S3Status partsAndCopieslistBucketCallback(
          POOL_MEM msg;
          Mmsg(msg, _("Job cancelled.\n"));
          pm_strcat(ctx->errMsg, msg);
+         Leave(dbglvl);
          return S3StatusAbortedByCallback;
       }
    }
@@ -702,6 +717,7 @@ bool s3_driver::clean_cloud_volume(const char *VolumeName, cleanup_cb_type *cb,
 
    if (strlen(VolumeName) == 0) {
       pm_strcpy(err, "Invalid argument");
+      Leave(dbglvl);
       return false;
    }
 
@@ -722,6 +738,7 @@ bool s3_driver::clean_cloud_volume(const char *VolumeName, cleanup_cb_type *cb,
       if (ctx.status != S3StatusOK) {
          pm_strcpy(err, S3Errors[ctx.status]);
          bfree_and_null(ctx.nextMarker);
+         Leave(dbglvl);
          return false;
       }
    }
@@ -735,6 +752,7 @@ bool s3_driver::clean_cloud_volume(const char *VolumeName, cleanup_cb_type *cb,
       }
       if (cancel_cb && cancel_cb->fct && cancel_cb->fct(cancel_cb->arg)) {
          Mmsg(err, _("Job cancelled.\n"));
+         Leave(dbglvl);
          return false;
       }
       /* don't forget to specify the volume name is the object path */
@@ -743,11 +761,13 @@ bool s3_driver::clean_cloud_volume(const char *VolumeName, cleanup_cb_type *cb,
       S3_delete_object(&s3ctx, part, NULL, 0, &responseHandler, &ctx);
       if (ctx.status != S3StatusOK) {
          /* error message should have been filled within response cb */
+         Leave(dbglvl);
          return false;
       } else {
          Dmsg2(dbglvl, "clean_cloud_volume for %s: Unlink file %s.\n", VolumeName, part);
       }
    }
+   Leave(dbglvl);
    return true;
 }
 
@@ -784,6 +804,7 @@ bool s3_driver::truncate_cloud_volume(const char *VolumeName, ilist *trunc_parts
 get_out:
    free_pool_memory(cloud_fname);
    bfree_and_null(ctx.nextMarker);
+   Leave(dbglvl);
    return (err[0] == 0);
 }
 
@@ -825,6 +846,7 @@ bool s3_driver::copy_cache_part_to_cloud(transfer *xfer)
       --retry;
    } while (retry_put_object(status, retry) && (retry>0));
    free_pool_memory(cloud_fname);
+   Leave(dbglvl);
    return (status == S3StatusOK);
 }
 
@@ -838,6 +860,7 @@ int s3_driver::copy_cloud_part_to_cache(transfer *xfer)
    make_cloud_filename(cloud_fname, xfer->m_volume_name, xfer->m_part);
    int rtn = get_cloud_object(xfer, cloud_fname, xfer->m_cache_fname);
    free_pool_memory(cloud_fname);
+   Leave(dbglvl);
    return rtn;
 }
 
@@ -855,8 +878,10 @@ bool s3_driver::is_waiting_on_server(transfer *xfer)
    POOL_MEM cloud_fname(PM_FNAME);
    make_cloud_filename(cloud_fname.addr(), xfer->m_volume_name, xfer->m_part);
    if (m_glacier_driver) {
+      Leave(dbglvl);
       return m_glacier_driver->is_waiting_on_server(xfer, cloud_fname.addr());
    }
+   Leave(dbglvl);
    return false;
 }
 /*
@@ -977,8 +1002,10 @@ static S3Status partslistBucketCallback(
       POOL_MEM msg;
       Mmsg(msg, _("Job cancelled.\n"));
       pm_strcat(ctx->errMsg, msg);
+      Leave(dbglvl);
       return S3StatusAbortedByCallback;
    }
+   Leave(dbglvl);
    return S3StatusOK;
 }
 
@@ -994,6 +1021,7 @@ bool s3_driver::get_cloud_volume_parts_list(const char* VolumeName, ilist *parts
 
    if (!parts || strlen(VolumeName) == 0) {
       pm_strcpy(err, "Invalid argument");
+      Leave(dbglvl);
       return false;
    }
 
@@ -1009,10 +1037,12 @@ bool s3_driver::get_cloud_volume_parts_list(const char* VolumeName, ilist *parts
       if (ctx.status != S3StatusOK) {
          pm_strcpy(err, S3Errors[ctx.status]);
          bfree_and_null(ctx.nextMarker);
+         Leave(dbglvl);
          return false;
       }
    }
    bfree_and_null(ctx.nextMarker);
+   Leave(dbglvl);
    return true;
 }
 
@@ -1022,6 +1052,7 @@ bool s3_driver::get_one_cloud_volume_part(const char* part_path_name, ilist *par
 
    if (!parts || strlen(part_path_name) == 0) {
       pm_strcpy(err, "Invalid argument");
+      Leave(dbglvl);
       return false;
    }
 
@@ -1036,10 +1067,12 @@ bool s3_driver::get_one_cloud_volume_part(const char* part_path_name, ilist *par
    if (ctx.status != S3StatusOK) {
       pm_strcpy(err, S3Errors[ctx.status]);
       bfree_and_null(ctx.nextMarker);
+      Leave(dbglvl);
       return false;
    }
 
    bfree_and_null(ctx.nextMarker);
+   Leave(dbglvl);
    return true;
 }
 
@@ -1074,13 +1107,14 @@ static S3Status volumeslistBucketCallback(
       ctx->nextMarker = bstrdup(obj->key);
    }
 
-   Leave(dbglvl);
    if (ctx->cancel_cb && ctx->cancel_cb->fct && ctx->cancel_cb->fct(ctx->cancel_cb->arg)) {
       POOL_MEM msg;
       Mmsg(msg, _("Job cancelled.\n"));
       pm_strcat(ctx->errMsg, msg);
+      Leave(dbglvl);
       return S3StatusAbortedByCallback;
    }
+   Leave(dbglvl);
    return S3StatusOK;
 }
 
@@ -1096,6 +1130,7 @@ bool s3_driver::get_cloud_volumes_list(alist *volumes, cancel_callback *cancel_c
 
    if (!volumes) {
       pm_strcpy(err, "Invalid argument");
+      Leave(dbglvl);
       return false;
    }
 
@@ -1113,6 +1148,7 @@ bool s3_driver::get_cloud_volumes_list(alist *volumes, cancel_callback *cancel_c
       }
    }
    bfree_and_null(ctx.nextMarker);
+   Leave(dbglvl);
    return (err[0] == 0);
 }