Skip to content
Snippets Groups Projects
Commit e3d7e42b authored by Cedric Caffy's avatar Cedric Caffy
Browse files

[lto_rao] Fixed unittests valgrind error

parent b72bfd53
No related branches found
No related tags found
No related merge requests found
......@@ -32,7 +32,7 @@ EnterpriseRAOAlgorithm::~EnterpriseRAOAlgorithm() {
std::vector<uint64_t> EnterpriseRAOAlgorithm::performRAO(const std::vector<std::unique_ptr<cta::RetrieveJob> >& jobs) {
std::vector<uint64_t> raoOrder;
uint64_t njobs = jobs.size();
uint32_t block_size = 262144;
uint32_t block_size = c_blockSize;
std::list<castor::tape::SCSI::Structures::RAO::blockLims> files;
for (uint32_t i = 0; i < njobs; i++) {
cta::RetrieveJob *job = jobs.at(i).get();
......
......@@ -55,6 +55,8 @@ private:
castor::tape::tapeserver::drive::DriveInterface * m_drive;
//Maximum number of files supported by the drive to perform the RAO
uint64_t m_maxFilesSupported;
const uint32_t c_blockSize = 262144;
};
}}}}
......@@ -33,7 +33,9 @@ FilePosition InterpolationFilePositionEstimator::getFilePosition(const cta::Retr
uint64_t startBlock = tapeFile.blockId;
Position startPosition = getPhysicalPosition(startBlock);
ret.setStartPosition(startPosition);
uint64_t endBlock = determineEndBlock(tapeFile);
Position endPosition = getPhysicalPosition(endBlock);
ret.setEndPosition(endPosition);
return ret;
}
......@@ -86,5 +88,8 @@ uint64_t InterpolationFilePositionEstimator::determineLPos(const uint64_t blockI
return fileLpos;
}
uint64_t InterpolationFilePositionEstimator::determineEndBlock(const cta::common::dataStructures::TapeFile& file) const{
return file.blockId + (file.fileSize / c_blockSize) + 1;
}
}}}}
\ No newline at end of file
......@@ -30,10 +30,13 @@ public:
InterpolationFilePositionEstimator(const std::vector<drive::endOfWrapPosition> & endOfWrapPositions, const cta::catalogue::MediaType & mediaType);
FilePosition getFilePosition(const cta::RetrieveJob& job) const override;
virtual ~InterpolationFilePositionEstimator();
static const uint64_t c_blockSize = 256000;
private:
Position getPhysicalPosition(const uint64_t blockId) const;
uint64_t determineWrapNb(const uint64_t blockId) const;
uint64_t determineLPos(const uint64_t blockId, const uint64_t wrapNumber) const;
uint64_t determineEndBlock(const cta::common::dataStructures::TapeFile & file) const;
std::vector<drive::endOfWrapPosition> m_endOfWrapPositions;
cta::catalogue::MediaType m_mediaType;
};
......
......@@ -56,7 +56,7 @@ namespace unitTests {
tapeFile.fSeq = fseq;
tapeFile.fileSize = fileSize;
archiveFile.tapeFiles.push_back(tapeFile);
cta::common::dataStructures::RetrieveRequest retrieveRequest;
cta::common::dataStructures::RetrieveRequest retrieveRequest;
ret.reset(new cta::RetrieveJob(nullptr,retrieveRequest,archiveFile,1,cta::PositioningMethod::ByBlock));
return ret;
}
......@@ -92,21 +92,29 @@ namespace unitTests {
rao::InterpolationFilePositionEstimator estimator(eowPositions,mediaType);
{
cta::RetrieveJob & retrieveJob = *RAOTestEnvironment::createRetrieveJobForRAOTests(0,1,1,10);
rao::FilePosition positionFile = estimator.getFilePosition(retrieveJob);
std::unique_ptr<cta::RetrieveJob> retrieveJob = RAOTestEnvironment::createRetrieveJobForRAOTests(0,1,1,10);
rao::FilePosition positionFile = estimator.getFilePosition(*retrieveJob);
//The LPOS start position of the file should be equal to the minLPos of the LTO7 media type
rao::Position startPositionFile = positionFile.getStartPosition();
ASSERT_EQ(0,startPositionFile.getWrap());
ASSERT_EQ(mediaType.minLPos.value(), startPositionFile.getLPos());
rao::Position endPositionFile = positionFile.getEndPosition();
ASSERT_EQ(0,endPositionFile.getWrap());
/*TODO : TO BE CONTINUED
* auto jobTapeFile = retrieveJob->selectedTapeFile();
uint64_t endPositionBlockId = mediaType.minLPos.value() + (jobTapeFile.blockId / rao::InterpolationFilePositionEstimator::c_blockSize) + 1;
ASSERT_EQ(mediaType.minLPos.value() + endPositionBlockId,endPositionFile.getLPos());*/
}
{
cta::RetrieveJob & retrieveJob = *RAOTestEnvironment::createRetrieveJobForRAOTests(11,1,2,25);
rao::FilePosition positionFile = estimator.getFilePosition(retrieveJob);
std::unique_ptr<cta::RetrieveJob> retrieveJob = RAOTestEnvironment::createRetrieveJobForRAOTests(2,1,2,25);
rao::FilePosition positionFile = estimator.getFilePosition(*retrieveJob);
rao::Position startPositionFile = positionFile.getStartPosition();
ASSERT_EQ(0,startPositionFile.getWrap());
double b_max = (double) eowPositions.at(0).blockId;
uint64_t expectedLPos = mediaType.minLPos.value() + retrieveJob.selectedTapeFile().blockId * (mediaType.maxLPos.value() - mediaType.minLPos.value()) / b_max;
uint64_t expectedLPos = mediaType.minLPos.value() + retrieveJob->selectedTapeFile().blockId * (mediaType.maxLPos.value() - mediaType.minLPos.value()) / b_max;
ASSERT_EQ(expectedLPos,positionFile.getStartPosition().getLPos());
}
}
......@@ -119,10 +127,10 @@ namespace unitTests {
{
//Now create a retrieve job that has a blockId greater than the first wrap end of wrap position
cta::RetrieveJob & retrieveJob = *RAOTestEnvironment::createRetrieveJobForRAOTests(210000,1,1,10);
rao::FilePosition positionFile = estimator.getFilePosition(retrieveJob);
std::unique_ptr<cta::RetrieveJob> retrieveJob = RAOTestEnvironment::createRetrieveJobForRAOTests(210000,1,1,10);
rao::FilePosition positionFile = estimator.getFilePosition(*retrieveJob);
double b_max = (double) eowPositions.at(1).blockId - (double) eowPositions.at(0).blockId;
uint64_t fileBlockId = retrieveJob.selectedTapeFile().blockId - eowPositions.at(0).blockId;
uint64_t fileBlockId = retrieveJob->selectedTapeFile().blockId - eowPositions.at(0).blockId;
uint64_t expectedLPos = mediaType.maxLPos.value() - fileBlockId * (mediaType.maxLPos.value() - mediaType.minLPos.value()) / b_max;
ASSERT_EQ(1,positionFile.getStartPosition().getWrap());
ASSERT_EQ(expectedLPos,positionFile.getStartPosition().getLPos());
......@@ -136,8 +144,8 @@ namespace unitTests {
rao::InterpolationFilePositionEstimator estimator(eowPositions,mediaType);
{
cta::RetrieveJob & retrieveJob = *RAOTestEnvironment::createRetrieveJobForRAOTests(100000000,1,3,30);
ASSERT_THROW(estimator.getFilePosition(retrieveJob),cta::exception::Exception);
std::unique_ptr<cta::RetrieveJob> retrieveJob = RAOTestEnvironment::createRetrieveJobForRAOTests(100000000,1,3,30);
ASSERT_THROW(estimator.getFilePosition(*retrieveJob),cta::exception::Exception);
}
}
......@@ -147,7 +155,6 @@ namespace unitTests {
rao::RAOHelpers::improveEndOfLastWrapPositionIfPossible(eowPositions);
drive::endOfWrapPosition eowpAfterImprovement = eowPositions.at(eowPositions.size()-1);
ASSERT_LT(eowpBeforeImprovement.blockId,eowpAfterImprovement.blockId);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment