File: //usr/lib/python3.6/site-packages/botocore/retries/__pycache__/adaptive.cpython-36.pyc
3
�T__ � @ sr d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZ eje�Z dd� Z
G dd� de�ZG d d
� d
e�Z
dS )� N)�bucket)�
throttling)�standardc C sz t j� }tjd|j� d�}t jd|d�}t|�}tjtj � d�}t
|||||d�}| jjj
d|j� | jjj
d|j� |S ) Nr )Zstarting_max_rateZ
start_time� )�max_rate�clock)Zretry_event_adapter)�
rate_adjustor�rate_clocker�token_bucket�throttling_detectorr zbefore-sendzneeds-retry)r ZClockr ZCubicCalculator�current_timeZTokenBucket�RateClockerr ZThrottlingErrorDetectorZRetryEventAdapter�ClientRateLimiter�metaZevents�register�on_sending_request�on_receiving_response)Zclientr r r
r r Zlimiter� r �/usr/lib/python3.6/adaptive.py�register_retry_handler
s$
r c @ s( e Zd ZdZdd� Zdd� Zdd� ZdS ) r g @c C s2 || _ || _|| _|| _|| _d| _tj� | _d S )NF) �_rate_adjustor�
_rate_clocker�
_token_bucket�_throttling_detector�_clock�_enabled� threading�Lock�_lock)�selfr r r
r r r r r �__init__* s zClientRateLimiter.__init__c K s | j r| jj� d S )N)r r �acquire)r Zrequest�kwargsr r r r 4 s z$ClientRateLimiter.on_sending_requestc K s� | j j� }| jj� }| j�� | jjf |�s<d}| jj|�}nFd}| j sL|}nt
|| jj�}| jj
||�}tjd||| jj� d| _ t
|| j| �| j_W d Q R X d S )NFTzfThrottling response received, new send rate: %s measured rate: %s, token bucket capacity available: %s)r �recordr r r r Zis_throttling_errorr Zsuccess_receivedr �minr r Zerror_received�logger�debugZavailable_capacity�_MAX_RATE_ADJUST_SCALE)r r"