ó
ßüÚ\c           @` s[  d  d l  m Z m Z m Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l	 Z	 d  d l
 m Z d  d l Z d  d l Z d  d l Z d  d l m Z m Z d  d l m Z d  d l m
 Z
 d  d l m Z d  d l m Z m Z d	 d
 „ Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z  d „  Z! d „  Z" e d „  ƒ Z# d S(   i    (   t   print_functiont   divisiont   absolute_importN(   t   sleep(   t   Emptyt   WINDOWS(   t	   WorkSpace(   t   time(   t
   mp_context(   t   captured_loggert   slowi   c         C` sÄ   g  | D] } t  j j |  | ƒ ^ q } x• t | ƒ D]i } g  t  j |  ƒ D]' } | d k rK t  j j |  | ƒ ^ qK } t | ƒ t | ƒ k r” Pq5 t d ƒ q5 Wt | ƒ t | ƒ k sÀ t ‚ d  S(   Ns   global.locks
   purge.lockg      à?(   s   global.locks
   purge.lock(   t   ost   patht   joint   ranget   listdirt   sortedR   t   AssertionError(   t   dir_patht   expectedt   trialst   pt   it   actual(    (    s?   lib/python2.7/site-packages/distributed/tests/test_diskutils.pyt   assert_directory_contents   s    ('c         C` s»  t  |  ƒ } t j t | ƒ } t | ƒ } | g  ƒ | j d d ƒ } | d d g ƒ | j d d ƒ } | d d d d g ƒ | j ƒ  | d d d d g ƒ | j ƒ  | d d g ƒ ~ t j	 ƒ  | g  ƒ | j d d ƒ } | j d d ƒ } | j d d ƒ } | | j
 | j | j
 | j | j
 | j h ƒ t j j | j
 ƒ j d ƒ sWt ‚ t j j | j
 ƒ j d ƒ s{t ‚ t j j | j
 ƒ j d ƒ sŸt ‚ | j
 | j
 k s·t ‚ d  S(	   Nt   namet   aas
   aa.dirlockt   bbs
   bb.dirlockt   prefixs   foo-s   bar-(   t   strt	   functoolst   partialR   R   t   new_work_dirt   _purge_leftoverst   releaset   gct   collectR   t
   _lock_pathR   R   t   basenamet
   startswithR   (   t   tmpdirt   base_dirt   assert_contentst   wst   at   bt   c(    (    s?   lib/python2.7/site-packages/distributed/tests/test_diskutils.pyt   test_workdir_simple&   s0    




+$$$c         C` së   t  |  ƒ } t j t | ƒ } t | ƒ } | g  ƒ | j d d ƒ } | d d g ƒ t | ƒ } | j ƒ  | d d g ƒ | j d d ƒ } | d d d d g ƒ ~ ~ t j ƒ  | d d g d d ƒ~ t j ƒ  | g  d d ƒd  S(   NR   R   s
   aa.dirlockR   s
   bb.dirlockR   i   (	   R   R   R   R   R   R    R!   R#   R$   (   R(   R)   R*   R+   R,   t   ws2R-   (    (    s?   lib/python2.7/site-packages/distributed/tests/test_diskutils.pyt%   test_two_workspaces_in_same_directoryG   s$    



c   
      ` sÂ  t  |  ƒ } t j t | ƒ } t | ƒ } d t d | ƒ } t j t j	 d | g d t j
 d t j
 d t ƒ‰  ˆ  j j ƒ  } ˆ  j ƒ  d  k s— t ‚ t | ƒ \ } } | | | d | | d g ƒ | j ƒ  | | | d | | d g ƒ ˆ  j ƒ  ˆ  j ƒ  st ‚ | | | d | | d g ƒ t d d	 d
 t ƒ } | j ƒ  Wd  QX| g  ƒ | j ƒ  j ƒ  }	 t |	 ƒ d k s…t ‚ x6 | | f D]( ‰  t ‡  f d †  |	 Dƒ ƒ s’t ‚ q’Wd  S(   NsT  if 1:
        import signal
        import sys
        import time

        from distributed.diskutils import WorkSpace

        ws = WorkSpace(%(base_dir)r)
        a = ws.new_work_dir(name='aa')
        b = ws.new_work_dir(prefix='foo-')
        print((a.dir_path, b.dir_path))
        sys.stdout.flush()

        time.sleep(100)
        R)   s   -ct   stdint   stdoutt   universal_newliness   .dirlocks   distributed.diskutilst   INFOt	   propagatei   c         3` s!   |  ] } t  ˆ  ƒ | k Vq d  S(   N(   t   repr(   t   .0t   line(   R   (    s?   lib/python2.7/site-packages/distributed/tests/test_diskutils.pys	   <genexpr>–   s    (   R   R   R   R   R   t   dictt
   subprocesst   Popent   syst
   executablet   PIPEt   TrueR3   t   readlinet   pollt   NoneR   t   evalR!   t   killt   waitR	   t   Falset   getvaluet
   splitlinest   lent   any(
   R(   R)   R*   R+   t   codeR9   t   a_patht   b_patht   siot   lines(    (   R   s?   lib/python2.7/site-packages/distributed/tests/test_diskutils.pyt   test_workspace_process_crasha   s4    	
			


c         C` s´   t  |  ƒ } t | ƒ } | j d d ƒ } t j | j ƒ t d d d t ƒ } | j ƒ  Wd  QX| j	 ƒ  j
 ƒ  } | s€ t ‚ x- | D]% } | j d | j f ƒ s‡ t ‚ q‡ Wd  S(   NR   R   s   distributed.diskutilst   ERRORR6   s   Failed to remove %r(   R   R   R    t   shutilt   rmtreeR   R	   RG   R"   RH   RI   R   R'   (   R(   R)   R+   R,   RO   RP   R9   (    (    s?   lib/python2.7/site-packages/distributed/tests/test_diskutils.pyt   test_workspace_rmtree_failure™   s    c         C` s  t  |  ƒ } t j j i t d 6ƒ Ø t j d ƒ ¸ } t j t	 | ƒ } t
 | ƒ } | g  ƒ | j d d ƒ } | d g ƒ | j d d ƒ } | d d g ƒ | j ƒ  | d d g ƒ | j ƒ  | d g ƒ ~ t j ƒ  | g  ƒ Wd  QX| j ƒ  Wd  QXd  S(   Ns#   distributed.worker.use-file-lockings&   distributed.diskutils.locket.lock_fileR   R   R   (   R   t   daskt   configt   setRG   t   mockt   patchR   R   R   R   R    R!   R"   R#   R$   t   assert_not_called(   R(   R)   t	   lock_fileR*   R+   R,   R-   (    (    s?   lib/python2.7/site-packages/distributed/tests/test_diskutils.pyt   test_locking_disabled¨   s$    



c   
   	   C` sé   t  |  ƒ } d } t d d ƒ ] } xS | j ƒ  sy y | j ƒ  } Wn  t k
 re } | j | ƒ q' X| t | ƒ 7} q' WWd  QX| j ƒ  j ƒ  }	 |	 rØ y t	 d t |	 ƒ ƒ ‚ WqØ t k
 rÔ } | j | ƒ qØ Xn  | j | ƒ d  S(   Ni    s   distributed.diskutilsRR   s   got %d logs, see stderr(
   R   R	   t   is_setR!   t	   Exceptiont   putRJ   RH   RI   R   (
   R)   t   purged_qt   err_qt   stop_evtR+   t   n_purgedRO   t   purgedt   eRP   (    (    s?   lib/python2.7/site-packages/distributed/tests/test_diskutils.pyt   _workspace_concurrencyÁ   s     c      
   C` sð  t  |  ƒ } t j ƒ  } t j ƒ  } t j ƒ  } t | ƒ } d „  | _ t j d k r] d n | } g  t | ƒ D]* }	 t j	 d t
 d | | | | f ƒ ^ qp }
 x |
 D] } | j ƒ  q§ Wd } d } zq t ƒ  } xa t ƒ  | | k  r6x= t d ƒ D]/ }	 | j d d	 ƒ } | j j ƒ  | d
 7} qö Wt d ƒ qÖ WWd | j ƒ  x |
 D] } | j ƒ  qLWXy | j ƒ  } Wn t k
 r„n X| ‚ y! x t rª| | j ƒ  7} q‘WWn t k
 r¿n X| d | k oÛd k n sæt ‚ | | f S(   sa   
    WorkSpace concurrency test.  We merely check that no exception or
    deadlock happens.
    c           S` s   d  S(   N(   RC   (    (    (    s?   lib/python2.7/site-packages/distributed/tests/test_diskutils.pyt   <lambda>ä   t    t   win32i   t   targett   argsi    i2   R   s   workspace-concurrency-i   g{®Gáz„?Ng      à?(   R   R   t   Queuet   EventR   R!   R=   t   platformR   t   ProcessRg   t   startR   R    t
   _finalizert   detachR   RX   R   t
   get_nowaitR   R@   R   (   R(   t   timeoutt	   max_procsR)   Rb   Ra   Rc   R+   t   NPROCSR   t	   processesR   t	   n_createdRd   t   t1t   dt   err(    (    s?   lib/python2.7/site-packages/distributed/tests/test_diskutils.pyt   _test_workspace_concurrencyØ   sH    :	
	&c         C` s/   t  r t j j d ƒ ‚ n  t |  d d ƒ d  S(   Ns    TODO: unknown failure on windowsg       @i   (   R   t   pytestt   xfailR_   R}   (   R(   (    (    s?   lib/python2.7/site-packages/distributed/tests/test_diskutils.pyt   test_workspace_concurrency  s    c         C` s.   t  |  d d ƒ \ } } | d k s* t ‚ d  S(   Ng       @i   id   (   R}   R   (   R(   Ry   Rd   (    (    s?   lib/python2.7/site-packages/distributed/tests/test_diskutils.pyt"   test_workspace_concurrency_intense  s    ($   t
   __future__R    R   R   R   R#   R   RS   R;   R=   R   R   RY   R~   RV   t   distributed.compatibilityR   R   t   distributed.diskutilsR   t   distributed.metricst   distributed.utilsR   t   distributed.utils_testR	   R
   R   R/   R1   RQ   RU   R]   Rg   R}   R€   R   (    (    (    s?   lib/python2.7/site-packages/distributed/tests/test_diskutils.pyt   <module>   s2   	!		8				<	