ARC SDK
Processor.h
1 #ifndef PROCESSOR_H_
2 #define PROCESSOR_H_
3 
4 #include <arc/Logger.h>
5 
6 #include "DTR.h"
7 
8 namespace DataStaging {
9 
11 
18  class Processor: public DTRCallback {
19 
20  private:
21 
23  Processor(const Processor&);
25  Processor& operator=(const Processor&);
26 
28  class ThreadArgument {
29  public:
30  Processor* proc;
31  DTR_ptr dtr;
32  ThreadArgument(Processor* proc_, DTR_ptr dtr_):proc(proc_),dtr(dtr_) { };
33  };
34 
36  class BulkThreadArgument {
37  public:
38  Processor* proc;
39  std::list<DTR_ptr> dtrs;
40  BulkThreadArgument(Processor* proc_, const std::list<DTR_ptr>& dtrs_):proc(proc_),dtrs(dtrs_) { };
41  };
42 
44  Arc::SimpleCounter thread_count;
45 
50  std::list<DTR_ptr> bulk_list;
51 
52  /* Thread methods which deal with each state */
54  static void DTRCheckCache(void* arg);
56  static void DTRResolve(void* arg);
58  static void DTRBulkResolve(void* arg);
60  static void DTRQueryReplica(void* arg);
62  static void DTRBulkQueryReplica(void* arg);
64  static void DTRPreClean(void *arg);
66  static void DTRStagePrepare(void* arg);
68  static void DTRReleaseRequest(void* arg);
70  static void DTRRegisterReplica(void* arg);
72  static void DTRProcessCache(void* arg);
73 
74  public:
75 
77  Processor() {};
79  ~Processor() { stop(); };
80 
82 
87  void start(void);
88 
90 
94  void stop(void);
95 
97 
104  virtual void receiveDTR(DTR_ptr dtr);
105  };
106 
107 
108 } // namespace DataStaging
109 
110 
111 #endif /* PROCESSOR_H_ */