From b03cd428b76b6b671e5ef26f857da4674f07c238 Mon Sep 17 00:00:00 2001
From: Cedric Caffy <cedric.caffy@cern.ch>
Date: Fri, 22 Jan 2021 18:09:45 +0100
Subject: [PATCH] Rebased on top of master + Catalogue::getTapePools() adapted
 to comply with the new tape states - Removed the counting of the readonly
 tapes as they don't exist - Count the ACTIVE tapes instead of not disabled
 ones - Repack disabled tape system test now undisables the tape after having 
  reclaimed it

---
 catalogue/CatalogueTest.cpp                   | 172 ++++++------------
 catalogue/RdbmsCatalogue.cpp                  |  20 +-
 .../tests/repack_systemtest_wrapper.sh        |   3 +
 scheduler/Scheduler.cpp                       |   1 -
 .../daemon/DataTransferSessionTest.cpp        |  21 +--
 xrootd-ssi-protobuf-interface                 |   2 +-
 6 files changed, 73 insertions(+), 146 deletions(-)

diff --git a/catalogue/CatalogueTest.cpp b/catalogue/CatalogueTest.cpp
index 0e6ecc95d8..aa972a0ba2 100644
--- a/catalogue/CatalogueTest.cpp
+++ b/catalogue/CatalogueTest.cpp
@@ -1952,19 +1952,31 @@ TEST_P(cta_catalogue_CatalogueTest, createTapePool_tapes_of_mixed_state) {
     ASSERT_EQ(0, pool.dataBytes);
     ASSERT_EQ(0, pool.nbPhysicalFiles);
   }
+  
+  cta::catalogue::TapeSearchCriteria criteria;
+  criteria.vid = m_tape1.vid;
+  ASSERT_EQ(0,m_catalogue->getTapes(criteria).size());
 
   m_catalogue->createTape(m_admin, m_tape1);
 
   auto tape_disabled_01 = m_tape1;
   tape_disabled_01.vid = "D000001";
-  tape_disabled_01.disabled = true;
+  tape_disabled_01.state = common::dataStructures::Tape::DISABLED;
+  tape_disabled_01.stateReason = "unit Test";
   m_catalogue->createTape(m_admin, tape_disabled_01);
 
   auto tape_disabled_02 = m_tape1;
   tape_disabled_02.vid = "D000002";
-  tape_disabled_02.disabled = true;
+  tape_disabled_02.state = common::dataStructures::Tape::DISABLED;
+  tape_disabled_02.stateReason = "unit Test";
   m_catalogue->createTape(m_admin, tape_disabled_02);
 
+  auto tape_broken_01 = m_tape1;
+  tape_broken_01.vid = "B000002";
+  tape_broken_01.state = common::dataStructures::Tape::BROKEN;
+  tape_broken_01.stateReason = "unit Test";
+  m_catalogue->createTape(m_admin, tape_broken_01);
+  
   auto tape_full_01 = m_tape1;
   tape_full_01.vid = "F000001";
   tape_full_01.full = true;
