]>
git.ipfire.org Git - thirdparty/squid.git/blob - src/DiskIO/DiskIOModule.cc
2 * Copyright (C) 1996-2022 The Squid Software Foundation and contributors
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.
9 /* DEBUG: section 92 Storage File System */
12 #include "DiskIOModule.h"
13 #if HAVE_DISKIO_MODULE_AIO
14 #include "DiskIO/AIO/AIODiskIOModule.h"
16 #if HAVE_DISKIO_MODULE_BLOCKING
17 #include "DiskIO/Blocking/BlockingDiskIOModule.h"
19 #if HAVE_DISKIO_MODULE_DISKDAEMON
20 #include "DiskIO/DiskDaemon/DiskDaemonDiskIOModule.h"
22 #if HAVE_DISKIO_MODULE_DISKTHREADS
23 #include "DiskIO/DiskThreads/DiskThreadsDiskIOModule.h"
25 #if HAVE_DISKIO_MODULE_IPCIO
26 #include "DiskIO/IpcIo/IpcIoDiskIOModule.h"
28 #if HAVE_DISKIO_MODULE_MMAPPED
29 #include "DiskIO/Mmapped/MmappedDiskIOModule.h"
32 std::vector
<DiskIOModule
*> *DiskIOModule::_Modules
= nullptr;
34 //DiskIOModule() : initialised (false) {}
36 DiskIOModule::DiskIOModule()
38 /** We cannot call ModuleAdd(*this)
39 * here as the virtual methods are not yet available.
40 * We leave that to SetupAllModules() later.
45 DiskIOModule::SetupAllModules()
47 #if HAVE_DISKIO_MODULE_AIO
48 AIODiskIOModule::GetInstance();
50 #if HAVE_DISKIO_MODULE_BLOCKING
51 BlockingDiskIOModule::GetInstance();
53 #if HAVE_DISKIO_MODULE_DISKDAEMON
54 DiskDaemonDiskIOModule::GetInstance();
56 #if HAVE_DISKIO_MODULE_DISKTHREADS
57 DiskThreadsDiskIOModule::GetInstance();
59 #if HAVE_DISKIO_MODULE_IPCIO
60 IpcIoDiskIOModule::GetInstance();
62 #if HAVE_DISKIO_MODULE_MMAPPED
63 MmappedDiskIOModule::GetInstance();
66 for (iterator i
= GetModules().begin(); i
!= GetModules().end(); ++i
)
67 /* Call the FS to set up capabilities and initialize the FS driver */
72 DiskIOModule::ModuleAdd(DiskIOModule
&instance
)
74 iterator i
= GetModules().begin();
76 while (i
!= GetModules().end()) {
77 assert(strcmp((*i
)->type(), instance
.type()) != 0);
81 GetModules().push_back (&instance
);
84 std::vector
<DiskIOModule
*> const &
85 DiskIOModule::Modules()
90 std::vector
<DiskIOModule
*> &
91 DiskIOModule::GetModules()
94 _Modules
= new std::vector
<DiskIOModule
*>;
100 * Called when a graceful shutdown is to occur
104 DiskIOModule::FreeAllModules()
106 while (!GetModules().empty()) {
107 DiskIOModule
*fs
= GetModules().back();
108 GetModules().pop_back();
109 fs
->gracefulShutdown();
114 DiskIOModule::Find(char const *type
)
116 for (iterator i
= GetModules().begin(); i
!= GetModules().end(); ++i
)
117 if (strcasecmp(type
, (*i
)->type()) == 0)
124 DiskIOModule::FindDefault()
126 /** Best IO options are in order: */
127 DiskIOModule
* result
;
128 result
= Find("DiskThreads");
129 if (nullptr == result
)
130 result
= Find("DiskDaemon");
131 if (nullptr == result
)
132 result
= Find("AIO");
133 if (nullptr == result
)
134 result
= Find("Blocking");