Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008 #ifndef _DISTNEARESTNEIGHBOUR_H
00009 #define _DISTNEARESTNEIGHBOUR_H
00010
00011 #include"Distributor.h"
00012 #include"ImprovedMap.h"
00013 #include<set>
00014 #include<map>
00015 #include<tr1/unordered_map>
00016
00017 #define VDRIVE_DNN_DDT std::tr1::unordered_map<uint64_t, Disk*>
00018 #define VDRIVE_DNN_DDTit std::tr1::unordered_map<uint64_t, Disk*>::iterator
00019 #define VDRIVE_DNN_MULT std::tr1::unordered_map<uint64_t, int32_t>
00020 #define VDRIVE_DNN_MULTit std::tr1::unordered_map<uint64_t, int32_t>::iterator
00021
00022 namespace VDRIVE {
00023
00030 class DistNearestNeighbour : public Distributor {
00031 public:
00032
00038 DistNearestNeighbour(xercesc::DOMElement* data);
00039
00043 DistNearestNeighbour(int argc, char** argv);
00044
00051 DistNearestNeighbour(bool staticNNCopies, int32_t nnCopies, int32_t nnCopiesFactor);
00052
00058 DistNearestNeighbour(const DistNearestNeighbour& orig);
00059
00063 virtual ~DistNearestNeighbour();
00064
00068 virtual std::list<Disk*>* placeExtent(int64_t virtualVolumeId, int64_t position) ;
00069
00075 virtual void setDisksMulti(std::list<Disk*>* disks, VDRIVE_DNN_MULT *multiplicity);
00076
00080 virtual void setConfiguration(std::list<Disk*>* disks, int64_t extentsize, int32_t copies);
00081
00085 virtual void setDisks(std::list<Disk*>* disks);
00086
00090 virtual xercesc::DOMElement* toXML(xercesc::DOMDocument* doc) const;
00091
00095 virtual std::list<Disk*>* getDisks() const;
00096
00100 virtual int64_t getExtentsize() const {
00101 return extentsize;
00102 }
00103
00107 virtual int32_t getCopies() const {
00108 return copies;
00109 }
00110
00116 static std::string getXMLRootType() {
00117 return std::string("NearestNeighbour");
00118 }
00119
00120 private:
00124 int64_t extentsize;
00125
00129 int32_t copies;
00130
00135 int32_t nnCopies;
00136
00140 int32_t nnCopiesFactor;
00141
00146 uint64_t cutFactor;
00147
00151 std::list<Disk*>* disks;
00152
00156 ImprovedMap *keyFinder;
00157
00161 std::set<uint64_t> *keys;
00162
00168 VDRIVE_DNN_DDT *diskDistribution;
00169
00174 bool staticNNCopies;
00175
00186 uint64_t hashFunction(int64_t virtualVolumeId, int64_t blockposition, int64_t index) const;
00187
00197 uint64_t hashFunction(Disk* disk, int64_t iteration) const;
00198
00199 protected:
00214 virtual int32_t getNNCopies(std::list<Disk*>* disks) const;
00215 };
00216 }
00217 #endif
00218