From: Norbert Bizet Date: Tue, 12 May 2020 16:42:35 +0000 (+0200) Subject: BEE Backport bacula/src/stored/cloud_dev.h X-Git-Tag: Release-11.3.2~1668 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=171ef134e38f0ae03aa2ed78a290a36718fdb6a8;p=thirdparty%2Fbacula.git BEE Backport bacula/src/stored/cloud_dev.h This commit is the result of the squash of the following main commits: Author: Norbert Bizet Date: Wed Nov 6 09:28:39 2019 -0500 cloud: Fix #5536 make sure truncate_cache as cloud proxy up-to-date Author: Henrique Date: Sun Jan 6 20:45:39 2019 -0200 cloud: added Swift Cloud Plugin Author: Eric Bollengier Date: Tue Nov 6 10:38:53 2018 +0100 cloud: Fix .status devices apiV2 output with device type Author: Norbert Bizet Date: Fri Sep 28 13:43:33 2018 +0200 cloud: display used cloud driver in dev print_type() Author: Norbert Bizet Date: Thu Sep 6 09:41:48 2018 +0200 cloud: relocate cloud driver types Author: Norbert Bizet Date: Wed Aug 9 15:42:47 2017 +0200 Decoupled cloud driver interface. Cloud drivers are ment to be as standalone as possible. Interface containing DCR and JCR imply huge dependencies. cloud device reference creates circular dependencies. I'm removing these reference and modify the code depending on context. When JCR is used to JMsg and Qmsg : the message is returned to the caller, in charge to JMsg or Qmsg it if necessary. When DCR is used for job cancellation check : a cancel callback function is passed instead. Device dependency is only used to call add_vol_and_part. It's been moved to cloud_driver interface and since it's a const function, it's declared static for ease of use. cloud_transfer_mgr : is_cancelled renamed to is_canceled. Author: Norbert Bizet Date: Mon May 22 16:36:40 2017 +0200 cloud: Add "Manual" cloud upload option and add truncate option to the upload command. Author: Norbert Bizet Date: Fri Apr 21 13:57:54 2017 +0200 cloud plugin transfers status api implementation Author: Kern Sibbald Date: Thu Jun 16 18:40:26 2016 +0200 Implement driver classes + loadable drivers + first cut cloud driver --- diff --git a/bacula/src/stored/cloud_dev.h b/bacula/src/stored/cloud_dev.h index ff67fb1a1c..f64e87ab30 100644 --- a/bacula/src/stored/cloud_dev.h +++ b/bacula/src/stored/cloud_dev.h @@ -20,6 +20,7 @@ * Generic routines for writing Cloud Volumes * * Written by Kern Sibbald, May MMXVI + * */ #ifndef _CLOUD_DEV_H_ @@ -36,6 +37,18 @@ #include "cloud_transfer_mgr.h" #include "cloud_parts.h" +/* enum loadable drivers */ +enum { + C_S3_DRIVER = 1, + C_FILE_DRIVER = 2, + C_WAS_DRIVER = 3, + C_GOOGLE_DRIVER= 4, + C_ORACLE_DRIVER= 5, + C_GEN_DRIVER = 6, + C_SWIFT_DRIVER = 7 +}; + + class cloud_dev: public file_dev { public: int64_t obj_len; @@ -49,6 +62,8 @@ public: uint32_t trunc_opt; uint32_t upload_opt; + uint32_t current_driver_type; + cloud_driver *driver; static transfer_manager download_mgr; @@ -56,12 +71,10 @@ public: cloud_proxy *cloud_prox; - void add_vol_and_part(POOLMEM *&filename, const char *VolumeName, const char *name, uint32_t part); - private: - char *cache_directory; + char full_type[64]; bool download_parts_to_read(DCR *dcr, alist* parts); - bool upload_part_to_cloud(DCR *dcr, const char *VolumeName, uint32_t part); + bool upload_part_to_cloud(DCR *dcr, const char *VolumeName, uint32_t part, bool do_truncate); transfer *download_part_to_cache(DCR *dcr, const char *VolumeName, uint32_t part); void make_cache_filename(POOLMEM *&filename, const char *VolumeName, uint32_t part); void make_cache_volume_name(POOLMEM *&full_volname, const char *VolumeName); @@ -85,14 +98,16 @@ public: bool open_device(DCR *dcr, int omode); bool open_next_part(DCR *dcr); bool truncate(DCR *dcr); - int truncate_cache(DCR *dcr, const char *VolName, int64_t *size); - bool upload_cache(DCR *dcr, const char *VolName, POOLMEM *&err); + int truncate_cache(DCR *dcr, const char *VolName, int64_t *size, POOLMEM *&err); + bool upload_cache(DCR *dcr, const char *VolName, uint32_t truncate, POOLMEM *&err); bool close(DCR *dcr); bool update_pos(DCR *dcr); bool is_eod_valid(DCR *dcr); bool eod(DCR *dcr); int read_dev_volume_label(DCR *dcr); const char *print_type(); + const char *print_driver_type(); + const char *print_full_type(); DEVICE *get_dev(DCR *dcr); uint32_t get_hi_addr(); uint32_t get_low_addr(); @@ -106,11 +121,13 @@ public: bool relabel, bool no_prelabel); bool rewrite_volume_label(DCR *dcr, bool recycle); bool start_of_job(DCR *dcr); - bool end_of_job(DCR *dcr); - bool get_cloud_volumes_list(DCR* dcr, alist *volumes, POOLMEM *&err) { return driver->get_cloud_volumes_list(dcr, volumes, err); }; - bool get_cloud_volume_parts_list(DCR *dcr, const char *VolumeName, ilist *parts, POOLMEM *&err) { return driver->get_cloud_volume_parts_list(dcr, VolumeName, parts, err);}; + bool end_of_job(DCR *dcr, uint32_t truncate); + bool get_cloud_volumes_list(DCR* dcr, alist *volumes, POOLMEM *&err); + bool get_cloud_volume_parts_list(DCR *dcr, const char *VolumeName, ilist *parts, POOLMEM *&err); uint32_t get_cloud_upload_transfer_status(POOL_MEM &msg, bool verbose); + void get_api_cloud_upload_transfer_status(OutputWriter &ow, bool verbose); uint32_t get_cloud_download_transfer_status(POOL_MEM &msg, bool verbose); + void get_api_cloud_download_transfer_status(OutputWriter &ow, bool verbose); }; /* Exported subroutines */