• Main Page
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

DistCRUSH.h

Go to the documentation of this file.
00001 /* 
00002  * File:   DistCRUSH.h
00003  * Author: ywkang
00004  *
00005  * Created on March 16, 2010, 7:42 PM
00006  */
00007 
00008 #ifndef _DISTCRUSH_H
00009 #define _DISTCRUSH_H
00010 
00011 #include "Distributor.h"
00012 
00013 #include <set>
00014 #include <map>
00015 #include <list>
00016 #include <iostream>
00017 
00018 #include "crushwrapper.h"
00019 #include <xercesc/dom/DOMElement.hpp>
00020 
00021 using namespace std;
00022 using namespace xercesc;
00023 
00024 
00025 namespace VDRIVE {
00026     class DistCRUSH : public Distributor {
00027     public:
00028         DistCRUSH(int argc, char** argv);
00029         DistCRUSH(const DistCRUSH& orig);
00030         DistCRUSH(xercesc::DOMElement* data);
00031         static std::string getXMLRootType() {
00032             return std::string("Crush");
00033         }
00034         virtual ~DistCRUSH();
00035     private:
00036         CrushWrapper crush;
00037         int copies;
00038         int ruleno;
00039         int failuredomains;
00040         int extentsize;
00041         list<Disk*> alldisks;
00042         vector<uint32_t> disk_weights;
00043 
00044         struct layer_t {
00045           string name;
00046           int buckettype;
00047           int size;
00048         };
00049 
00050         vector<layer_t> layers;
00051         
00052         virtual std::list<Disk*>* placeExtent(int64_t virtualVolumeId, int64_t position);
00053         //virtual void setClusters(list<list<Disk*>*>* clusters, list<uint32_t>* weights);
00054         virtual void setConfiguration(std::list<Disk*>* disks, int64_t extentsize, int32_t copies);
00055         virtual void setDisks(std::list<Disk*>* disks);
00056         virtual std::list<Disk*>* getDisks() const;
00057         virtual int64_t getExtentsize() const;
00058         virtual int32_t getCopies() const;
00059         virtual xercesc::DOMElement* toXML(xercesc::DOMDocument* doc) const;
00060         virtual void buildCrushMap(vector<layer_t> layers, std::list<Disk*>* disks);
00061         double hash(int64_t key1, int64_t key2, int64_t key3) const;
00062         
00063 
00064     };
00065 }
00066 
00067 
00068 #endif  /* _DISTCRUSH_H */
00069 

Generated on Mon Oct 11 2010 13:09:26 for CppDistributors by  doxygen 1.7.2