From: Kern Sibbald Date: Sun, 7 Mar 2004 20:15:09 +0000 (+0000) Subject: InChanger Flag patches from Jason Conroy X-Git-Tag: Release-1.34.0~67 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=cade60a64cfc2f5e362835e06fbab26628866268;p=bacula%2Fbacula InChanger Flag patches from Jason Conroy git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@1114 91ce42f0-d328-0410-95d8-f526ca767f89 --- diff --git a/bacula/src/cats/sql_create.c b/bacula/src/cats/sql_create.c index d595a18909..0b81c7b9af 100644 --- a/bacula/src/cats/sql_create.c +++ b/bacula/src/cats/sql_create.c @@ -250,11 +250,6 @@ db_create_media_record(JCR *jcr, B_DB *mdb, MEDIA_DBR *mr) sql_free_result(mdb); } - /* Make sure that if InChanger is non-zero any other identical slot - * has InChanger zero. - */ - db_make_inchanger_unique(jcr, mdb, mr); - /* Must create it */ Mmsg(&mdb->cmd, "INSERT INTO Media (VolumeName,MediaType,PoolId,MaxVolBytes,VolCapacityBytes," @@ -295,6 +290,13 @@ db_create_media_record(JCR *jcr, B_DB *mdb, MEDIA_DBR *mr) stat = UPDATE_DB(jcr, mdb, mdb->cmd); } } + + /* + * Make sure that if InChanger is non-zero any other identical slot + * has InChanger zero. + */ + db_make_inchanger_unique(jcr, mdb, mr); + db_unlock(mdb); return stat; } diff --git a/bacula/src/cats/sql_find.c b/bacula/src/cats/sql_find.c index 8a9371bccb..925b063edc 100644 --- a/bacula/src/cats/sql_find.c +++ b/bacula/src/cats/sql_find.c @@ -226,7 +226,7 @@ db_find_next_volume(JCR *jcr, B_DB *mdb, int item, bool InChanger, MEDIA_DBR *mr Mmsg(&mdb->cmd, "SELECT MediaId,VolumeName,VolJobs,VolFiles,VolBlocks," "VolBytes,VolMounts,VolErrors,VolWrites,MaxVolBytes,VolCapacityBytes," "VolRetention,VolUseDuration,MaxVolJobs,MaxVolFiles,Recycle,Slot," - "FirstWritten,LastWritten,VolStatus " + "FirstWritten,LastWritten,VolStatus,InChanger " "FROM Media WHERE PoolId=%u AND MediaType='%s' AND VolStatus IN ('Full'," "'Recycle','Purged','Used','Append') " "ORDER BY LastWritten LIMIT 1", mr->PoolId, mr->MediaType); @@ -247,7 +247,7 @@ db_find_next_volume(JCR *jcr, B_DB *mdb, int item, bool InChanger, MEDIA_DBR *mr Mmsg(&mdb->cmd, "SELECT MediaId,VolumeName,VolJobs,VolFiles,VolBlocks," "VolBytes,VolMounts,VolErrors,VolWrites,MaxVolBytes,VolCapacityBytes," "VolRetention,VolUseDuration,MaxVolJobs,MaxVolFiles,Recycle,Slot," - "FirstWritten,LastWritten,VolStatus " + "FirstWritten,LastWritten,VolStatus,InChanger " "FROM Media WHERE PoolId=%u AND MediaType='%s' AND VolStatus='%s' " "%s " "%s LIMIT 1", @@ -301,6 +301,7 @@ db_find_next_volume(JCR *jcr, B_DB *mdb, int item, bool InChanger, MEDIA_DBR *mr bstrncpy(mr->cLastWritten, row[18]!=NULL?row[18]:"", sizeof(mr->cLastWritten)); mr->LastWritten = (time_t)str_to_utime(mr->cLastWritten); bstrncpy(mr->VolStatus, row[19], sizeof(mr->VolStatus)); + mr->InChanger = str_to_int64(row[20]); sql_free_result(mdb); db_unlock(mdb); diff --git a/bacula/src/cats/sql_get.c b/bacula/src/cats/sql_get.c index 6d9cad59fc..d2d4624892 100644 --- a/bacula/src/cats/sql_get.c +++ b/bacula/src/cats/sql_get.c @@ -790,17 +790,17 @@ int db_get_media_record(JCR *jcr, B_DB *mdb, MEDIA_DBR *mr) return 1; } if (mr->MediaId != 0) { /* find by id */ - Mmsg(&mdb->cmd, "SELECT MediaId,VolumeName,VolJobs,VolFiles,VolBlocks,\ -VolBytes,VolMounts,VolErrors,VolWrites,MaxVolBytes,VolCapacityBytes,\ -MediaType,VolStatus,PoolId,VolRetention,VolUseDuration,MaxVolJobs,MaxVolFiles,\ -Recycle,Slot,FirstWritten,LastWritten \ -FROM Media WHERE MediaId=%d", mr->MediaId); + Mmsg(&mdb->cmd, "SELECT MediaId,VolumeName,VolJobs,VolFiles,VolBlocks," + "VolBytes,VolMounts,VolErrors,VolWrites,MaxVolBytes,VolCapacityBytes," + "MediaType,VolStatus,PoolId,VolRetention,VolUseDuration,MaxVolJobs,MaxVolFiles," + "Recycle,Slot,FirstWritten,LastWritten,InChanger " + "FROM Media WHERE MediaId=%d", mr->MediaId); } else { /* find by name */ - Mmsg(&mdb->cmd, "SELECT MediaId,VolumeName,VolJobs,VolFiles,VolBlocks,\ -VolBytes,VolMounts,VolErrors,VolWrites,MaxVolBytes,VolCapacityBytes,\ -MediaType,VolStatus,PoolId,VolRetention,VolUseDuration,MaxVolJobs,MaxVolFiles,\ -Recycle,Slot,FirstWritten,LastWritten \ -FROM Media WHERE VolumeName='%s'", mr->VolumeName); + Mmsg(&mdb->cmd, "SELECT MediaId,VolumeName,VolJobs,VolFiles,VolBlocks," + "VolBytes,VolMounts,VolErrors,VolWrites,MaxVolBytes,VolCapacityBytes," + "MediaType,VolStatus,PoolId,VolRetention,VolUseDuration,MaxVolJobs,MaxVolFiles," + "Recycle,Slot,FirstWritten,LastWritten " + "FROM Media WHERE VolumeName='%s'", mr->VolumeName); } if (QUERY_DB(jcr, mdb, mdb->cmd)) { @@ -840,6 +840,7 @@ FROM Media WHERE VolumeName='%s'", mr->VolumeName); mr->FirstWritten = (time_t)str_to_utime(mr->cFirstWritten); bstrncpy(mr->cLastWritten, row[21]!=NULL?row[21]:"", sizeof(mr->cLastWritten)); mr->LastWritten = (time_t)str_to_utime(mr->cLastWritten); + mr->InChanger = str_to_uint64(row[22]); stat = mr->MediaId; } } else { diff --git a/bacula/src/cats/sql_update.c b/bacula/src/cats/sql_update.c index 3c428742e8..98e5dd1e03 100644 --- a/bacula/src/cats/sql_update.c +++ b/bacula/src/cats/sql_update.c @@ -289,11 +289,7 @@ db_update_media_record(JCR *jcr, B_DB *mdb, MEDIA_DBR *mr) stat = UPDATE_DB(jcr, mdb, mdb->cmd); } - /* Make sure InChanger is 0 for any record having the same Slot */ - db_make_inchanger_unique(jcr, mdb, mr); - if (mr->LastWritten != 0) { - ttime = mr->LastWritten; localtime_r(&ttime, &tm); strftime(dt, sizeof(dt), "%Y-%m-%d %T", &tm); @@ -328,6 +324,10 @@ db_update_media_record(JCR *jcr, B_DB *mdb, MEDIA_DBR *mr) Dmsg1(400, "%s\n", mdb->cmd); stat = UPDATE_DB(jcr, mdb, mdb->cmd); + + /* Make sure InChanger is 0 for any record having the same Slot */ + db_make_inchanger_unique(jcr, mdb, mr); + db_unlock(mdb); return stat; } @@ -343,7 +343,7 @@ db_make_inchanger_unique(JCR *jcr, B_DB *mdb, MEDIA_DBR *mr) { if (mr->InChanger != 0 && mr->Slot != 0) { Mmsg(&mdb->cmd, "UPDATE Media SET InChanger=0 WHERE PoolId=%u " - "AND Slot=%d\n", mr->PoolId, mr->Slot); + "AND Slot=%d AND MediaId!=%u", mr->PoolId, mr->Slot, mr->MediaId); Dmsg1(400, "%s\n", mdb->cmd); UPDATE_DB(jcr, mdb, mdb->cmd); } diff --git a/bacula/src/stored/acquire.c b/bacula/src/stored/acquire.c index c44fd8e3bf..ad192e0175 100644 --- a/bacula/src/stored/acquire.c +++ b/bacula/src/stored/acquire.c @@ -88,6 +88,7 @@ DCR *acquire_device_for_read(JCR *jcr) block_device(dev, BST_DOING_ACQUIRE); unlock_device(dev); + init_dev_wait_timers(dev); if (dev_state(dev, ST_READ) || dev->num_writers > 0) { Jmsg2(jcr, M_FATAL, 0, _("Device %s is busy. Job %d canceled.\n"), dev_name(dev), jcr->JobId);