mò
­fIc           @   s9   d  k  l Z d k Z d d Z d Z d Z d „  Z d S(   (   s   sleepNf1.0i@   f3.1415899999999999c         O   sÎ   t  } | i d d ƒ } | i d ƒ o | d =n x” y |  | | Ž  SWq6 t i	 j
 ol t
 o t
 i d | ƒ n t | ƒ | d 9} | t j o
 t } n | d 8} | d j o ‚  qÅ q6 Xq6 Wd S(   s?  DeadlockWrap(function, *_args, **_kwargs) - automatically retries
    function in case of a database deadlock.

    This is a function intended to be used to wrap database calls such
    that they perform retrys with exponentially backing off sleeps in
    between when a DBLockDeadlockError exception is raised.

    A 'max_retries' parameter may optionally be passed to prevent it
    from retrying forever (in which case the exception will be reraised).

        d = DB(...)
        d.open(...)
        DeadlockWrap(d.put, "foo", data="bar")  # set key "foo" to "bar"
    t   max_retriesiÿÿÿÿi   s%   dbutils.DeadlockWrap: sleeping %1.3f
i   N(   t   _deadlock_MinSleepTimet	   sleeptimet   _kwargst   getR    t   has_keyt   functiont   _argst   dbt   DBLockDeadlockErrort   _deadlock_VerboseFilet   writet   _sleept   _deadlock_MaxSleepTime(   R   R   R   R   R    (    (    t*   /mit/python/lib/python2.4/bsddb/dbutils.pyt   DeadlockWrap)   s&       



(	   t   timet   sleepR   R   R   R   t   NoneR
   R   (   R   R   R
   R   R   R   (    (    R   t   ?   s
   	
