]> git.ipfire.org Git - thirdparty/bacula.git/commitdiff
filed: Pack all restore object related fields into dedicated struct
authorMichal Rakowski <michal.rakowski@baculasystems.com>
Wed, 9 Sep 2020 15:21:50 +0000 (17:21 +0200)
committerEric Bollengier <eric@baculasystems.com>
Thu, 24 Mar 2022 08:02:56 +0000 (09:02 +0100)
bacula/src/filed/backup.c
bacula/src/filed/fd_plugins.c
bacula/src/filed/fd_plugins.h
bacula/src/findlib/find.h

index 0373166b1e662e04766b4820761cd01a64ca35b4..061766b7f19af044554f4f82c458a9f42406266f 100644 (file)
@@ -1035,36 +1035,38 @@ bool encode_and_send_attributes(bctx_t &bctx)
       break;
    case FT_PLUGIN_CONFIG:
    case FT_RESTORE_FIRST:
-      comp_len = ff_pkt->object_len;
-      ff_pkt->object_compression = 0;
-      if (ff_pkt->object_len > 1000) {
+      comp_len = ff_pkt->restore_obj.object_len;
+      ff_pkt->restore_obj.object_compression = 0;
+      if (ff_pkt->restore_obj.object_len > 1000) {
          /* Big object, compress it */
-         comp_len = ff_pkt->object_len + 1000;
+         comp_len = ff_pkt->restore_obj.object_len + 1000;
          POOLMEM *comp_obj = get_memory(comp_len);
          /* *** FIXME *** check Zdeflate error */
-         Zdeflate(ff_pkt->object, ff_pkt->object_len, comp_obj, comp_len);
-         if (comp_len < ff_pkt->object_len) {
-            ff_pkt->object = comp_obj;
-            ff_pkt->object_compression = 1;    /* zlib level 9 compression */
+         Zdeflate(ff_pkt->restore_obj.object, ff_pkt->restore_obj.object_len, comp_obj, comp_len);
+         if (comp_len < ff_pkt->restore_obj.object_len) {
+            ff_pkt->restore_obj.object = comp_obj;
+            ff_pkt->restore_obj.object_compression = 1;    /* zlib level 9 compression */
          } else {
             /* Uncompressed object smaller, use it */
-            comp_len = ff_pkt->object_len;
+            comp_len = ff_pkt->restore_obj.object_len;
          }
-         Dmsg2(100, "Object compressed from %d to %d bytes\n", ff_pkt->object_len, comp_len);
+         Dmsg2(100, "Object compressed from %d to %d bytes\n", ff_pkt->restore_obj.object_len, comp_len);
       }
       sd->msglen = Mmsg(sd->msg, "%d %d %d %d %d %d %s%c%s%c",
-                        jcr->JobFiles, ff_pkt->type, ff_pkt->object_index,
-                        comp_len, ff_pkt->object_len, ff_pkt->object_compression,
-                        ff_pkt->fname, 0, ff_pkt->object_name, 0);
+                        jcr->JobFiles, ff_pkt->type, ff_pkt->restore_obj.index,
+                        comp_len, ff_pkt->restore_obj.object_len, ff_pkt->restore_obj.object_compression,
+                        ff_pkt->fname, 0, ff_pkt->restore_obj.object_name, 0);
       sd->msg = check_pool_memory_size(sd->msg, sd->msglen + comp_len + 2);
-      memcpy(sd->msg + sd->msglen, ff_pkt->object, comp_len);
+      memcpy(sd->msg + sd->msglen, ff_pkt->restore_obj.object, comp_len);
       /* Note send an extra byte so the SD can store zero after object */
       sd->msglen += comp_len + 1;
       stat = sd->send();
-      if (ff_pkt->object_compression) {
-         free_and_null_pool_memory(ff_pkt->object);
+      if (ff_pkt->restore_obj.object_compression) {
+         free_and_null_pool_memory(ff_pkt->restore_obj.object);
       }
       break;
+   case FT_PLUGIN_OBJECT:
+      break;
    case FT_REG:
       stat = sd->fsend("%ld %d %s%c%s%c%c%s%c%d%c", jcr->JobFiles,
                ff_pkt->type, ff_pkt->fname, 0, attribs, 0, 0, attribsEx, 0,
@@ -1444,10 +1446,10 @@ static void close_vss_backup_session(JCR *jcr)
          ff_pkt->fname = (char *)"*all*"; /* for all plugins */
          ff_pkt->type = FT_RESTORE_FIRST;
          ff_pkt->LinkFI = 0;
-         ff_pkt->object_name = (char *)"job_metadata.xml";
+         ff_pkt->restore_obj.object_name = (char *)"job_metadata.xml";
          ff_pkt->object = (char *)metadata;
-         ff_pkt->object_len = (wcslen(metadata) + 1) * sizeof(WCHAR);
-         ff_pkt->object_index = (int)time(NULL);
+         ff_pkt->restore_obj.object_len = (wcslen(metadata) + 1) * sizeof(WCHAR);
+         ff_pkt->restore_obj.object_index = (int)time(NULL);
          save_file(jcr, ff_pkt, true);
      }
    }
index 7bc9402682209e4b172781ebf068341bca12b63d..88a21f45aef74b7f2103ff608b3ef7a9c67f69db 100644 (file)
@@ -679,17 +679,17 @@ int plugin_save(JCR *jcr, FF_PKT *ff_pkt, bool top_level)
           */
          ff_pkt->type = sp.type;
          if (IS_FT_OBJECT(sp.type)) {
-            if (!sp.object_name) {
+            if (!sp.restore_obj.object_name) {
                Jmsg1(jcr, M_FATAL, 0, _("Command plugin \"%s\": no object_name in startBackupFile packet.\n"),
                   cmd);
                goto bail_out;
             }
             ff_pkt->fname = cmd;                 /* full plugin string */
-            ff_pkt->object_name = sp.object_name;
-            ff_pkt->object_index = sp.index;     /* restore object index */
-            ff_pkt->object_compression = 0;      /* no compression for now */
-            ff_pkt->object = sp.object;
-            ff_pkt->object_len = sp.object_len;
+            ff_pkt->restore_obj.object_name = sp.restore_obj.object_name;
+            ff_pkt->restore_obj.index = sp.restore_obj.index;     /* restore object index */
+            ff_pkt->restore_obj.object_compression = 0;      /* no compression for now */
+            ff_pkt->restore_obj.object = sp.restore_obj.object;
+            ff_pkt->restore_obj.object_len = sp.restore_obj.object_len;
          } else {
             Dsm_check(999);
             if (!sp.fname) {
@@ -709,8 +709,8 @@ int plugin_save(JCR *jcr, FF_PKT *ff_pkt, bool top_level)
 
          memcpy(&ff_pkt->statp, &sp.statp, sizeof(ff_pkt->statp));
          Dmsg2(dbglvl, "startBackup returned type=%d, fname=%s\n", sp.type, sp.fname);
-         if (sp.object) {
-            Dmsg2(dbglvl, "index=%d object=%s\n", sp.index, sp.object);
+         if (sp.restore_obj.object) {
+            Dmsg2(dbglvl, "index=%d object=%s\n", sp.restore_obj.index, sp.restore_obj.object);
          }
          /* Call Bacula core code to backup the plugin's file */
          save_file(jcr, ff_pkt, true);
@@ -805,7 +805,7 @@ int plugin_estimate(JCR *jcr, FF_PKT *ff_pkt, bool top_level)
          sp.portable = true;
          sp.flags = 0;
          sp.cmd = cmd;
-         Dmsg3(dbglvl, "startBackup st_size=%p st_blocks=%p sp=%p\n", &sp.statp.st_size, &sp.statp.st_blocks,
+         Dmsg3(0, "startBackup st_size=%p st_blocks=%p sp=%p\n", &sp.statp.st_size, &sp.statp.st_blocks,
                 &sp);
          /* Get the file save parameters. I.e. the stat pkt ... */
          if (plug_func(plugin)->startBackupFile(jcr->plugin_ctx, &sp) != bRC_OK) {
@@ -858,8 +858,8 @@ int plugin_estimate(JCR *jcr, FF_PKT *ff_pkt, bool top_level)
          }
 
          Dmsg2(dbglvl, "startBackup returned type=%d, fname=%s\n", sp.type, sp.fname);
-         if (sp.object) {
-            Dmsg2(dbglvl, "index=%d object=%s\n", sp.index, sp.object);
+         if (sp.restore_obj.object) {
+            Dmsg2(dbglvl, "index=%d object=%s\n", sp.restore_obj.index, sp.restore_obj.object);
          }
          bRC rc = plug_func(plugin)->endBackupFile(jcr->plugin_ctx);
          if (rc == bRC_More || rc == bRC_OK) {
index 99ca58975f6630d58d4552ca3ba5dfe595d31b58..182460a3bd83d6824b1a620b59d9e993ecb02ccb 100644 (file)
@@ -91,6 +91,14 @@ struct stream_pkt {
    int32_t pkt_end;                   /* end packet sentinel */
 };
 
+struct restore_object {
+   char *object_name;                 /* Object name to create */
+   char *object;                      /* restore object data to save */
+   int32_t object_len;                /* restore object length */
+   int32_t index;                     /* restore object index */
+   int32_t object_compression;        /* set to compression type */
+};
+
 /*
  * This packet is used for file save info transfer.
 */
@@ -108,11 +116,8 @@ struct save_pkt {
    bool accurate_found;               /* Found in accurate list (valid after check_changes()) */
    bool do_dedup;                     /* True if we deal with a dedup storage system */
    char *cmd;                         /* command */
+   struct restore_object restore_obj; /* Info about restore object */
    uint32_t delta_seq;                /* Delta sequence number */
-   char *object_name;                 /* Object name to create */
-   char *object;                      /* restore object data to save */
-   int32_t object_len;                /* restore object length */
-   int32_t index;                     /* restore object index */
    int32_t LinkFI;                    /* LinkFI if LINKSAVED */
    int32_t pkt_end;                   /* end packet sentinel */
 };
index cdf141c9e2f19826bd7beb394ab58dd48d6aba4c..ceeedc86a86fafce2fcfe9b9fe19d859059af38c 100644 (file)
@@ -153,8 +153,6 @@ struct FF_PKT {
    char *fname;                       /* full filename */
    char *snap_fname;                  /* the path on the snapshot or fname */
    char *link;                        /* link if file linked */
-   char *object_name;                 /* Object name */
-   char *object;                      /* restore object */
    char *plugin;                      /* Current Options{Plugin=} name */
 
    /* Specific snapshot part */
@@ -175,9 +173,7 @@ struct FF_PKT {
    int32_t FileIndex;                 /* FileIndex of this file */
    int32_t LinkFI;                    /* FileIndex of main hard linked file */
    int32_t delta_seq;                 /* Delta Sequence number */
-   int32_t object_index;              /* Object index */
-   int32_t object_len;                /* Object length */
-   int32_t object_compression;        /* Type of compression for object */
+   struct restore_object restore_obj;
    struct f_link *linked;             /* Set if this file is hard linked */
    int type;                          /* FT_ type from above */
    int ff_errno;                      /* errno */