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

Distributor.h

Go to the documentation of this file.
00001 /* 
00002  * File:   Distributor.h
00003  * Author: fermat
00004  *
00005  * Created on 20. Januar 2010, 10:34
00006  */
00007 
00008 #ifndef _DISTRIBUTOR_H
00009 #define _DISTRIBUTOR_H
00010 
00011 #include <vector>
00012 #include <list>
00013 #include <string>
00014 #include "Disk.h"
00015 #include <ostream>
00016 #include <cstring>
00017 #include <gcrypt.h>
00018 
00019 
00020 namespace VDRIVE {
00021 
00029     class Distributor {
00030     private:
00034         uint8_t *baseMessage;
00035 
00039         uint16_t numThreads;
00040 
00044         bool internelHash;
00045 
00049         int internalHashAlgorithm;
00050 
00054         int gcryptHashAlgorithm;
00055 
00056     public:
00061         const static int32_t SHARE = 1;
00066         const static int32_t NEAREST_NEIGHBOUR = 2;
00071         const static int32_t REDUNDANT_SHARE = 3;
00076         const static int32_t REDUNDANT_SHARE_K = 4;
00081         const static int32_t ROUND_ROBIN = 5;
00086         const static int32_t RUSH_P = 6;
00091         const static int32_t CRUSH = 7;
00092 
00098         const static int HASH_SHA1 = 1;
00099 
00105         const static int HASH_XOR = 2;
00106 
00112         const static int HASH_RAND = 3;
00113 
00119         const static int HASH_MT = 4;
00120 
00126         uint64_t a;
00127 
00132         uint64_t b;
00133 
00137         virtual ~Distributor();
00138 
00157         virtual std::list<Disk*>* placeExtent(int64_t virtualVolumeId, int64_t position) = 0;
00158 
00180         virtual void setConfiguration(std::list<Disk*>* disks, int64_t extentsize, int32_t copies) = 0;
00181         
00182         virtual void setClusters(std::list<std::list<Disk*>*>* clusters, std::list<uint32_t>* weights)  {};
00193         virtual void setDisks(std::list<Disk*>* disks) = 0;
00194 
00205         virtual uint8_t* getBaseMessage() const;
00206 
00216         virtual void setBaseMessage(uint8_t* baseMessage);
00217 
00228         uint64_t myMTRand(std::string* data) const;
00229 
00240         uint64_t myRand(std::string* data) const;
00241 
00256         uint64_t myLC(std::string* data) const;
00257 
00267         uint64_t mySHA1(std::string* data) const;
00268 
00276         uint64_t gcrypt(std::string* data) const;
00277 
00285         double hashFunction(std::string *data) const;
00286 
00294         uint64_t hashFunctionInt64(std::string *data) const;
00295 
00307         virtual std::list<Disk*>* getDisks() const = 0;
00308 
00314         virtual int64_t getExtentsize() const = 0;
00315 
00321         virtual int32_t getCopies() const = 0;
00322 
00333         static Distributor* createDistributor(int32_t distributor, int argc, char** argv);
00334 
00341         static Distributor* loadDistributor(std::string filename);
00342 
00349         virtual xercesc::DOMElement* toXML(xercesc::DOMDocument* doc) const = 0;
00350 
00356         void save(std::string filename) const;
00357 
00364         uint16_t getNumThreads() const {
00365             return numThreads;
00366         }
00367 
00374         void setNumThreads(uint16_t numThreads) {
00375             if (numThreads > 0)
00376                 this->numThreads = numThreads;
00377         }
00378 
00382         void useInternalHashAlgorithm(int algorithm) {
00383             internelHash = true;
00384             internalHashAlgorithm = algorithm;
00385         }
00386 
00395         bool useGCryptHashAlgorithm(int algorithm) {
00396             if (gcry_md_test_algo(algorithm) != 0) {
00397                 return false;
00398             }
00399             internelHash = false;
00400             gcryptHashAlgorithm = algorithm;
00401             return true;
00402         }
00403 
00412         void usedHashAlgorithm(bool* internal, int* gcryptalgorithm, int* intalgorithm) const {
00413             *internal = internelHash;
00414             *gcryptalgorithm = gcryptHashAlgorithm;
00415             *intalgorithm = internalHashAlgorithm;
00416         }
00417 
00418     protected:
00422         Distributor();
00423     };
00424 }
00425 #endif  /* _DISTRIBUTOR_H */
00426 

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