00001
00002
00003
00004
00005 #ifndef BUILTIN_CATALOG_H
00006 #define BUILTIN_CATALOG_H
00007
00008 #include <dmlite/cpp/catalog.h>
00009 #include <dmlite/cpp/inode.h>
00010 #include <dmlite/cpp/poolmanager.h>
00011 #include <dmlite/cpp/pooldriver.h>
00012
00013 namespace dmlite {
00014
00015 struct BuiltInDir: public Directory {
00016 virtual ~BuiltInDir() {};
00017 IDirectory* idir;
00018 ExtendedStat dir;
00019 };
00020
00021 class BuiltInCatalog: public Catalog {
00022 public:
00023 BuiltInCatalog(bool updateATime, unsigned symLinkLimit) throw (DmException);
00024 ~BuiltInCatalog();
00025
00026 std::string getImplId(void) const throw();
00027
00028 void setStackInstance(StackInstance* si) throw (DmException);
00029
00030 void setSecurityContext(const SecurityContext*) throw (DmException);
00031
00032 void changeDir (const std::string&) throw (DmException);
00033 std::string getWorkingDir (void) throw (DmException);
00034
00035 ExtendedStat extendedStat(const std::string& path,
00036 bool followSym = true) throw (DmException);
00037 ExtendedStat extendedStatByRFN(const std::string& rfn) throw (DmException);
00038
00039 bool access(const std::string& path, int mode) throw (DmException);
00040 bool accessReplica(const std::string& replica, int mode) throw (DmException);
00041
00042 void addReplica (const Replica& replica) throw (DmException);
00043 void deleteReplica(const Replica& replica) throw (DmException);
00044
00045 std::vector<Replica> getReplicas(const std::string& path) throw (DmException);
00046 Location get(const std::string& path) throw (DmException);
00047
00048 Location put(const std::string& path) throw (DmException);
00049 void putDone(const std::string& host, const std::string& rfn,
00050 const std::map<std::string, std::string>& params) throw (DmException);
00051
00052 void symlink(const std::string& oldpath,
00053 const std::string& newpath) throw (DmException);
00054 std::string readLink(const std::string& path) throw (DmException);
00055
00056 void unlink(const std::string& path) throw (DmException);
00057
00058 void create(const std::string& path, mode_t mode) throw (DmException);
00059
00060 void makeDir (const std::string& path, mode_t mode) throw (DmException);
00061 void removeDir(const std::string& path) throw (DmException);
00062
00063 void rename(const std::string& oldPath,
00064 const std::string& newPath) throw (DmException);
00065
00066 mode_t umask(mode_t mask) throw ();
00067
00068 void setMode (const std::string& path, mode_t mode) throw (DmException);
00069 void setOwner (const std::string& path, uid_t newUid, gid_t newGid,
00070 bool followSymLink = true) throw (DmException);
00071
00072 void setSize (const std::string& path, size_t newSize) throw (DmException);
00073 void setChecksum(const std::string& path, const std::string& csumtype,
00074 const std::string& csumvalue) throw (DmException);
00075
00076 void setAcl(const std::string& path, const Acl& acls) throw (DmException);
00077
00078 void utime(const std::string& path, const struct utimbuf* buf) throw (DmException);
00079
00080 std::string getComment(const std::string& path) throw (DmException);
00081 void setComment(const std::string& path,
00082 const std::string& comment) throw (DmException);
00083
00084 void setGuid(const std::string& path,
00085 const std::string &guid) throw (DmException);
00086
00087 void updateExtendedAttributes(const std::string& path,
00088 const Extensible& attr) throw (DmException);
00089
00090 Directory* openDir (const std::string& path) throw (DmException);
00091 void closeDir(Directory* dir) throw (DmException);
00092 struct dirent* readDir (Directory* dir) throw (DmException);
00093 ExtendedStat* readDirx(Directory* dir) throw (DmException);
00094
00095 Replica getReplicaByRFN(const std::string& rfn) throw (DmException);
00096 void updateReplica(const Replica& replica) throw (DmException);
00097
00098 protected:
00099
00100
00101
00102
00103
00104 ExtendedStat getParent(const std::string& path, std::string* parentPath,
00105 std::string* name) throw (DmException);
00106
00107
00108 void updateAccessTime(const ExtendedStat& meta) throw (DmException);
00109
00110
00111
00112
00113 void traverseBackwards(const ExtendedStat& meta) throw (DmException);
00114
00115 private:
00116 StackInstance* si_;
00117
00118 const SecurityContext* secCtx_;
00119
00120 std::string cwdPath_;
00121 ino_t cwd_;
00122
00123 mode_t umask_;
00124 bool updateATime_;
00125 unsigned symLinkLimit_;
00126 };
00127
00128
00129 class BuiltInCatalogFactory: public CatalogFactory {
00130 public:
00131 BuiltInCatalogFactory();
00132 ~BuiltInCatalogFactory();
00133
00134 void configure(const std::string&, const std::string&) throw (DmException);
00135
00136 Catalog* createCatalog(PluginManager*) throw (DmException);
00137
00138 private:
00139 bool updateATime_;
00140 unsigned symLinkLimit_;
00141 };
00142
00143 };
00144
00145 #endif // BUILTIN_CATALOG_H