]> git.ipfire.org Git - thirdparty/squid.git/blob - src/fs/ufs/UFSSwapDir.h
Use "override" more consistently.
[thirdparty/squid.git] / src / fs / ufs / UFSSwapDir.h
1 /*
2 * Copyright (C) 1996-2015 The Squid Software Foundation and contributors
3 *
4 * Squid software is distributed under GPLv2+ license and includes
5 * contributions from numerous individuals and organizations.
6 * Please see the COPYING and CONTRIBUTORS files for details.
7 */
8
9 #ifndef SQUID_FS_UFS_UFSSWAPDIR_H
10 #define SQUID_FS_UFS_UFSSWAPDIR_H
11
12 #include "SquidString.h"
13 #include "Store.h"
14 #include "store/Disk.h"
15 #include "StoreIOState.h"
16 #include "StoreSearch.h"
17 #include "swap_log_op.h"
18 #include "UFSStrategy.h"
19
20 class HttpRequest;
21 class ConfigOptionVector;
22 class FileMap;
23 class DiskIOModule;
24
25 namespace Fs
26 {
27 namespace Ufs
28 {
29 /// \ingroup UFS
30 class UFSSwapDir : public SwapDir
31 {
32 public:
33 static bool IsUFSDir(SwapDir* sd);
34 static int DirClean(int swap_index);
35 /** check whether swapfile belongs to the specified cachedir/l1dir/l2dir
36 *
37 * \param cachedir the number of the cachedir which is being tested
38 * \param level1dir level-1 dir in the cachedir
39 * \param level2dir level-2 dir
40 */
41 static bool FilenoBelongsHere(int fn, int cachedir, int level1dir, int level2dir);
42
43 UFSSwapDir(char const *aType, const char *aModuleType);
44 virtual ~UFSSwapDir();
45
46 /* Store::Disk API */
47 virtual void create() override;
48 virtual void init() override;
49 virtual void dump(StoreEntry &) const override;
50 virtual bool doubleCheck(StoreEntry &) override;
51 virtual bool unlinkdUseful() const override;
52 virtual void unlink(StoreEntry &) override;
53 virtual void statfs(StoreEntry &) const override;
54 virtual void maintain() override;
55 virtual void markForUnlink(StoreEntry &) override {}
56 virtual bool canStore(const StoreEntry &e, int64_t diskSpaceNeeded, int &load) const override;
57 virtual void reference(StoreEntry &) override;
58 virtual bool dereference(StoreEntry &) override;
59 virtual StoreIOState::Pointer createStoreIO(StoreEntry &, StoreIOState::STFNCB *, StoreIOState::STIOCB *, void *) override;
60 virtual StoreIOState::Pointer openStoreIO(StoreEntry &, StoreIOState::STFNCB *, StoreIOState::STIOCB *, void *) override;
61 virtual void openLog() override;
62 virtual void closeLog() override;
63 virtual int writeCleanStart() override;
64 virtual void writeCleanDone() override;
65 virtual void logEntry(const StoreEntry & e, int op) const override;
66 virtual void parse(int index, char *path) override;
67 virtual void reconfigure() override;
68 virtual int callback() override;
69 virtual void sync() override;
70 virtual void swappedOut(const StoreEntry &e) override;
71 virtual uint64_t currentSize() const override { return cur_size; }
72 virtual uint64_t currentCount() const override { return n_disk_objects; }
73 virtual ConfigOption *getOptionTree() const override;
74
75 void unlinkFile(sfileno f);
76 // move down when unlink is a virtual method
77 //protected:
78 Fs::Ufs::UFSStrategy *IO;
79 char *fullPath(sfileno, char *) const;
80 /* temp */
81 void closeTmpSwapLog();
82 FILE *openTmpSwapLog(int *clean_flag, int *zero_flag);
83 char *swapSubDir(int subdirn) const;
84 int mapBitTest(sfileno filn);
85 void mapBitReset(sfileno filn);
86 void mapBitSet(sfileno filn);
87 /** Add a new object to the cache with empty memory copy and pointer to disk
88 *
89 * This method is used to rebuild a store from disk
90 */
91 StoreEntry *addDiskRestore(const cache_key * key,
92 sfileno file_number,
93 uint64_t swap_file_sz,
94 time_t expires,
95 time_t timestamp,
96 time_t lastref,
97 time_t lastmod,
98 uint32_t refcount,
99 uint16_t flags,
100 int clean);
101 /// Undo the effects of UFSSwapDir::addDiskRestore().
102 void undoAddDiskRestore(StoreEntry *e);
103 int validFileno(sfileno filn, int flag) const;
104 int mapBitAllocate();
105
106 void *fsdata;
107
108 bool validL2(int) const;
109 bool validL1(int) const;
110
111 /** Add and remove the given StoreEntry from the replacement policy in use */
112 void replacementAdd(StoreEntry *e);
113 void replacementRemove(StoreEntry *e);
114
115 protected:
116 FileMap *map;
117 int suggest;
118 int l1;
119 int l2;
120
121 private:
122 void parseSizeL1L2();
123 static int NumberOfUFSDirs;
124 static int * UFSDirToGlobalDirMapping;
125 bool pathIsDirectory(const char *path)const;
126 int swaplog_fd;
127 static EVH CleanEvent;
128 /** Verify that the the CacheDir exists
129 *
130 * If this returns < 0, then Squid exits, complains about swap
131 * directories not existing, and instructs the admin to run 'squid -z'
132 * Called by UFSSwapDir::init
133 */
134 bool verifyCacheDirs();
135 void rebuild();
136 int createDirectory(const char *path, int);
137 void createSwapSubDirs();
138 void dumpEntry(StoreEntry &) const;
139 char *logFile(char const *ext = NULL)const;
140 void changeIO(DiskIOModule *);
141 bool optionIOParse(char const *option, const char *value, int reconfiguring);
142 void optionIODump(StoreEntry * e) const;
143 mutable ConfigOptionVector *currentIOOptions;
144 char const *ioType;
145 uint64_t cur_size; ///< currently used space in the storage area
146 uint64_t n_disk_objects; ///< total number of objects stored
147 };
148
149 } //namespace Ufs
150 } //namespace Fs
151 #endif /* SQUID_FS_UFS_UFSSWAPDIR_H */
152