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 "DelayBucket.h"
15 #include "DelaySpec.h"
16 #include "SquidConfig.h"
17 #include "Store.h"
18 
19 void
stats(StoreEntry * entry) const20 DelayBucket::stats(StoreEntry *entry)const
21 {
22     storeAppendPrintf(entry, "%d", level());
23 }
24 
25 void
update(DelaySpec const & rate,int incr)26 DelayBucket::update(DelaySpec const &rate, int incr)
27 {
28     if (rate.restore_bps != -1 &&
29             (level() += rate.restore_bps * incr) > rate.max_bytes)
30         level() = rate.max_bytes;
31 }
32 
33 int
bytesWanted(int minimum,int maximum) const34 DelayBucket::bytesWanted(int minimum, int maximum) const
35 {
36     int result = max(minimum, min(maximum, level()));
37     return result;
38 }
39 
40 void
bytesIn(int qty)41 DelayBucket::bytesIn(int qty)
42 {
43     level() -= qty;
44 }
45 
46 void
init(DelaySpec const & rate)47 DelayBucket::init(DelaySpec const &rate)
48 {
49     level() = (int) (((double)rate.max_bytes *
50                       Config.Delay.initial) / 100);
51 }
52 
53 #endif /* USE_DELAY_POOLS */
54 
55