pconn.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 1996-2023 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  int count() const { return size_; }
63  void closeN(size_t count);
64 
65  // IndependentRunner API
66  void endingShutdown() override;
67 private:
68  bool isAvailable(int i) const;
69  bool removeAt(int index);
70  int findIndexOf(const Comm::ConnectionPointer &conn) const;
71  void findAndClose(const Comm::ConnectionPointer &conn);
72  static IOCB Read;
73  static CTCB Timeout;
74 
75 private:
82 
84  int capacity_;
86  int size_;
87 
94 
95  char fakeReadBuf_[4096]; // TODO: kill magic number.
96 };
97 
98 #include "ip/forward.h"
99 
100 class StoreEntry;
101 class IdleConnLimit;
102 
103 /* for hash_table */
104 #include "hash.h"
105 
114 {
115 
116 public:
117  PconnPool(const char *aDescription, const CbcPointer<PeerPoolMgr> &aMgr);
118  ~PconnPool();
119 
120  void moduleInit();
121  void push(const Comm::ConnectionPointer &serverConn, const char *domain);
122 
135  Comm::ConnectionPointer pop(const Comm::ConnectionPointer &dest, const char *domain, bool keepOpen);
136  void count(int uses);
137  void dump(std::ostream &) const;
138  void unlinkList(IdleConnList *list);
139  void noteUses(int uses);
141  void closeN(int n);
142  int count() const { return theCount; }
145 
146  // sends an async message to the pool manager, if any
147  void notifyManager(const char *reason);
148 
149 private:
150 
151  static const char *key(const Comm::ConnectionPointer &destLink, const char *domain);
152 
153  Comm::ConnectionPointer popStored(const Comm::ConnectionPointer &dest, const char *domain, const bool keepOpen);
154  void dumpHist(std::ostream &) const;
155  void dumpHash(std::ostream &) const;
156 
159  const char *descr;
161  int theCount;
162 };
163 
164 class StoreEntry;
165 class PconnPool;
166 
171 {
172 
173 public:
177  static PconnModule * GetInstance();
179  static void DumpWrapper(StoreEntry *e);
180 
181  PconnModule();
182  void registerWithCacheManager(void);
183 
184  void add(PconnPool *);
185  void remove(PconnPool *);
186 
187  void dump(std::ostream &yaml);
188 
189 private:
190  typedef std::set<PconnPool*> Pools;
192 
194 };
195 
196 #endif /* SQUID_SRC_PCONN_H */
197 
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:516
A RegisteredRunner with lifetime determined by forces outside the Registry.
std::set< PconnPool * > Pools
unordered PconnPool collection
Definition: pconn.h:190
~PconnPool()
Definition: pconn.cc:412
int findIndexOf(const Comm::ConnectionPointer &conn) const
Definition: pconn.cc:74
void closeN(size_t count)
Definition: pconn.cc:115
static IOCB Read
Definition: pconn.h:72
Comm::ConnectionPointer pop(const Comm::ConnectionPointer &dest, const char *domain, bool keepOpen)
Definition: pconn.cc:458
void dumpHash(std::ostream &) const
Definition: pconn.cc:369
#define CBDATA_CLASS(type)
Definition: cbdata.h:289
void noteConnectionAdded()
Definition: pconn.h:143
static PconnModule * GetInstance()
Definition: pconn.cc:565
void noteUses(int uses)
Definition: pconn.cc:545
Comm::ConnectionPointer popStored(const Comm::ConnectionPointer &dest, const char *domain, const bool keepOpen)
Definition: pconn.cc:477
~IdleConnList() override
Definition: pconn.cc:52
void findAndClose(const Comm::ConnectionPointer &conn)
Definition: pconn.cc:286
static void DumpWrapper(StoreEntry *e)
Definition: pconn.cc:602
Comm::ConnectionPointer findUseable(const Comm::ConnectionPointer &key)
Definition: pconn.cc:247
void push(const Comm::ConnectionPointer &conn)
Pass control of the connection to the idle list.
Definition: pconn.cc:170
void moduleInit()
Pools pools
all live pools
Definition: pconn.h:191
Comm::ConnectionPointer pop()
get first conn which is not pending read fd.
Definition: pconn.cc:215
const char * descr
Definition: pconn.h:159
void notifyManager(const char *reason)
Definition: pconn.cc:509
void add(PconnPool *)
Definition: pconn.cc:583
void CTCB(const CommTimeoutCbParams &params)
Definition: CommCalls.h:37
CbcPointer< PeerPoolMgr > mgr
optional pool manager (for notifications)
Definition: pconn.h:160
IdleConnList(const char *key, PconnPool *parent)
Definition: pconn.cc:36
void dump(std::ostream &yaml)
Definition: pconn.cc:595
void dumpHist(std::ostream &) const
Definition: pconn.cc:353
void noteConnectionRemoved()
Definition: pconn.h:144
void push(const Comm::ConnectionPointer &serverConn, const char *domain)
Definition: pconn.cc:421
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:62
#define assert(EX)
Definition: assert.h:17
void registerWithCacheManager(void)
Definition: pconn.cc:574
int count() const
Definition: pconn.h:142
void endingShutdown() override
Definition: pconn.cc:325
PconnPool * parent_
Definition: pconn.h:93
void unlinkList(IdleConnList *list)
Definition: pconn.cc:537
void clearHandlers(const Comm::ConnectionPointer &conn)
Definition: pconn.cc:162
bool isAvailable(int i) const
Definition: pconn.cc:199
void remove(PconnPool *)
unregister and forget about this pool object
Definition: pconn.cc:589
PconnPool(const char *aDescription, const CbcPointer< PeerPoolMgr > &aMgr)
Definition: pconn.cc:392
int theCount
the number of pooled connections
Definition: pconn.h:161
int size_
Definition: pconn.h:86
int hist[PCONN_HIST_SZ]
Definition: pconn.h:157
Comm::ConnectionPointer * theList_
Definition: pconn.h:81
static CTCB Timeout
Definition: pconn.h:73
#define PCONN_HIST_SZ
Definition: pconn.h:33
PconnModule()
Definition: pconn.cc:559
hash_table * table
Definition: pconn.h:158
static PconnModule * instance
Definition: pconn.h:193
int capacity_
Number of entries theList can currently hold without re-allocating (capacity).
Definition: pconn.h:84
static const char * key(const Comm::ConnectionPointer &destLink, const char *domain)
Definition: pconn.cc:333
bool removeAt(int index)
Definition: pconn.cc:92
void dump(std::ostream &) const
Definition: pconn.cc:383
char fakeReadBuf_[4096]
Definition: pconn.h:95

 

Introduction

Documentation

Support

Miscellaneous