]> git.ipfire.org Git - thirdparty/squid.git/blame - src/DiskIO/DiskIOStrategy.h
SourceFormat Enforcement
[thirdparty/squid.git] / src / DiskIO / DiskIOStrategy.h
CommitLineData
b9ae18aa 1/*
bde978a6 2 * Copyright (C) 1996-2015 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
15class DiskFile;
16
17class ConfigOption;
18
19class DiskIOStrategy
20{
21
22public:
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
59class SingletonIOStrategy : public DiskIOStrategy
60{
61
62public:
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
85private:
86 DiskIOStrategy *io;
87};
88
89#endif /* SQUID_DISKIOSTRATEGY_H */
f53969cc 90