]>
Commit | Line | Data |
---|---|---|
1 | /* | |
2 | * Copyright (C) 1996-2025 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_DISKIO_DISKIOSTRATEGY_H | |
10 | #define SQUID_SRC_DISKIO_DISKIOSTRATEGY_H | |
11 | ||
12 | #include "base/RefCount.h" | |
13 | #include "Store.h" | |
14 | ||
15 | class DiskFile; | |
16 | ||
17 | class ConfigOption; | |
18 | ||
19 | class DiskIOStrategy | |
20 | { | |
21 | ||
22 | public: | |
23 | virtual ~DiskIOStrategy() {} | |
24 | ||
25 | /** Can the IO Strategy handle more requests ? */ | |
26 | virtual bool shedLoad() = 0; | |
27 | ||
28 | /** What is the current load? 999 = 99.9% */ | |
29 | virtual int load() = 0; | |
30 | ||
31 | /** Return a handle for performing IO operations */ | |
32 | virtual RefCount<DiskFile> newFile(char const *path) = 0; | |
33 | ||
34 | /** flush all IO operations */ | |
35 | virtual void sync() {} | |
36 | ||
37 | /** whether the IO Strategy can use unlinkd */ | |
38 | virtual bool unlinkdUseful() const = 0; | |
39 | ||
40 | /** unlink a file by path */ | |
41 | virtual void unlinkFile(char const *) = 0; | |
42 | ||
43 | /** perform any pending callbacks */ | |
44 | virtual int callback() { return 0; } | |
45 | ||
46 | /** Init per-instance logic */ | |
47 | virtual void init() {} | |
48 | ||
49 | /** cachemgr output on the IO instance stats */ | |
50 | virtual void statfs(StoreEntry &) const {} | |
51 | ||
52 | /** module specific options */ | |
53 | virtual ConfigOption *getOptionTree() const {return nullptr;} | |
54 | }; | |
55 | ||
56 | /* Because we need the DiskFile definition for newFile. */ | |
57 | #include "DiskFile.h" | |
58 | ||
59 | class SingletonIOStrategy : public DiskIOStrategy | |
60 | { | |
61 | ||
62 | public: | |
63 | SingletonIOStrategy(DiskIOStrategy *anIO) : io(anIO) {} | |
64 | ||
65 | bool shedLoad() override { return io->shedLoad(); } | |
66 | ||
67 | int load() override { return io->load(); } | |
68 | ||
69 | RefCount<DiskFile> newFile (char const *path) override {return io->newFile(path); } | |
70 | ||
71 | void sync() override { io->sync(); } | |
72 | ||
73 | bool unlinkdUseful() const override { return io->unlinkdUseful(); } | |
74 | ||
75 | void unlinkFile(char const *path) override { io->unlinkFile(path); } | |
76 | ||
77 | int callback() override { return io->callback(); } | |
78 | ||
79 | void init() override { io->init(); } | |
80 | ||
81 | void statfs(StoreEntry & sentry) const override { io->statfs(sentry); } | |
82 | ||
83 | ConfigOption *getOptionTree() const override { return io->getOptionTree(); } | |
84 | ||
85 | private: | |
86 | DiskIOStrategy *io; | |
87 | }; | |
88 | ||
89 | #endif /* SQUID_SRC_DISKIO_DISKIOSTRATEGY_H */ | |
90 |