diff --git a/catalogue/CatalogueTest.cpp b/catalogue/CatalogueTest.cpp index dc5b54876ca77b258b789e7426553592b9dc3107..d7a4f9064530ba1b9efc394fd76d0633b7bdc1e7 100644 --- a/catalogue/CatalogueTest.cpp +++ b/catalogue/CatalogueTest.cpp @@ -7506,8 +7506,8 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_many_archive_files) { const std::string vid = copyNb == 1 ? vid1 : vid2; const uint64_t startFseq = 1; const uint64_t maxNbFiles = nbArchiveFiles; - auto archiveFiles = m_catalogue->getFilesForRepack(vid, startFseq, maxNbFiles); - auto m = archiveFileListToMap(archiveFiles); + const auto archiveFiles = m_catalogue->getFilesForRepack(vid, startFseq, maxNbFiles); + const auto m = archiveFileListToMap(archiveFiles); ASSERT_EQ(nbArchiveFiles, m.size()); for(uint64_t i = 1; i <= nbArchiveFiles; i++) { @@ -7572,9 +7572,9 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_many_archive_files) { const std::string vid = copyNb == 1 ? vid1 : vid2; const uint64_t startFseq = 1; const uint64_t maxNbFiles = nbArchiveFiles / 2; - auto archiveFiles = m_catalogue->getFilesForRepack(vid, startFseq, maxNbFiles); - auto m = archiveFileListToMap(archiveFiles); - ASSERT_EQ(nbArchiveFiles, m.size()); + const auto archiveFiles = m_catalogue->getFilesForRepack(vid, startFseq, maxNbFiles); + const auto m = archiveFileListToMap(archiveFiles); + ASSERT_EQ(nbArchiveFiles / 2, m.size()); for(uint64_t i = 1; i <= nbArchiveFiles / 2; i++) { std::ostringstream diskFileId; @@ -7636,11 +7636,11 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_many_archive_files) { for(uint64_t copyNb = 1; copyNb <= 2; copyNb++) { const std::string vid = copyNb == 1 ? vid1 : vid2; - const uint64_t startFseq = 1; + const uint64_t startFseq = nbArchiveFiles / 2 + 1; const uint64_t maxNbFiles = nbArchiveFiles / 2; - auto archiveFiles = m_catalogue->getFilesForRepack(vid, startFseq, maxNbFiles); - auto m = archiveFileListToMap(archiveFiles); - ASSERT_EQ(nbArchiveFiles, m.size()); + const auto archiveFiles = m_catalogue->getFilesForRepack(vid, startFseq, maxNbFiles); + const auto m = archiveFileListToMap(archiveFiles); + ASSERT_EQ(nbArchiveFiles / 2, m.size()); for(uint64_t i = nbArchiveFiles / 2 + 1; i <= nbArchiveFiles; i++) { std::ostringstream diskFileId; diff --git a/catalogue/RdbmsCatalogue.cpp b/catalogue/RdbmsCatalogue.cpp index f6cf6970715213b5de86180e0de2a9fbce16d9e1..f41f5ba84ac3f40a4ca17be5456d496824430007 100644 --- a/catalogue/RdbmsCatalogue.cpp +++ b/catalogue/RdbmsCatalogue.cpp @@ -4060,12 +4060,14 @@ std::list<common::dataStructures::ArchiveFile> RdbmsCatalogue::getFilesForRepack "INNER JOIN TAPE ON " "TAPE_FILE.VID = TAPE.VID " "WHERE " - "TAPE_FILE.VID = :VID " + "TAPE_FILE.VID = :VID AND " + "TAPE_FILE.FSEQ >= :START_FSEQ " "ORDER BY FSEQ"; auto conn = m_connPool.getConn(); auto stmt = conn.createStmt(sql); stmt.bindString(":VID", vid); + stmt.bindUint64(":START_FSEQ", startFSeq); auto rset = stmt.executeQuery(rdbms::AutocommitMode::AUTOCOMMIT_OFF); std::list<common::dataStructures::ArchiveFile> archiveFiles; @@ -4099,6 +4101,8 @@ std::list<common::dataStructures::ArchiveFile> RdbmsCatalogue::getFilesForRepack archiveFile.tapeFiles[rset.columnUint64("COPY_NB")] = tapeFile; archiveFiles.push_back(archiveFile); + + if(maxNbFiles == archiveFiles.size()) break; } return archiveFiles; } catch(exception::UserError &) {