]> git.ipfire.org Git - thirdparty/squid.git/blob - src/fs/rock/RockSwapDir.h
Revised Core/Store cooperation w.r.t. SwapDir map slot locks.
[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/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 virtual void disconnect(StoreEntry &e);
29
30 protected:
31 /* protected ::SwapDir API */
32 virtual bool needsDiskStrand() const;
33 virtual void create();
34 virtual void init();
35 virtual int canStore(StoreEntry const &) const;
36 virtual StoreIOState::Pointer createStoreIO(StoreEntry &, StoreIOState::STFNCB *, StoreIOState::STIOCB *, void *);
37 virtual StoreIOState::Pointer openStoreIO(StoreEntry &, StoreIOState::STFNCB *, StoreIOState::STIOCB *, void *);
38 virtual void maintain();
39 virtual void updateSize(int64_t size, int sign);
40 virtual void diskFull();
41 virtual void reference(StoreEntry &e);
42 virtual void dereference(StoreEntry &e);
43 virtual void unlink(StoreEntry &e);
44 virtual void statfs(StoreEntry &e) const;
45
46 /* IORequestor API */
47 virtual void ioCompletedNotification();
48 virtual void closeCompleted();
49 virtual void readCompleted(const char *buf, int len, int errflag, RefCount< ::ReadRequest>);
50 virtual void writeCompleted(int errflag, size_t len, RefCount< ::WriteRequest>);
51
52 virtual void parse(int index, char *path);
53 void parseSize(); ///< parses anonymous cache_dir size option
54 void validateOptions(); ///< warns of configuration problems; may quit
55
56 void rebuild(); ///< starts loading and validating stored entry metadata
57 ///< used to add entries successfully loaded during rebuild
58 bool addEntry(const int fileno, const StoreEntry &from);
59
60 bool full() const; ///< no more entries can be stored without purging
61 void trackReferences(StoreEntry &e); ///< add to replacement policy scope
62 void ignoreReferences(StoreEntry &e); ///< delete from repl policy scope
63
64 // TODO: change cur_size and max_size type to stop this madness
65 int64_t currentSize() const { return static_cast<int64_t>(cur_size) << 10;}
66 int64_t maximumSize() const { return static_cast<int64_t>(max_size) << 10;}
67 int64_t diskOffset(int filen) const;
68 int64_t diskOffsetLimit() const;
69 int entryLimit() const { return map->entryLimit(); }
70
71 friend class Rebuild;
72 const char *filePath; ///< location of cache storage file inside path/
73
74 private:
75 DiskIOStrategy *io;
76 RefCount<DiskFile> theFile; ///< cache storage for this cache_dir
77 DirMap *map;
78
79 static const int64_t HeaderSize; ///< on-disk db header size
80 };
81
82 } // namespace Rock
83
84 #endif /* SQUID_FS_ROCK_SWAP_DIR_H */