]>
Commit | Line | Data |
---|---|---|
b9ae18aa | 1 | /* |
bbc27441 | 2 | * Copyright (C) 1996-2014 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 | ||
bbc27441 AJ |
9 | /* DEBUG: section 92 Storage File System */ |
10 | ||
582c2af2 | 11 | #include "squid.h" |
b9ae18aa | 12 | #include "DiskIOModule.h" |
13 | ||
c8ea3cc0 | 14 | std::vector<DiskIOModule*> *DiskIOModule::_Modules = NULL; |
b9ae18aa | 15 | |
16 | //DiskIOModule() : initialised (false) {} | |
09c5ae5a | 17 | |
b9ae18aa | 18 | DiskIOModule::DiskIOModule() |
19 | { | |
09c5ae5a AJ |
20 | /** We cannot call ModuleAdd(*this) |
21 | * here as the virtual methods are not yet available. | |
22 | * We leave that to PokeAllModules() later. | |
b9ae18aa | 23 | */ |
24 | } | |
25 | ||
26 | void | |
27 | DiskIOModule::SetupAllModules() | |
28 | { | |
09c5ae5a AJ |
29 | DiskIOModule::PokeAllModules(); |
30 | ||
b9ae18aa | 31 | for (iterator i = GetModules().begin(); i != GetModules().end(); ++i) |
32 | /* Call the FS to set up capabilities and initialize the FS driver */ | |
33 | (*i)->init(); | |
34 | } | |
35 | ||
36 | void | |
37 | DiskIOModule::ModuleAdd(DiskIOModule &instance) | |
38 | { | |
39 | iterator i = GetModules().begin(); | |
40 | ||
41 | while (i != GetModules().end()) { | |
42 | assert(strcmp((*i)->type(), instance.type()) != 0); | |
43 | ++i; | |
44 | } | |
45 | ||
46 | GetModules().push_back (&instance); | |
47 | } | |
48 | ||
c8ea3cc0 | 49 | std::vector<DiskIOModule *> const & |
b9ae18aa | 50 | DiskIOModule::Modules() |
51 | { | |
52 | return GetModules(); | |
53 | } | |
54 | ||
c8ea3cc0 | 55 | std::vector<DiskIOModule*> & |
b9ae18aa | 56 | DiskIOModule::GetModules() |
57 | { | |
58 | if (!_Modules) | |
c8ea3cc0 | 59 | _Modules = new std::vector<DiskIOModule *>; |
b9ae18aa | 60 | |
61 | return *_Modules; | |
62 | } | |
63 | ||
09c5ae5a AJ |
64 | /** |
65 | * Called when a graceful shutdown is to occur | |
b9ae18aa | 66 | * of each fs module. |
67 | */ | |
68 | void | |
69 | DiskIOModule::FreeAllModules() | |
70 | { | |
385acf91 | 71 | while (!GetModules().empty()) { |
b9ae18aa | 72 | DiskIOModule *fs = GetModules().back(); |
73 | GetModules().pop_back(); | |
1e1a9021 | 74 | fs->gracefulShutdown(); |
b9ae18aa | 75 | } |
76 | } | |
77 | ||
78 | DiskIOModule * | |
79 | DiskIOModule::Find(char const *type) | |
80 | { | |
81 | for (iterator i = GetModules().begin(); i != GetModules().end(); ++i) | |
82 | if (strcasecmp(type, (*i)->type()) == 0) | |
83 | return *i; | |
84 | ||
85 | return NULL; | |
86 | } | |
62ee09ca | 87 | |
b7717b61 | 88 | DiskIOModule * |
89 | DiskIOModule::FindDefault() | |
90 | { | |
09c5ae5a | 91 | /** Best IO options are in order: */ |
b7717b61 | 92 | DiskIOModule * result; |
93 | result = Find("DiskThreads"); | |
94 | if (NULL == result) | |
95 | result = Find("DiskDaemon"); | |
96 | if (NULL == result) | |
97 | result = Find("AIO"); | |
98 | if (NULL == result) | |
99 | result = Find("Blocking"); | |
100 | return result; | |
101 | } |