]> git.ipfire.org Git - thirdparty/bacula.git/commitdiff
BEE Backport bacula/src/stored/cloud_dev.h
authorNorbert Bizet <norbert.bizet@baculasystems.com>
Tue, 12 May 2020 16:42:35 +0000 (18:42 +0200)
committerEric Bollengier <eric@baculasystems.com>
Thu, 29 Apr 2021 08:44:18 +0000 (10:44 +0200)
This commit is the result of the squash of the following main commits:

Author: Norbert Bizet <norbert.bizet@baculasystems.com>
Date:   Wed Nov 6 09:28:39 2019 -0500

    cloud: Fix #5536 make sure truncate_cache as cloud proxy up-to-date

Author: Henrique <henrique.faria@baculasystems.com>
Date:   Sun Jan 6 20:45:39 2019 -0200

    cloud: added Swift Cloud Plugin

Author: Eric Bollengier <eric@baculasystems.com>
Date:   Tue Nov 6 10:38:53 2018 +0100

    cloud: Fix .status devices apiV2 output with device type

Author: Norbert Bizet <norbert.bizet@baculasystems.com>
Date:   Fri Sep 28 13:43:33 2018 +0200

    cloud: display used cloud driver in dev print_type()

Author: Norbert Bizet <norbert.bizet@baculasystems.com>
Date:   Thu Sep 6 09:41:48 2018 +0200

    cloud: relocate cloud driver types

Author: Norbert Bizet <norbert.bizet@baculasystems.com>
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 <norbert.bizet@baculasystems.com>
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 <norbert.bizet@baculasystems.com>
Date:   Fri Apr 21 13:57:54 2017 +0200

    cloud plugin transfers status api implementation

Author: Kern Sibbald <kern@sibbald.com>
Date:   Thu Jun 16 18:40:26 2016 +0200

    Implement driver classes + loadable drivers + first cut cloud driver

bacula/src/stored/cloud_dev.h

index ff67fb1a1cf2032bd2450a6adf2ca20c44e7ea26..f64e87ab30d602f4943623555815003d6e1447b9 100644 (file)
@@ -20,6 +20,7 @@
  * Generic routines for writing Cloud Volumes
  *
  * Written by Kern Sibbald, May MMXVI
+ *
  */
 
 #ifndef _CLOUD_DEV_H_
 #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 */