Go to the documentation of this file.
2 * Copyright (C) 1996-2023 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 */
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"
20class HttpRequest;
22class FileMap;
23class DiskIOModule;
25namespace Fs
27namespace Ufs
30class UFSSwapDir : public SwapDir
33 static bool IsUFSDir(SwapDir* sd);
34 static int DirClean(int swap_index);
41 static bool FilenoBelongsHere(int fn, int cachedir, int level1dir, int level2dir);
43 UFSSwapDir(char const *aType, const char *aModuleType);
44 ~UFSSwapDir() override;
46 /* Store::Disk API */
47 void create() override;
48 void init() 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;
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;
69 void sync() 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; }
78 bool hasReadableEntry(const StoreEntry &) const override { return false; }
80 void unlinkFile(sfileno f);
81 // move down when unlink is a virtual method
82 //protected:
84 char *fullPath(sfileno, char *) const;
85 /* temp */
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);
97 sfileno file_number,
98 uint64_t swap_file_sz,
99 time_t expires,
100 time_t timestamp,
101 time_t lastref,
102 time_t lastmod,
103 uint32_t refcount,
104 uint16_t flags,
105 int clean);
106 int validFileno(sfileno filn, int flag) const;
107 int mapBitAllocate();
109 void *fsdata;
111 bool validL2(int) const;
112 bool validL1(int) const;
115 void replacementAdd(StoreEntry *e);
121 int l1;
122 int l2;
125 void parseSizeL1L2();
126 static int NumberOfUFSDirs;
128 bool pathIsDirectory(const char *path)const;
131 static int HandleCleanEvent();
138 bool verifyCacheDirs();
139 void rebuild();
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;
148 char const *ioType;
149 uint64_t cur_size;
150 uint64_t n_disk_objects;
154} //namespace Ufs
155} //namespace Fs
void openLog() override
Definition: UFSSwapDir.cc:727
bool pathIsDirectory(const char *path) const
Definition: UFSSwapDir.cc:628
void sync() override
prepare for shutdown
Definition: UFSSwapDir.cc:1263
ConfigOptionVector * currentIOOptions
Definition: UFSSwapDir.h:147
static EVH CleanEvent
Definition: UFSSwapDir.h:130
void finalizeSwapoutFailure(StoreEntry &) override
abort the failed swapout that has been already noticed by Store
Definition: UFSSwapDir.cc:1276
uint64_t currentCount() const override
the total number of objects stored right now
Definition: UFSSwapDir.h:73
bool unlinkdUseful() const override
whether SwapDir may benefit from unlinkd
Definition: UFSSwapDir.cc:1172
int callback() override
called once every main loop iteration; TODO: Move to UFS code.
Definition: UFSSwapDir.cc:1257
void replacementAdd(StoreEntry *e)
Definition: UFSSwapDir.cc:1208
void evictIfFound(const cache_key *) override
Definition: UFSSwapDir.cc:1201
uint64_t currentSize() const override
current size
Definition: UFSSwapDir.h:72
UFSSwapDir(char const *aType, const char *aModuleType)
Definition: UFSSwapDir.cc:306
StoreEntry * addDiskRestore(const cache_key *key, sfileno file_number, uint64_t swap_file_sz, time_t expires, time_t timestamp, time_t lastref, time_t lastmod, uint32_t refcount, uint16_t flags, int clean)
Definition: UFSSwapDir.cc:787
void mapBitReset(sfileno filn)
Definition: UFSSwapDir.cc:569
void optionIODump(StoreEntry *e) const
Definition: UFSSwapDir.cc:243
int createDirectory(const char *path, int)
Definition: UFSSwapDir.cc:603
void changeIO(DiskIOModule *)
Definition: UFSSwapDir.cc:193
~UFSSwapDir() override
Definition: UFSSwapDir.cc:327
void reconfigure() override
Definition: UFSSwapDir.cc:172
void finalizeSwapoutSuccess(const StoreEntry &) override
finalize the successful swapout that has been already noticed by Store
Definition: UFSSwapDir.cc:1269
void parse(int index, char *path) override
Definition: UFSSwapDir.cc:179
void statfs(StoreEntry &) const override
Definition: UFSSwapDir.cc:370
static int DirClean(int swap_index)
Definition: UFSSwapDir.cc:1313
SBuf logFile(char const *ext=nullptr) const
Definition: UFSSwapDir.cc:688
FILE * openTmpSwapLog(int *clean_flag, int *zero_flag)
Definition: UFSSwapDir.cc:858
void create() override
create system resources needed for this store to operate in the future
Definition: UFSSwapDir.cc:299
bool hasReadableEntry(const StoreEntry &) const override
Definition: UFSSwapDir.h:78
void mapBitSet(sfileno filn)
Definition: UFSSwapDir.cc:563
void evictCached(StoreEntry &) override
Definition: UFSSwapDir.cc:1179
char const * ioType
Definition: UFSSwapDir.h:148
void reference(StoreEntry &) override
somebody needs this entry (many cache replacement policies need to know)
Definition: UFSSwapDir.cc:523
char * swapSubDir(int subdirn) const
Definition: UFSSwapDir.cc:594
uint64_t n_disk_objects
total number of objects stored
Definition: UFSSwapDir.h:150
static int * UFSDirToGlobalDirMapping
Definition: UFSSwapDir.h:127
void init() override
Definition: UFSSwapDir.cc:271
int validFileno(sfileno filn, int flag) const
Definition: UFSSwapDir.cc:1145
void replacementRemove(StoreEntry *e)
Definition: UFSSwapDir.cc:1215
int mapBitTest(sfileno filn)
Definition: UFSSwapDir.cc:557
Fs::Ufs::UFSStrategy * IO
Definition: UFSSwapDir.h:83
void dumpEntry(StoreEntry &) const
Definition: UFSSwapDir.cc:340
bool dereference(StoreEntry &) override
Definition: UFSSwapDir.cc:533
bool rebuilding_
whether RebuildState is writing the new swap.state
Definition: UFSSwapDir.h:151
bool doubleCheck(StoreEntry &) override
Definition: UFSSwapDir.cc:348
void maintain() override
perform regular periodic maintenance; TODO: move to UFSSwapDir::Maintain
Definition: UFSSwapDir.cc:413
static bool IsUFSDir(SwapDir *sd)
Definition: UFSSwapDir.cc:1103
ConfigOption * getOptionTree() const override
Definition: UFSSwapDir.cc:249
static int NumberOfUFSDirs
Definition: UFSSwapDir.h:126
StoreIOState::Pointer createStoreIO(StoreEntry &, StoreIOState::STIOCB *, void *) override
Definition: UFSSwapDir.cc:545
StoreIOState::Pointer openStoreIO(StoreEntry &, StoreIOState::STIOCB *, void *) override
Definition: UFSSwapDir.cc:551
void logEntry(const StoreEntry &e, int op) const override
Definition: UFSSwapDir.cc:1284
void dump(StoreEntry &) const override
Definition: UFSSwapDir.cc:1229
static bool FilenoBelongsHere(int fn, int cachedir, int level1dir, int level2dir)
Definition: UFSSwapDir.cc:1115
char * fullPath(sfileno, char *) const
Definition: UFSSwapDir.cc:1236
int writeCleanStart() override
Definition: UFSSwapDir.cc:932
void closeLog() override
Definition: UFSSwapDir.cc:754
static int HandleCleanEvent()
safely cleans a few unused files if possible
Definition: UFSSwapDir.cc:1039
void unlinkFile(sfileno f)
Definition: UFSSwapDir.cc:1162
bool validL1(int) const
Definition: UFSSwapDir.cc:775
uint64_t cur_size
currently used space in the storage area
Definition: UFSSwapDir.h:149
bool smpAware() const override
whether this disk storage is capable of serving multiple workers
Definition: UFSSwapDir.h:75
bool optionIOParse(char const *option, const char *value, int reconfiguring)
Definition: UFSSwapDir.cc:216
bool canStore(const StoreEntry &e, int64_t diskSpaceNeeded, int &load) const override
check whether we can store the entry; if we can, report current load
Definition: UFSSwapDir.cc:114
bool validL2(int) const
Definition: UFSSwapDir.cc:781
void writeCleanDone() override
Definition: UFSSwapDir.cc:976
Definition: SBuf.h:94
void STIOCB(void *their_data, int errflag, StoreIOState::Pointer self)
Definition: StoreIOState.h:39
manages a single cache_dir
Definition: Disk.h:22
char * path
Definition: Disk.h:102
int index
Definition: Disk.h:103
struct Store::Disk::Flags flags
void EVH(void *)
Definition: event.h:18
int reconfiguring
Definition: Module.h:13
unsigned char cache_key
Store key.
Definition: forward.h:29
signed_int32_t sfileno
Definition: forward.h:22






Web Site Translations