ewmscp  ..
fileInWork.h
Go to the documentation of this file.
1 #ifndef __fileInWork_h__
2 #define __fileInWork_h__
3 #include "copyRequestTypes.h"
4 #include <list>
5 #include <memory>
6 #include <iostream>
7 #include "timer.h"
8 
9 namespace copyRequest {
10  class base;
11 
12 
13 
21  class fileInWork : public std::list<std::unique_ptr<base>> {
22  public:
23  enum class slotTypes { none, copy, move, unlink, nTypes };
24 
25  private:
26  clock_type::time_point earliestProcessTime;
27  clock_type::duration waitTime;
29  public:
30  static std::map<std::string, fileInWork> filesInWork;
31  static std::mutex filesInWorkMutex;
32  static std::condition_variable cv;
33 
34 
36  protected:
37 
39  class lockuser {
40  protected:
41  std::unique_lock<decltype(filesInWorkMutex)> lock;
42  decltype(filesInWork)::iterator iter;
43  lockuser(decltype(iter) Iter) : lock(filesInWorkMutex), iter(Iter) {
44  }
46  }
47  ~lockuser() = default;
48 
49  public:
50  bool empty() const {
51  return iter->second.empty();
52  }
53  };
54  public:
55  fileInWork(clock_type::time_point earliest):
56  earliestProcessTime(earliest),
57  waitTime(clock_type::duration::zero()),
59  }
61  cv.notify_all();
62  }
63  void setWaitTime(clock_type::duration aWaitTime) {
64  waitTime = aWaitTime;
65  }
66  void updateExecTime(clock_type::time_point start) {
68  }
69  clock_type::time_point getEarliestprocessTime() const {
70  return earliestProcessTime;
71  }
72 
73  static void waitForAllInstancesGone();
74 
79  class inserter: public lockuser {
80  public:
81  inserter(const std::string& fileName) {
82  timerInst(create);
83  iter = filesInWork.find(fileName);
84  if (iter == filesInWork.end()) {
85  timerInst(emplace);
86  auto result = filesInWork.emplace(fileName, clock_type::now());
87  iter = result.first;
88  }
89  }
91  void enRegister(std::unique_ptr<copyRequest::base>& request);
92 
94  return iter->second;
95  }
96  void markForQueueing(std::unique_ptr<copyRequest::base>& request);
97  };
98 
103  class eraser: protected lockuser {
104  public:
105  eraser(const copyRequest::base& request);
106  std::unique_ptr<copyRequest::base> getNext();
107  };
108 
109  class typeChanger: protected lockuser {
110  public:
111  typeChanger(copyRequest::base& request, stateBitType newType);
112  };
113  };
114 }; // end namespace copyRequest
115 
116 #endif
copyRequest::fileInWork::filesInWork
static std::map< std::string, fileInWork > filesInWork
maps file names to filesInWork objects
Definition: fileInWork.h:30
copyRequest::fileInWork::slotTypes::copy
@ copy
copyRequest::fileInWork::slotTypes::move
@ move
copyRequest::stateBitType
stateBitType
Definition: copyRequestTypes.h:50
copyRequest::fileInWork::lockuser::lockuser
lockuser()
Definition: fileInWork.h:45
copyRequest::fileInWork::slotTypes::none
@ none
copyRequestTypes.h
copyRequest::fileInWork::lockuser::iter
decltype(filesInWork) ::iterator iter
Definition: fileInWork.h:42
copyRequest::fileInWork::fileInWork
fileInWork(clock_type::time_point earliest)
Definition: fileInWork.h:55
copyRequest::fileInWork::getEarliestprocessTime
clock_type::time_point getEarliestprocessTime() const
Definition: fileInWork.h:69
copyRequest::base
class for copy requests.
Definition: copyRequest.h:99
copyRequest::fileInWork::lockuser::lock
std::unique_lock< decltype(filesInWorkMutex)> lock
Definition: fileInWork.h:41
copyRequest::fileInWork::inserter::inserter
inserter(const std::string &fileName)
Definition: fileInWork.h:81
copyRequest::fileInWork::typeChanger::typeChanger
typeChanger(copyRequest::base &request, stateBitType newType)
Definition: fileInWork.cpp:81
copyRequest::backupModeType::none
@ none
copyRequest::fileInWork::lockuser
this class handles the mutex protection of the filesInWork map
Definition: fileInWork.h:39
copyRequest::fileInWork::slotTypes::unlink
@ unlink
copyRequest::fileInWork::earliestProcessTime
clock_type::time_point earliestProcessTime
process at earliest at this time
Definition: fileInWork.h:26
copyRequest::fileInWork::~fileInWork
~fileInWork()
Definition: fileInWork.h:60
copyRequest::fileInWork::slotTypes::nTypes
@ nTypes
copyRequest::clock_type
std::chrono::system_clock clock_type
type for time measurements
Definition: copyRequestTypes.h:46
copyRequest::fileInWork::inserter::enRegister
void enRegister(std::unique_ptr< copyRequest::base > &request)
register a request in the fileInWork list
Definition: fileInWork.cpp:50
throttle::start
static auto start
Definition: throttle.h:10
copyRequest::fileInWork::inserter::getFileInWork
fileInWork & getFileInWork()
Definition: fileInWork.h:93
copyRequest::fileInWork::lockuser::lockuser
lockuser(decltype(iter) Iter)
Definition: fileInWork.h:43
copyRequest::fileInWork::inserter
create a new fileInWork instance in the map.
Definition: fileInWork.h:79
copyRequest::fileInWork::inserter::markForQueueing
void markForQueueing(std::unique_ptr< copyRequest::base > &request)
Definition: fileInWork.cpp:57
timer.h
copyRequest::fileInWork::typeChanger
Definition: fileInWork.h:109
copyRequest::fileInWork::cv
static std::condition_variable cv
needed for signaling that no file is in work anymore
Definition: fileInWork.h:32
copyRequest::fileInWork::eraser::getNext
std::unique_ptr< copyRequest::base > getNext()
Definition: fileInWork.cpp:66
copyRequest::fileInWork
This class holds info aboput a file that is "in work" in some way.
Definition: fileInWork.h:21
copyRequest::fileInWork::lockuser::~lockuser
~lockuser()=default
copyRequest::fileInWork::waitForAllInstancesGone
static void waitForAllInstancesGone()
Definition: fileInWork.cpp:32
copyRequest::fileInWork::queuedRequestType
slotTypes queuedRequestType
Definition: fileInWork.h:28
timerInst
#define timerInst(subfunc)
Definition: timer.h:157
copyRequest::fileInWork::lockuser::empty
bool empty() const
Definition: fileInWork.h:50
copyRequest::fileInWork::getLatestRequestType
slotTypes getLatestRequestType() const
Definition: fileInWork.cpp:41
copyRequest::fileInWork::eraser::eraser
eraser(const copyRequest::base &request)
Definition: fileInWork.cpp:63
copyRequest::fileInWork::updateExecTime
void updateExecTime(clock_type::time_point start)
Definition: fileInWork.h:66
copyRequest::fileInWork::filesInWorkMutex
static std::mutex filesInWorkMutex
protects the filesInWork map
Definition: fileInWork.h:31
copyRequest::fileInWork::waitTime
clock_type::duration waitTime
delay that gets added to now() to calculate earliestProcessTime
Definition: fileInWork.h:27
copyRequest::fileInWork::slotTypes
slotTypes
Definition: fileInWork.h:23
copyRequest
Definition: checksumTestRequestProvider.cpp:25
copyRequest::fileInWork::eraser
class to get copyRequest out of the fileInWork list.
Definition: fileInWork.h:103
copyRequest::fileInWork::setWaitTime
void setWaitTime(clock_type::duration aWaitTime)
Definition: fileInWork.h:63