  | 
  
    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