]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/dird/next_vol.c
- Convert more atoi to str_to_int64() for DB.
[bacula/bacula] / bacula / src / dird / next_vol.c
index bf44fc84427889ab333047055d289af2fc6032bb..7db844bbeaf553243cabca89e2ab2276f50c6024 100644 (file)
@@ -33,7 +33,7 @@
 
 /*
  *  Items needed:
- *   jcr->PoolId
+ *   mr.PoolId must be set
  *   jcr->store
  *   jcr->db
  *   jcr->pool
@@ -47,9 +47,8 @@ int find_next_volume_for_append(JCR *jcr, MEDIA_DBR *mr, bool create)
    bool InChanger;
    STORE *store = jcr->store;
 
-   mr->PoolId = jcr->PoolId;
    bstrncpy(mr->MediaType, store->media_type, sizeof(mr->MediaType));
-   Dmsg2(120, "CatReq FindMedia: Id=%d, MediaType=%s\n", mr->PoolId, mr->MediaType);
+   Dmsg2(100, "CatReq FindMedia: Id=%d, MediaType=%s\n", (int)mr->PoolId, mr->MediaType);
    /*
     * If we are using an Autochanger, restrict Volume
     *  search to the Autochanger on the first pass
@@ -99,6 +98,32 @@ int find_next_volume_for_append(JCR *jcr, MEDIA_DBR *mr, bool create)
            }
         }
 
+        if (!ok) {
+           MEDIA_DBR smr;
+           POOL_DBR pr;
+           POOLMEM *query;
+           char ed1[50], ed2[50];
+           /*
+            * 6. Try pulling a volume from the Scratch pool
+            */ 
+            memset(&pr, 0, sizeof(pr));
+             bstrncpy(pr.Name, "Scratch", sizeof(pr.Name));
+            if (db_get_pool_record(jcr, jcr->db, &pr)) {
+               memset(&smr, 0, sizeof(smr));
+               smr.PoolId = pr.PoolId;
+                bstrncpy(smr.VolStatus, "Append", sizeof(smr.VolStatus));  /* want only appendable volumes */
+               bstrncpy(smr.MediaType, mr->MediaType, sizeof(smr.MediaType));
+               if (db_find_next_volume(jcr, jcr->db, 1, InChanger, &smr)) {
+                  query = get_pool_memory(PM_MESSAGE);
+                  db_lock(jcr->db);
+                   Mmsg(query, "UPDATE Media SET PoolId=%s WHERE MediaId=%s",
+                       edit_int64(mr->PoolId, ed1),
+                       edit_int64(mr->MediaId, ed2));
+                  ok = db_sql_query(jcr->db, query, NULL, NULL);  
+                  db_unlock(jcr->db);
+               }
+            }
+        }
         /*
          *  Look at more drastic ways to find an Appendable Volume
          */