Squid Web Cache master
Loading...
Searching...
No Matches
pconn.h
Go to the documentation of this file.
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_PCONN_H
10#define SQUID_SRC_PCONN_H
11
12#include "base/CbcPointer.h"
14#include "mgr/forward.h"
15
16#include <set>
17#include <iosfwd>
18
24class PconnPool;
25class PeerPoolMgr;
26
27#include "cbdata.h"
28#include "hash.h"
29/* for IOCB */
30#include "comm.h"
31
33#define PCONN_HIST_SZ (1<<16)
34
39{
41
42public:
43 IdleConnList(const char *key, PconnPool *parent);
44 ~IdleConnList() override;
45
47 void push(const Comm::ConnectionPointer &conn);
48
51
59
60 void clearHandlers(const Comm::ConnectionPointer &conn);
61
62 // TODO: Upgrade to return size_t
63 int count() const { return size_; }
64
65 void closeN(size_t count);
66
67 // IndependentRunner API
68 void endingShutdown() override;
69private:
70 bool isAvailable(int i) const;
71 bool removeAt(size_t index);
72 int findIndexOf(const Comm::ConnectionPointer &conn) const;
73 void findAndClose(const Comm::ConnectionPointer &conn);
74 static IOCB Read;
75 static CTCB Timeout;
76
77private:
84
86 size_t capacity_;
88 size_t size_;
89
96
97 char fakeReadBuf_[4096]; // TODO: kill magic number.
98};
99
100#include "ip/forward.h"
101
102class StoreEntry;
103class IdleConnLimit;
104
105/* for hash_table */
106#include "hash.h"
107
116{
117
118public:
119 PconnPool(const char *aDescription, const CbcPointer<PeerPoolMgr> &aMgr);
120 ~PconnPool();
121
123 void push(const Comm::ConnectionPointer &serverConn, const char *domain);
124
137 Comm::ConnectionPointer pop(const Comm::ConnectionPointer &dest, const char *domain, bool keepOpen);
138 void count(int uses);
139 void dump(std::ostream &) const;
140 void unlinkList(IdleConnList *list);
141 void noteUses(int uses);
143 void closeN(int n);
144 int count() const { return theCount; }
147
148 // sends an async message to the pool manager, if any
149 void notifyManager(const char *reason);
150
151private:
152
153 static const char *key(const Comm::ConnectionPointer &destLink, const char *domain);
154
155 Comm::ConnectionPointer popStored(const Comm::ConnectionPointer &dest, const char *domain, const bool keepOpen);
156 void dumpHist(std::ostream &) const;
157 void dumpHash(std::ostream &) const;
158
161 const char *descr;
164};
165
166class StoreEntry;
167class PconnPool;
168
173{
174
175public:
179 static PconnModule * GetInstance();
181 static void DumpWrapper(StoreEntry *e);
182
183 PconnModule();
184 void registerWithCacheManager(void);
185
186 void add(PconnPool *);
187 void remove(PconnPool *);
188
189 void dump(std::ostream &yaml);
190
191private:
192 typedef std::set<PconnPool*> Pools;
194
196};
197
198#endif /* SQUID_SRC_PCONN_H */
199
void CTCB(const CommTimeoutCbParams &params)
Definition CommCalls.h:37
void IOCB(const Comm::ConnectionPointer &conn, char *, size_t size, Comm::Flag flag, int xerrno, void *data)
Definition CommCalls.h:34
#define assert(EX)
Definition assert.h:17
#define CBDATA_CLASS(type)
Definition cbdata.h:289
PconnPool * parent_
Definition pconn.h:95
void findAndClose(const Comm::ConnectionPointer &conn)
Definition pconn.cc:300
Comm::ConnectionPointer pop()
get first conn which is not pending read fd.
Definition pconn.cc:217
void clearHandlers(const Comm::ConnectionPointer &conn)
Definition pconn.cc:164
bool isAvailable(int i) const
Definition pconn.cc:201
~IdleConnList() override
Definition pconn.cc:52
int count() const
Definition pconn.h:63
int findIndexOf(const Comm::ConnectionPointer &conn) const
Definition pconn.cc:74
Comm::ConnectionPointer findUseable(const Comm::ConnectionPointer &key)
Definition pconn.cc:255
Comm::ConnectionPointer * theList_
Definition pconn.h:83
void closeN(size_t count)
Definition pconn.cc:117
void endingShutdown() override
Definition pconn.cc:339
void push(const Comm::ConnectionPointer &conn)
Pass control of the connection to the idle list.
Definition pconn.cc:172
size_t size_
Definition pconn.h:88
static CTCB Timeout
Definition pconn.h:75
char fakeReadBuf_[4096]
Definition pconn.h:97
bool removeAt(size_t index)
Definition pconn.cc:93
static IOCB Read
Definition pconn.h:74
size_t capacity_
Number of entries theList can currently hold without re-allocating (capacity).
Definition pconn.h:86
A RegisteredRunner with lifetime determined by forces outside the Registry.
void remove(PconnPool *)
unregister and forget about this pool object
Definition pconn.cc:603
Pools pools
all live pools
Definition pconn.h:193
void add(PconnPool *)
Definition pconn.cc:597
PconnModule()
Definition pconn.cc:573
static PconnModule * instance
Definition pconn.h:195
void registerWithCacheManager(void)
Definition pconn.cc:588
std::set< PconnPool * > Pools
unordered PconnPool collection
Definition pconn.h:192
void dump(std::ostream &yaml)
Definition pconn.cc:609
static PconnModule * GetInstance()
Definition pconn.cc:579
static void DumpWrapper(StoreEntry *e)
Definition pconn.cc:616
void moduleInit()
void closeN(int n)
closes any n connections, regardless of their destination
Definition pconn.cc:530
void dumpHist(std::ostream &) const
Definition pconn.cc:367
int hist[PCONN_HIST_SZ]
Definition pconn.h:159
void notifyManager(const char *reason)
Definition pconn.cc:523
hash_table * table
Definition pconn.h:160
void unlinkList(IdleConnList *list)
Definition pconn.cc:551
void noteConnectionAdded()
Definition pconn.h:145
void dump(std::ostream &) const
Definition pconn.cc:397
Comm::ConnectionPointer popStored(const Comm::ConnectionPointer &dest, const char *domain, const bool keepOpen)
Definition pconn.cc:491
CbcPointer< PeerPoolMgr > mgr
optional pool manager (for notifications)
Definition pconn.h:162
~PconnPool()
Definition pconn.cc:426
int count() const
Definition pconn.h:144
const char * descr
Definition pconn.h:161
void count(int uses)
static const char * key(const Comm::ConnectionPointer &destLink, const char *domain)
Definition pconn.cc:347
void dumpHash(std::ostream &) const
Definition pconn.cc:383
void noteConnectionRemoved()
Definition pconn.h:146
void push(const Comm::ConnectionPointer &serverConn, const char *domain)
Definition pconn.cc:435
Comm::ConnectionPointer pop(const Comm::ConnectionPointer &dest, const char *domain, bool keepOpen)
Definition pconn.cc:472
void noteUses(int uses)
Definition pconn.cc:559
int theCount
the number of pooled connections
Definition pconn.h:163
Maintains an fixed-size "standby" PconnPool for a single CachePeer.
Definition PeerPoolMgr.h:24
#define PCONN_HIST_SZ
Definition pconn.h:33