DelayTagged.cc
Go to the documentation of this file.
1 /*
2  * Copyright (C) 1996-2021 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 
20 {
22 }
23 
25 
27 {
29  buckets.destroy(DelayTaggedFree);
30 }
31 
33 
34 int
36 {
37  /* for rate limiting, case insensitive */
38  return left->tag.caseCmp(right->tag);
39 }
40 
41 void
43 {}
44 
48  void operator() (DelayTaggedBucket::Pointer const &current) {
49  current->stats(sentry);
50  }
51 };
52 
53 void
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 
73 void
75 {
76  spec.dump(entry);
77 }
78 
80  DelayTaggedUpdater (DelaySpec &_spec, int _incr):spec(_spec),incr(_incr) {};
81 
83  int incr;
84 };
85 
89  void operator() (DelayTaggedBucket::Pointer const &current) {
90  const_cast<DelayTaggedBucket *>(current.getRaw())->theBucket.update(updater->spec, updater->incr);
91  }
92 };
93 
94 void
96 {
97  DelayTaggedUpdater updater(spec, incr);
98  DelayTaggedUpdateVisitor visitor(&updater);
99  buckets.visit(visitor);
100  kickReads();
101 }
102 
103 void
105 {
106  spec.parse();
107 }
108 
110 
112 {
113  if (!details.tag.size())
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 
129 void
131 {
133  theBucket.stats(entry);
134 }
135 
136 DelayTagged::Id::Id(DelayTagged::Pointer aDelayTagged, String &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 
155 int
157 {
158  return theBucket->theBucket.bytesWanted(min,max);
159 }
160 
161 void
163 {
164  theBucket->theBucket.bytesIn(qty);
165 }
166 
167 void
169 {
170  theTagged->delayRead(aRead);
171 }
172 
173 #endif
174 
int caseCmp(char const *) const
Definition: String.cc:299
void init(DelaySpec const &)
Definition: DelayBucket.cc:47
DelayTaggedUpdateVisitor(DelayTaggedUpdater *u)
Definition: DelayTagged.cc:88
DelayTaggedBucket(String &aTag)
Definition: DelayTagged.cc:119
virtual void update(int incr)
Definition: DelayTagged.cc:95
void storeAppendPrintf(StoreEntry *e, const char *fmt,...)
Definition: store.cc:872
#define SQUIDSTRINGPRINT(s)
Definition: SquidString.h:22
DelayTaggedBucket::Pointer theBucket
Definition: DelayTagged.h:71
static void deregisterForUpdates(Updateable *)
Definition: delay_pools.cc:515
DelaySpec spec
Definition: DelayTagged.h:76
C * getRaw() const
Definition: RefCount.h:80
virtual int bytesWanted(int min, int max) const
Definition: DelayTagged.cc:156
#define SQUIDSTRINGPH
Definition: SquidString.h:21
void stats(StoreEntry *sentry, char const *) const
Definition: DelaySpec.cc:23
virtual void dump(StoreEntry *entry) const
Definition: DelayTagged.cc:74
A const & max(A const &lhs, A const &rhs)
void parse()
Definition: DelaySpec.cc:42
int restore_bps
Definition: DelaySpec.h:23
RefCount< DelayTagged > theTagged
Definition: DelayTagged.h:70
void stats(StoreEntry *) const
Definition: DelayBucket.cc:20
virtual DelayIdComposite::Pointer id(CompositeSelectionDetails &)
Definition: DelayTagged.cc:111
DelayTaggedStatsVisitor(StoreEntry *se)
Definition: DelayTagged.cc:47
void dump(StoreEntry *) const
Definition: DelaySpec.cc:36
Definition: splay.h:57
void operator()(DelayTaggedBucket::Pointer const &current)
Definition: DelayTagged.cc:48
friend class Id
Definition: DelayTagged.h:74
#define debugs(SECTION, LEVEL, CONTENT)
Definition: Debug.h:123
static Splay< DelayTaggedBucket::Pointer >::SPLAYFREE DelayTaggedFree
Definition: DelayTagged.cc:24
static void registerForUpdates(Updateable *)
Definition: delay_pools.cc:508
DelayBucket theBucket
Definition: DelayTagged.h:34
Splay< DelayTaggedBucket::Pointer > buckets
Definition: DelayTagged.h:77
void stats(StoreEntry *) const
Definition: DelayTagged.cc:130
void operator()(DelayTaggedBucket::Pointer const &current)
Definition: DelayTagged.cc:89
virtual void parse()
Definition: DelayTagged.cc:104
virtual void stats(StoreEntry *sentry)
Definition: DelayTagged.cc:54
DelayTaggedUpdater * updater
Definition: DelayTagged.cc:87
size_type size() const
Definition: SquidString.h:73
Id(RefCount< DelayTagged >, String &)
Definition: DelayTagged.cc:136
virtual ~DelayTagged()
Definition: DelayTagged.cc:26
virtual void delayRead(DeferredRead const &)
Definition: DelayTagged.cc:168
DelayTaggedUpdater(DelaySpec &_spec, int _incr)
Definition: DelayTagged.cc:80
static Splay< DelayTaggedBucket::Pointer >::SPLAYCMP DelayTaggedCmp
Definition: DelayTagged.cc:32
A const & min(A const &lhs, A const &rhs)
virtual void bytesIn(int qty)
Definition: DelayTagged.cc:162

 

Introduction

Documentation

Support

Miscellaneous

Web Site Translations

Mirrors