CernVM-FS  2.13.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
cache.h
Go to the documentation of this file.
1 
5 #ifndef CVMFS_CACHE_H_
6 #define CVMFS_CACHE_H_
7 
8 #ifndef __STDC_FORMAT_MACROS
9 #define __STDC_FORMAT_MACROS
10 #endif
11 
12 #include <stdint.h>
13 
14 #include <string>
15 
17 #include "crypto/hash.h"
18 #include "manifest.h"
19 #include "util/pointer.h"
20 
21 
22 class QuotaManager;
23 
31 };
32 
33 enum CacheModes {
36 };
37 
38 
68  public:
74  static const uint64_t kSizeUnknown;
75 
80  static const int kLabelCatalog = 0x01;
81  static const int kLabelPinned = 0x02;
82  static const int kLabelVolatile = 0x04;
83  static const int kLabelExternal = 0x08;
84  static const int kLabelChunked = 0x10;
85  static const int kLabelCertificate = 0x20;
86  static const int kLabelMetainfo = 0x40;
87  static const int kLabelHistory = 0x80;
88 
95  struct Label {
97  : flags(0)
100  , range_offset(-1) { }
101 
102  bool IsCatalog() const { return flags & kLabelCatalog; }
103  bool IsPinned() const { return flags & kLabelPinned; }
104  bool IsExternal() const { return flags & kLabelExternal; }
105  bool IsCertificate() const { return flags & kLabelCertificate; }
106 
110  std::string GetDescription() const {
111  if (flags & kLabelCatalog)
112  return "file catalog at " + path;
113  if (flags & kLabelCertificate)
114  return "certificate for " + path;
115  if (flags & kLabelMetainfo)
116  return "metainfo for " + path;
117  if (flags & kLabelHistory)
118  return "tag database for " + path;
119  if (flags & kLabelChunked)
120  return "Part of " + path;
121  return path;
122  }
123 
124  int flags;
125  uint64_t size;
133  std::string path;
134  };
135 
139  struct LabeledObject {
140  explicit LabeledObject(const shash::Any &id) : id(id), label() { }
141  LabeledObject(const shash::Any &id, const Label &l) : id(id), label(l) { }
142 
145  };
146 
147  virtual CacheManagerIds id() = 0;
152  virtual std::string Describe() = 0;
153 
154  virtual bool AcquireQuotaManager(QuotaManager *quota_mgr) = 0;
155 
156  virtual ~CacheManager();
163  virtual int Open(const LabeledObject &object) = 0;
164  virtual int64_t GetSize(int fd) = 0;
165  virtual int Close(int fd) = 0;
166  virtual int64_t Pread(int fd, void *buf, uint64_t size, uint64_t offset) = 0;
167  virtual int Dup(int fd) = 0;
168  virtual int Readahead(int fd) = 0;
169 
170  virtual uint32_t SizeOfTxn() = 0;
171  virtual int StartTxn(const shash::Any &id, uint64_t size, void *txn) = 0;
172  virtual void CtrlTxn(const Label &label,
173  const int flags, // reserved for future use
174  void *txn) = 0;
175  virtual int64_t Write(const void *buf, uint64_t sz, void *txn) = 0;
176  virtual int Reset(void *txn) = 0;
177  virtual int AbortTxn(void *txn) = 0;
178  virtual int OpenFromTxn(void *txn) = 0;
179  virtual int CommitTxn(void *txn) = 0;
180 
181  virtual void Spawn() = 0;
182 
183  int ChecksumFd(int fd, shash::Any *id);
184  int OpenPinned(const LabeledObject &object);
185  bool Open2Mem(const LabeledObject &object, unsigned char **buffer,
186  uint64_t *size);
187  bool CommitFromMem(const LabeledObject &object,
188  const unsigned char *buffer,
189  const uint64_t size);
190 
192 
193  // Rescue the open file table during reload of the fuse module. For the
194  // POSIX cache, nothing needs to be done because the table is keep in the
195  // kernel for the process. Other cache managers need to do it manually.
196  void *SaveState(const int fd_progress);
203  int RestoreState(const int fd_progress, void *state);
204  void FreeState(const int fd_progress, void *state);
205  CacheManagerIds PeekState(void *state) {
206  return static_cast<State *>(state)->manager_type;
207  }
208 
215  virtual manifest::Breadcrumb LoadBreadcrumb(const std::string & /*fqrn*/) {
216  return manifest::Breadcrumb();
217  }
218  virtual bool StoreBreadcrumb(const manifest::Manifest & /*manifest*/) {
219  return false;
220  }
221 
222  protected:
223  CacheManager();
224 
225  // Unless overwritten, Saving/Restoring states will crash the Fuse module
226  virtual void *DoSaveState() { return NULL; }
227  virtual int DoRestoreState(void *data) { return false; }
228  virtual bool DoFreeState(void *data) { return false; }
229 
234 
235  private:
236  static const unsigned kStateVersion = 0;
237 
242  struct State : SingleCopy {
246  , concrete_state(NULL) { }
247 
248  unsigned version;
251  };
252 }; // class CacheManager
253 
254 #endif // CVMFS_CACHE_H_
LabeledObject(const shash::Any &id, const Label &l)
Definition: cache.h:141
int ChecksumFd(int fd, shash::Any *id)
Definition: cache.cc:37
virtual int64_t GetSize(int fd)=0
std::string GetDescription() const
Definition: cache.h:110
off_t range_offset
Definition: cache.h:127
int RestoreState(const int fd_progress, void *state)
Definition: cache.cc:182
static const int kLabelCatalog
Definition: cache.h:80
static const int kLabelMetainfo
Definition: cache.h:86
virtual void Spawn()=0
bool IsCertificate() const
Definition: cache.h:105
int OpenPinned(const LabeledObject &object)
Definition: cache.cc:162
virtual ~CacheManager()
Definition: cache.cc:30
CacheManagerIds manager_type
Definition: cache.h:249
CacheModes
Definition: cache.h:33
virtual manifest::Breadcrumb LoadBreadcrumb(const std::string &)
Definition: cache.h:215
void * SaveState(const int fd_progress)
Definition: cache.cc:211
unsigned version
Definition: cache.h:248
LabeledObject(const shash::Any &id)
Definition: cache.h:140
virtual int AbortTxn(void *txn)=0
static const int kLabelHistory
Definition: cache.h:87
virtual bool StoreBreadcrumb(const manifest::Manifest &)
Definition: cache.h:218
virtual void * DoSaveState()
Definition: cache.h:226
virtual bool DoFreeState(void *data)
Definition: cache.h:228
virtual CacheManagerIds id()=0
void * concrete_state
Definition: cache.h:250
bool IsPinned() const
Definition: cache.h:103
virtual int Open(const LabeledObject &object)=0
virtual int DoRestoreState(void *data)
Definition: cache.h:227
Algorithms
Definition: compression.h:44
virtual int CommitTxn(void *txn)=0
uint64_t size
unzipped size, if known
Definition: cache.h:125
virtual int OpenFromTxn(void *txn)=0
static const int kLabelCertificate
Definition: cache.h:85
bool CommitFromMem(const LabeledObject &object, const unsigned char *buffer, const uint64_t size)
Definition: cache.cc:77
CacheManagerIds
Definition: cache.h:24
bool IsCatalog() const
Definition: cache.h:102
static const int kLabelPinned
Definition: cache.h:81
virtual int Close(int fd)=0
CacheManagerIds PeekState(void *state)
Definition: cache.h:205
static const int kLabelVolatile
Definition: cache.h:82
virtual int Reset(void *txn)=0
static const unsigned kStateVersion
Definition: cache.h:236
void FreeState(const int fd_progress, void *state)
Definition: cache.cc:95
zlib::Algorithms zip_algorithm
Definition: cache.h:126
CacheManager()
Definition: cache.cc:27
virtual void CtrlTxn(const Label &label, const int flags, void *txn)=0
QuotaManager * quota_mgr()
Definition: cache.h:191
bool IsExternal() const
Definition: cache.h:104
QuotaManager * quota_mgr_
Definition: cache.h:233
virtual uint32_t SizeOfTxn()=0
virtual int Dup(int fd)=0
virtual int Readahead(int fd)=0
std::string path
Definition: cache.h:133
bool Open2Mem(const LabeledObject &object, unsigned char **buffer, uint64_t *size)
Definition: cache.cc:122
static const int kLabelExternal
Definition: cache.h:83
virtual bool AcquireQuotaManager(QuotaManager *quota_mgr)=0
static const int kLabelChunked
Definition: cache.h:84
virtual int StartTxn(const shash::Any &id, uint64_t size, void *txn)=0
static void size_t size
Definition: smalloc.h:54
virtual int64_t Pread(int fd, void *buf, uint64_t size, uint64_t offset)=0
virtual std::string Describe()=0
virtual int64_t Write(const void *buf, uint64_t sz, void *txn)=0
static const uint64_t kSizeUnknown
Definition: cache.h:74