~e ddlZGddZy)Nc0eZdZdZdZdZdZdZddZy) ExponentialBackoffz^ Keeps track of a backoff delay that staggers down and staggers up exponentially. c.d|_||_||_y)Nr) _error_count _start_delay _max_delay)self start_delay max_delays 7/usr/lib/python3/dist-packages/landscape/lib/backoff.py__init__zExponentialBackoff.__init__ s'#cd|xjdzc_t|jd|_y)z0Decreases error count with zero being the lowestrN)rmaxr s r decreasezExponentialBackoff.decreases( Q 1 115rcj|j|jkr|xjdz c_yy)z=Increases error count but not higher than gives the max delayrN) get_delayrrrs r increasezExponentialBackoff.increases+ >> doo -    "  .rc|jr d|jdz z|jz}nd}tt||jS)aR Calculates the delay using formula that gives this chart. In this specific example start is 5 seconds and max is 60 seconds Count Delay 0 0 1 5 2 10 3 20 4 40 5 60 (max) rr)rrminintr)r delays r rzExponentialBackoff.get_delaysG   4,,q01T5F5FFEE3u:t//rc|j}|d|z z}||ztjz}t||zS)z Adds randomness to the specified stagger of the delay. For example for a delay of 12 and 25% stagger, it works out to 9 + rand(0,3) r)rrandomr)r stagger_fractionrnon_random_part random_parts r get_random_delayz#ExponentialBackoff.get_random_delay-sF  1'7#78..@ ?[011rN)g?) __name__ __module__ __qualname____doc__r rrrr!rr rrs  $6 # 0$2rr)rrr&rr r's 1212r