about summary refs log tree commit diff
path: root/.venv/lib/python3.12/site-packages/botocore/retries/quota.py
diff options
context:
space:
mode:
authorS. Solomon Darnell2025-03-28 21:52:21 -0500
committerS. Solomon Darnell2025-03-28 21:52:21 -0500
commit4a52a71956a8d46fcb7294ac71734504bb09bcc2 (patch)
treeee3dc5af3b6313e921cd920906356f5d4febc4ed /.venv/lib/python3.12/site-packages/botocore/retries/quota.py
parentcc961e04ba734dd72309fb548a2f97d67d578813 (diff)
downloadgn-ai-master.tar.gz
two version of R2R are here HEAD master
Diffstat (limited to '.venv/lib/python3.12/site-packages/botocore/retries/quota.py')
-rw-r--r--.venv/lib/python3.12/site-packages/botocore/retries/quota.py54
1 files changed, 54 insertions, 0 deletions
diff --git a/.venv/lib/python3.12/site-packages/botocore/retries/quota.py b/.venv/lib/python3.12/site-packages/botocore/retries/quota.py
new file mode 100644
index 00000000..f0394291
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/botocore/retries/quota.py
@@ -0,0 +1,54 @@
+"""Retry quota implementation."""
+
+import threading
+
+
+class RetryQuota:
+    INITIAL_CAPACITY = 500
+
+    def __init__(self, initial_capacity=INITIAL_CAPACITY, lock=None):
+        self._max_capacity = initial_capacity
+        self._available_capacity = initial_capacity
+        if lock is None:
+            lock = threading.Lock()
+        self._lock = lock
+
+    def acquire(self, capacity_amount):
+        """Attempt to aquire a certain amount of capacity.
+
+        If there's not sufficient amount of capacity available, ``False``
+        is returned.  Otherwise, ``True`` is returned, which indicates that
+        capacity was successfully allocated.
+
+        """
+        # The acquire() is only called when we encounter a retryable
+        # response so we aren't worried about locking the entire method.
+        with self._lock:
+            if capacity_amount > self._available_capacity:
+                return False
+            self._available_capacity -= capacity_amount
+            return True
+
+    def release(self, capacity_amount):
+        """Release capacity back to the retry quota.
+
+        The capacity being released will be truncated if necessary
+        to ensure the max capacity is never exceeded.
+
+        """
+        # Implementation note:  The release() method is called as part
+        # of the "after-call" event, which means it gets invoked for
+        # every API call.  In the common case where the request is
+        # successful and we're at full capacity, we can avoid locking.
+        # We can't exceed max capacity so there's no work we have to do.
+        if self._max_capacity == self._available_capacity:
+            return
+        with self._lock:
+            amount = min(
+                self._max_capacity - self._available_capacity, capacity_amount
+            )
+            self._available_capacity += amount
+
+    @property
+    def available_capacity(self):
+        return self._available_capacity