From 881691ffa31c05e13d243d56e6ff03cf29d580c0 Mon Sep 17 00:00:00 2001 From: Eric Bollengier Date: Tue, 17 Jun 2008 21:32:07 +0000 Subject: [PATCH] ebl Update next_vol patch. git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@7160 91ce42f0-d328-0410-95d8-f526ca767f89 --- bacula/patches/testing/next_vol.patch | 117 +++++++++++++++++++++++++- 1 file changed, 115 insertions(+), 2 deletions(-) diff --git a/bacula/patches/testing/next_vol.patch b/bacula/patches/testing/next_vol.patch index 0789934e24..9bffb86129 100644 --- a/bacula/patches/testing/next_vol.patch +++ b/bacula/patches/testing/next_vol.patch @@ -1,7 +1,7 @@ Index: src/dird/next_vol.c =================================================================== ---- src/dird/next_vol.c (revision 7148) -+++ src/dird/next_vol.c (working copy) +--- src/dird/next_vol.c (révision 7156) ++++ src/dird/next_vol.c (copie de travail) @@ -94,28 +94,30 @@ */ if (prune) { @@ -54,3 +54,116 @@ Index: src/dird/next_vol.c } +Index: src/dird/recycle.c +=================================================================== +--- src/dird/recycle.c (révision 7156) ++++ src/dird/recycle.c (copie de travail) +@@ -40,23 +40,6 @@ + #include "dird.h" + #include "ua.h" + +-struct s_oldest_ctx { +- uint32_t MediaId; +- char LastWritten[30]; +-}; +- +-static int oldest_handler(void *ctx, int num_fields, char **row) +-{ +- struct s_oldest_ctx *oldest = (struct s_oldest_ctx *)ctx; +- +- if (row[0]) { +- oldest->MediaId = str_to_int64(row[0]); +- bstrncpy(oldest->LastWritten, row[1]?row[1]:"", sizeof(oldest->LastWritten)); +- Dmsg1(100, "New oldest %s\n", row[1]?row[1]:""); +- } +- return 1; +-} +- + /* Forward referenced functions */ + + bool find_recycled_volume(JCR *jcr, bool InChanger, MEDIA_DBR *mr) +@@ -71,43 +54,18 @@ + return false; + } + +- + /* + * Look for oldest Purged volume + */ + bool recycle_oldest_purged_volume(JCR *jcr, bool InChanger, MEDIA_DBR *mr) + { +- struct s_oldest_ctx oldest; +- char ed1[50]; +- POOLMEM *query = get_pool_memory(PM_EMSG); +- const char *select = +- "SELECT MediaId,LastWritten FROM Media " +- "WHERE PoolId=%s AND Recycle=1 AND VolStatus='Purged' " +- "AND Enabled=1 AND MediaType='%s' " +- "ORDER BY LastWritten ASC,MediaId LIMIT 1"; +- +- Dmsg0(100, "Enter recycle_oldest_purged_volume\n"); +- oldest.MediaId = 0; +- Mmsg(query, select, edit_int64(mr->PoolId, ed1), mr->MediaType); +- +- if (!db_sql_query(jcr->db, query, oldest_handler, (void *)&oldest)) { +- Jmsg(jcr, M_ERROR, 0, "%s", db_strerror(jcr->db)); +- Dmsg0(100, "return 0 recycle_oldest_purged_volume query\n"); +- free_pool_memory(query); +- return false; +- } +- free_pool_memory(query); +- Dmsg1(100, "Oldest mediaid=%d\n", oldest.MediaId); +- if (oldest.MediaId != 0) { +- mr->MediaId = oldest.MediaId; +- if (db_get_media_record(jcr, jcr->db, mr)) { +- if (recycle_volume(jcr, mr)) { +- Jmsg(jcr, M_INFO, 0, _("Recycled volume \"%s\"\n"), mr->VolumeName); +- Dmsg1(100, "return 1 recycle_oldest_purged_volume Vol=%s\n", mr->VolumeName); +- return true; +- } ++ bstrncpy(mr->VolStatus, "Purged", sizeof(mr->VolStatus)); ++ if (db_find_next_volume(jcr, jcr->db, 1, InChanger, mr)) { ++ if (recycle_volume(jcr, mr)) { ++ Jmsg(jcr, M_INFO, 0, _("Recycled volume \"%s\"\n"), mr->VolumeName); ++ Dmsg1(100, "return 1 recycle_oldest_purged_volume Vol=%s\n", mr->VolumeName); ++ return true; + } +- Jmsg(jcr, M_ERROR, 0, "%s", db_strerror(jcr->db)); + } + Dmsg0(100, "return 0 recycle_oldest_purged_volume end\n"); + return false; +Index: src/cats/sql_find.c +=================================================================== +--- src/cats/sql_find.c (révision 7156) ++++ src/cats/sql_find.c (copie de travail) +@@ -338,17 +338,15 @@ + 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 */ + } +@@ -364,7 +362,7 @@ + "%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)) { -- 2.39.5