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"
13 #include "base/RunnersRegistry.h"
14 #include "mgr/forward.h"
15 
16 #include <set>
17 #include <iosfwd>
18 
24 class PconnPool;
25 class 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 
42 public:
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;
69 private:
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 
77 private:
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 
102 class StoreEntry;
103 class IdleConnLimit;
104 
105 /* for hash_table */
106 #include "hash.h"
107 
116 {
117 
118 public:
119  PconnPool(const char *aDescription, const CbcPointer<PeerPoolMgr> &aMgr);
120  ~PconnPool();
121 
122  void moduleInit();
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 
151 private:
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;
163  int theCount;
164 };
165 
166 class StoreEntry;
167 class PconnPool;
168 
173 {
174 
175 public:
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 
191 private:
192  typedef std::set<PconnPool*> Pools;
194 
196 };
197 
198 #endif /* SQUID_SRC_PCONN_H */
199 
Maintains an fixed-size "standby" PconnPool for a single CachePeer.
Definition: PeerPoolMgr.h:23
void closeN(int n)
closes any n connections, regardless of their destination
Definition: pconn.cc:530
A RegisteredRunner with lifetime determined by forces outside the Registry.
std::set< PconnPool * > Pools
unordered PconnPool collection
Definition: pconn.h:192
size_t size_
Definition: pconn.h:88
~PconnPool()
Definition: pconn.cc:426
int findIndexOf(const Comm::ConnectionPointer &conn) const
Definition: pconn.cc:74
void closeN(size_t count)
Definition: pconn.cc:117
static IOCB Read
Definition: pconn.h:74
Comm::ConnectionPointer pop(const Comm::ConnectionPointer &dest, const char *domain, bool keepOpen)
Definition: pconn.cc:472
void dumpHash(std::ostream &) const
Definition: pconn.cc:383
#define CBDATA_CLASS(type)
Definition: cbdata.h:289
void noteConnectionAdded()
Definition: pconn.h:145
static PconnModule * GetInstance()
Definition: pconn.cc:579
void noteUses(int uses)
Definition: pconn.cc:559
Comm::ConnectionPointer popStored(const Comm::ConnectionPointer &dest, const char *domain, const bool keepOpen)
Definition: pconn.cc:491
~IdleConnList() override
Definition: pconn.cc:52
void findAndClose(const Comm::ConnectionPointer &conn)
Definition: pconn.cc:300
static void DumpWrapper(StoreEntry *e)
Definition: pconn.cc:616
Comm::ConnectionPointer findUseable(const Comm::ConnectionPointer &key)
Definition: pconn.cc:255
void push(const Comm::ConnectionPointer &conn)
Pass control of the connection to the idle list.
Definition: pconn.cc:172
void moduleInit()
Pools pools
all live pools
Definition: pconn.h:193
Comm::ConnectionPointer pop()
get first conn which is not pending read fd.
Definition: pconn.cc:217
const char * descr
Definition: pconn.h:161
void notifyManager(const char *reason)
Definition: pconn.cc:523
void add(PconnPool *)
Definition: pconn.cc:597
void CTCB(const CommTimeoutCbParams &params)
Definition: CommCalls.h:37
CbcPointer< PeerPoolMgr > mgr
optional pool manager (for notifications)
Definition: pconn.h:162
IdleConnList(const char *key, PconnPool *parent)
Definition: pconn.cc:36
void dump(std::ostream &yaml)
Definition: pconn.cc:609
void dumpHist(std::ostream &) const
Definition: pconn.cc:367
void noteConnectionRemoved()
Definition: pconn.h:146
void push(const Comm::ConnectionPointer &serverConn, const char *domain)
Definition: pconn.cc:435
void IOCB(const Comm::ConnectionPointer &conn, char *, size_t size, Comm::Flag flag, int xerrno, void *data)
Definition: CommCalls.h:34
int count() const
Definition: pconn.h:63
#define assert(EX)
Definition: assert.h:17
void registerWithCacheManager(void)
Definition: pconn.cc:588
int count() const
Definition: pconn.h:144
void endingShutdown() override
Definition: pconn.cc:339
PconnPool * parent_
Definition: pconn.h:95
void unlinkList(IdleConnList *list)
Definition: pconn.cc:551
void clearHandlers(const Comm::ConnectionPointer &conn)
Definition: pconn.cc:164
bool isAvailable(int i) const
Definition: pconn.cc:201
void remove(PconnPool *)
unregister and forget about this pool object
Definition: pconn.cc:603
PconnPool(const char *aDescription, const CbcPointer< PeerPoolMgr > &aMgr)
Definition: pconn.cc:406
int theCount
the number of pooled connections
Definition: pconn.h:163
size_t capacity_
Number of entries theList can currently hold without re-allocating (capacity).
Definition: pconn.h:86
int hist[PCONN_HIST_SZ]
Definition: pconn.h:159
Comm::ConnectionPointer * theList_
Definition: pconn.h:83
static CTCB Timeout
Definition: pconn.h:75
bool removeAt(size_t index)
Definition: pconn.cc:93
#define PCONN_HIST_SZ
Definition: pconn.h:33
PconnModule()
Definition: pconn.cc:573
hash_table * table
Definition: pconn.h:160
static PconnModule * instance
Definition: pconn.h:195
static const char * key(const Comm::ConnectionPointer &destLink, const char *domain)
Definition: pconn.cc:347
void dump(std::ostream &) const
Definition: pconn.cc:397
char fakeReadBuf_[4096]
Definition: pconn.h:97

 

Introduction

Documentation

Support

Miscellaneous