]> git.ipfire.org Git - thirdparty/squid.git/blob - src/fs/rock/RockSwapDir.h
Change SwapDir::max_size to bytes, make it protected, use maxSize() instead.
[thirdparty/squid.git] / src / fs / rock / RockSwapDir.h
1 #ifndef SQUID_FS_ROCK_SWAP_DIR_H
2 #define SQUID_FS_ROCK_SWAP_DIR_H
3
4 #include "SwapDir.h"
5 #include "DiskIO/IORequestor.h"
6 #include "fs/rock/RockFile.h"
7 #include "ipc/StoreMap.h"
8
9 class DiskIOStrategy;
10 class DiskFile;
11 class ReadRequest;
12 class WriteRequest;
13
14 namespace Rock {
15
16 class Rebuild;
17
18 /// \ingroup Rock
19 class SwapDir: public ::SwapDir, public IORequestor
20 {
21 public:
22 SwapDir();
23 virtual ~SwapDir();
24
25 /* public ::SwapDir API */
26 virtual void reconfigure(int, char *);
27 virtual StoreSearch *search(String const url, HttpRequest *);
28 virtual StoreEntry *get(const cache_key *key);
29 virtual void disconnect(StoreEntry &e);
30 virtual uint64_t currentSize() const;
31 virtual uint64_t currentCount() const;
32 virtual bool doReportStat() const;
33 virtual void swappedOut(const StoreEntry &e);
34
35 int64_t entryLimitHigh() const { return 0xFFFFFF; } /// Core sfileno maximum
36 int64_t entryLimitAllowed() const;
37
38 typedef Ipc::StoreMapWithExtras<DbCellHeader> DirMap;
39
40 protected:
41 /* protected ::SwapDir API */
42 virtual bool needsDiskStrand() const;
43 virtual void create();
44 virtual void init();
45 virtual bool canStore(const StoreEntry &e, int64_t diskSpaceNeeded, int &load) const;
46 virtual StoreIOState::Pointer createStoreIO(StoreEntry &, StoreIOState::STFNCB *, StoreIOState::STIOCB *, void *);
47 virtual StoreIOState::Pointer openStoreIO(StoreEntry &, StoreIOState::STFNCB *, StoreIOState::STIOCB *, void *);
48 virtual void maintain();
49 virtual void diskFull();
50 virtual void reference(StoreEntry &e);
51 virtual void dereference(StoreEntry &e);
52 virtual void unlink(StoreEntry &e);
53 virtual void statfs(StoreEntry &e) const;
54
55 /* IORequestor API */
56 virtual void ioCompletedNotification();
57 virtual void closeCompleted();
58 virtual void readCompleted(const char *buf, int len, int errflag, RefCount< ::ReadRequest>);
59 virtual void writeCompleted(int errflag, size_t len, RefCount< ::WriteRequest>);
60
61 virtual void parse(int index, char *path);
62 void parseSize(); ///< parses anonymous cache_dir size option
63 void validateOptions(); ///< warns of configuration problems; may quit
64
65 void rebuild(); ///< starts loading and validating stored entry metadata
66 ///< used to add entries successfully loaded during rebuild
67 bool addEntry(const int fileno, const DbCellHeader &header, const StoreEntry &from);
68
69 bool full() const; ///< no more entries can be stored without purging
70 void trackReferences(StoreEntry &e); ///< add to replacement policy scope
71 void ignoreReferences(StoreEntry &e); ///< delete from repl policy scope
72
73 int64_t diskOffset(int filen) const;
74 int64_t diskOffsetLimit() const;
75 int entryLimit() const { return map->entryLimit(); }
76
77 friend class Rebuild;
78 const char *filePath; ///< location of cache storage file inside path/
79
80 private:
81 DiskIOStrategy *io;
82 RefCount<DiskFile> theFile; ///< cache storage for this cache_dir
83 DirMap *map;
84
85 static const int64_t HeaderSize; ///< on-disk db header size
86 };
87
88 } // namespace Rock
89
90 #endif /* SQUID_FS_ROCK_SWAP_DIR_H */