]>
git.ipfire.org Git - thirdparty/squid.git/blob - src/fs/ufs/UFSSwapDir.h
2 * Copyright (C) 1996-2023 The Squid Software Foundation and contributors
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.
9 #ifndef SQUID_SRC_FS_UFS_UFSSWAPDIR_H
10 #define SQUID_SRC_FS_UFS_UFSSWAPDIR_H
12 #include "SquidString.h"
14 #include "store/Disk.h"
15 #include "StoreIOState.h"
16 #include "StoreSearch.h"
17 #include "swap_log_op.h"
18 #include "UFSStrategy.h"
21 class ConfigOptionVector
;
30 class UFSSwapDir
: public SwapDir
33 static bool IsUFSDir(SwapDir
* sd
);
34 static int DirClean(int swap_index
);
35 /** check whether swapfile belongs to the specified cachedir/l1dir/l2dir
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
41 static bool FilenoBelongsHere(int fn
, int cachedir
, int level1dir
, int level2dir
);
43 UFSSwapDir(char const *aType
, const char *aModuleType
);
44 ~UFSSwapDir() override
;
47 void create() override
;
49 void dump(StoreEntry
&) const override
;
50 bool doubleCheck(StoreEntry
&) override
;
51 bool unlinkdUseful() const override
;
52 void statfs(StoreEntry
&) const override
;
53 void maintain() override
;
54 void evictCached(StoreEntry
&) override
;
55 void evictIfFound(const cache_key
*) override
;
56 bool canStore(const StoreEntry
&e
, int64_t diskSpaceNeeded
, int &load
) const override
;
57 void reference(StoreEntry
&) override
;
58 bool dereference(StoreEntry
&) override
;
59 StoreIOState::Pointer
createStoreIO(StoreEntry
&, StoreIOState::STIOCB
*, void *) override
;
60 StoreIOState::Pointer
openStoreIO(StoreEntry
&, StoreIOState::STIOCB
*, void *) override
;
61 void openLog() override
;
62 void closeLog() override
;
63 int writeCleanStart() override
;
64 void writeCleanDone() override
;
65 void logEntry(const StoreEntry
& e
, int op
) const override
;
66 void parse(int index
, char *path
) override
;
67 void reconfigure() override
;
68 int callback() override
;
70 void finalizeSwapoutSuccess(const StoreEntry
&) override
;
71 void finalizeSwapoutFailure(StoreEntry
&) override
;
72 uint64_t currentSize() const override
{ return cur_size
; }
73 uint64_t currentCount() const override
{ return n_disk_objects
; }
74 ConfigOption
*getOptionTree() const override
;
75 bool smpAware() const override
{ return false; }
76 /// as long as ufs relies on the global store_table to index entries,
77 /// it is wrong to ask individual ufs cache_dirs whether they have an entry
78 bool hasReadableEntry(const StoreEntry
&) const override
{ return false; }
80 void unlinkFile(sfileno f
);
81 // move down when unlink is a virtual method
83 Fs::Ufs::UFSStrategy
*IO
;
84 char *fullPath(sfileno
, char *) const;
86 void closeTmpSwapLog();
87 FILE *openTmpSwapLog(int *clean_flag
, int *zero_flag
);
88 char *swapSubDir(int subdirn
) const;
89 int mapBitTest(sfileno filn
);
90 void mapBitReset(sfileno filn
);
91 void mapBitSet(sfileno filn
);
92 /** Add a new object to the cache with empty memory copy and pointer to disk
94 * This method is used to rebuild a store from disk
96 StoreEntry
*addDiskRestore(const cache_key
* key
,
98 uint64_t swap_file_sz
,
106 int validFileno(sfileno filn
, int flag
) const;
107 int mapBitAllocate();
111 bool validL2(int) const;
112 bool validL1(int) const;
114 /** Add and remove the given StoreEntry from the replacement policy in use */
115 void replacementAdd(StoreEntry
*e
);
116 void replacementRemove(StoreEntry
*e
);
125 void parseSizeL1L2();
126 static int NumberOfUFSDirs
;
127 static int * UFSDirToGlobalDirMapping
;
128 bool pathIsDirectory(const char *path
)const;
130 static EVH CleanEvent
;
131 static int HandleCleanEvent();
132 /** Verify that the the CacheDir exists
134 * If this returns < 0, then Squid exits, complains about swap
135 * directories not existing, and instructs the admin to run 'squid -z'
136 * Called by UFSSwapDir::init
138 bool verifyCacheDirs();
140 int createDirectory(const char *path
, int);
141 void createSwapSubDirs();
142 void dumpEntry(StoreEntry
&) const;
143 SBuf
logFile(char const *ext
= nullptr) const;
144 void changeIO(DiskIOModule
*);
145 bool optionIOParse(char const *option
, const char *value
, int reconfiguring
);
146 void optionIODump(StoreEntry
* e
) const;
147 mutable ConfigOptionVector
*currentIOOptions
;
149 uint64_t cur_size
; ///< currently used space in the storage area
150 uint64_t n_disk_objects
; ///< total number of objects stored
151 bool rebuilding_
; ///< whether RebuildState is writing the new swap.state
156 #endif /* SQUID_SRC_FS_UFS_UFSSWAPDIR_H */