Commit 9d648890 authored by Steven Murray's avatar Steven Murray
Browse files

Removed the LBP_IS_ON colun: cta/CTA#439

parent a176fabb
......@@ -92,9 +92,8 @@ public:
*
* @param vid The volume identifier of the tape.
* @param drive The name of tape drive that was used to label the tape.
* @param lbpIsOn Set to true if Logical Block Protection (LBP) was enabled.
*/
virtual void tapeLabelled(const std::string &vid, const std::string &drive, const bool lbpIsOn) = 0;
virtual void tapeLabelled(const std::string &vid, const std::string &drive) = 0;
/**
* Checks the specified archival could take place and returns a new and
......
......@@ -64,8 +64,8 @@ public:
*/
CatalogueRetryWrapper &operator=(const CatalogueRetryWrapper &) = delete;
void tapeLabelled(const std::string &vid, const std::string &drive, const bool lbpIsOn) override {
return retryOnLostConnection(m_log, [&]{return m_catalogue->tapeLabelled(vid, drive, lbpIsOn);}, m_maxTriesToConnect);
void tapeLabelled(const std::string &vid, const std::string &drive) override {
return retryOnLostConnection(m_log, [&]{return m_catalogue->tapeLabelled(vid, drive);}, m_maxTriesToConnect);
}
uint64_t checkAndGetNextArchiveFileId(const std::string &diskInstanceName, const std::string &storageClassName, const common::dataStructures::UserIdentity &user) override {
......
This diff is collapsed.
......@@ -109,7 +109,7 @@ public:
void setTapeFull(const common::dataStructures::SecurityIdentity& admin, const std::string& vid, const bool fullValue) override { throw exception::Exception(std::string("In ")+__PRETTY_FUNCTION__+": not implemented"); }
void setTapePoolEncryption(const common::dataStructures::SecurityIdentity& admin, const std::string& name, const bool encryptionValue) override { throw exception::Exception(std::string("In ")+__PRETTY_FUNCTION__+": not implemented"); }
bool tapeExists(const std::string& vid) const { throw exception::Exception(std::string("In ")+__PRETTY_FUNCTION__+": not implemented"); }
void tapeLabelled(const std::string& vid, const std::string& drive, const bool lbpIsOn) override { throw exception::Exception(std::string("In ")+__PRETTY_FUNCTION__+": not implemented"); }
void tapeLabelled(const std::string& vid, const std::string& drive) override { throw exception::Exception(std::string("In ")+__PRETTY_FUNCTION__+": not implemented"); }
void tapeMountedForArchive(const std::string& vid, const std::string& drive) override { throw exception::Exception(std::string("In ")+__PRETTY_FUNCTION__+": not implemented"); }
void tapeMountedForRetrieve(const std::string& vid, const std::string& drive) override { throw exception::Exception(std::string("In ")+__PRETTY_FUNCTION__+": not implemented"); }
bool tapePoolExists(const std::string& tapePoolName) const { throw exception::Exception(std::string("In ")+__PRETTY_FUNCTION__+": not implemented"); }
......
......@@ -156,7 +156,6 @@ common::dataStructures::Tape MysqlCatalogue::selectTapeForUpdate(rdbms::Conn &co
"LAST_FSEQ AS LAST_FSEQ,"
"IS_DISABLED AS IS_DISABLED,"
"IS_FULL AS IS_FULL,"
"LBP_IS_ON AS LBP_IS_ON,"
"LABEL_DRIVE AS LABEL_DRIVE,"
"LABEL_TIME AS LABEL_TIME,"
......@@ -199,7 +198,6 @@ common::dataStructures::Tape MysqlCatalogue::selectTapeForUpdate(rdbms::Conn &co
tape.lastFSeq = rset.columnUint64("LAST_FSEQ");
tape.disabled = rset.columnBool("IS_DISABLED");
tape.full = rset.columnBool("IS_FULL");
tape.lbp = rset.columnOptionalBool("LBP_IS_ON");
tape.labelLog = getTapeLogFromRset(rset, "LABEL_DRIVE", "LABEL_TIME");
tape.lastReadLog = getTapeLogFromRset(rset, "LAST_READ_DRIVE", "LAST_READ_TIME");
......
......@@ -220,7 +220,6 @@ common::dataStructures::Tape OracleCatalogue::selectTapeForUpdate(rdbms::Conn &c
"LAST_FSEQ AS LAST_FSEQ,"
"IS_DISABLED AS IS_DISABLED,"
"IS_FULL AS IS_FULL,"
"LBP_IS_ON AS LBP_IS_ON,"
"LABEL_DRIVE AS LABEL_DRIVE,"
"LABEL_TIME AS LABEL_TIME,"
......@@ -263,7 +262,6 @@ common::dataStructures::Tape OracleCatalogue::selectTapeForUpdate(rdbms::Conn &c
tape.lastFSeq = rset.columnUint64("LAST_FSEQ");
tape.disabled = rset.columnBool("IS_DISABLED");
tape.full = rset.columnBool("IS_FULL");
tape.lbp = rset.columnOptionalBool("LBP_IS_ON");
tape.labelLog = getTapeLogFromRset(rset, "LABEL_DRIVE", "LABEL_TIME");
tape.lastReadLog = getTapeLogFromRset(rset, "LAST_READ_DRIVE", "LAST_READ_TIME");
......
......@@ -211,7 +211,6 @@ common::dataStructures::Tape PostgresCatalogue::selectTapeForUpdate(rdbms::Conn
"LAST_FSEQ AS LAST_FSEQ,"
"IS_DISABLED AS IS_DISABLED,"
"IS_FULL AS IS_FULL,"
"LBP_IS_ON AS LBP_IS_ON,"
"LABEL_DRIVE AS LABEL_DRIVE,"
"LABEL_TIME AS LABEL_TIME,"
......@@ -254,7 +253,6 @@ common::dataStructures::Tape PostgresCatalogue::selectTapeForUpdate(rdbms::Conn
tape.lastFSeq = rset.columnUint64("LAST_FSEQ");
tape.disabled = rset.columnBool("IS_DISABLED");
tape.full = rset.columnBool("IS_FULL");
tape.lbp = rset.columnOptionalBool("LBP_IS_ON");
tape.labelLog = getTapeLogFromRset(rset, "LABEL_DRIVE", "LABEL_TIME");
tape.lastReadLog = getTapeLogFromRset(rset, "LAST_READ_DRIVE", "LAST_READ_TIME");
......
......@@ -1862,7 +1862,6 @@ std::list<common::dataStructures::Tape> RdbmsCatalogue::getTapes(rdbms::Conn &co
"TAPE.LAST_FSEQ AS LAST_FSEQ,"
"TAPE.IS_DISABLED AS IS_DISABLED,"
"TAPE.IS_FULL AS IS_FULL,"
"TAPE.LBP_IS_ON AS LBP_IS_ON,"
"TAPE.LABEL_DRIVE AS LABEL_DRIVE,"
"TAPE.LABEL_TIME AS LABEL_TIME,"
......@@ -1895,8 +1894,7 @@ std::list<common::dataStructures::Tape> RdbmsCatalogue::getTapes(rdbms::Conn &co
searchCriteria.vo ||
searchCriteria.capacityInBytes ||
searchCriteria.disabled ||
searchCriteria.full ||
searchCriteria.lbp) {
searchCriteria.full) {
sql += " WHERE ";
}
......@@ -1946,10 +1944,6 @@ std::list<common::dataStructures::Tape> RdbmsCatalogue::getTapes(rdbms::Conn &co
sql += " TAPE.IS_FULL = :IS_FULL";
addedAWhereConstraint = true;
}
if(searchCriteria.lbp) {
if(addedAWhereConstraint) sql += " AND ";
sql += " TAPE.LBP_IS_ON = :LBP_IS_ON";
}
sql += " ORDER BY TAPE.VID";
......@@ -1964,7 +1958,6 @@ std::list<common::dataStructures::Tape> RdbmsCatalogue::getTapes(rdbms::Conn &co
if(searchCriteria.capacityInBytes) stmt.bindUint64(":CAPACITY_IN_BYTES", searchCriteria.capacityInBytes.value());
if(searchCriteria.disabled) stmt.bindBool(":IS_DISABLED", searchCriteria.disabled.value());
if(searchCriteria.full) stmt.bindBool(":IS_FULL", searchCriteria.full.value());
if(searchCriteria.lbp) stmt.bindBool(":LBP_IS_ON", searchCriteria.lbp.value());
auto rset = stmt.executeQuery();
while (rset.next()) {
......@@ -1982,7 +1975,6 @@ std::list<common::dataStructures::Tape> RdbmsCatalogue::getTapes(rdbms::Conn &co
tape.lastFSeq = rset.columnUint64("LAST_FSEQ");
tape.disabled = rset.columnBool("IS_DISABLED");
tape.full = rset.columnBool("IS_FULL");
tape.lbp = rset.columnOptionalBool("LBP_IS_ON");
tape.labelLog = getTapeLogFromRset(rset, "LABEL_DRIVE", "LABEL_TIME");
tape.lastReadLog = getTapeLogFromRset(rset, "LAST_READ_DRIVE", "LAST_READ_TIME");
......@@ -2028,7 +2020,6 @@ common::dataStructures::VidToTapeMap RdbmsCatalogue::getTapesByVid(const std::se
"TAPE.LAST_FSEQ AS LAST_FSEQ,"
"TAPE.IS_DISABLED AS IS_DISABLED,"
"TAPE.IS_FULL AS IS_FULL,"
"TAPE.LBP_IS_ON AS LBP_IS_ON,"
"TAPE.LABEL_DRIVE AS LABEL_DRIVE,"
"TAPE.LABEL_TIME AS LABEL_TIME,"
......@@ -2096,7 +2087,6 @@ common::dataStructures::VidToTapeMap RdbmsCatalogue::getTapesByVid(const std::se
tape.lastFSeq = rset.columnUint64("LAST_FSEQ");
tape.disabled = rset.columnBool("IS_DISABLED");
tape.full = rset.columnBool("IS_FULL");
tape.lbp = rset.columnOptionalBool("LBP_IS_ON");
tape.labelLog = getTapeLogFromRset(rset, "LABEL_DRIVE", "LABEL_TIME");
tape.lastReadLog = getTapeLogFromRset(rset, "LAST_READ_DRIVE", "LAST_READ_TIME");
......@@ -2146,7 +2136,6 @@ common::dataStructures::VidToTapeMap RdbmsCatalogue::getAllTapes() const {
"TAPE.LAST_FSEQ AS LAST_FSEQ,"
"TAPE.IS_DISABLED AS IS_DISABLED,"
"TAPE.IS_FULL AS IS_FULL,"
"TAPE.LBP_IS_ON AS LBP_IS_ON,"
"TAPE.LABEL_DRIVE AS LABEL_DRIVE,"
"TAPE.LABEL_TIME AS LABEL_TIME,"
......@@ -2190,7 +2179,6 @@ common::dataStructures::VidToTapeMap RdbmsCatalogue::getAllTapes() const {
tape.lastFSeq = rset.columnUint64("LAST_FSEQ");
tape.disabled = rset.columnBool("IS_DISABLED");
tape.full = rset.columnBool("IS_FULL");
tape.lbp = rset.columnOptionalBool("LBP_IS_ON");
tape.labelLog = getTapeLogFromRset(rset, "LABEL_DRIVE", "LABEL_TIME");
tape.lastReadLog = getTapeLogFromRset(rset, "LAST_READ_DRIVE", "LAST_READ_TIME");
......@@ -4284,21 +4272,19 @@ common::dataStructures::ArchiveFile RdbmsCatalogue::getArchiveFileById(const uin
//------------------------------------------------------------------------------
// tapeLabelled
//------------------------------------------------------------------------------
void RdbmsCatalogue::tapeLabelled(const std::string &vid, const std::string &drive, const bool lbpIsOn) {
void RdbmsCatalogue::tapeLabelled(const std::string &vid, const std::string &drive) {
try {
const time_t now = time(nullptr);
const char *const sql =
"UPDATE TAPE SET "
"LABEL_DRIVE = :LABEL_DRIVE,"
"LABEL_TIME = :LABEL_TIME,"
"LBP_IS_ON = :LBP_IS_ON "
"LABEL_TIME = :LABEL_TIME "
"WHERE "
"VID = :VID";
auto conn = m_connPool.getConn();
auto stmt = conn.createStmt(sql);
stmt.bindString(":LABEL_DRIVE", drive);
stmt.bindUint64(":LABEL_TIME", now);
stmt.bindBool(":LBP_IS_ON", lbpIsOn);
stmt.bindString(":VID", vid);
stmt.executeNonQuery();
......@@ -4801,7 +4787,6 @@ std::list<TapeForWriting> RdbmsCatalogue::getTapesForWriting(const std::string &
"INNER JOIN TAPE_POOL ON "
"TAPE.TAPE_POOL_NAME = TAPE_POOL.TAPE_POOL_NAME "
"WHERE "
// "LBP_IS_ON IS NOT NULL AND " // Set when the tape has been labelled
// "LABEL_DRIVE IS NOT NULL AND " // Set when the tape has been labelled
// "LABEL_TIME IS NOT NULL AND " // Set when the tape has been labelled
"IS_DISABLED = '0' AND "
......
......@@ -94,9 +94,8 @@ public:
*
* @param vid The volume identifier of the tape.
* @param drive The name of tape drive that was used to label the tape.
* @param lbpIsOn Set to true if Logical Block Protection (LBP) was enabled.
*/
void tapeLabelled(const std::string &vid, const std::string &drive, const bool lbpIsOn) override;
void tapeLabelled(const std::string &vid, const std::string &drive) override;
/**
* Checks the specified archival could take place and returns a new and
......
......@@ -259,7 +259,6 @@ common::dataStructures::Tape SqliteCatalogue::selectTape(rdbms::Conn &conn, cons
"LAST_FSEQ AS LAST_FSEQ,"
"IS_DISABLED AS IS_DISABLED,"
"IS_FULL AS IS_FULL,"
"LBP_IS_ON AS LBP_IS_ON,"
"LABEL_DRIVE AS LABEL_DRIVE,"
"LABEL_TIME AS LABEL_TIME,"
......@@ -302,7 +301,6 @@ common::dataStructures::Tape SqliteCatalogue::selectTape(rdbms::Conn &conn, cons
tape.lastFSeq = rset.columnUint64("LAST_FSEQ");
tape.disabled = rset.columnBool("IS_DISABLED");
tape.full = rset.columnBool("IS_FULL");
tape.lbp = rset.columnOptionalBool("LBP_IS_ON");
tape.labelLog = getTapeLogFromRset(rset, "LABEL_DRIVE", "LABEL_TIME");
tape.lastReadLog = getTapeLogFromRset(rset, "LAST_READ_DRIVE", "LAST_READ_TIME");
......
......@@ -81,11 +81,6 @@ struct TapeSearchCriteria {
*/
optional<bool> full;
/**
* Set to true if searching for tapes with logical block protection enabled.
*/
optional<bool> lbp;
}; // struct TapeSearchCriteria
} // namespace catalogue
......
......@@ -83,7 +83,6 @@ CREATE TABLE TAPE(
LAST_FSEQ NUMERIC(20, 0) CONSTRAINT TAPE_LF_UN NOT NULL,
IS_DISABLED CHAR(1) CONSTRAINT TAPE_ID_UN NOT NULL,
IS_FULL CHAR(1) CONSTRAINT TAPE_IF_UN NOT NULL,
LBP_IS_ON CHAR(1),
LABEL_DRIVE VARCHAR(100),
LABEL_TIME NUMERIC(20, 0),
LAST_READ_DRIVE VARCHAR(100),
......@@ -103,8 +102,7 @@ CREATE TABLE TAPE(
CONSTRAINT TAPE_TAPE_POOL_FK FOREIGN KEY(TAPE_POOL_NAME)
REFERENCES TAPE_POOL(TAPE_POOL_NAME),
CONSTRAINT TAPE_IS_DISABLED_BOOL_CK CHECK(IS_DISABLED IN ('0', '1')),
CONSTRAINT TAPE_IS_FULL_BOOL_CK CHECK(IS_FULL IN ('0', '1')),
CONSTRAINT TAPE_LBP_IS_ON_BOOL_CK CHECK(LBP_IS_ON IN ('0', '1'))
CONSTRAINT TAPE_IS_FULL_BOOL_CK CHECK(IS_FULL IN ('0', '1'))
);
CREATE INDEX TAPE_TAPE_POOL_NAME_IDX ON TAPE(TAPE_POOL_NAME);
CREATE TABLE MOUNT_POLICY(
......
......@@ -45,10 +45,6 @@ CREATE TRIGGER `CHECK_TAPE_BEFORE_INSERT` BEFORE INSERT ON `TAPE`
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'TAPE.IS_FULL should be 0 or 1';
END IF;
IF new.LBP_IS_ON not in ('0','1') THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'TAPE.LBP_IS_ON should be 0 or 1';
END IF;
END;
CREATE TRIGGER `CHECK_TAPE_BEFORE_UPDATE` BEFORE UPDATE ON `TAPE`
......@@ -62,10 +58,6 @@ CREATE TRIGGER `CHECK_TAPE_BEFORE_UPDATE` BEFORE UPDATE ON `TAPE`
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'TAPE.IS_FULL should be 0 or 1';
END IF;
IF new.LBP_IS_ON not in ('0','1') THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'TAPE.LBP_IS_ON should be 0 or 1';
END IF;
END;
CREATE TRIGGER `TAPE_FILE_COPY_NB_GT_ZERO_BEFORE_INSERT` BEFORE INSERT ON `TAPE_FILE`
......
......@@ -253,7 +253,6 @@ const std::map<std::string, OptionBoolean::Key> boolOptions = {
{ "--encrypted", OptionBoolean::ENCRYPTED },
{ "--force", OptionBoolean::FORCE },
{ "--full", OptionBoolean::FULL },
{ "--lbp", OptionBoolean::LBP },
// hasOption options
{ "--checkchecksum", OptionBoolean::CHECK_CHECKSUM },
......
......@@ -43,7 +43,6 @@ bool Tape::operator==(const Tape &rhs) const {
&& capacityInBytes==rhs.capacityInBytes
&& dataOnTapeInBytes==rhs.dataOnTapeInBytes
&& encryptionKey==rhs.encryptionKey
&& lbp==rhs.lbp
&& full==rhs.full
&& disabled==rhs.disabled
&& creationLog==rhs.creationLog
......@@ -72,7 +71,6 @@ std::ostream &operator<<(std::ostream &os, const Tape &obj) {
<< " capacityInBytes=" << obj.capacityInBytes
<< " dataOnTapeInBytes=" << obj.dataOnTapeInBytes
<< " encryptionKey=" << (obj.encryptionKey ? obj.encryptionKey.value() : "null")
<< " lbp=" << (obj.lbp ? (obj.lbp.value() ? "true" : "false") : "null")
<< " full=" << obj.full
<< " disabled=" << obj.disabled
<< " creationLog=" << obj.creationLog
......
......@@ -60,13 +60,6 @@ struct Tape {
*/
optional<std::string> encryptionKey;
/**
* Specifies whether or not the tape has Logical Block Protection (LBP)
* enabled. This value is not set until the tape is either labelled or
* imported as a tape containing pre-existing files.
*/
optional<bool> lbp;
bool full;
bool disabled;
EntryLog creationLog;
......
......@@ -294,7 +294,7 @@ std::list<common::dataStructures::StorageClass> Scheduler::listStorageClass(cons
//------------------------------------------------------------------------------
// labelTape
//------------------------------------------------------------------------------
void Scheduler::queueLabel(const common::dataStructures::SecurityIdentity &cliIdentity, const std::string &vid, const bool force, const bool lbp) {
void Scheduler::queueLabel(const common::dataStructures::SecurityIdentity &cliIdentity, const std::string &vid, const bool force) {
throw exception::Exception(std::string("Not implemented: ") + __PRETTY_FUNCTION__);
}
......
......@@ -190,7 +190,7 @@ public:
* accomplish it will dequeue it.
*/
void queueLabel(const cta::common::dataStructures::SecurityIdentity &cliIdentity, const std::string &vid,
const bool force, const bool lbp);
const bool force);
void queueRepack(const common::dataStructures::SecurityIdentity &cliIdentity, const std::string &vid,
const std::string & bufferURL, const common::dataStructures::RepackInfo::Type repackType, log::LogContext & lc);
......
......@@ -443,10 +443,9 @@ TEST_P(SchedulerTest, archive_report_and_retrieve_new_file) {
catalogue.createTape(s_adminOnAdminHost, s_vid, s_mediaType, s_vendor, s_libraryName, s_tapePoolName, capacityInBytes,
notDisabled, notFull, tapeComment);
const bool lbpIsOn = true;
const std::string driveName = "tape_drive";
catalogue.tapeLabelled(s_vid, "tape_drive", lbpIsOn);
catalogue.tapeLabelled(s_vid, "tape_drive");
{
// Emulate a tape server by asking for a mount and then a file (and succeed the transfer)
......@@ -641,10 +640,9 @@ TEST_P(SchedulerTest, archive_and_retrieve_failure) {
catalogue.createTape(s_adminOnAdminHost, s_vid, s_mediaType, s_vendor, s_libraryName, s_tapePoolName, capacityInBytes,
notDisabled, notFull, tapeComment);
const bool lbpIsOn = true;
const std::string driveName = "tape_drive";
catalogue.tapeLabelled(s_vid, "tape_drive", lbpIsOn);
catalogue.tapeLabelled(s_vid, "tape_drive");
{
// Emulate a tape server by asking for a mount and then a file (and succeed the transfer)
......@@ -892,10 +890,9 @@ TEST_P(SchedulerTest, archive_and_retrieve_report_failure) {
catalogue.createTape(s_adminOnAdminHost, s_vid, "mediatype", "vendor", s_libraryName, s_tapePoolName,
capacityInBytes, notDisabled, notFull, tapeComment);
const bool lbpIsOn = true;
const std::string driveName = "tape_drive";
catalogue.tapeLabelled(s_vid, "tape_drive", lbpIsOn);
catalogue.tapeLabelled(s_vid, "tape_drive");
{
// Emulate a tape server by asking for a mount and then a file (and succeed the transfer)
......@@ -1137,8 +1134,7 @@ TEST_P(SchedulerTest, retry_archive_until_max_reached) {
catalogue.createTape(s_adminOnAdminHost, s_vid, s_mediaType, s_vendor, s_libraryName, s_tapePoolName, capacityInBytes,
notDisabled, notFull, tapeComment);
const bool lbpIsOn = true;
catalogue.tapeLabelled(s_vid, "tape_drive", lbpIsOn);
catalogue.tapeLabelled(s_vid, "tape_drive");
{
// Emulate a tape server by asking for a mount and then a file
......
......@@ -1299,7 +1299,7 @@ TEST_P(DataTransferSessionTest, DataTransferSessionGooddayMigration) {
{
// Label the tape
castor::tape::tapeFile::LabelSession ls(*mockSys.fake.m_pathToDrive["/dev/nst0"], s_vid, false);
catalogue.tapeLabelled(s_vid, "T10D6116", true);
catalogue.tapeLabelled(s_vid, "T10D6116");
mockSys.fake.m_pathToDrive["/dev/nst0"]->rewind();
// Create the files and schedule the archivals
......@@ -1441,7 +1441,7 @@ TEST_P(DataTransferSessionTest, DataTransferSessionMissingFilesMigration) {
{
// Label the tape
castor::tape::tapeFile::LabelSession ls(*mockSys.fake.m_pathToDrive["/dev/nst0"], s_vid, false);
catalogue.tapeLabelled(s_vid, "T10D6116", true);
catalogue.tapeLabelled(s_vid, "T10D6116");
mockSys.fake.m_pathToDrive["/dev/nst0"]->rewind();
// Create the files and schedule the archivals
......@@ -1600,7 +1600,7 @@ TEST_P(DataTransferSessionTest, DataTransferSessionTapeFullMigration) {
{
// Label the tape
castor::tape::tapeFile::LabelSession ls(*mockSys.fake.m_pathToDrive["/dev/nst0"], s_vid, false);
catalogue.tapeLabelled(s_vid, "T10D6116", true);
catalogue.tapeLabelled(s_vid, "T10D6116");
mockSys.fake.m_pathToDrive["/dev/nst0"]->rewind();
// Create the files and schedule the archivals
......@@ -1757,7 +1757,7 @@ TEST_P(DataTransferSessionTest, DataTransferSessionTapeFullOnFlushMigration) {
{
// Label the tape
castor::tape::tapeFile::LabelSession ls(*mockSys.fake.m_pathToDrive["/dev/nst0"], s_vid, false);
catalogue.tapeLabelled(s_vid, "T10D6116", true);
catalogue.tapeLabelled(s_vid, "T10D6116");
mockSys.fake.m_pathToDrive["/dev/nst0"]->rewind();
// Create the files and schedule the archivals
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment