Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- Bacula® is a registered trademark of John Walker.
+ Bacula® is a registered trademark of Kern Sibbald.
The licensor of Bacula is the Free Software Foundation Europe
(FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich,
Switzerland, email:ftf@fsfeurope.org.
return false;
}
+
+/*
+ * Find the last job start time for the specified JobLevel
+ *
+ * StartTime is returned in stime
+ *
+ * Returns: false on failure
+ * true on success, jr is unchanged, but stime is set
+ */
+bool
+db_find_last_job_start_time(JCR *jcr, B_DB *mdb, JOB_DBR *jr, POOLMEM **stime, int JobLevel)
+{
+ SQL_ROW row;
+ char ed1[50], ed2[50];
+
+ db_lock(mdb);
+
+ pm_strcpy(stime, "0000-00-00 00:00:00"); /* default */
+
+ Mmsg(mdb->cmd,
+"SELECT StartTime FROM Job WHERE JobStatus='T' AND Type='%c' AND "
+"Level='%c' AND Name='%s' AND ClientId=%s AND FileSetId=%s "
+"ORDER BY StartTime DESC LIMIT 1",
+ jr->JobType, JobLevel, jr->Name,
+ edit_int64(jr->ClientId, ed1), edit_int64(jr->FileSetId, ed2));
+ if (!QUERY_DB(jcr, mdb, mdb->cmd)) {
+ Mmsg2(&mdb->errmsg, _("Query error for start time request: ERR=%s\nCMD=%s\n"),
+ sql_strerror(mdb), mdb->cmd);
+ goto bail_out;
+ }
+ if ((row = sql_fetch_row(mdb)) == NULL) {
+ sql_free_result(mdb);
+ Mmsg(mdb->errmsg, _("No prior Full backup Job record found.\n"));
+ goto bail_out;
+ }
+ Dmsg1(100, "Got start time: %s\n", row[0]);
+ pm_strcpy(stime, row[0]);
+ sql_free_result(mdb);
+ db_unlock(mdb);
+ return true;
+
+bail_out:
+ db_unlock(mdb);
+ return false;
+}
+
/*
* Find last failed job since given start-time
* it must be either Full or Diff.
edit_int64(mr->PoolId, ed1), mr->MediaType);
item = 1;
} else {
- char changer[100];
+ POOL_MEM changer(PM_FNAME);
/* Find next available volume */
if (InChanger) {
- bsnprintf(changer, sizeof(changer), "AND InChanger=1 AND StorageId=%s",
- edit_int64(mr->StorageId, ed1));
- } else {
- changer[0] = 0;
+ Mmsg(changer, "AND InChanger=1 AND StorageId=%s",
+ edit_int64(mr->StorageId, ed1));
}
if (strcmp(mr->VolStatus, "Recycle") == 0 ||
strcmp(mr->VolStatus, "Purged") == 0) {
- order = "ORDER BY LastWritten ASC,MediaId"; /* take oldest */
+ order = "AND Recycle=1 ORDER BY LastWritten ASC,MediaId"; /* take oldest that can be recycled */
} else {
order = "ORDER BY LastWritten IS NULL,LastWritten DESC,MediaId"; /* take most recently written */
}
"%s "
"%s LIMIT %d",
edit_int64(mr->PoolId, ed1), mr->MediaType,
- mr->VolStatus, changer, order, item);
+ mr->VolStatus, changer.c_str(), order, item);
}
Dmsg1(050, "fnextvol=%s\n", mdb->cmd);
if (!QUERY_DB(jcr, mdb, mdb->cmd)) {