00001 #ifndef PROCESSOR_H_
00002 #define PROCESSOR_H_
00003
00004 #include <arc/Logger.h>
00005
00006 #include "DTR.h"
00007
00008 namespace DataStaging {
00009
00011
00016 class Processor: public DTRCallback {
00017
00018 private:
00019
00021 Processor(const Processor&);
00023 Processor& operator=(const Processor&);
00024
00026 class ThreadArgument {
00027 public:
00028 Processor* proc;
00029 DTR_ptr dtr;
00030 ThreadArgument(Processor* proc_, DTR_ptr dtr_):proc(proc_),dtr(dtr_) { };
00031 };
00032
00034 class BulkThreadArgument {
00035 public:
00036 Processor* proc;
00037 std::list<DTR_ptr> dtrs;
00038 BulkThreadArgument(Processor* proc_, const std::list<DTR_ptr>& dtrs_):proc(proc_),dtrs(dtrs_) { };
00039 };
00040
00042 Arc::SimpleCounter thread_count;
00043
00048 std::list<DTR_ptr> bulk_list;
00049
00050
00052 static void DTRCheckCache(void* arg);
00054 static void DTRResolve(void* arg);
00056 static void DTRBulkResolve(void* arg);
00058 static void DTRQueryReplica(void* arg);
00060 static void DTRBulkQueryReplica(void* arg);
00062 static void DTRPreClean(void *arg);
00064 static void DTRStagePrepare(void* arg);
00066 static void DTRReleaseRequest(void* arg);
00068 static void DTRRegisterReplica(void* arg);
00070 static void DTRProcessCache(void* arg);
00071
00072 public:
00073
00075 Processor() {};
00077 ~Processor() { stop(); };
00078
00080
00085 void start(void);
00086
00088
00092 void stop(void);
00093
00095
00102 virtual void receiveDTR(DTR_ptr dtr);
00103 };
00104
00105
00106 }
00107
00108
00109 #endif