UFSSwapDir.h
Go to the documentation of this file.
1 /*
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  */
8 
9 #ifndef SQUID_SRC_FS_UFS_UFSSWAPDIR_H
10 #define SQUID_SRC_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 {
30 class UFSSwapDir : public SwapDir
31 {
32 public:
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);
42 
43  UFSSwapDir(char const *aType, const char *aModuleType);
44  ~UFSSwapDir() override;
45 
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; }
79 
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);
96  StoreEntry *addDiskRestore(const cache_key * key,
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();
108 
109  void *fsdata;
110 
111  bool validL2(int) const;
112  bool validL1(int) const;
113 
115  void replacementAdd(StoreEntry *e);
116  void replacementRemove(StoreEntry *e);
117 
118 protected:
120  int suggest;
121  int l1;
122  int l2;
123 
124 private:
125  void parseSizeL1L2();
126  static int NumberOfUFSDirs;
128  bool pathIsDirectory(const char *path)const;
130  static EVH CleanEvent;
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;
151  bool rebuilding_;
152 };
153 
154 } //namespace Ufs
155 } //namespace Fs
156 #endif /* SQUID_SRC_FS_UFS_UFSSWAPDIR_H */
157 
static int NumberOfUFSDirs
Definition: UFSSwapDir.h:126
void unlinkFile(sfileno f)
Definition: UFSSwapDir.cc:1162
bool hasReadableEntry(const StoreEntry &) const override
Definition: UFSSwapDir.h:78
void sync() override
prepare for shutdown
Definition: UFSSwapDir.cc:1262
void optionIODump(StoreEntry *e) const
Definition: UFSSwapDir.cc:244
void replacementRemove(StoreEntry *e)
Definition: UFSSwapDir.cc:1214
void mapBitSet(sfileno filn)
Definition: UFSSwapDir.cc:564
manages a single cache_dir
Definition: Disk.h:21
unsigned char cache_key
Store key.
Definition: forward.h:29
void evictCached(StoreEntry &) override
Definition: UFSSwapDir.cc:1178
bool smpAware() const override
whether this disk storage is capable of serving multiple workers
Definition: UFSSwapDir.h:75
int mapBitTest(sfileno filn)
Definition: UFSSwapDir.cc:558
bool pathIsDirectory(const char *path) const
Definition: UFSSwapDir.cc:629
SBuf logFile(char const *ext=nullptr) const
Definition: UFSSwapDir.cc:689
Definition: SBuf.h:93
~UFSSwapDir() override
Definition: UFSSwapDir.cc:328
void reconfigure() override
Definition: UFSSwapDir.cc:173
static EVH CleanEvent
Definition: UFSSwapDir.h:130
void logEntry(const StoreEntry &e, int op) const override
Definition: UFSSwapDir.cc:1283
static bool FilenoBelongsHere(int fn, int cachedir, int level1dir, int level2dir)
Definition: UFSSwapDir.cc:1115
static int * UFSDirToGlobalDirMapping
Definition: UFSSwapDir.h:127
static int DirClean(int swap_index)
Definition: UFSSwapDir.cc:1312
void statfs(StoreEntry &) const override
Definition: UFSSwapDir.cc:371
void parse(int index, char *path) override
Definition: UFSSwapDir.cc:180
char * swapSubDir(int subdirn) const
Definition: UFSSwapDir.cc:595
void mapBitReset(sfileno filn)
Definition: UFSSwapDir.cc:570
struct Store::Disk::Flags flags
void openLog() override
Definition: UFSSwapDir.cc:728
void create() override
create system resources needed for this store to operate in the future
Definition: UFSSwapDir.cc:300
Fs::Ufs::UFSStrategy * IO
Definition: UFSSwapDir.h:83
void changeIO(DiskIOModule *)
Definition: UFSSwapDir.cc:194
void init() override
Definition: UFSSwapDir.cc:272
FILE * openTmpSwapLog(int *clean_flag, int *zero_flag)
Definition: UFSSwapDir.cc:858
bool rebuilding_
whether RebuildState is writing the new swap.state
Definition: UFSSwapDir.h:151
int validFileno(sfileno filn, int flag) const
Definition: UFSSwapDir.cc:1145
int callback() override
called once every main loop iteration; TODO: Move to UFS code.
Definition: UFSSwapDir.cc:1256
char * path
Definition: Disk.h:102
bool optionIOParse(char const *option, const char *value, int reconfiguring)
Definition: UFSSwapDir.cc:217
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:115
void finalizeSwapoutSuccess(const StoreEntry &) override
finalize the successful swapout that has been already noticed by Store
Definition: UFSSwapDir.cc:1268
ConfigOption * getOptionTree() const override
Definition: UFSSwapDir.cc:250
int reconfiguring
StoreIOState::Pointer openStoreIO(StoreEntry &, StoreIOState::STIOCB *, void *) override
Definition: UFSSwapDir.cc:552
void evictIfFound(const cache_key *) override
Definition: UFSSwapDir.cc:1200
void dumpEntry(StoreEntry &) const
Definition: UFSSwapDir.cc:341
void writeCleanDone() override
Definition: UFSSwapDir.cc:976
void maintain() override
perform regular periodic maintenance; TODO: move to UFSSwapDir::Maintain
Definition: UFSSwapDir.cc:414
bool unlinkdUseful() const override
whether SwapDir may benefit from unlinkd
Definition: UFSSwapDir.cc:1171
int createDirectory(const char *path, int)
Definition: UFSSwapDir.cc:604
bool validL2(int) const
Definition: UFSSwapDir.cc:782
void reference(StoreEntry &) override
somebody needs this entry (many cache replacement policies need to know)
Definition: UFSSwapDir.cc:524
bool doubleCheck(StoreEntry &) override
Definition: UFSSwapDir.cc:349
signed_int32_t sfileno
Definition: forward.h:22
bool validL1(int) const
Definition: UFSSwapDir.cc:776
void EVH(void *)
Definition: event.h:18
uint64_t cur_size
currently used space in the storage area
Definition: UFSSwapDir.h:149
void STIOCB(void *their_data, int errflag, StoreIOState::Pointer self)
Definition: StoreIOState.h:39
void closeLog() override
Definition: UFSSwapDir.cc:755
Definition: Module.h:12
UFSSwapDir(char const *aType, const char *aModuleType)
Definition: UFSSwapDir.cc:307
void replacementAdd(StoreEntry *e)
Definition: UFSSwapDir.cc:1207
uint64_t currentSize() const override
current size
Definition: UFSSwapDir.h:72
uint64_t n_disk_objects
total number of objects stored
Definition: UFSSwapDir.h:150
int index
Definition: Disk.h:103
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:788
ConfigOptionVector * currentIOOptions
Definition: UFSSwapDir.h:147
int writeCleanStart() override
Definition: UFSSwapDir.cc:932
char * fullPath(sfileno, char *) const
Definition: UFSSwapDir.cc:1235
const char * ioType
Definition: UFSSwapDir.h:148
void dump(StoreEntry &) const override
Definition: UFSSwapDir.cc:1228
static bool IsUFSDir(SwapDir *sd)
Definition: UFSSwapDir.cc:1103
StoreIOState::Pointer createStoreIO(StoreEntry &, StoreIOState::STIOCB *, void *) override
Definition: UFSSwapDir.cc:546
bool dereference(StoreEntry &) override
Definition: UFSSwapDir.cc:534
uint64_t currentCount() const override
the total number of objects stored right now
Definition: UFSSwapDir.h:73
void finalizeSwapoutFailure(StoreEntry &) override
abort the failed swapout that has been already noticed by Store
Definition: UFSSwapDir.cc:1275
static int HandleCleanEvent()
safely cleans a few unused files if possible
Definition: UFSSwapDir.cc:1039

 

Introduction

Documentation

Support

Miscellaneous