]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/dird/ua_purge.c
Merge branch 'master' into basejobv3
[bacula/bacula] / bacula / src / dird / ua_purge.c
index fe1734bf4e2171a3c497dd1ff101516132a152d2..c75411812bcd8943ccaeb7339fa816ca520143ef 100644 (file)
@@ -556,6 +556,21 @@ bail_out:
    return purged;
 }
 
+static BSOCK *open_sd_bsock(UAContext *ua)
+{
+   STORE *store = ua->jcr->wstore;
+
+   if (!ua->jcr->store_bsock) {
+      ua->send_msg(_("Connecting to Storage daemon %s at %s:%d ...\n"),
+         store->name(), store->address, store->SDport);
+      if (!connect_to_storage_daemon(ua->jcr, 10, SDConnectTimeout, 1)) {
+         ua->error_msg(_("Failed to connect to Storage daemon.\n"));
+         return NULL;
+      }
+   }
+   return ua->jcr->store_bsock;
+}
+
 /*
  * IF volume status is Append, Full, Used, or Error, mark it Purged
  *   Purged volumes can then be recycled (if enabled).
@@ -571,6 +586,32 @@ bool mark_media_purged(UAContext *ua, MEDIA_DBR *mr)
       if (!db_update_media_record(jcr, ua->db, mr)) {
          return false;
       }
+
+      if (mr->ActionOnPurge > 0) {
+         /* Send the command to truncate the volume after purge. If this feature
+          * is disabled for the specific device, this will be a no-op.
+          */
+         BSOCK *sd;
+         if ((sd=open_sd_bsock(ua)) != NULL) {
+            bash_spaces(mr->VolumeName);
+            sd->fsend("action_on_purge %s vol=%s action=%d",
+                      ua->jcr->wstore->dev_name(),
+                     mr->VolumeName,
+                     mr->ActionOnPurge);
+            unbash_spaces(mr->VolumeName);
+            while (sd->recv() >= 0) {
+               ua->send_msg("%s", sd->msg);
+            }
+
+            sd->signal(BNET_TERMINATE);
+            sd->close();
+            ua->jcr->store_bsock = NULL;
+         } else {
+            ua->error_msg(_("Could not connect to storage daemon"));
+           return false;
+        }
+      }
+
       pm_strcpy(jcr->VolumeName, mr->VolumeName);
       generate_job_event(jcr, "VolumePurged");
       generate_plugin_event(jcr, bEventVolumePurged);