ewmscp  ..
copyRequest.h
Go to the documentation of this file.
1 #ifndef __copyRequest_h__
2 #define __copyRequest_h__
3 
4 /*
5  ewmscp: copy program with extended functionality
6  Copyright (C) 2018 Juergen Hannappel
7 
8  This program is free software: you can redistribute it and/or modify
9  it under the terms of the GNU General Public License as published by
10  the Free Software Foundation, either version 3 of the License, or
11  (at your option) any later version.
12 
13  This program is distributed in the hope that it will be useful,
14  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  GNU General Public License for more details.
17 
18  You should have received a copy of the GNU General Public License
19  along with this program. If not, see <https://www.gnu.org/licenses/>.
20 */
21 
22 #include <atomic>
23 #include <chrono>
24 #include <condition_variable>
25 #include <deque>
26 #include <iomanip>
27 #include <iostream>
28 #include <list>
29 #include <mutex>
30 #include <regex>
31 #include <sstream>
32 #include <system_error>
33 #include <thread>
34 #include <unistd.h>
35 #include <unordered_set>
36 #include <vector>
37 
38 #ifdef WithMagic
39 #include <magic.h>
40 #endif
41 
42 #include "block.h"
43 #include "copyRequestTypes.h"
44 #include "ewmscp.h"
45 #include "fileInWork.h"
46 #include "throttle.h"
47 #include <Options.h>
48 #include <OptionsRegex.h>
49 #include <statCollector.h>
50 #include <waitQueues.h>
51 
52 typedef std::pair<std::string, std::string> singleMap;
53 
54 namespace copyRequest {
55  enum class backupModeType {
56  none,
57  before,
58  during,
59  after,
60  remove
61  };
62 
64 
67  class perThreadData {
68  public:
72  #ifdef WithMagic
73  magic_t magicCookie;
74  #endif
75  perThreadData();
76  };
77 
78 
79  class exceptionList {
80  mutable std::mutex listMutex;
81  std::forward_list<std::exception_ptr> list;
82  public:
83  void add(std::exception_ptr e);
84  bool empty() const;
85  size_t size() const;
86  std::exception_ptr front();
87  };
88 
89 
99  class base {
100  friend class fileInWork;
101  private:
102  static const std::map<std::string, backupModeType>& getBackupModeNameMap();
103 
104 
123  public:
126  private:
134  #ifdef WithMagic
135  static options::single<bool> doMagic;
136  #endif
137 
138  public:
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;
145  void kw_version(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;
153  void kw_finishtime(std::string& value) const;
154  #ifdef WithMagic
155  void kw_magic(std::string& value) const;
156  #endif
157 
159  static std::map<std::string, void (base::*)(std::string&) const>& keywordMap();
161  class registerme {
162  public:
163  registerme(const std::string& keyword,
164  void (base::*fkt)(std::string&) const) {
165  keywordMap()[keyword] = fkt;
166  }
167  };
168  private:
169 
170  bool expandAttrValue(std::string& value);
171  void attrset(ioHandle& writeHandle,
172  const std::map<std::string, std::string>& attrs);
173  static void attrdel(ioHandle&,
174  const std::map<std::string, std::string>& attrs);
176  const std::map<std::string, std::string>& check_source_attr);
177 
178 
180  blockQueue& blocksToHash,
181  blockQueue& hashedBlocks,
182  exceptionList& exceptions);
183  void hasher(blockQueue& blocksToHash,
184  blockQueue& hashedBlocks,
185  exceptionList& exceptions);
187  std::vector<std::thread> workers;
190  public:
191  hashCalculator(blockQueue& blocksToHash,
192  blockQueue& hashedBlocks,
193  base* request,
194  bool mayParallelize,
195  exceptionList& exceptions);
196  ~hashCalculator() noexcept(false);
197  bool joinable() const;
198  bool parallelized() const;
199  };
200  #ifdef WithMagic
201  void innerMagic(const block& b);
202  void magician(blockQueue& inputQueue,
204  exceptionList& exceptions);
205  class magicCalculator {
206  std::thread worker;
208  public:
209  magicCalculator(blockQueue& inputQueue,
210  blockQueue& aOutputQueue,
211  base* request,
212  exceptionList& exceptions);
213  ~magicCalculator() noexcept(false);
214  bool joinable() const;
215  };
216  #endif
218  public:
219  size_t size;
220  off_t offset;
221  blockReadRequest(size_t aSize, off_t aOffset): size(aSize), offset(aOffset) {};
222  };
224 
226  blockReadRequestQueue& blockRequests,
227  blockQueue& freeBlocks,
228  blockQueue& readBlocks,
229  exceptionList& exceptions);
230 
232  blockQueue& freeBlocks,
233  blockQueue& readBlocks,
234  bool mayParallelize,
235  exceptionList& exceptions);
236  void writer(std::unique_ptr<outputHandler::base::writer>& writeHandle,
237  blockQueue& blocksToWrite,
238  blockQueue& writtenBlocks,
239  exceptionList& exceptions);
240  void writeWorker(std::unique_ptr<outputHandler::base::writer>& writeHandle,
241  blockQueue& blocksToWrite,
242  blockQueue& writtenBlocks,
243  exceptionList& exceptions);
244  class writeActor {
245  std::vector<std::thread> workers;
247  public:
248  writeActor(std::unique_ptr<outputHandler::base::writer>& writeHandle,
249  blockQueue& blocksToWrite,
250  blockQueue& writtenBlocks,
251  bool mayParallelize,
252  base* request,
253  exceptionList& exceptions);
254  ~writeActor() noexcept(false);
255  bool joinable() const;
256  };
257 
258  void doThreadedCopy(inputHandler::base::reader& input, std::unique_ptr<outputHandler::base::writer>& writeHandle);
259  void doUnthreadedCopy(inputHandler::base::reader& input, std::unique_ptr<outputHandler::base::writer>& writeHandle);
260  void doBlockSizeSetup(ioHandle &input, ioHandle &output);
261 
262 
263  bool makeSymLink(inputHandler::base* InputHandler,
264  outputHandler::base* OutputHandler);
265  void removeFileOrDirectory(inputHandler::base* InputHandler,
266  outputHandler::base* OutputHandler);
267 
268 
269  std::string getBackupSuffix();
270  protected:
271  std::unique_ptr<const genericStat> readInitialStat;
272  public:
273  const genericStat& getInitialStat() const {
274  return *readInitialStat;
275  }
276  protected:
277  std::list<checksum::base*> checkSums;
278  #ifdef WithMagic
279  std::string fileMagic;
280  #endif
283  std::string errorMessage;
284  const std::string source;
285  const std::string destination;
286  const std::string moveSource;
287  const std::string origSource;
289  std::string suffix;
290  std::string prefix;
291  public:
292  const std::string& getSource() const {
293  return source;
294  };
299  protected:
301 
302 
303  clock_type::time_point tInotify;
304  clock_type::time_point tEnqueue;
305  clock_type::time_point tWorkStart;
306  clock_type::time_point tWorkDone;
307 
314  static statCollector::typed < decltype(readInitialStat->size) > bytesStat;
316  static clock_type::time_point tProgramStart;
317 
318  static std::atomic<unsigned int> nConcurrentProcesses;
319  public:
321  static std::vector<std::atomic<unsigned int>>* processMultiplicities;
322  protected:
323  unsigned retries;
324  public:
325  static bool adviseDelay(clock_type::duration dt, const std::string& suffix);
326  protected:
327  void adviseDelay(clock_type::duration dt = clock_type::duration::zero());
329 
330  static std::function<void(std::ostream&)> statPrinter;
331  public:
332  static void printStats(std::ostream& stream);
333  static void resetStats();
334 
335  private:
336  static std::map<std::string, clock_type::duration> advisoryWaitMap;
337  static std::mutex advisoryWaitMapMutex;
338  public:
339  clock_type::duration getAdvisedDelay() const;
340 
341  decltype(fileInWork::filesInWork.begin()) filesInWorkIterator = fileInWork::filesInWork.end();
342  void registerIterator(decltype(filesInWorkIterator) iter) {
343  filesInWorkIterator = iter;
344  }
346  return filesInWorkIterator;
347  }
352  }
355  }
358  }
359  throw std::logic_error("no slot type detected");
360  }
361 
362  void changeRequestType(stateBitType newType);
363 
364 
365  static bool retry(std::unique_ptr<base>& request,
366  timedQueue& delayedRequests);
367  static void waitForAllInstancesGone();
368  static bool checkForInstances();
369  private:
370  static std::mutex objectCountMutex;
371  static unsigned objectCount;
372  static std::condition_variable objectCountCondVar;
373  void init(inputHandler::base* InputHandler);
374  virtual bool compare(const base& rhs) const {
375  return readInitialStat->size > rhs.readInitialStat->size;
376  }
377  public:
378 
379  base(inputHandler::base* InputHandler,
380  const std::string& aSource,
381  const std::string& aDestination,
382  std::unique_ptr<const genericStat>& aStat,
383  const singleMap& aMapEntry,
384  bool remove,
385  clock_type::time_point timestamp);
386  base(inputHandler::base* InputHandler,
387  const std::string& aSource,
388  const std::string& aDestination,
389  const singleMap& aMapEntry,
390  bool remove,
391  clock_type::time_point timestamp);
392  base(inputHandler::base* InputHandler,
393  const std::string& aSource,
394  const std::string& aDestination,
395  const std::string& aMoveSource,
396  const std::string& aOrigSource,
397  const singleMap& aMapEntry,
398  clock_type::time_point timestamp);
399  virtual ~base() noexcept(false);
400  virtual void process(perThreadData& threadData);
401  virtual void printResults(std::ostream& hashStream,
402  std::ostream& logStream);
403  static std::function<void(std::ostream&)>& getStatPrinter();
404  static void setStatPrinter(void(*f)(std::ostream&));
406  public:
407  bool operator () (const base* lhs,
408  const base* rhs) const {
409  if (lhs == nullptr) {
410  return false;
411  }
412  if (rhs == nullptr) {
413  return true;
414  }
415  return lhs->compare(*rhs);
416  }
417  };
418  static void processQueue(simpleQueue& queue,
419  simpleQueue& resultQueue,
420  timedQueue& delayedRequests);
421  const std::string& getSuffix() const {
422  return (suffix);
423  }
424  static void getSuffix(const std::string& path,
425  std::string& suffix);
426  void addExpectedChecksumResult(const std::string& checkSumType,
427  const std::string& expectedValue);
428 
429  friend std::ostream& operator<<(std::ostream& out, const base& request);
430  };
431 }; // end of namespace copyRequest
432 #endif
copyRequest::base::userWriteBlockSize
static options::single< size_t > userWriteBlockSize
Definition: copyRequest.h:294
fileInWork.h
copyRequest::fileInWork::filesInWork
static std::map< std::string, fileInWork > filesInWork
maps file names to filesInWork objects
Definition: fileInWork.h:30
copyRequest::base::tWaitStat
static statCollector::typed< decltype(tWorkStart - tEnqueue) > tWaitStat
Definition: copyRequest.h:312
copyRequest::fileInWork::slotTypes::copy
@ copy
block.h
copyRequest::backupModeType::during
@ during
copyRequest::base::blockReadRequest::offset
off_t offset
Definition: copyRequest.h:220
copyRequest::base::moveSource
const std::string moveSource
Definition: copyRequest.h:286
copyRequest::fileInWork::slotTypes::move
@ move
options::single< unsigned >
copyRequest::base::registerme::registerme
registerme(const std::string &keyword, void(base::*fkt)(std::string &) const)
Definition: copyRequest.h:163
copyRequest::exceptionList
Definition: copyRequest.h:79
copyRequest::base::pointerCompare
Definition: copyRequest.h:405
copyRequest::stateBitType
stateBitType
Definition: copyRequestTypes.h:50
copyRequest::perThreadData::InputHandler
inputHandler::base * InputHandler
Definition: copyRequest.h:69
copyRequest::base::nReadThreads
static options::single< unsigned > nReadThreads
Definition: copyRequest.h:128
copyRequest::base::getFilesInWorkIteraror
decltype(filesInWorkIterator) getFilesInWorkIteraror() const
Definition: copyRequest.h:345
copyRequest::backupModeType::before
@ before
copyRequest::backupModeType::after
@ after
copyRequest::base::kw_reason
void kw_reason(std::string &value) const
Definition: copyRequest.cpp:312
inputHandler
Definition: inputHandler.h:29
copyRequest::base::kw_size
void kw_size(std::string &value) const
Definition: copyRequest.cpp:266
waitQueues.h
copyRequest::base::errorMessage
std::string errorMessage
Definition: copyRequest.h:283
options::single< bool >
class specialisation for options of type bool
Definition: Options.h:595
copyRequest::stateBitType::fileToBeCopied
@ fileToBeCopied
copyRequest::blockQueue
waitQueues::simple< block > blockQueue
Definition: copyRequest.h:63
copyRequest::base::speedStat
static statCollector::typed< double > speedStat
Definition: copyRequest.h:315
copyRequest::base::tEnqueueStat
static statCollector::typed< copyRequest::clock_type::duration > tEnqueueStat
Definition: copyRequest.h:320
waitQueues::timed< copyRequest::base >
copyRequest::base::perFileThreads
static options::single< bool > perFileThreads
Definition: copyRequest.h:125
genericStat
generic stat abstraction class Used to abstract the variants of the stat structure.
Definition: genericStat.h:12
copyRequest::base::tTotalStat
static statCollector::typed< decltype(tWorkDone - tInotify) > tTotalStat
Definition: copyRequest.h:308
copyRequest::base::compare
virtual bool compare(const base &rhs) const
Definition: copyRequest.h:374
copyRequest::base::sourcePrefixRegex
static options::single< std::regex > sourcePrefixRegex
Definition: copyRequest.h:132
copyRequestTypes.h
copyRequest::base::kw_mtime
void kw_mtime(std::string &value) const
Definition: copyRequest.cpp:275
copyRequest::base::success_dest_attrs
static options::map< std::string > success_dest_attrs
Definition: copyRequest.h:110
copyRequest::base::getSuffix
const std::string & getSuffix() const
Definition: copyRequest.h:421
copyRequest::base::prefix
std::string prefix
Definition: copyRequest.h:290
copyRequest::base::maxMemoryBlockSize
static options::single< size_t > maxMemoryBlockSize
Definition: copyRequest.h:297
copyRequest::base::writeActor::outputQueue
blockQueue & outputQueue
Definition: copyRequest.h:246
copyRequest::base::backupMode
static backupModeType backupMode
Definition: copyRequest.h:120
copyRequest::exceptionList::list
std::forward_list< std::exception_ptr > list
Definition: copyRequest.h:81
options::single< std::regex >
Definition: OptionsRegex.h:8
copyRequest::base::hasher
void hasher(blockQueue &blocksToHash, blockQueue &hashedBlocks, exceptionList &exceptions)
Definition: copyRequest.cpp:738
copyRequest::base::tInotifyStat
static statCollector::typed< decltype(tWorkDone - tInotify) > tInotifyStat
Definition: copyRequest.h:310
copyRequest::base::makeSymLink
bool makeSymLink(inputHandler::base *InputHandler, outputHandler::base *OutputHandler)
copyRequest::base::advisoryWaitMapMutex
static std::mutex advisoryWaitMapMutex
Definition: copyRequest.h:337
copyRequest::base::waitForAllInstancesGone
static void waitForAllInstancesGone()
Definition: copyRequest.cpp:1421
copyRequest::base
class for copy requests.
Definition: copyRequest.h:99
copyRequest::exceptionList::add
void add(std::exception_ptr e)
Definition: copyRequest.cpp:185
copyRequest::base::bytesStat
static statCollector::typed< decltype(readInitialStat->size) > bytesStat
Definition: copyRequest.h:314
copyRequest::base::filesInWorkIterator
decltype(fileInWork::filesInWork.begin()) filesInWorkIterator
Definition: copyRequest.h:341
copyRequest::base::hashCalculator::parallelized
bool parallelized() const
Definition: copyRequest.cpp:716
copyRequest::base::retry
static bool retry(std::unique_ptr< base > &request, timedQueue &delayedRequests)
Definition: copyRequest.cpp:1866
copyRequest::base::tWorkStart
clock_type::time_point tWorkStart
Definition: copyRequest.h:305
copyRequest::base::changeRequestType
void changeRequestType(stateBitType newType)
Definition: copyRequest.cpp:1072
copyRequest::base::check_source_attrs
static options::map< std::string > check_source_attrs
Definition: copyRequest.h:109
copyRequest::base::hashCalculator
Definition: copyRequest.h:186
copyRequest::base::failure_source_attrs
static options::map< std::string > failure_source_attrs
Definition: copyRequest.h:106
copyRequest::base::processMultiplicities
static std::vector< std::atomic< unsigned int > > * processMultiplicities
Definition: copyRequest.h:321
outputHandler
Definition: ioHandle.h:9
copyRequest::base::tEnqueue
clock_type::time_point tEnqueue
Definition: copyRequest.h:304
copyRequest::backupModeType::none
@ none
copyRequest::base::doBlockSizeSetup
void doBlockSizeSetup(ioHandle &input, ioHandle &output)
Definition: copyRequest.cpp:1404
copyRequest::base::tInotify
clock_type::time_point tInotify
Definition: copyRequest.h:303
copyRequest::base::attrset
void attrset(ioHandle &writeHandle, const std::map< std::string, std::string > &attrs)
Definition: copyRequest.cpp:446
copyRequest::base::expandAttrValue
bool expandAttrValue(std::string &value)
expand the keywords in value, see Expansion of key words in attributes
Definition: copyRequest.cpp:365
copyRequest::base::hash_worker
void hash_worker(checksum::parallel *sum, blockQueue &blocksToHash, blockQueue &hashedBlocks, exceptionList &exceptions)
Definition: copyRequest.cpp:720
copyRequest::stateType
Definition: copyRequestTypes.h:66
copyRequest::base::registerme
class to register the keyword expansion member functions in the map
Definition: copyRequest.h:161
copyRequest::base::kw_state
void kw_state(std::string &value) const
Definition: copyRequest.cpp:321
Options.h
copyRequest::base::reader
void reader(inputHandler::base::reader &input, blockQueue &freeBlocks, blockQueue &readBlocks, bool mayParallelize, exceptionList &exceptions)
Definition: copyRequest.cpp:530
copyRequest::base::hashCalculator::parallelSum
checksum::parallel * parallelSum
Definition: copyRequest.h:188
copyRequest::base::processQueue
static void processQueue(simpleQueue &queue, simpleQueue &resultQueue, timedQueue &delayedRequests)
Definition: copyRequest.cpp:1895
copyRequest::stateBitType::fileToBeRemoved
@ fileToBeRemoved
copyRequest::base::mapEntry
const singleMap & mapEntry
Definition: copyRequest.h:288
copyRequest::fileInWork::slotTypes::unlink
@ unlink
options::map< std::string >
copyRequest::base::doUnthreadedCopy
void doUnthreadedCopy(inputHandler::base::reader &input, std::unique_ptr< outputHandler::base::writer > &writeHandle)
Definition: copyRequest.cpp:868
copyRequest::base::origSource
const std::string origSource
Definition: copyRequest.h:287
copyRequest::base::success_source_attrs
static options::map< std::string > success_source_attrs
Definition: copyRequest.h:105
copyRequest::base::getSlotType
fileInWork::slotTypes getSlotType() const
Definition: copyRequest.h:348
copyRequest::base::process_source_attrs
static options::map< std::string > process_source_attrs
Definition: copyRequest.h:107
copyRequest::base::setStatPrinter
static void setStatPrinter(void(*f)(std::ostream &))
Definition: copyRequest.cpp:1819
copyRequest::base::getBackupSuffix
std::string getBackupSuffix()
Definition: copyRequest.cpp:1077
copyRequest::base::logFields
static options::container< std::string > logFields
Definition: copyRequest.h:131
copyRequest::stateBitType::fileToBeRenamed
@ fileToBeRenamed
copyRequest::exceptionList::size
size_t size() const
Definition: copyRequest.cpp:193
copyRequest::base::maxDelayTime
static options::single< double > maxDelayTime
Definition: copyRequest.h:328
copyRequest::base::setAttributesAfterClose
static options::single< bool > setAttributesAfterClose
Definition: copyRequest.h:124
copyRequest::base::tCopyStat
static statCollector::typed< decltype(tWorkDone - tWorkStart) > tCopyStat
Definition: copyRequest.h:313
copyRequest::exceptionList::front
std::exception_ptr front()
Definition: copyRequest.cpp:197
copyRequest::base::attrdel
static void attrdel(ioHandle &, const std::map< std::string, std::string > &attrs)
Definition: copyRequest.cpp:481
copyRequest::base::append_attrs
static options::container< std::string > append_attrs
Definition: copyRequest.h:112
options::container< std::string >
outputHandler::base
Definition: outputHandler.h:17
copyRequest::backupModeType
backupModeType
Definition: copyRequest.h:55
copyRequest::base::getStatPrinter
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...
Definition: copyRequest.cpp:1816
copyRequest::base::init
void init(inputHandler::base *InputHandler)
Definition: copyRequest.cpp:1445
copyRequest::base::prohibitive_attrs
static options::container< std::string > prohibitive_attrs
Definition: copyRequest.h:111
copyRequest::base::kw_inow
void kw_inow(std::string &value) const
Definition: copyRequest.cpp:283
block
data block, used to hold the data that are being copied (or checksummed).
Definition: block.h:7
copyRequest::base::suffix
std::string suffix
Definition: copyRequest.h:289
copyRequest::base::kw_commit
void kw_commit(std::string &value) const
Definition: copyRequest.cpp:298
copyRequest::base::writeActor::workers
std::vector< std::thread > workers
Definition: copyRequest.h:245
copyRequest::base::readInitialStat
std::unique_ptr< const genericStat > readInitialStat
Definition: copyRequest.h:271
copyRequest::base::maxRetries
static options::single< unsigned > maxRetries
Definition: copyRequest.h:116
copyRequest::base::tPipeStat
static statCollector::typed< decltype(tEnqueue - tInotify) > tPipeStat
Definition: copyRequest.h:311
copyRequest::base::getInitialStat
const genericStat & getInitialStat() const
Definition: copyRequest.h:273
copyRequest::base::start_source_attrs
static options::map< std::string > start_source_attrs
Definition: copyRequest.h:108
copyRequest::base::removeFileOrDirectory
void removeFileOrDirectory(inputHandler::base *InputHandler, outputHandler::base *OutputHandler)
Definition: copyRequest.cpp:914
copyRequest::base::writer
void writer(std::unique_ptr< outputHandler::base::writer > &writeHandle, blockQueue &blocksToWrite, blockQueue &writtenBlocks, exceptionList &exceptions)
Definition: copyRequest.cpp:592
copyRequest::base::syncWrittenFiles
static options::single< bool > syncWrittenFiles
Definition: copyRequest.h:122
copyRequest::base::printResults
virtual void printResults(std::ostream &hashStream, std::ostream &logStream)
Definition: copyRequest.cpp:1618
copyRequest::base::hashCalculator::hashCalculator
hashCalculator(blockQueue &blocksToHash, blockQueue &hashedBlocks, base *request, bool mayParallelize, exceptionList &exceptions)
Definition: copyRequest.cpp:669
copyRequest::base::blockReadRequestQueue
waitQueues::simple< blockReadRequest > blockReadRequestQueue
Definition: copyRequest.h:223
copyRequest::base::registerIterator
void registerIterator(decltype(filesInWorkIterator) iter)
Definition: copyRequest.h:342
copyRequest::base::backupSuffix
static options::single< std::string > backupSuffix
Definition: copyRequest.h:121
statCollector.h
copyRequest::base::nWriteThreads
static options::single< unsigned > nWriteThreads
Definition: copyRequest.h:130
copyRequest::base::userReadBlockSize
static options::single< size_t > userReadBlockSize
Definition: copyRequest.h:296
copyRequest::base::tTotal2Stat
static statCollector::typed< decltype(tWorkDone - tInotify) > tTotal2Stat
Definition: copyRequest.h:309
copyRequest::base::blockReadRequest::size
size_t size
Definition: copyRequest.h:219
copyRequest::fileInWork
This class holds info aboput a file that is "in work" in some way.
Definition: fileInWork.h:21
copyRequest::base::retries
unsigned retries
Definition: copyRequest.h:323
copyRequest::base::objectCountCondVar
static std::condition_variable objectCountCondVar
Definition: copyRequest.h:372
copyRequest::exceptionList::listMutex
std::mutex listMutex
Definition: copyRequest.h:80
copyRequest::base::threadData
perThreadData * threadData
Definition: copyRequest.h:281
copyRequest::base::printStats
static void printStats(std::ostream &stream)
Definition: copyRequest.cpp:1822
copyRequest::perThreadData
class for thread-specific data
Definition: copyRequest.h:67
copyRequest::base::state
stateType state
Definition: copyRequest.h:282
copyRequest::base::getBackupModeNameMap
static const std::map< std::string, backupModeType > & getBackupModeNameMap()
Definition: copyRequest.cpp:235
copyRequest::base::checkAttributes
void checkAttributes(ioHandle &, const std::map< std::string, std::string > &check_source_attr)
Definition: copyRequest.cpp:486
checksum::parallel
Definition: checksumBase.h:82
copyRequest::exceptionList::empty
bool empty() const
Definition: copyRequest.cpp:189
statCollector::typed
Definition: statCollector.h:32
copyRequest::perThreadData::freeBlocks
blockQueue freeBlocks
Definition: copyRequest.h:71
throttle.h
inputHandler::base
class for handling input This is the (abstract) base class for handling input, both reading a file vi...
Definition: inputHandler.h:35
copyRequest::base::forceParallelRead
static options::single< bool > forceParallelRead
Definition: copyRequest.h:129
copyRequest::base::getAdvisedDelay
clock_type::duration getAdvisedDelay() const
returns the advised delay
Definition: copyRequest.cpp:1059
copyRequest::base::kw_prefix
void kw_prefix(std::string &value) const
Definition: copyRequest.cpp:303
copyRequest::base::nConcurrentProcesses
static std::atomic< unsigned int > nConcurrentProcesses
Definition: copyRequest.h:318
copyRequest::stateBitType::linkToBeMade
@ linkToBeMade
copyRequest::perThreadData::perThreadData
perThreadData()
Definition: copyRequest.cpp:173
copyRequest::base::process
virtual void process(perThreadData &threadData)
Definition: copyRequest.cpp:1109
waitQueues::simple< block >
singleMap
std::pair< std::string, std::string > singleMap
Definition: copyRequest.h:52
copyRequest::base::source
const std::string source
Definition: copyRequest.h:284
copyRequest::base::kw_now
void kw_now(std::string &value) const
Definition: copyRequest.cpp:288
copyRequest::base::blockReadRequest::blockReadRequest
blockReadRequest(size_t aSize, off_t aOffset)
Definition: copyRequest.h:221
copyRequest::perThreadData::OutputHandler
outputHandler::base * OutputHandler
Definition: copyRequest.h:70
copyRequest::base::tWorkDone
clock_type::time_point tWorkDone
Definition: copyRequest.h:306
copyRequest::base::objectCount
static unsigned objectCount
Definition: copyRequest.h:371
copyRequest::base::kw_finishtime
void kw_finishtime(std::string &value) const
Definition: copyRequest.cpp:349
copyRequest::base::hashCalculator::~hashCalculator
~hashCalculator() noexcept(false)
Definition: copyRequest.cpp:701
copyRequest::base::destinationPrefixRegex
static options::single< std::regex > destinationPrefixRegex
Definition: copyRequest.h:133
copyRequest::base::writeActor
Definition: copyRequest.h:244
copyRequest::base::blockReadRequest
Definition: copyRequest.h:217
copyRequest::base::advisoryWaitMap
static std::map< std::string, clock_type::duration > advisoryWaitMap
Definition: copyRequest.h:336
copyRequest::base::memoryBlockSize
size_t memoryBlockSize
Definition: copyRequest.h:300
copyRequest::base::~base
virtual ~base() noexcept(false)
Definition: copyRequest.cpp:1565
options::withAction
Definition: Options.h:887
ioHandle
class as base for inputHandler::base::reader and outputHandler::base::writer containing the common pa...
Definition: ioHandle.h:15
copyRequest::base::backupModeName
static options::withAction< options::single< std::string > > backupModeName
Definition: copyRequest.h:119
copyRequest::base::appendableFiles
static options::single< std::regex > appendableFiles
Definition: copyRequest.h:113
copyRequest::base::hashCalculator::workers
std::vector< std::thread > workers
Definition: copyRequest.h:187
copyRequest::base::statPrinter
static std::function< void(std::ostream &)> statPrinter
Definition: copyRequest.h:330
copyRequest::base::hashCalculator::joinable
bool joinable() const
Definition: copyRequest.cpp:713
copyRequest::base::adviseDelay
static bool adviseDelay(clock_type::duration dt, const std::string &suffix)
update the advised delay in the map.
Definition: copyRequest.cpp:1011
f
int f(int a, int line)
Definition: cctest.cpp:4
copyRequest::base::objectCountMutex
static std::mutex objectCountMutex
Definition: copyRequest.h:370
copyRequest::base::writeWorker
void writeWorker(std::unique_ptr< outputHandler::base::writer > &writeHandle, blockQueue &blocksToWrite, blockQueue &writtenBlocks, exceptionList &exceptions)
Definition: copyRequest.cpp:610
copyRequest::base::kw_version
void kw_version(std::string &value) const
Definition: copyRequest.cpp:293
copyRequest::base::readWorker
void readWorker(inputHandler::base::reader &input, blockReadRequestQueue &blockRequests, blockQueue &freeBlocks, blockQueue &readBlocks, exceptionList &exceptions)
Definition: copyRequest.cpp:510
copyRequest::fileInWork::slotTypes
slotTypes
Definition: fileInWork.h:23
copyRequest::base::addExpectedChecksumResult
void addExpectedChecksumResult(const std::string &checkSumType, const std::string &expectedValue)
Definition: copyRequest.cpp:1601
copyRequest::base::ignoreExisting
static options::single< bool > ignoreExisting
Definition: copyRequest.h:114
copyRequest
Definition: checksumTestRequestProvider.cpp:25
copyRequest::base::checkForInstances
static bool checkForInstances()
Definition: copyRequest.cpp:1427
copyRequest::base::destination
const std::string destination
Definition: copyRequest.h:285
copyRequest::base::getSource
const std::string & getSource() const
Definition: copyRequest.h:292
copyRequest::base::tProgramStart
static clock_type::time_point tProgramStart
Definition: copyRequest.h:316
copyRequest::base::base
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.
Definition: copyRequest.cpp:1517
inputHandler::base::reader
(abstract) class for reading a file An instance of this class is used to read data from a file vie th...
Definition: inputHandler.h:72
copyRequest::base::hashCalculator::outputQueue
blockQueue & outputQueue
Definition: copyRequest.h:189
copyRequest::base::resetStats
static void resetStats()
Definition: copyRequest.cpp:1852
ewmscp.h
copyRequest::base::sparse
static options::single< std::string > sparse
Definition: copyRequest.h:118
copyRequest::base::operator<<
friend std::ostream & operator<<(std::ostream &out, const base &request)
Definition: copyRequest.cpp:1952
copyRequest::base::checkSums
std::list< checksum::base * > checkSums
Definition: copyRequest.h:277
copyRequest::base::nSumThreads
static options::single< unsigned > nSumThreads
Definition: copyRequest.h:127
OptionsRegex.h
copyRequest::base::doThreadedCopy
void doThreadedCopy(inputHandler::base::reader &input, std::unique_ptr< outputHandler::base::writer > &writeHandle)
Definition: copyRequest.cpp:813
copyRequest::base::linkBaseMap
static options::map< std::string > linkBaseMap
Definition: copyRequest.h:117
copyRequest::base::keywordMap
static std::map< std::string, void(base::*)(std::string &) const > & keywordMap()
Definition: copyRequest.cpp:246
copyRequest::base::changeAttrsOnIgnoreExisting
static options::single< bool > changeAttrsOnIgnoreExisting
Definition: copyRequest.h:115
copyRequest::backupModeType::remove
@ remove
copyRequest::base::minMemoryBlockSize
static options::single< size_t > minMemoryBlockSize
Definition: copyRequest.h:298