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