]> git.ipfire.org Git - thirdparty/squid.git/blob - src/fs/rock/RockSwapDir.h
When searching for a hit, ask each cache_dir after checking in store_table.
[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 "rock/RockDirMap.h"
7
8 class DiskIOStrategy;
9 class DiskFile;
10 class ReadRequest;
11 class WriteRequest;
12
13 namespace Rock {
14
15 class Rebuild;
16
17 /// \ingroup Rock
18 class SwapDir: public ::SwapDir, public IORequestor
19 {
20 public:
21 SwapDir();
22 virtual ~SwapDir();
23
24 /* public ::SwapDir API */
25 virtual void reconfigure(int, char *);
26 virtual StoreSearch *search(String const url, HttpRequest *);
27 virtual StoreEntry *get(const cache_key *key);
28
29 protected:
30 /* protected ::SwapDir API */
31 virtual void create();
32 virtual void init();
33 virtual int canStore(StoreEntry const &) const;
34 virtual StoreIOState::Pointer createStoreIO(StoreEntry &, StoreIOState::STFNCB *, StoreIOState::STIOCB *, void *);
35 virtual StoreIOState::Pointer openStoreIO(StoreEntry &, StoreIOState::STFNCB *, StoreIOState::STIOCB *, void *);
36 virtual void maintain();
37 virtual void updateSize(int64_t size, int sign);
38 virtual void diskFull();
39 virtual void reference(StoreEntry &e);
40 virtual void dereference(StoreEntry &e);
41 virtual void unlink(StoreEntry &e);
42 virtual void statfs(StoreEntry &e) const;
43
44 /* IORequestor API */
45 virtual void ioCompletedNotification();
46 virtual void closeCompleted();
47 virtual void readCompleted(const char *buf, int len, int errflag, RefCount< ::ReadRequest>);
48 virtual void writeCompleted(int errflag, size_t len, RefCount< ::WriteRequest>);
49
50 virtual void parse(int index, char *path);
51 void parseSize(); ///< parses anonymous cache_dir size option
52 void validateOptions(); ///< warns of configuration problems; may quit
53
54 void rebuild(); ///< starts loading and validating stored entry metadata
55 void unlink(int fileno); ///< used for entries failed to load in rebuild
56 ///< used to add entries successfully loaded during rebuild
57 StoreEntry *addEntry(int fileno, const StoreEntry &from);
58
59 bool full() const; ///< no more entries can be stored without purging
60 void trackReferences(StoreEntry &e); ///< add to replacement policy scope
61 void ignoreReferences(StoreEntry &e); ///< delete from repl policy scope
62
63 // TODO: change cur_size and max_size type to stop this madness
64 int64_t currentSize() const { return static_cast<int64_t>(cur_size) << 10;}
65 int64_t maximumSize() const { return static_cast<int64_t>(max_size) << 10;}
66 int64_t diskOffset(int filen) const;
67 int64_t diskOffsetLimit() const;
68 int entryLimit() const { return map.entryLimit(); }
69
70 friend class Rebuild;
71 const char *filePath; ///< location of cache storage file inside path/
72
73 private:
74 DiskIOStrategy *io;
75 RefCount<DiskFile> theFile; ///< cache storage for this cache_dir
76 DirMap map;
77
78 static const int64_t HeaderSize; ///< on-disk db header size
79 };
80
81 } // namespace Rock
82
83 #endif /* SQUID_FS_ROCK_SWAP_DIR_H */