bo ddlZddlmZmZGddeZGddeZGddeZGd d eZGd d eZGd deZ GddeZ y)N)ABCabstractmethodc&eZdZdZdZedZy)AbstractBackoffzBackoff interfacecy)z Reset internal state before an operation. `reset` is called once at the beginning of every call to `Retry.call_with_retry` Nselfs //usr/lib/python3/dist-packages/redis/backoff.pyresetzAbstractBackoff.resets cy)z'Compute backoff in seconds upon failureNrr failuress r computezAbstractBackoff.computes r N)__name__ __module__ __qualname____doc__r rrrr r rrs   r rceZdZdZdZdZy)ConstantBackoffzConstant backoff upon failurec||_y)z"`backoff`: backoff time in secondsN_backoff)r backoffs r __init__zConstantBackoff.__init__s  r c|jS)Nrrs r rzConstantBackoff.computes }}r Nrrrrrrrr r rrs' r rc"eZdZdZfdZxZS) NoBackoffzNo backoff upon failurec$t|dyNr)superr)r __class__s r rzNoBackoff.__init__$s r )rrrrr __classcell__)r$s@r r r !s!r r ceZdZdZdZdZy)ExponentialBackoffz Exponential backoff upon failurec ||_||_ye `cap`: maximum backoff time in seconds `base`: base backoff time in seconds N_cap_baser capbases r rzExponentialBackoff.__init__+   r cNt|j|jd|zzS)N)minr,r-rs r rzExponentialBackoff.compute3s 499djj1h;677r Nrrr r r'r'(s*8r r'ceZdZdZdZdZy)FullJitterBackoffz Full jitter backoff upon failurec ||_||_yr)r+r.s r rzFullJitterBackoff.__init__:r1r c vtjdt|j|jd|zzS)Nrr3)randomuniformr4r,r-rs r rzFullJitterBackoff.computeBs+~~aTYY Q[0H!IJJr Nrrr r r6r67s*Kr r6ceZdZdZdZdZy)EqualJitterBackoffz!Equal jitter backoff upon failurec ||_||_yr)r+r.s r rzEqualJitterBackoff.__init__Ir1r ct|j|jd|zzdz }|tjd|zS)Nr3r)r4r,r-r9r:)r rtemps r rzEqualJitterBackoff.computeQs:499djj1h;67!;fnnQ---r Nrrr r r<r<Fs+.r r<c"eZdZdZdZdZdZy)DecorrelatedJitterBackoffz(Decorrelated jitter backoff upon failurec.||_||_d|_y)r*rN)r,r-_previous_backoffr.s r rz"DecorrelatedJitterBackoff.__init__Ys   !"r cd|_yr")rCr s r r zDecorrelatedJitterBackoff.resetbs !"r ct|j|jdz}tj|j|}t |j ||_|jS)N)maxr-rCr9r:r4r,)r r max_backoffr?s r rz!DecorrelatedJitterBackoff.computeesP$**d&<&rJsa # c "o 8 8 K K . . &&r