Squid Web Cache master
Loading...
Searching...
No Matches
DelayTagged.cc
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/* DEBUG: section 77 Delay Pools */
10
11#include "squid.h"
12
13#if USE_DELAY_POOLS
14#include "comm/Connection.h"
15#include "DelayTagged.h"
16#include "NullDelayId.h"
17#include "Store.h"
18
23
25
31
33
34int
36{
37 /* for rate limiting, case insensitive */
38 return left->tag.caseCmp(right->tag);
39}
40
41void
44
52
53void
55{
56 spec.stats (sentry, "Per Tag");
57
58 if (spec.restore_bps == -1)
59 return;
60
61 storeAppendPrintf(sentry, "\t\tCurrent: ");
62
63 if (buckets.empty()) {
64 storeAppendPrintf (sentry, "Not used yet.\n\n");
65 return;
66 }
67
68 DelayTaggedStatsVisitor visitor(sentry);
69 buckets.visit(visitor);
70 storeAppendPrintf(sentry, "\n\n");
71}
72
73void
75{
76 spec.dump(entry);
77}
78
80 DelayTaggedUpdater (DelaySpec &_spec, int _incr):spec(_spec),incr(_incr) {};
81
83 int incr;
84};
85
90 const_cast<DelayTaggedBucket *>(current.getRaw())->theBucket.update(updater->spec, updater->incr);
91 }
92};
93
94void
96{
97 DelayTaggedUpdater updater(spec, incr);
98 DelayTaggedUpdateVisitor visitor(&updater);
99 buckets.visit(visitor);
100 kickReads();
101}
102
103void
105{
106 spec.parse();
107}
108
110
112{
113 if (!details.tag.length())
114 return new NullDelayId;
115
116 return new Id(this, details.tag);
117}
118
120{
121 debugs(77, 3, "DelayTaggedBucket::DelayTaggedBucket");
122}
123
125{
126 debugs(77, 3, "DelayTaggedBucket::~DelayTaggedBucket");
127}
128
129void
131{
133 theBucket.stats(entry);
134}
135
136DelayTagged::Id::Id(const DelayTagged::Pointer &aDelayTagged, const SBuf &aTag): theTagged(aDelayTagged)
137{
138 theBucket = new DelayTaggedBucket(aTag);
140
141 if (existing) {
142 theBucket = *existing;
143 return;
144 }
145
148}
149
151{
152 debugs(77, 3, "DelayTagged::Id::~Id");
153}
154
155int
157{
158 return theBucket->theBucket.bytesWanted(min,max);
159}
160
161void
163{
164 theBucket->theBucket.bytesIn(qty);
165}
166
167void
169{
170 theTagged->delayRead(aRead);
171}
172
173#endif
174
static Splay< DelayTaggedBucket::Pointer >::SPLAYCMP DelayTaggedCmp
static Splay< DelayTaggedBucket::Pointer >::SPLAYFREE DelayTaggedFree
#define SQUIDSBUFPH
Definition SBuf.h:31
#define SQUIDSBUFPRINT(s)
Definition SBuf.h:32
void init(DelaySpec const &)
void stats(StoreEntry *) const
static void deregisterForUpdates(Updateable *)
static void registerForUpdates(Updateable *)
int restore_bps
Definition DelaySpec.h:23
void parse()
Definition DelaySpec.cc:42
void dump(StoreEntry *) const
Definition DelaySpec.cc:36
void stats(StoreEntry *sentry, char const *) const
Definition DelaySpec.cc:23
DelayBucket theBucket
Definition DelayTagged.h:36
void stats(StoreEntry *) const
~DelayTaggedBucket() override
DelayTaggedBucket(const SBuf &aTag)
DelayTaggedBucket::Pointer theBucket
Definition DelayTagged.h:73
void delayRead(const AsyncCallPointer &) override
Id(const RefCount< DelayTagged > &, const SBuf &)
RefCount< DelayTagged > theTagged
Definition DelayTagged.h:72
void bytesIn(int qty) override
int bytesWanted(int min, int max) const override
~DelayTagged() override
Splay< DelayTaggedBucket::Pointer > buckets
Definition DelayTagged.h:79
void stats(StoreEntry *sentry) override
DelayIdComposite::Pointer id(CompositeSelectionDetails &) override
void update(int incr) override
void dump(StoreEntry *entry) const override
void parse() override
DelaySpec spec
Definition DelayTagged.h:78
C * getRaw() const
Definition RefCount.h:89
Definition SBuf.h:94
int caseCmp(const SBuf &S, const size_type n) const
shorthand version for case-insensitive compare()
Definition SBuf.h:287
size_type length() const
Returns the number of bytes stored in SBuf.
Definition SBuf.h:419
Definition splay.h:50
A const & max(A const &lhs, A const &rhs)
A const & min(A const &lhs, A const &rhs)
#define debugs(SECTION, LEVEL, CONTENT)
Definition Stream.h:192
void storeAppendPrintf(StoreEntry *e, const char *fmt,...)
Definition store.cc:855
DelayTaggedStatsVisitor(StoreEntry *se)
void operator()(DelayTaggedBucket::Pointer const &current)
void operator()(DelayTaggedBucket::Pointer const &current)
DelayTaggedUpdateVisitor(DelayTaggedUpdater *u)
DelayTaggedUpdater * updater
DelayTaggedUpdater(DelaySpec &_spec, int _incr)