CernVM-FS  2.13.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
cache_posix.h
Go to the documentation of this file.
1 
5 #ifndef CVMFS_CACHE_POSIX_H_
6 #define CVMFS_CACHE_POSIX_H_
7 
8 #include <stdint.h>
9 #include <sys/types.h>
10 
11 #include <map>
12 #include <string>
13 #include <vector>
14 
15 #include "backoff.h"
16 #include "cache.h"
17 #include "catalog_mgr.h"
18 #include "crypto/signature.h"
19 #include "fd_refcount_mgr.h"
20 #include "file_chunk.h"
21 #include "gtest/gtest_prod.h"
22 #include "manifest_fetch.h"
23 #include "shortstring.h"
24 #include "statistics.h"
25 #include "util/atomic.h"
26 
27 namespace catalog {
28 class DirectoryEntry;
29 class Catalog;
30 } // namespace catalog
31 
32 namespace download {
33 class DownloadManager;
34 }
35 
41  FRIEND_TEST(T_CacheManager, CommitTxnQuotaNotifications);
42  FRIEND_TEST(T_CacheManager, CommitTxnRenameFail);
43  FRIEND_TEST(T_CacheManager, Open);
44  FRIEND_TEST(T_CacheManager, OpenFromTxn);
45  FRIEND_TEST(T_CacheManager, OpenPinned);
46  FRIEND_TEST(T_CacheManager, Rename);
47  FRIEND_TEST(T_CacheManager, StartTxn);
48  FRIEND_TEST(T_CacheManager, TearDown2ReadOnly);
49 
50  public:
51  enum CacheModes {
54  };
55 
60  };
61 
67  static const uint64_t kBigFile;
68 
69  virtual CacheManagerIds id() { return kPosixCacheManager; }
70  virtual std::string Describe();
71 
72  static PosixCacheManager *Create(
73  const std::string &cache_path,
74  const bool alien_cache,
75  const RenameWorkarounds rename_workaround = kRenameNormal,
76  const bool do_refcount = true);
77  virtual ~PosixCacheManager() { }
79 
80  virtual int Open(const LabeledObject &object);
81  virtual int64_t GetSize(int fd);
82  virtual int Close(int fd);
83  virtual int64_t Pread(int fd, void *buf, uint64_t size, uint64_t offset);
84  virtual int Dup(int fd);
85  virtual int Readahead(int fd);
86 
87  virtual uint32_t SizeOfTxn() { return sizeof(Transaction); }
88  virtual int StartTxn(const shash::Any &id, uint64_t size, void *txn);
89  virtual void CtrlTxn(const Label &label, const int flags, void *txn);
90  virtual int64_t Write(const void *buf, uint64_t size, void *txn);
91  virtual int Reset(void *txn);
92  virtual int OpenFromTxn(void *txn);
93  virtual int AbortTxn(void *txn);
94  virtual int CommitTxn(void *txn);
95 
96  virtual void Spawn() { }
97 
98  virtual manifest::Breadcrumb LoadBreadcrumb(const std::string &fqrn);
99  virtual bool StoreBreadcrumb(const manifest::Manifest &manifest);
100  bool StoreBreadcrumb(std::string fqrn, manifest::Breadcrumb breadcrumb);
101 
102  void TearDown2ReadOnly();
104  bool alien_cache() { return alien_cache_; }
105  std::string cache_path() { return cache_path_; }
106  bool is_tmpfs() { return is_tmpfs_; }
107  bool do_refcount() const { return do_refcount_; }
108 
109  protected:
110  virtual void *DoSaveState();
111  virtual int DoRestoreState(void *data);
112  virtual bool DoFreeState(void *data);
113 
114  private:
115  bool InitCacheDirectory(const string &cache_path);
116 
117  struct Transaction {
118  Transaction(const shash::Any &id, const std::string &final_path)
119  : buf_pos(0)
120  , size(0)
122  , fd(-1)
123  , label()
124  , tmp_path()
125  , final_path(final_path)
126  , id(id) { }
127 
128  unsigned char buffer[4096];
129  unsigned buf_pos;
130  uint64_t size;
131  uint64_t expected_size;
132  int fd;
134  std::string tmp_path;
135  std::string final_path;
137  };
138 
139  PosixCacheManager(const std::string &cache_path, const bool alien_cache,
140  const bool do_refcount = true)
141  : cache_path_(cache_path)
142  , txn_template_path_(cache_path_ + "/txn/fetchXXXXXX")
143  , alien_cache_(alien_cache)
147  , is_tmpfs_(false)
149  , fd_mgr_(new FdRefcountMgr()) {
150  atomic_init32(&no_inflight_txns_);
151  }
152 
153  std::string GetPathInCache(const shash::Any &id);
154  int Rename(const char *oldpath, const char *newpath);
155  int Flush(Transaction *transaction);
156 
157 
158  std::string cache_path_;
159  std::string txn_template_path_;
163 
170 
171  static const char kMagicRefcount = 123;
172  static const char kMagicNoRefcount = '\0';
173  struct SavedState {
178  unsigned int version;
180  };
181 
186 
190  bool is_tmpfs_;
196 }; // class PosixCacheManager
197 
198 #endif // CVMFS_CACHE_POSIX_H_
bool do_refcount() const
Definition: cache_posix.h:107
RenameWorkarounds rename_workaround_
Definition: cache_posix.h:161
virtual int64_t Write(const void *buf, uint64_t size, void *txn)
Definition: cache_posix.cc:617
const manifest::Manifest * manifest() const
Definition: repository.h:125
virtual int Open(const LabeledObject &object)
Definition: cache_posix.cc:410
int Flush(Transaction *transaction)
Definition: cache_posix.cc:380
void TearDown2ReadOnly()
Definition: cache_posix.cc:606
static const char kMagicNoRefcount
Definition: cache_posix.h:172
virtual int CommitTxn(void *txn)
Definition: cache_posix.cc:149
CacheModes cache_mode()
Definition: cache_posix.h:103
int OpenPinned(const LabeledObject &object)
Definition: cache.cc:162
virtual int AbortTxn(void *txn)
Definition: cache_posix.cc:114
virtual void * DoSaveState()
Definition: cache_posix.cc:313
virtual int64_t GetSize(int fd)
Definition: cache_posix.cc:401
virtual bool AcquireQuotaManager(QuotaManager *quota_mgr)
Definition: cache_posix.cc:132
CacheModes cache_mode_
Definition: cache_posix.h:162
virtual void CtrlTxn(const Label &label, const int flags, void *txn)
Definition: cache_posix.cc:288
PosixCacheManager(const std::string &cache_path, const bool alien_cache, const bool do_refcount=true)
Definition: cache_posix.h:139
std::string cache_path_
Definition: cache_posix.h:158
virtual int Dup(int fd)
Definition: cache_posix.cc:372
int Rename(const char *oldpath, const char *newpath)
Definition: cache_posix.cc:463
std::string GetPathInCache(const shash::Any &id)
Definition: cache_posix.cc:396
bool InitCacheDirectory(const string &cache_path)
Definition: cache_posix.cc:228
virtual int OpenFromTxn(void *txn)
Definition: cache_posix.cc:430
virtual int Readahead(int fd)
Definition: cache_posix.cc:493
std::string txn_template_path_
Definition: cache_posix.h:159
int32_t atomic_int32
Definition: atomic.h:17
std::string cache_path()
Definition: cache_posix.h:105
unsigned char buffer[4096]
Definition: cache_posix.h:128
virtual void Spawn()
Definition: cache_posix.h:96
void Transaction()
static PosixCacheManager * Create(const std::string &cache_path, const bool alien_cache, const RenameWorkarounds rename_workaround=kRenameNormal, const bool do_refcount=true)
Definition: cache_posix.cc:268
static const uint64_t kBigFile
Definition: cache_posix.h:67
virtual int StartTxn(const shash::Any &id, uint64_t size, void *txn)
Definition: cache_posix.cc:525
virtual manifest::Breadcrumb LoadBreadcrumb(const std::string &fqrn)
Definition: cache_posix.cc:589
bool reports_correct_filesize_
Definition: cache_posix.h:185
CacheManagerIds
Definition: cache.h:24
static const char kMagicRefcount
Definition: cache_posix.h:171
virtual CacheManagerIds id()
Definition: cache_posix.h:69
FRIEND_TEST(T_CacheManager, CommitTxnQuotaNotifications)
UniquePtr< FdRefcountMgr > fd_mgr_
Definition: cache_posix.h:195
virtual int Reset(void *txn)
Definition: cache_posix.cc:511
QuotaManager * quota_mgr()
Definition: cache.h:191
Transaction(const shash::Any &id, const std::string &final_path)
Definition: cache_posix.h:118
virtual bool DoFreeState(void *data)
Definition: cache_posix.cc:358
virtual int DoRestoreState(void *data)
Definition: cache_posix.cc:325
virtual std::string Describe()
Definition: cache_posix.cc:296
virtual bool StoreBreadcrumb(const manifest::Manifest &manifest)
Definition: cache_posix.cc:595
static void size_t size
Definition: smalloc.h:54
atomic_int32 no_inflight_txns_
Definition: cache_posix.h:169
virtual ~PosixCacheManager()
Definition: cache_posix.h:77
virtual int Close(int fd)
Definition: cache_posix.cc:141
virtual int64_t Pread(int fd, void *buf, uint64_t size, uint64_t offset)
Definition: cache_posix.cc:448
static const uint64_t kSizeUnknown
Definition: cache.h:74
virtual uint32_t SizeOfTxn()
Definition: cache_posix.h:87
UniquePtr< FdRefcountMgr > fd_mgr
Definition: cache_posix.h:179