Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008 #ifndef _DISTROUNDROBIN_H
00009 #define _DISTROUNDROBIN_H
00010
00011 #include "Distributor.h"
00012 #include "ImprovedMap.h"
00013 #include<tr1/unordered_map>
00014
00015 namespace VDRIVE {
00016
00024 class DistRoundRobin : public Distributor {
00025 public:
00031 DistRoundRobin(xercesc::DOMElement* data);
00032
00036 DistRoundRobin(int argc, char** argv);
00037
00043 DistRoundRobin(const DistRoundRobin& orig);
00044
00048 virtual ~DistRoundRobin();
00049
00053 virtual std::list<Disk*>* placeExtent(int64_t virtualVolumeId, int64_t position) ;
00054
00058 virtual void setConfiguration(std::list<Disk*>* disks, int64_t extentsize, int32_t copies);
00059
00063 virtual void setDisks(std::list<Disk*>* disks);
00064
00068 virtual xercesc::DOMElement* toXML(xercesc::DOMDocument* doc) const;
00069
00073 virtual std::list<Disk*>* getDisks() const;
00074
00078 virtual int64_t getExtentsize() const {
00079 return extentsize;
00080 }
00081
00085 virtual int32_t getCopies() const {
00086 return copies;
00087 }
00088
00094 static std::string getXMLRootType() {
00095 return std::string("RoundRobin");
00096 }
00097 private:
00101 int64_t extentsize;
00102
00106 int32_t copies;
00107
00111 bool useHash;
00112
00116 bool useIM;
00117
00121 ImprovedMap* map;
00122
00126 std::tr1::unordered_map<uint64_t, Disk*>* disks;
00127
00131 uint64_t numDisks;
00132
00136 int64_t hashPosition(int64_t position) const;
00137 };
00138 }
00139 #endif
00140