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,"
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;
}
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);
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",
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);
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)) {
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 {
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);
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;
}
{
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);
}
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);