in util/FileCreator.cpp [53:90]
int FileCreator::openAndSetSize(ThreadCtx &threadCtx,
BlockDetails const *blockDetails) {
int fd;
const bool doCreate = (blockDetails->allocationStatus == NOT_EXISTS);
const bool isTooLarge = (blockDetails->allocationStatus == EXISTS_TOO_LARGE);
if (doCreate) {
fd = createFile(threadCtx, blockDetails->fileName);
} else {
fd = openExistingFile(threadCtx, blockDetails->fileName);
}
if (fd < 0) {
return -1;
}
if (blockDetails->allocationStatus == EXISTS_CORRECT_SIZE) {
return fd;
}
if (!setFileSize(threadCtx, fd, blockDetails->fileSize)) {
close(fd);
return -1;
}
if (threadCtx.getOptions().isLogBasedResumption()) {
if (isTooLarge) {
WLOG(WARNING) << "File size smaller in the sender side "
<< blockDetails->fileName
<< ", marking previous transferred chunks as invalid";
transferLogManager_.addFileInvalidationEntry(blockDetails->prevSeqId);
}
if (isTooLarge || doCreate) {
transferLogManager_.addFileCreationEntry(
blockDetails->fileName, blockDetails->seqId, blockDetails->fileSize);
} else {
WDT_CHECK_EQ(EXISTS_TOO_SMALL, blockDetails->allocationStatus);
transferLogManager_.addFileResizeEntry(blockDetails->seqId,
blockDetails->fileSize);
}
}
return fd;
}