ClientInfo.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 1996-2017 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_CLIENTINFO_H
10 #define SQUID__SRC_CLIENTINFO_H
11 
12 #if USE_DELAY_POOLS
13 #include "BandwidthBucket.h"
14 #endif
15 #include "base/ByteCounter.h"
16 #include "cbdata.h"
17 #include "enums.h"
18 #include "hash.h"
19 #include "ip/Address.h"
20 #include "LogTags.h"
21 #include "mem/forward.h"
22 #include "typedefs.h"
23 
24 #include <deque>
25 
26 #if USE_DELAY_POOLS
27 class CommQuotaQueue;
28 #endif
29 
30 class ClientInfo : public hash_link
31 #if USE_DELAY_POOLS
32  , public BandwidthBucket
33 #endif
34 {
36 
37 public:
38  explicit ClientInfo(const Ip::Address &);
39  ~ClientInfo();
40 
42 
43  struct Protocol {
45  memset(result_hist, 0, sizeof(result_hist));
46  }
47 
53  } Http, Icp;
54 
55  struct Cutoff {
56  Cutoff() : time(0), n_req(0), n_denied(0) {}
57 
58  time_t time;
59  int n_req;
60  int n_denied;
61  } cutoff;
62  int n_established; /* number of current established connections */
63  time_t last_seen;
64 #if USE_DELAY_POOLS
67 
71  bool eventWaiting;
72 
73  // all those functions access Comm fd_table and are defined in comm.cc
74  bool hasQueue() const;
75  bool hasQueue(const CommQuotaQueue*) const;
76  unsigned int quotaEnqueue(int fd);
77  int quotaPeekFd() const;
78  unsigned int quotaPeekReserv() const;
79  void quotaDequeue();
80  void kickQuotaQueue();
81 
82  /* BandwidthBucket API */
83  virtual int quota() override;
84  virtual bool applyQuota(int &nleft, Comm::IoCallback *state) override;
85  virtual void scheduleWrite(Comm::IoCallback *state) override;
86  virtual void onFdClosed() override;
87  virtual void reduceBucket(int len) override;
88 
89  void quotaDumpQueue();
90 
101  void setWriteLimiter(const int aWriteSpeedLimit, const double anInitialBurst, const double aHighWatermark);
102 #endif /* USE_DELAY_POOLS */
103 };
104 
105 #if USE_DELAY_POOLS
106 // a queue of Comm clients waiting for I/O quota controlled by delay pools
108 {
110 
111 public:
112  CommQuotaQueue(ClientInfo *info);
113  ~CommQuotaQueue();
114 
115  bool empty() const { return fds.empty(); }
116  size_t size() const { return fds.size(); }
117  int front() const { return fds.front(); }
118  unsigned int enqueue(int fd);
119  void dequeue();
120 
122 
123  // these counters might overflow; that is OK because they are for IDs only
124  int ins;
125  int outs;
126 
127 private:
128  // TODO: optimize using a Ring- or List-based store?
129  typedef std::deque<int> Store;
131 };
132 #endif /* USE_DELAY_POOLS */
133 
134 #endif
135 
Base class for Squid-to-client bandwidth limiting.
bool hasQueue() const
whether any clients are waiting for write quota
Definition: comm.cc:1284
Ip::Address addr
Definition: ClientInfo.h:41
std::deque< int > Store
Definition: ClientInfo.h:129
CommQuotaQueue(ClientInfo *info)
Definition: comm.cc:1438
struct ClientInfo::Cutoff cutoff
unsigned int enqueue(int fd)
places the given fd at the end of the queue; returns reservation ID
Definition: comm.cc:1451
counter for accumulating byte values
Definition: ByteCounter.h:13
int n_established
Definition: ClientInfo.h:62
ByteCounter hit_kbytes_out
Definition: ClientInfo.h:52
CommQuotaQueue * quotaQueue
clients waiting for more write quota
Definition: ClientInfo.h:68
virtual int quota() override
allocate quota for a just dequeued client
Definition: comm.cc:1343
int outs
number of dequeue calls, used to check the "reservation" ID
Definition: ClientInfo.h:125
void kickQuotaQueue()
schedule commHandleWriteHelper call
Definition: comm.cc:1330
int rationedQuota
precomputed quota preserving fairness among clients
Definition: ClientInfo.h:69
virtual bool applyQuota(int &nleft, Comm::IoCallback *state) override
Definition: comm.cc:1374
struct ClientInfo::Protocol Http
#define CBDATA_CLASS(type)
Definition: cbdata.h:302
int ins
number of enqueue calls, used to generate a "reservation" ID
Definition: ClientInfo.h:124
size_t size() const
Definition: ClientInfo.h:116
bool firstTimeConnection
is this first time connection for this client
Definition: ClientInfo.h:66
int front() const
Definition: ClientInfo.h:117
Store fds
descriptor queue
Definition: ClientInfo.h:130
MEMPROXY_CLASS(ClientInfo)
int unsigned int const char *desc STUB void int len
Definition: stub_fd.cc:20
~CommQuotaQueue()
Definition: comm.cc:1444
int result_hist[LOG_TYPE_MAX]
Definition: ClientInfo.h:48
bool writeLimitingActive
Is write limiter active.
Definition: ClientInfo.h:65
ClientInfo(const Ip::Address &)
Definition: client_db.cc:55
virtual void scheduleWrite(Comm::IoCallback *state) override
Will plan another write call.
Definition: comm.cc:1388
bool empty() const
Definition: ClientInfo.h:115
ByteCounter kbytes_out
Definition: ClientInfo.h:51
void dequeue()
removes queue head
Definition: comm.cc:1461
void quotaDumpQueue()
dumps quota queue for debugging
int rationedCount
number of clients that will receive rationedQuota
Definition: ClientInfo.h:70
unsigned int quotaPeekReserv() const
returns the next reserv. to pop
Definition: comm.cc:1307
struct ClientInfo::Protocol Icp
virtual void onFdClosed() override
Performs cleanup when the related file descriptor becomes closed.
Definition: comm.cc:1397
ClientInfo * clientInfo
bucket responsible for quota maintenance
Definition: ClientInfo.h:121
void setWriteLimiter(const int aWriteSpeedLimit, const double anInitialBurst, const double aHighWatermark)
Definition: comm.cc:1414
bool eventWaiting
waiting for commHandleWriteHelper event to fire
Definition: ClientInfo.h:71
void quotaDequeue()
pops queue head from queue
Definition: comm.cc:1323
time_t last_seen
Definition: ClientInfo.h:63
ByteCounter kbytes_in
Definition: ClientInfo.h:50
Details about a particular Comm IO callback event.
Definition: IoCallback.h:29
int quotaPeekFd() const
retuns the next fd reservation
Definition: comm.cc:1299
unsigned int quotaEnqueue(int fd)
client starts waiting in queue; create the queue if necessary
Definition: comm.cc:1315
virtual void reduceBucket(int len) override
Decreases the bucket level.
Definition: comm.cc:1405

 

Introduction

Documentation

Support

Miscellaneous

Web Site Translations

Mirrors