 |
ewmscp
..
|
Go to the documentation of this file. 1 #ifndef __copyRequest_h__
2 #define __copyRequest_h__
24 #include <condition_variable>
32 #include <system_error>
35 #include <unordered_set>
52 typedef std::pair<std::string, std::string>
singleMap;
81 std::forward_list<std::exception_ptr>
list;
83 void add(std::exception_ptr e);
86 std::exception_ptr
front();
141 void kw_size(std::string& value)
const;
142 void kw_mtime(std::string& value)
const;
143 void kw_inow(std::string& value)
const;
144 void kw_now(std::string& value)
const;
146 void kw_commit(std::string& value)
const;
147 void kw_prefix(std::string& value)
const;
151 void kw_reason(std::string& value)
const;
152 void kw_state(std::string& value)
const;
155 void kw_magic(std::string& value)
const;
159 static std::map<std::string, void (
base::*)(std::string&)
const>&
keywordMap();
164 void (
base::*fkt)(std::string&)
const) {
172 const std::map<std::string, std::string>& attrs);
174 const std::map<std::string, std::string>& attrs);
176 const std::map<std::string, std::string>& check_source_attr);
201 void innerMagic(
const block& b);
205 class magicCalculator {
213 ~magicCalculator() noexcept(false);
236 void writer(std::unique_ptr<outputHandler::base::writer>& writeHandle,
240 void writeWorker(std::unique_ptr<outputHandler::base::writer>& writeHandle,
248 writeActor(std::unique_ptr<outputHandler::base::writer>& writeHandle,
279 std::string fileMagic;
327 void adviseDelay(clock_type::duration dt = clock_type::duration::zero());
359 throw std::logic_error(
"no slot type detected");
365 static bool retry(std::unique_ptr<base>& request,
380 const std::string& aSource,
381 const std::string& aDestination,
382 std::unique_ptr<const genericStat>& aStat,
385 clock_type::time_point timestamp);
387 const std::string& aSource,
388 const std::string& aDestination,
391 clock_type::time_point timestamp);
393 const std::string& aSource,
394 const std::string& aDestination,
395 const std::string& aMoveSource,
396 const std::string& aOrigSource,
398 clock_type::time_point timestamp);
399 virtual ~base() noexcept(false);
402 std::ostream& logStream);
407 bool operator () (
const base* lhs,
408 const base* rhs)
const {
409 if (lhs ==
nullptr) {
412 if (rhs ==
nullptr) {
424 static void getSuffix(
const std::string& path,
427 const std::string& expectedValue);
429 friend std::ostream&
operator<<(std::ostream& out,
const base& request);
static options::single< size_t > userWriteBlockSize
static std::map< std::string, fileInWork > filesInWork
maps file names to filesInWork objects
static statCollector::typed< decltype(tWorkStart - tEnqueue) > tWaitStat
const std::string moveSource
registerme(const std::string &keyword, void(base::*fkt)(std::string &) const)
inputHandler::base * InputHandler
static options::single< unsigned > nReadThreads
decltype(filesInWorkIterator) getFilesInWorkIteraror() const
void kw_reason(std::string &value) const
void kw_size(std::string &value) const
class specialisation for options of type bool
waitQueues::simple< block > blockQueue
static statCollector::typed< double > speedStat
static statCollector::typed< copyRequest::clock_type::duration > tEnqueueStat
static options::single< bool > perFileThreads
generic stat abstraction class Used to abstract the variants of the stat structure.
static statCollector::typed< decltype(tWorkDone - tInotify) > tTotalStat
virtual bool compare(const base &rhs) const
static options::single< std::regex > sourcePrefixRegex
void kw_mtime(std::string &value) const
static options::map< std::string > success_dest_attrs
const std::string & getSuffix() const
static options::single< size_t > maxMemoryBlockSize
static backupModeType backupMode
std::forward_list< std::exception_ptr > list
void hasher(blockQueue &blocksToHash, blockQueue &hashedBlocks, exceptionList &exceptions)
static statCollector::typed< decltype(tWorkDone - tInotify) > tInotifyStat
bool makeSymLink(inputHandler::base *InputHandler, outputHandler::base *OutputHandler)
static std::mutex advisoryWaitMapMutex
static void waitForAllInstancesGone()
void add(std::exception_ptr e)
static statCollector::typed< decltype(readInitialStat->size) > bytesStat
decltype(fileInWork::filesInWork.begin()) filesInWorkIterator
bool parallelized() const
static bool retry(std::unique_ptr< base > &request, timedQueue &delayedRequests)
clock_type::time_point tWorkStart
void changeRequestType(stateBitType newType)
static options::map< std::string > check_source_attrs
static options::map< std::string > failure_source_attrs
static std::vector< std::atomic< unsigned int > > * processMultiplicities
clock_type::time_point tEnqueue
void doBlockSizeSetup(ioHandle &input, ioHandle &output)
clock_type::time_point tInotify
void attrset(ioHandle &writeHandle, const std::map< std::string, std::string > &attrs)
bool expandAttrValue(std::string &value)
expand the keywords in value, see Expansion of key words in attributes
void hash_worker(checksum::parallel *sum, blockQueue &blocksToHash, blockQueue &hashedBlocks, exceptionList &exceptions)
class to register the keyword expansion member functions in the map
void kw_state(std::string &value) const
void reader(inputHandler::base::reader &input, blockQueue &freeBlocks, blockQueue &readBlocks, bool mayParallelize, exceptionList &exceptions)
checksum::parallel * parallelSum
static void processQueue(simpleQueue &queue, simpleQueue &resultQueue, timedQueue &delayedRequests)
const singleMap & mapEntry
void doUnthreadedCopy(inputHandler::base::reader &input, std::unique_ptr< outputHandler::base::writer > &writeHandle)
const std::string origSource
static options::map< std::string > success_source_attrs
fileInWork::slotTypes getSlotType() const
static options::map< std::string > process_source_attrs
static void setStatPrinter(void(*f)(std::ostream &))
std::string getBackupSuffix()
static options::container< std::string > logFields
static options::single< double > maxDelayTime
static options::single< bool > setAttributesAfterClose
static statCollector::typed< decltype(tWorkDone - tWorkStart) > tCopyStat
std::exception_ptr front()
static void attrdel(ioHandle &, const std::map< std::string, std::string > &attrs)
static options::container< std::string > append_attrs
static std::function< void(std::ostream &)> & getStatPrinter()
we can't have static functions virtual, so we explicitly use a function to give us the proper print f...
void init(inputHandler::base *InputHandler)
static options::container< std::string > prohibitive_attrs
void kw_inow(std::string &value) const
data block, used to hold the data that are being copied (or checksummed).
void kw_commit(std::string &value) const
std::vector< std::thread > workers
std::unique_ptr< const genericStat > readInitialStat
static options::single< unsigned > maxRetries
static statCollector::typed< decltype(tEnqueue - tInotify) > tPipeStat
const genericStat & getInitialStat() const
static options::map< std::string > start_source_attrs
void removeFileOrDirectory(inputHandler::base *InputHandler, outputHandler::base *OutputHandler)
void writer(std::unique_ptr< outputHandler::base::writer > &writeHandle, blockQueue &blocksToWrite, blockQueue &writtenBlocks, exceptionList &exceptions)
static options::single< bool > syncWrittenFiles
virtual void printResults(std::ostream &hashStream, std::ostream &logStream)
hashCalculator(blockQueue &blocksToHash, blockQueue &hashedBlocks, base *request, bool mayParallelize, exceptionList &exceptions)
waitQueues::simple< blockReadRequest > blockReadRequestQueue
void registerIterator(decltype(filesInWorkIterator) iter)
static options::single< std::string > backupSuffix
static options::single< unsigned > nWriteThreads
static options::single< size_t > userReadBlockSize
static statCollector::typed< decltype(tWorkDone - tInotify) > tTotal2Stat
This class holds info aboput a file that is "in work" in some way.
static std::condition_variable objectCountCondVar
perThreadData * threadData
static void printStats(std::ostream &stream)
class for thread-specific data
static const std::map< std::string, backupModeType > & getBackupModeNameMap()
void checkAttributes(ioHandle &, const std::map< std::string, std::string > &check_source_attr)
static options::single< bool > forceParallelRead
clock_type::duration getAdvisedDelay() const
returns the advised delay
void kw_prefix(std::string &value) const
static std::atomic< unsigned int > nConcurrentProcesses
virtual void process(perThreadData &threadData)
std::pair< std::string, std::string > singleMap
void kw_now(std::string &value) const
blockReadRequest(size_t aSize, off_t aOffset)
outputHandler::base * OutputHandler
clock_type::time_point tWorkDone
static unsigned objectCount
void kw_finishtime(std::string &value) const
~hashCalculator() noexcept(false)
static options::single< std::regex > destinationPrefixRegex
static std::map< std::string, clock_type::duration > advisoryWaitMap
virtual ~base() noexcept(false)
class as base for inputHandler::base::reader and outputHandler::base::writer containing the common pa...
static options::withAction< options::single< std::string > > backupModeName
static options::single< std::regex > appendableFiles
std::vector< std::thread > workers
static std::function< void(std::ostream &)> statPrinter
static bool adviseDelay(clock_type::duration dt, const std::string &suffix)
update the advised delay in the map.
static std::mutex objectCountMutex
void writeWorker(std::unique_ptr< outputHandler::base::writer > &writeHandle, blockQueue &blocksToWrite, blockQueue &writtenBlocks, exceptionList &exceptions)
void kw_version(std::string &value) const
void readWorker(inputHandler::base::reader &input, blockReadRequestQueue &blockRequests, blockQueue &freeBlocks, blockQueue &readBlocks, exceptionList &exceptions)
void addExpectedChecksumResult(const std::string &checkSumType, const std::string &expectedValue)
static options::single< bool > ignoreExisting
static bool checkForInstances()
const std::string destination
const std::string & getSource() const
static clock_type::time_point tProgramStart
base(inputHandler::base *InputHandler, const std::string &aSource, const std::string &aDestination, std::unique_ptr< const genericStat > &aStat, const singleMap &aMapEntry, bool remove, clock_type::time_point timestamp)
constructor for copy,link and remove requests.
static options::single< std::string > sparse
friend std::ostream & operator<<(std::ostream &out, const base &request)
std::list< checksum::base * > checkSums
static options::single< unsigned > nSumThreads
void doThreadedCopy(inputHandler::base::reader &input, std::unique_ptr< outputHandler::base::writer > &writeHandle)
static options::map< std::string > linkBaseMap
static std::map< std::string, void(base::*)(std::string &) const > & keywordMap()
static options::single< bool > changeAttrsOnIgnoreExisting
static options::single< size_t > minMemoryBlockSize