ClientInfo.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 1996-2022 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
27class CommQuotaQueue;
28#endif
29
30class ClientInfo : public hash_link
31#if USE_DELAY_POOLS
32 , public BandwidthBucket
33#endif
34{
36
37public:
38 explicit ClientInfo(const Ip::Address &);
40
42
43 struct Protocol {
45 memset(result_hist, 0, sizeof(result_hist));
46 }
47
54
55 struct Cutoff {
56 Cutoff() : time(0), n_req(0), n_denied(0) {}
57
58 time_t time;
59 int n_req;
62 int n_established; /* number of current established connections */
63 time_t last_seen;
64#if USE_DELAY_POOLS
67
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();
82 void writeOrDequeue();
83
84 /* BandwidthBucket API */
85 virtual int quota() override;
86 virtual bool applyQuota(int &nleft, Comm::IoCallback *state) override;
87 virtual void scheduleWrite(Comm::IoCallback *state) override;
88 virtual void onFdClosed() override;
89 virtual void reduceBucket(int len) override;
90
92
103 void setWriteLimiter(const int aWriteSpeedLimit, const double anInitialBurst, const double aHighWatermark);
104#endif /* USE_DELAY_POOLS */
105};
106
107#if USE_DELAY_POOLS
108// a queue of Comm clients waiting for I/O quota controlled by delay pools
110{
112
113public:
116
117 bool empty() const { return fds.empty(); }
118 size_t size() const { return fds.size(); }
119 int front() const { return fds.front(); }
120 unsigned int enqueue(int fd);
121 void dequeue();
122
124
125 // these counters might overflow; that is OK because they are for IDs only
126 int ins;
127 int outs;
128
129private:
130 // TODO: optimize using a Ring- or List-based store?
131 typedef std::deque<int> Store;
133};
134#endif /* USE_DELAY_POOLS */
135
136#endif
137
@ LOG_TYPE_MAX
Definition: LogTags.h:63
#define CBDATA_CLASS(type)
Definition: cbdata.h:302
Base class for Squid-to-client bandwidth limiting.
counter for accumulating byte values
Definition: ByteCounter.h:14
struct ClientInfo::Protocol Icp
virtual void reduceBucket(int len) override
Decreases the bucket level.
Definition: comm.cc:1365
Ip::Address addr
Definition: ClientInfo.h:41
void quotaDequeue()
pops queue head from queue
Definition: comm.cc:1283
int n_established
Definition: ClientInfo.h:62
bool hasQueue() const
whether any clients are waiting for write quota
Definition: comm.cc:1244
void writeOrDequeue()
either selects the head descriptor for writing or calls quotaDequeue()
Definition: comm.cc:1222
void setWriteLimiter(const int aWriteSpeedLimit, const double anInitialBurst, const double aHighWatermark)
Definition: comm.cc:1374
CommQuotaQueue * quotaQueue
clients waiting for more write quota
Definition: ClientInfo.h:68
virtual void onFdClosed() override
Performs cleanup when the related file descriptor becomes closed.
Definition: comm.cc:1357
bool eventWaiting
waiting for commHandleWriteHelper event to fire
Definition: ClientInfo.h:71
virtual void scheduleWrite(Comm::IoCallback *state) override
Will plan another write call.
Definition: comm.cc:1348
time_t last_seen
Definition: ClientInfo.h:63
unsigned int quotaEnqueue(int fd)
client starts waiting in queue; create the queue if necessary
Definition: comm.cc:1275
virtual int quota() override
allocate quota for a just dequeued client
Definition: comm.cc:1303
ClientInfo(const Ip::Address &)
Definition: client_db.cc:54
int quotaPeekFd() const
returns the next fd reservation
Definition: comm.cc:1259
int rationedQuota
precomputed quota preserving fairness among clients
Definition: ClientInfo.h:69
struct ClientInfo::Protocol Http
unsigned int quotaPeekReserv() const
returns the next reserv. to pop
Definition: comm.cc:1267
int rationedCount
number of clients that will receive rationedQuota
Definition: ClientInfo.h:70
bool firstTimeConnection
is this first time connection for this client
Definition: ClientInfo.h:66
void kickQuotaQueue()
Definition: comm.cc:1290
virtual bool applyQuota(int &nleft, Comm::IoCallback *state) override
Definition: comm.cc:1334
bool writeLimitingActive
Is write limiter active.
Definition: ClientInfo.h:65
struct ClientInfo::Cutoff cutoff
void quotaDumpQueue()
dumps quota queue for debugging
MEMPROXY_CLASS(ClientInfo)
~CommQuotaQueue()
Definition: comm.cc:1404
int ins
number of enqueue calls, used to generate a "reservation" ID
Definition: ClientInfo.h:126
ClientInfo * clientInfo
bucket responsible for quota maintenance
Definition: ClientInfo.h:123
void dequeue()
removes queue head
Definition: comm.cc:1422
unsigned int enqueue(int fd)
places the given fd at the end of the queue; returns reservation ID
Definition: comm.cc:1411
int outs
number of dequeue calls, used to check the "reservation" ID
Definition: ClientInfo.h:127
size_t size() const
Definition: ClientInfo.h:118
Store fds
descriptor queue
Definition: ClientInfo.h:132
bool empty() const
Definition: ClientInfo.h:117
std::deque< int > Store
Definition: ClientInfo.h:131
CommQuotaQueue(ClientInfo *info)
Definition: comm.cc:1398
int front() const
Definition: ClientInfo.h:119
Details about a particular Comm IO callback event.
Definition: IoCallback.h:30
ByteCounter hit_kbytes_out
Definition: ClientInfo.h:52
int result_hist[LOG_TYPE_MAX]
Definition: ClientInfo.h:48
ByteCounter kbytes_out
Definition: ClientInfo.h:51
ByteCounter kbytes_in
Definition: ClientInfo.h:50

 

Introduction

Documentation

Support

Miscellaneous

Web Site Translations

Mirrors