@@ -1980,64 +1992,30 @@ TEST_P(cta_catalogue_CatalogueTest, createTapePool_tapes_of_mixed_state) {
   tape_full_03.full = true;
   m_catalogue->createTape(m_admin, tape_full_03);
 
-  auto tape_readOnly_01 = m_tape1;
-  tape_readOnly_01.vid = "RO00001";
-  tape_readOnly_01.readOnly = true;
-  m_catalogue->createTape(m_admin, tape_readOnly_01);
-
-  auto tape_readOnly_02 = m_tape1;
-  tape_readOnly_02.vid = "RO00002";
-  tape_readOnly_02.readOnly = true;
-  m_catalogue->createTape(m_admin, tape_readOnly_02);
-
-  auto tape_readOnly_03 = m_tape1;
-  tape_readOnly_03.vid = "RO00003";
-  tape_readOnly_03.readOnly = true;
-  m_catalogue->createTape(m_admin, tape_readOnly_03);
-
-  auto tape_readOnly_04 = m_tape1;
-  tape_readOnly_04.vid = "RO00004";
-  tape_readOnly_04.readOnly = true;
-  m_catalogue->createTape(m_admin, tape_readOnly_04);
-
-  auto tape_disabled_full_readOnly_01 = m_tape1;
-  tape_disabled_full_readOnly_01.vid = "DFRO001";
-  tape_disabled_full_readOnly_01.disabled = true;
-  tape_disabled_full_readOnly_01.full = true;
-  tape_disabled_full_readOnly_01.readOnly = true;
-  m_catalogue->createTape(m_admin, tape_disabled_full_readOnly_01);
-
-  auto tape_disabled_full_readOnly_02 = m_tape1;
-  tape_disabled_full_readOnly_02.vid = "DFRO002";
-  tape_disabled_full_readOnly_02.disabled = true;
-  tape_disabled_full_readOnly_02.full = true;
-  tape_disabled_full_readOnly_02.readOnly = true;
-  m_catalogue->createTape(m_admin, tape_disabled_full_readOnly_02);
-
-  auto tape_disabled_full_readOnly_03 = m_tape1;
-  tape_disabled_full_readOnly_03.vid = "DFRO003";
-  tape_disabled_full_readOnly_03.disabled = true;
-  tape_disabled_full_readOnly_03.full = true;
-  tape_disabled_full_readOnly_03.readOnly = true;
-  m_catalogue->createTape(m_admin, tape_disabled_full_readOnly_03);
-
-  auto tape_disabled_full_readOnly_04 = m_tape1;
-  tape_disabled_full_readOnly_04.vid = "DFRO004";
-  tape_disabled_full_readOnly_04.disabled = true;
-  tape_disabled_full_readOnly_04.full = true;
-  tape_disabled_full_readOnly_04.readOnly = true;
-  m_catalogue->createTape(m_admin, tape_disabled_full_readOnly_04);
-
-  auto tape_disabled_full_readOnly_05 = m_tape1;
-  tape_disabled_full_readOnly_05.vid = "DFRO005";
-  tape_disabled_full_readOnly_05.disabled = true;
-  tape_disabled_full_readOnly_05.full = true;
-  tape_disabled_full_readOnly_05.readOnly = true;
-  m_catalogue->createTape(m_admin, tape_disabled_full_readOnly_05);
+  auto tape_broken_full_01 = m_tape1;
+  tape_broken_full_01.vid = "BFO001";
+  tape_broken_full_01.state = common::dataStructures::Tape::BROKEN;
+  tape_broken_full_01.stateReason = "unit Test";
+  tape_broken_full_01.full = true;
+  m_catalogue->createTape(m_admin, tape_broken_full_01);
+
+  auto tape_disabled_full_01 = m_tape1;
+  tape_disabled_full_01.vid = "DFO001";
+  tape_disabled_full_01.state = common::dataStructures::Tape::DISABLED;
+  tape_disabled_full_01.stateReason = "unit Test";
+  tape_disabled_full_01.full = true;
+  m_catalogue->createTape(m_admin, tape_disabled_full_01);
+
+  auto tape_disabled_full_02 = m_tape1;
+  tape_disabled_full_02.vid = "DFO002";
+  tape_disabled_full_02.full = true;
+  tape_disabled_full_02.state = common::dataStructures::Tape::DISABLED;
+  tape_disabled_full_02.stateReason = "unit Test";
+  m_catalogue->createTape(m_admin, tape_disabled_full_02);
 
   const auto tapes = m_catalogue->getTapes();
 
-  ASSERT_EQ(15, tapes.size());
+  ASSERT_EQ(10, tapes.size());
 
   {
     const auto pools = m_catalogue->getTapePools();
@@ -2046,13 +2024,12 @@ TEST_P(cta_catalogue_CatalogueTest, createTapePool_tapes_of_mixed_state) {
     const auto &pool = pools.front();
     ASSERT_EQ(m_tape1.tapePoolName, pool.name);
     ASSERT_EQ(m_vo.name, pool.vo.name);
-    ASSERT_EQ(15, pool.nbTapes);
-    ASSERT_EQ(15, pool.nbEmptyTapes);
-    ASSERT_EQ(7, pool.nbDisabledTapes);
-    ASSERT_EQ(8, pool.nbFullTapes);
-    ASSERT_EQ(9, pool.nbReadOnlyTapes);
+    ASSERT_EQ(10, pool.nbTapes);
+    ASSERT_EQ(10, pool.nbEmptyTapes);
+    ASSERT_EQ(4, pool.nbDisabledTapes);
+    ASSERT_EQ(6, pool.nbFullTapes);
     ASSERT_EQ(1, pool.nbWritableTapes);
-    ASSERT_EQ(15 * m_mediaType.capacityInBytes, pool.capacityBytes);
+    ASSERT_EQ(10 * m_mediaType.capacityInBytes, pool.capacityBytes);
     ASSERT_EQ(0, pool.dataBytes);
     ASSERT_EQ(0, pool.nbPhysicalFiles);
   }
@@ -2063,13 +2040,12 @@ TEST_P(cta_catalogue_CatalogueTest, createTapePool_tapes_of_mixed_state) {
 
     ASSERT_EQ(m_tape1.tapePoolName, pool->name);
     ASSERT_EQ(m_vo.name, pool->vo.name);
-    ASSERT_EQ(15, pool->nbTapes);
-    ASSERT_EQ(15, pool->nbEmptyTapes);
-    ASSERT_EQ(7, pool->nbDisabledTapes);
-    ASSERT_EQ(8, pool->nbFullTapes);
-    ASSERT_EQ(9, pool->nbReadOnlyTapes);
+    ASSERT_EQ(10, pool->nbTapes);
+    ASSERT_EQ(10, pool->nbEmptyTapes);
+    ASSERT_EQ(4, pool->nbDisabledTapes);
+    ASSERT_EQ(6, pool->nbFullTapes);
     ASSERT_EQ(1, pool->nbWritableTapes);
-    ASSERT_EQ(15 * m_mediaType.capacityInBytes, pool->capacityBytes);
+    ASSERT_EQ(10 * m_mediaType.capacityInBytes, pool->capacityBytes);
     ASSERT_EQ(0, pool->dataBytes);
     ASSERT_EQ(0, pool->nbPhysicalFiles);
   }
@@ -4879,14 +4855,16 @@ TEST_P(cta_catalogue_CatalogueTest, deleteNonEmptyTape) {
   }
 
   const uint64_t fileSize = 1234 * 1000000000UL;
+  const uint64_t archiveFileId = 1234;
+  const std::string diskFileId = "5678";
   {
     auto file1WrittenUP=cta::make_unique<cta::catalogue::TapeFileWritten>();
     auto & file1Written = *file1WrittenUP;
     std::set<cta::catalogue::TapeItemWrittenPointer> file1WrittenSet;
     file1WrittenSet.insert(file1WrittenUP.release());
-    file1Written.archiveFileId        = 1234;
+    file1Written.archiveFileId        = archiveFileId;
     file1Written.diskInstance         = diskInstance;
-    file1Written.diskFileId           = "5678";
+    file1Written.diskFileId           = diskFileId;
     file1Written.diskFileOwnerUid     = PUBLIC_DISK_USER;
     file1Written.diskFileGid          = PUBLIC_DISK_GROUP;
     file1Written.size                 = fileSize;
@@ -5557,8 +5535,8 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapeState) {
   }
   
   {
-    auto tapes = m_catalogue->getAllTapes();
-    auto tape = tapes.at(vid);
+    auto vidToTapeMap = m_catalogue->getTapesByVid({vid});
+    auto tape = vidToTapeMap.at(vid);
     ASSERT_EQ(vid,tape.vid);
     ASSERT_EQ(common::dataStructures::Tape::BROKEN,tape.state);
     ASSERT_EQ(reason,tape.stateReason);
@@ -9422,7 +9400,7 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_many_archive_files) {
     ASSERT_EQ(nbArchiveFiles, pool.nbPhysicalFiles);
   }
 
-  m_catalogue->setTapeDisabled(m_admin, tape1.vid, true);
+  m_catalogue->setTapeDisabled(m_admin, tape1.vid, "unit Test");
 
   {
     const auto pools = m_catalogue->getTapePools();
@@ -9444,7 +9422,7 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_many_archive_files) {
     ASSERT_EQ(nbArchiveFiles, pool.nbPhysicalFiles);
   }
 
-  m_catalogue->setTapeDisabled(m_admin, tape1.vid, false);
+  m_catalogue->modifyTapeState(m_admin, tape1.vid, common::dataStructures::Tape::ACTIVE,cta::nullopt);
 
   {
     const auto pools = m_catalogue->getTapePools();
@@ -9509,50 +9487,6 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_many_archive_files) {
     ASSERT_EQ(nbArchiveFiles * archiveFileSize, pool.dataBytes);
     ASSERT_EQ(nbArchiveFiles, pool.nbPhysicalFiles);
   }
-
-  m_catalogue->setTapeReadOnly(m_admin, tape1.vid, true);
-
-  {
-    const auto pools = m_catalogue->getTapePools();
-    ASSERT_EQ(2, pools.size());
-
-    const auto tapePoolMap = tapePoolListToMap(pools);
-    auto tapePoolMapItor = tapePoolMap.find(tapePoolName1);
-    ASSERT_NE(tapePoolMapItor, tapePoolMap.end());
-    const auto &pool = tapePoolMapItor->second;
-    ASSERT_EQ(tapePoolName1, pool.name);
-    ASSERT_EQ(1, pool.nbTapes);
-    ASSERT_EQ(0, pool.nbEmptyTapes);
-    ASSERT_EQ(0, pool.nbDisabledTapes);
-    ASSERT_EQ(0, pool.nbFullTapes);
-    ASSERT_EQ(1, pool.nbReadOnlyTapes);
-    ASSERT_EQ(0, pool.nbWritableTapes);
-    ASSERT_EQ(m_mediaType.capacityInBytes, pool.capacityBytes);
-    ASSERT_EQ(nbArchiveFiles * archiveFileSize, pool.dataBytes);
-    ASSERT_EQ(nbArchiveFiles, pool.nbPhysicalFiles);
-  }
-
-  m_catalogue->setTapeReadOnly(m_admin, tape1.vid, false);
-
-  {
-    const auto pools = m_catalogue->getTapePools();
-    ASSERT_EQ(2, pools.size());
-
-    const auto tapePoolMap = tapePoolListToMap(pools);
-    auto tapePoolMapItor = tapePoolMap.find(tapePoolName1);
-    ASSERT_NE(tapePoolMapItor, tapePoolMap.end());
-    const auto &pool = tapePoolMapItor->second;
-    ASSERT_EQ(tapePoolName1, pool.name);
-    ASSERT_EQ(1, pool.nbTapes);
-    ASSERT_EQ(0, pool.nbEmptyTapes);
-    ASSERT_EQ(0, pool.nbDisabledTapes);
-    ASSERT_EQ(0, pool.nbFullTapes);
-    ASSERT_EQ(0, pool.nbReadOnlyTapes);
-    ASSERT_EQ(1, pool.nbWritableTapes);
-    ASSERT_EQ(m_mediaType.capacityInBytes, pool.capacityBytes);
-    ASSERT_EQ(nbArchiveFiles * archiveFileSize, pool.dataBytes);
-    ASSERT_EQ(nbArchiveFiles, pool.nbPhysicalFiles);
-  }
 }
 
 TEST_P(cta_catalogue_CatalogueTest, DISABLED_concurrent_filesWrittenToTape_many_archive_files) {
diff --git a/catalogue/RdbmsCatalogue.cpp b/catalogue/RdbmsCatalogue.cpp
index 5fcc1af750..959504ac46 100644
--- a/catalogue/RdbmsCatalogue.cpp
+++ b/catalogue/RdbmsCatalogue.cpp
@@ -2025,10 +2025,9 @@ std::list<TapePool> RdbmsCatalogue::getTapePools() const {
 
         "COALESCE(COUNT(TAPE.VID), 0) AS NB_TAPES,"
         "COALESCE(SUM(CASE WHEN TAPE.DATA_IN_BYTES = 0 THEN 1 ELSE 0 END), 0) AS NB_EMPTY_TAPES,"
-        "COALESCE(SUM(CASE WHEN TAPE.IS_DISABLED <> '0' THEN 1 ELSE 0 END), 0) AS NB_DISABLED_TAPES,"
+        "COALESCE(SUM(CASE WHEN TAPE.TAPE_STATE = :STATE_DISABLED THEN 1 ELSE 0 END), 0) AS NB_DISABLED_TAPES,"
         "COALESCE(SUM(CASE WHEN TAPE.IS_FULL <> '0' THEN 1 ELSE 0 END), 0) AS NB_FULL_TAPES,"
-        "COALESCE(SUM(CASE WHEN TAPE.IS_READ_ONLY <> '0' THEN 1 ELSE 0 END), 0) AS NB_READ_ONLY_TAPES,"
-        "COALESCE(SUM(CASE WHEN TAPE.IS_DISABLED = '0' AND TAPE.IS_FULL = '0' AND TAPE.IS_READ_ONLY = '0' THEN 1 ELSE 0 END), 0) AS NB_WRITABLE_TAPES,"
+        "COALESCE(SUM(CASE WHEN TAPE.TAPE_STATE = :STATE_ACTIVE AND TAPE.IS_FULL = '0' THEN 1 ELSE 0 END), 0) AS NB_WRITABLE_TAPES,"
         "COALESCE(SUM(MEDIA_TYPE.CAPACITY_IN_BYTES), 0) AS CAPACITY_IN_BYTES,"
         "COALESCE(SUM(TAPE.DATA_IN_BYTES), 0) AS DATA_IN_BYTES,"
         "COALESCE(SUM(TAPE.LAST_FSEQ), 0) AS NB_PHYSICAL_FILES,"
@@ -2068,6 +2067,8 @@ std::list<TapePool> RdbmsCatalogue::getTapePools() const {
 
     auto conn = m_connPool.getConn();
     auto stmt = conn.createStmt(sql);
+    stmt.bindString(":STATE_DISABLED",common::dataStructures::Tape::stateToString(common::dataStructures::Tape::DISABLED));
+    stmt.bindString(":STATE_ACTIVE",common::dataStructures::Tape::stateToString(common::dataStructures::Tape::ACTIVE));
     auto rset = stmt.executeQuery();
     while (rset.next()) {
       TapePool pool;
@@ -2081,7 +2082,6 @@ std::list<TapePool> RdbmsCatalogue::getTapePools() const {
       pool.nbEmptyTapes = rset.columnUint64("NB_EMPTY_TAPES");
       pool.nbDisabledTapes = rset.columnUint64("NB_DISABLED_TAPES");
       pool.nbFullTapes = rset.columnUint64("NB_FULL_TAPES");
-      pool.nbReadOnlyTapes = rset.columnUint64("NB_READ_ONLY_TAPES");
       pool.nbWritableTapes = rset.columnUint64("NB_WRITABLE_TAPES");
       pool.capacityBytes = rset.columnUint64("CAPACITY_IN_BYTES");
       pool.dataBytes = rset.columnUint64("DATA_IN_BYTES");
@@ -2121,10 +2121,9 @@ cta::optional<TapePool> RdbmsCatalogue::getTapePool(const std::string &tapePoolN
 
         "COALESCE(COUNT(TAPE.VID), 0) AS NB_TAPES,"
         "COALESCE(SUM(CASE WHEN TAPE.DATA_IN_BYTES = 0 THEN 1 ELSE 0 END), 0) AS NB_EMPTY_TAPES,"
-        "COALESCE(SUM(CASE WHEN TAPE.IS_DISABLED <> '0' THEN 1 ELSE 0 END), 0) AS NB_DISABLED_TAPES,"
+        "COALESCE(SUM(CASE WHEN TAPE.TAPE_STATE = :STATE_DISABLED THEN 1 ELSE 0 END), 0) AS NB_DISABLED_TAPES,"
         "COALESCE(SUM(CASE WHEN TAPE.IS_FULL <> '0' THEN 1 ELSE 0 END), 0) AS NB_FULL_TAPES,"
-        "COALESCE(SUM(CASE WHEN TAPE.IS_READ_ONLY <> '0' THEN 1 ELSE 0 END), 0) AS NB_READ_ONLY_TAPES,"
-        "COALESCE(SUM(CASE WHEN TAPE.IS_DISABLED = '0' AND TAPE.IS_FULL = '0' AND TAPE.IS_READ_ONLY = '0' THEN 1 ELSE 0 END), 0) AS NB_WRITABLE_TAPES,"
+        "COALESCE(SUM(CASE WHEN TAPE.TAPE_STATE = :STATE_ACTIVE AND TAPE.IS_FULL = '0' THEN 1 ELSE 0 END), 0) AS NB_WRITABLE_TAPES,"
         "COALESCE(SUM(MEDIA_TYPE.CAPACITY_IN_BYTES), 0) AS CAPACITY_IN_BYTES,"
         "COALESCE(SUM(TAPE.DATA_IN_BYTES), 0) AS DATA_IN_BYTES,"
         "COALESCE(SUM(TAPE.LAST_FSEQ), 0) AS NB_PHYSICAL_FILES,"
@@ -2167,6 +2166,9 @@ cta::optional<TapePool> RdbmsCatalogue::getTapePool(const std::string &tapePoolN
     auto conn = m_connPool.getConn();
     auto stmt = conn.createStmt(sql);
     stmt.bindString(":TAPE_POOL_NAME", tapePoolName);
+    stmt.bindString(":STATE_DISABLED",common::dataStructures::Tape::stateToString(common::dataStructures::Tape::DISABLED));
+    stmt.bindString(":STATE_ACTIVE",common::dataStructures::Tape::stateToString(common::dataStructures::Tape::ACTIVE));
+    
     auto rset = stmt.executeQuery();
 
     if (!rset.next()) {
@@ -2183,7 +2185,6 @@ cta::optional<TapePool> RdbmsCatalogue::getTapePool(const std::string &tapePoolN
     pool.nbEmptyTapes = rset.columnUint64("NB_EMPTY_TAPES");
     pool.nbDisabledTapes = rset.columnUint64("NB_DISABLED_TAPES");
     pool.nbFullTapes = rset.columnUint64("NB_FULL_TAPES");
-    pool.nbReadOnlyTapes = rset.columnUint64("NB_READ_ONLY_TAPES");
     pool.nbWritableTapes = rset.columnUint64("NB_WRITABLE_TAPES");
     pool.capacityBytes = rset.columnUint64("CAPACITY_IN_BYTES");
     pool.dataBytes = rset.columnUint64("DATA_IN_BYTES");
@@ -5705,7 +5706,8 @@ try {
       policy.retrieveMinRequestAge = rset.columnUint64("RETRIEVE_MIN_REQUEST_AGE");
 
       policy.maxDrivesAllowed = rset.columnUint64("MAX_DRIVES_ALLOWED");
-
+      policy.maxDrivesAllowedPerVo = rset.columnUint64("MAX_DRIVES_ALLOWED_PER_VO");
+      
       policy.comment = rset.columnString("USER_COMMENT");
 
       policy.creationLog.username = rset.columnString("CREATION_LOG_USER_NAME");
diff --git a/continuousintegration/orchestration/tests/repack_systemtest_wrapper.sh b/continuousintegration/orchestration/tests/repack_systemtest_wrapper.sh
index 90c50cbcf5..8cf657e57b 100755
--- a/continuousintegration/orchestration/tests/repack_systemtest_wrapper.sh
+++ b/continuousintegration/orchestration/tests/repack_systemtest_wrapper.sh
@@ -122,6 +122,9 @@ repackDisableTape() {
   echo "Reclaiming tape ${VID_TO_REPACK}"
   kubectl -n ${NAMESPACE} exec ctacli -- cta-admin tape reclaim --vid ${VID_TO_REPACK}
 
+  echo "Setting the tape ${VID_TO_REPACK} back to ACTIVE"
+  kubectl -n ${NAMESPACE} exec ctacli -- cta-admin tape ch --state ACTIVE --vid ${VID_TO_REPACK}
+
   echo
   echo "*************************************************************"
   echo "STEP $1. Launching a Repack Request on a disabled tape TEST OK"
diff --git a/scheduler/Scheduler.cpp b/scheduler/Scheduler.cpp
index bbdcd8c5f3..bac8dbaf32 100644
--- a/scheduler/Scheduler.cpp
+++ b/scheduler/Scheduler.cpp
@@ -1657,7 +1657,6 @@ std::list<common::dataStructures::QueueAndMountSummary> Scheduler::getQueuesAndM
         mountOrQueue.emptyTapes = tapePool->nbEmptyTapes;
         mountOrQueue.disabledTapes = tapePool->nbDisabledTapes;
         mountOrQueue.fullTapes = tapePool->nbFullTapes;
-        mountOrQueue.readOnlyTapes = tapePool->nbReadOnlyTapes;
         mountOrQueue.writableTapes = tapePool->nbWritableTapes;
       }
     } else if (common::dataStructures::MountType::Retrieve==mountOrQueue.mountType) {
diff --git a/tapeserver/castor/tape/tapeserver/daemon/DataTransferSessionTest.cpp b/tapeserver/castor/tape/tapeserver/daemon/DataTransferSessionTest.cpp
index a7f40c4373..045a7023c2 100644
--- a/tapeserver/castor/tape/tapeserver/daemon/DataTransferSessionTest.cpp
+++ b/tapeserver/castor/tape/tapeserver/daemon/DataTransferSessionTest.cpp
@@ -2532,28 +2532,17 @@ TEST_P(DataTransferSessionTest, CleanerSessionFailsShouldPutTheDriveDown) {
     ASSERT_EQ(s_libraryName, libraries.front().name);
     ASSERT_EQ(libraryComment, libraries.front().comment);
   }
-  const std::string tapeComment = "Tape comment";
-  bool notDisabled = false;
-  bool notFull = false;
-  bool notReadOnly = false;
 
   {
-    cta::catalogue::CreateTapeAttributes tape;
-    tape.vid = s_vid;
-    tape.mediaType = s_mediaType;
-    tape.vendor = s_vendor;
-    tape.logicalLibraryName = s_libraryName;
-    tape.tapePoolName = s_tapePoolName;
-    tape.full = notFull;
-    tape.disabled = notDisabled;
-    tape.readOnly = notReadOnly;
-    tape.comment = tapeComment;
+    cta::catalogue::CreateTapeAttributes tape = getDefaultTape();
     catalogue.createTape(s_adminOnAdminHost, tape);
   }
 
   // Create the mount criteria
-  catalogue.createMountPolicy(requester, "immediateMount", 1000, 0, 1000, 0, 1, "Policy comment");
-  catalogue.createRequesterMountRule(requester, "immediateMount", s_diskInstance, requester.username, "Rule comment");
+  auto mountPolicy = getImmediateMountMountPolicy();                                                                                                                  
+  catalogue.createMountPolicy(requester, mountPolicy);                                                                                                                
+  std::string mountPolicyName = mountPolicy.name;                                                                                                                     
+  catalogue.createRequesterMountRule(requester, mountPolicyName, s_diskInstance, requester.username, "Rule comment");
 
   //delete is unnecessary
   //pointer with ownership will be passed to the application,
diff --git a/xrootd-ssi-protobuf-interface b/xrootd-ssi-protobuf-interface
index 668b482304..52f53bdf8f 160000
--- a/xrootd-ssi-protobuf-interface
+++ b/xrootd-ssi-protobuf-interface
@@ -1 +1 @@
-Subproject commit 668b482304a1fc3037e99ad41a40517f0638a018
+Subproject commit 52f53bdf8f6f08f4344c8e28cc098c471cda31af
-- 
GitLab