PluginProbe ʕ •ᴥ•ʔ
Transferito: WP Migration / trunk
Transferito: WP Migration vtrunk
trunk 11.4.0 12.0.0 13.1.0 14.0.0 14.0.11 14.0.7 14.1.0 14.1.1 14.1.2 14.1.3 14.1.4
transferito / vendor / aws / aws-sdk-php / src / Retry / QuotaManager.php
transferito / vendor / aws / aws-sdk-php / src / Retry Last commit date
Exception 11 months ago Configuration.php 11 months ago ConfigurationInterface.php 11 months ago ConfigurationProvider.php 11 months ago QuotaManager.php 11 months ago RateLimiter.php 11 months ago RetryHelperTrait.php 11 months ago
QuotaManager.php
87 lines
1 <?php
2 namespace Aws\Retry;
3
4 use Aws\Exception\AwsException;
5 use Aws\ResultInterface;
6
7 /**
8 * @internal
9 */
10 class QuotaManager
11 {
12 private $availableCapacity;
13 private $capacityAmount;
14 private $initialRetryTokens;
15 private $maxCapacity;
16 private $noRetryIncrement;
17 private $retryCost;
18 private $timeoutRetryCost;
19
20 public function __construct($config = [])
21 {
22 $this->initialRetryTokens = isset($config['initial_retry_tokens'])
23 ? $config['initial_retry_tokens']
24 : 500;
25 $this->noRetryIncrement = isset($config['no_retry_increment'])
26 ? $config['no_retry_increment']
27 : 1;
28 $this->retryCost = isset($config['retry_cost'])
29 ? $config['retry_cost']
30 : 5;
31 $this->timeoutRetryCost = isset($config['timeout_retry_cost'])
32 ? $config['timeout_retry_cost']
33 : 10;
34 $this->maxCapacity = $this->initialRetryTokens;
35 $this->availableCapacity = $this->initialRetryTokens;
36 }
37
38 public function hasRetryQuota($result)
39 {
40 if ($result instanceof AwsException && $result->isConnectionError()) {
41 $this->capacityAmount = $this->timeoutRetryCost;
42 } else {
43 $this->capacityAmount = $this->retryCost;
44 }
45
46 if ($this->capacityAmount > $this->availableCapacity) {
47 return false;
48 }
49
50 $this->availableCapacity -= $this->capacityAmount;
51 return true;
52 }
53
54 public function releaseToQuota($result)
55 {
56 if ($result instanceof AwsException) {
57 $statusCode = (int) $result->getStatusCode();
58 } elseif ($result instanceof ResultInterface) {
59 $statusCode = isset($result['@metadata']['statusCode'])
60 ? (int) $result['@metadata']['statusCode']
61 : null;
62 }
63
64 if (!empty($statusCode) && $statusCode >= 200 && $statusCode < 300) {
65 if (isset($this->capacityAmount)) {
66 $amount = $this->capacityAmount;
67 $this->availableCapacity += $amount;
68 unset($this->capacityAmount);
69 } else {
70 $amount = $this->noRetryIncrement;
71 $this->availableCapacity += $amount;
72 }
73 $this->availableCapacity = min(
74 $this->availableCapacity,
75 $this->maxCapacity
76 );
77 }
78
79 return (isset($amount) ? $amount : 0);
80 }
81
82 public function getAvailableCapacity()
83 {
84 return $this->availableCapacity;
85 }
86 }
87