§
    AxÅjÖU  ã                   óà   — d 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Zddlm	Z	 ddl
mZ  e¦   «         ZdZdZdZdZd	Zd
ZdZ G d„ d¦  «        Zd„ Zg Zd„ Zd„ Zd„ Z ej        e¦  «         dS )a°  Directory-mirror warm cache between local directories and a network volume.

``VolumeCache`` keeps a browsable mirror of one or more local directories on a
mounted network volume, and reconciles the two directions on demand:

- ``hydrate()``: copy files that are missing or newer on the volume mirror
  into the container (used on cold start, before the cache is populated).
- ``sync()``: copy files that are missing or newer in the container onto the
  volume mirror (used after the cache has been populated/updated).

Transport adapts to the tree's shape: files below 256 KiB are packed into a
single ``small.tar`` on the volume (collapsing per-file metadata round-trips),
larger files are copied unpacked into ``big/`` across a thread pool, and a
versioned ``manifest.json`` (written last) records the layout. Large-file
transfers stay incremental (size/mtime diff); the small-file archive is
re-packed whole when any small file changes. Packing uses the ``tar`` binary
when present (else stdlib ``tarfile``); extraction always uses ``tarfile``,
validating every member against the configured dirs. Best-effort: any failure
degrades to a cold worker and never raises unless ``best_effort=False``.
é    N)ÚThreadPoolExecutor)ÚRunPodLoggerg       @g      >@i   é   zmanifest.jsonz	small.tarÚbigc                   óš  — e Zd ZdZej        dz   ej        z   ej        dz   ej        z   fZdddddœd„Zed	„ ¦   «         Z	ed
„ ¦   «         Z
ed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zed„ ¦   «         Zd„ Zd„ Zd„ Zed„ ¦   «         Zd„ Zd„ Zd„ Zd„ Zed„ ¦   «         Zd„ Z d „ Z!dd!œd"„Z"d#„ Z#d$„ Z$d%„ Z%dS )&ÚVolumeCacheao  Warm-cache local directories across serverless workers via a network volume.

    Maintains a mirror of ``dirs`` at ``{volume_path}/.cache/{namespace}``.
    ``hydrate()`` reconciles volume -> container; ``sync()`` reconciles
    container -> volume. Used as a context manager, the object is itself the
    "warm cache" closure: hydrate on enter, sync (in the background by
    default) on exit.

    Requires a network volume mounted at ``volume_path`` (default
    ``/runpod-volume``) and a non-empty ``namespace`` (default
    ``RUNPOD_ENDPOINT_ID``); otherwise ``available`` is False and all
    operations are no-ops.

    Args:
        dirs: Local directories to cache (e.g. a model cache like ``HF_HOME``).
        namespace: Isolation key for the on-volume mirror. Must be a single
            safe path component. Defaults to ``RUNPOD_ENDPOINT_ID``.
        volume_path: Network-volume mount point. Defaults to ``/runpod-volume``.
        best_effort: When True (default), swallow and log errors instead of
            raising.
        max_workers: Thread count for parallel copy of large files. Defaults
            to ``min(32, (os.cpu_count() or 4) * 4)`` (I/O-bound, so
            oversubscribing the CPU count is fine).

    Example:
        >>> with VolumeCache(dirs=["/root/.cache/huggingface"]):
        ...     model = load_model()  # downloads land in the cached dir
    Úrefsz	.no_existNz/runpod-volumeT)Ú	namespaceÚvolume_pathÚbest_effortÚmax_workersc                óž  — t          |t          t          t          j        f¦  «        r|g}d„ |D ¦   «         | _        |p t          j                             d¦  «        pd| _        | j        rit          j	         
                    | j        ¦  «        s.t          j        | j        v sd| j        v sd| j        v s	| j        dv rt          d| j        ›�¦  «        ‚t          j        t          j        |¦  «        ¦  «        | _        || _        |�|dk     rt          d	|›�¦  «        ‚|p%t#          d
t          j        ¦   «         pddz  ¦  «        | _        d S )Nc           	      ó”   — g | ]E}t           j                             t          j        t          j        |¦  «        ¦  «        ¦  «        ‘ŒFS © )ÚosÚpathÚrealpathÚfsdecodeÚfspath)Ú.0Úds     úXC:\Projects\Historical\venv\Lib\site-packages\runpod/serverless/utils/rp_volume_cache.pyú
<listcomp>z(VolumeCache.__init__.<locals>.<listcomp>V   s:   € ÐPÐPÐPÀa•b”g×&Ò&¥r¤{µ2´9¸Q±<´<Ñ'@Ô'@ÑAÔAÐPÐPÐPó    ÚRUNPOD_ENDPOINT_IDÚ ú/ú\)ú.z..z4namespace must be a single safe path component, got r   z,max_workers must be a positive integer, got é    é   )Ú
isinstanceÚstrÚbytesr   ÚPathLikeÚ_dirsÚenvironÚgetÚ
_namespacer   ÚisabsÚsepÚ
ValueErrorr   r   Ú_volume_pathÚ_best_effortÚminÚ	cpu_countÚ_max_workers)ÚselfÚdirsr
   r   r   r   s         r   Ú__init__zVolumeCache.__init__L   sQ  € õ �d�S¥%­¬Ð5Ñ6Ô6ð 	ð �6ˆDð QÐPÈ4ÐPÑPÔPˆŒ
Ø#ÐQ¥r¤z§~¢~Ð6JÑ'KÔ'KÐQÈrˆŒØŒ?ð 		ÝŒG�MŠM˜$œ/Ñ*Ô*ð		åŒv˜œÐ(Ð(Ø�d”oÐ%Ð%Ø�t”Ð&Ð&ØŒ +Ð-Ð-åØZÀtÄÐZÐZñô ð õ œK­¬	°+Ñ(>Ô(>Ñ?Ô?ˆÔØ'ˆÔð Ð" {°Q¢ ÝÐ[ÈKÐ[Ð[Ñ\Ô\Ð\Ø'ÐM­3¨rµB´L±N´NÐ4GÀaÈ1Ñ3LÑ+MÔ+MˆÔÐÐr   c                 óX   — t           j                             | j        d| j        ¦  «        S )Nz.cache)r   r   Újoinr-   r)   ©r2   s    r   Ú_mirror_rootzVolumeCache._mirror_rooto   s   € åŒw�|Š|˜DÔ-¨x¸¼ÑIÔIÐIr   c                 óV   — t           j                             | j        t          ¦  «        S ©N)r   r   r6   r8   Ú_MANIFEST_NAMEr7   s    r   Ú_manifest_pathzVolumeCache._manifest_paths   s   € åŒw�|Š|˜DÔ-­~Ñ>Ô>Ð>r   c                 óV   — t           j                             | j        t          ¦  «        S r:   )r   r   r6   r8   Ú_SMALL_ARCHIVE_NAMEr7   s    r   Ú_small_archive_pathzVolumeCache._small_archive_pathw   s   € åŒw�|Š|˜DÔ-Õ/BÑCÔCÐCr   c                 óV   — t           j                             | j        t          ¦  «        S r:   )r   r   r6   r8   Ú_BIG_SUBDIRr7   s    r   Ú	_big_rootzVolumeCache._big_root{   s   € åŒw�|Š|˜DÔ-­{Ñ;Ô;Ð;r   c                 ór   — t          | j        ¦  «        o#t          j                             | j        ¦  «        S )zATrue iff volume_path is a mounted dir AND namespace is non-empty.)Úboolr)   r   r   Úisdirr-   r7   s    r   Ú	availablezVolumeCache.available   s*   € õ �D”OÑ$Ô$ÐI­¬¯ª°tÔ7HÑ)IÔ)IÐIr   c              #   ó�  ‡K  — t          j        |¦  «        D ]­\  }}}|D ]¤}t           j                             ||¦  «        Š|                     d¦  «        s|                     d¦  «        rŒMt          ˆfd„| j        D ¦   «         ¦  «        rŒn	 t           j                             ‰¦  «        rŒ�n# t          $ r Y Œœw xY w‰V — Œ¥Œ®d S )Nz.lockú	.rpvc.tmpc              3   ó    •K  — | ]}|‰v V — Œ	d S r:   r   )r   Úsubr   s     €r   ú	<genexpr>z*VolumeCache._iter_files.<locals>.<genexpr>Ž   s'   øè è € ÐGÐG s�s˜d�{ÐGÐGÐGÐGÐGÐGr   )	r   Úwalkr   r6   ÚendswithÚanyÚ_EXCLUDE_SUBSTRINGSÚislinkÚOSError)r2   ÚrootÚdirpathr&   ÚfilesÚnamer   s         @r   Ú_iter_fileszVolumeCache._iter_filesˆ   sû   øè è € Ý%'¤W¨T¡]¤]ð 	ð 	Ñ!ˆG�U˜EØð ð �Ý”w—|’| G¨TÑ2Ô2�Ø—=’= Ñ)Ô)ð ¨T¯]ª]¸;Ñ-GÔ-Gð ØÝÐGÐGÐGÐG¨dÔ.FÐGÑGÔGÑGÔGð ØðÝ”w—~’~ dÑ+Ô+ð !Ø ð!øåð ð ð Ø�Hðøøøà�
�
�
�
ðð	ð 	s   ÂB0Â0
B=Â<B=c                 ó¶   — g g }}|D ]O}	 t          j        |¦  «        j        }n# t          $ r Y Œ)w xY w|t          k     r|n|                     |¦  «         ŒP||fS r:   )r   ÚstatÚst_sizerQ   Ú_SMALL_FILE_THRESHOLDÚappend)r2   ÚpathsÚsmallr   ÚpÚsizes         r   Ú
_partitionzVolumeCache._partition—   sƒ   € Ø˜ˆsˆØð 	Gð 	GˆAðÝ”w˜q‘z”zÔ)��øÝð ð ð Ø�ðøøøàÕ2Ò2Ð2ˆUˆU¸×CÒCÀAÑFÔFÐFÐFØ�cˆzÐs   Š$¤
1°1c                 óp   — 	 t          j        |¦  «        }n# t          $ r Y d S w xY w||j        |j        dœS )N©r   r_   Úmtime)r   rX   rQ   rY   Úst_mtime)r2   r   Ústs      r   Ú
_file_metazVolumeCache._file_meta¡   sL   € ð	Ý”˜‘”ˆBˆBøÝð 	ð 	ð 	Ø�4�4ð	øøøà b¤j¸2¼;ÐGÐGÐGs   ‚ —
%¤%c                 óp  — t          j        | j        d¬¦  «         t          t          ||dœ}| j        › dt          j        ¦   «         › dt          j        ¦   «         › d�}t          |d¦  «        5 }t          j        ||¦  «         d d d ¦  «         n# 1 swxY w Y   t          j        || j        ¦  «         d S )NT©Úexist_ok)ÚversionÚ	thresholdr]   r   r   rH   Úw)r   Úmakedirsr8   Ú_FORMAT_VERSIONrZ   r<   ÚgetpidÚ	threadingÚ	get_identÚopenÚjsonÚdumpÚreplace)r2   Ú
small_metaÚbig_metaÚpayloadÚtmpÚfhs         r   Ú_write_manifestzVolumeCache._write_manifest¨   sñ   € Ý
Œ�DÔ%°Ð5Ñ5Ô5Ð5å&Ý.ØØð	
ð 
ˆð Ô$ÐUÐU¥r¤y¡{¤{ÐUÐUµYÔ5HÑ5JÔ5JÐUÐUÐUˆÝ�#�s‰^Œ^ð 	#˜rÝŒI�g˜rÑ"Ô"Ð"ð	#ð 	#ð 	#ñ 	#ô 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#øøøð 	#ð 	#ð 	#ð 	#å
Œ
�3˜Ô+Ñ,Ô,Ð,Ð,Ð,s   Á/BÂBÂBc                 ó$  — 	 t          | j        ¦  «        5 }t          j        |¦  «        }d d d ¦  «         n# 1 swxY w Y   n# t          t
          f$ r Y d S w xY wt          |t          ¦  «        r|                     d¦  «        t          k    rd S |S )Nrj   )
rr   r<   rs   ÚloadrQ   r,   r"   Údictr(   rn   )r2   rz   Úobjs      r   Ú_read_manifestzVolumeCache._read_manifestµ   sÓ   € ð	Ý�dÔ)Ñ*Ô*ð $¨bÝ”i ‘m”m�ð$ð $ð $ñ $ô $ð $ð $ð $ð $ð $ð $øøøð $ð $ð $ð $øøå�Ð$ð 	ð 	ð 	Ø�4�4ð	øøøå˜#�tÑ$Ô$ð 	¨¯ª°	Ñ(:Ô(:½oÒ(MÐ(Mð �4Øˆ
s,   ‚A –7«A ·;»A ¾;¿A ÁAÁAc                 ó°   — 	 t          j        |d         ¦  «        }n# t          $ r Y dS w xY w|j        |d         k    o|j        |d         t
          z
  k    S )Nr   Fr_   rc   ©r   rX   rQ   rY   rd   Ú_MTIME_TOLERANCE)r2   Úmetare   s      r   Ú_meta_satisfied_by_localz$VolumeCache._meta_satisfied_by_localÂ   se   € ð	Ý”˜˜fœÑ&Ô&ˆBˆBøÝð 	ð 	ð 	Ø�5�5ð	øøøàŒz˜T &œ\Ò)Ð]¨b¬k¸TÀ'¼]ÕM]Ñ=]Ò.]Ð]s   ‚ �
+ª+c                 ó  — d„ |r|                      |g ¦  «        ng D ¦   «         }g }|D ]`}|                      |d         ¦  «        }|�,|d         |d         k    s|d         |d         t          z   k    r|                     |¦  «         Œa|S )Nc                 ó    — i | ]}|d          |“ŒS ©r   r   ©r   Úes     r   ú
<dictcomp>z4VolumeCache._changed_vs_manifest.<locals>.<dictcomp>Ê   s   € ÐSÐSÐS !��6”˜AÐSÐSÐSr   r   r_   rc   )r(   rƒ   r[   )r2   ÚmetasÚmanifestÚkeyÚpriorÚchangedÚmr^   s           r   Ú_changed_vs_manifestz VolumeCache._changed_vs_manifestÉ   s�   € ØSÐSÀÐ(Q¨¯ª°S¸"Ñ(=Ô(=Ð(=ÈrÐSÑSÔSˆØˆØð 	"ð 	"ˆAØ—	’	˜!˜Fœ)Ñ$Ô$ˆAØˆy˜A˜fœI¨¨6¬Ò2Ð2°a¸´jÀ1ÀWÄ:ÕP`ÑC`Ò6`Ð6`Ø—’˜qÑ!Ô!Ð!øØˆr   c                 óî   — 	 t          j        | ¦  «        }n# t          $ r Y dS w xY w	 t          j        |¦  «        }n# t          $ r Y dS w xY w|j        |j        k    p|j        |j        t
          z   k    S )NFTr‚   )Úsrc_pathÚdst_pathÚsr   s       r   Ú_needs_copyzVolumeCache._needs_copyÒ   s•   € ð	Ý”˜Ñ!Ô!ˆAˆAøÝð 	ð 	ð 	Ø�5�5ð	øøøð	Ý”˜Ñ!Ô!ˆAˆAøÝð 	ð 	ð 	Ø�4�4ð	øøøàŒy˜AœIÒ%ÐS¨¬°a´jÕCSÑ6SÒ)SÐSs   ‚ —
%¤%©> ¾
AÁAc                 ó‚   ‡— t           j                             |¦  «        Št          ˆfd„| j        D ¦   «         ¦  «        S )Nc              3   óh   •K  — | ],}‰|k    p!‰                      |t          j        z   ¦  «        V — Œ-d S r:   )Ú
startswithr   r+   )r   r   Útargets     €r   rK   z,VolumeCache._is_safe_dest.<locals>.<genexpr>à   s@   øè è € ÐTÐTÀA�6˜Q’;Ð? &×"3Ò"3°A½¼±JÑ"?Ô"?ÐTÐTÐTÐTÐTÐTr   )r   r   r   rN   r&   )r2   Údst_absr›   s     @r   Ú_is_safe_destzVolumeCache._is_safe_destÞ   s=   ø€ Ý”×!Ò! 'Ñ*Ô*ˆÝÐTÐTÐTÐTÈÌÐTÑTÔTÑTÔTÐTr   c           	      ó  — |› dt          j        ¦   «         › dt          j        ¦   «         › d�}	 t          j        t           j                             |¦  «        d¬¦  «         t          j        ||¦  «         t          j	        ||¦  «         dS # t          $ rs}t                               d|› d|› d|› �¦  «         	 t           j                             |¦  «        rt          j        |¦  «         n# t          $ r Y nw xY wY d }~dS d }~ww xY w)	Nr   rH   Trh   zVolumeCache: skip z -> ú: F)r   ro   rp   rq   rm   r   ÚdirnameÚshutilÚcopy2ru   rQ   ÚlogÚdebugÚexistsÚremove)r2   ÚsrcÚdstry   Úexcs        r   Ú
_copy_filezVolumeCache._copy_fileâ   s"  € ØÐEÐE•r”y‘{”{ÐEÐE¥YÔ%8Ñ%:Ô%:ÐEÐEÐEˆð	ÝŒK�œŸš¨Ñ,Ô,°tÐ<Ñ<Ô<Ð<ÝŒL˜˜cÑ"Ô"Ð"ÝŒJ�s˜CÑ Ô Ð Ø�4øÝð 	ð 	ð 	Ý�IŠIÐ@¨3Ð@Ð@°CÐ@Ð@¸3Ð@Ð@ÑAÔAÐAðÝ”7—>’> #Ñ&Ô&ð #Ý”I˜c‘N”N�NøøÝð ð ð à�ðøøøð �5�5�5�5�5øøøøð	øøøs<   ¯AB Â
DÂ#DÂ<3C0Ã/DÃ0
C=Ã:DÃ<C=Ã=DÄDc                 ó>  ‡ — ˆ fd„|D ¦   «         }d„ |D ¦   «         d„ |D ¦   «         z
  }|st          ¦   «         |fS t          ‰ j        ¬¦  «        5 }|                     ˆ fd„|¦  «        }d„ t	          ||¦  «        D ¦   «         }ddd¦  «         n# 1 swxY w Y   ||fS )aä  Copy every (src, dst) that needs it, in parallel.

        Returns ``(copied, current)`` sets of source paths:
        - ``copied``  -- sources transferred successfully this call.
        - ``current`` -- sources skipped because the destination was already
          up to date.
        Their union is the set of sources the destination now holds a current
        copy of; a source in neither failed to copy. Callers that record a
        "mirror complete" manifest MUST include only sources in that union, or
        a failed copy would be marked present and later served stale. copy2 +
        atomic os.replace means a source in ``copied`` matches its destination
        at that instant, so no re-stat is needed to confirm it.
        c                 óJ   •— g | ]\  }}‰                      ||¦  «        ¯||f‘Œ S r   )r—   )r   r–   r   r2   s      €r   r   z.VolumeCache._copy_parallel.<locals>.<listcomp>  s6   ø€ ÐCÐCÐC™4˜1˜a¨D×,<Ò,<¸QÀÑ,BÔ,BÐC��A�ÐCÐCÐCr   c                 ó   — h | ]\  }}|’ŒS r   r   ©r   r–   Ú_s      r   ú	<setcomp>z-VolumeCache._copy_parallel.<locals>.<setcomp>  s   € Ð'Ð'Ð'™˜˜A�1Ð'Ð'Ð'r   c                 ó   — h | ]\  }}|’ŒS r   r   r®   s      r   r°   z-VolumeCache._copy_parallel.<locals>.<setcomp>  s   € Ð*>Ð*>Ð*>±°°A¨1Ð*>Ð*>Ð*>r   )r   c                 óH   •— ‰                      | d         | d         ¦  «        S )Nr   r   )rª   )Úsdr2   s    €r   ú<lambda>z,VolumeCache._copy_parallel.<locals>.<lambda>	  s   ø€ ¨$¯/ª/¸"¸Q¼%ÀÀAÄÑ*GÔ*G€ r   c                 ó"   — h | ]\  \  }}}|¯
|’ŒS r   r   )r   r–   r¯   Úoks       r   r°   z-VolumeCache._copy_parallel.<locals>.<setcomp>
  s%   € ÐCÐCÐC™J™F˜Q  BÀÐC�aÐCÐCÐCr   N)Úsetr   r1   ÚmapÚzip)r2   ÚpairsÚtodoÚcurrentÚpoolÚresultsÚcopieds   `      r   Ú_copy_parallelzVolumeCache._copy_paralleló   s  ø€ ð DÐCÐCÐC 5ÐCÑCÔCˆØ'Ð' Ð'Ñ'Ô'Ð*>Ð*>¸Ð*>Ñ*>Ô*>Ñ>ˆØð 	"Ý‘5”5˜'�>Ð!Ý¨DÔ,=Ð>Ñ>Ô>ð 	DÀ$ð —h’hÐGÐGÐGÐGÈÑNÔNˆGØCÐC­#¨d°GÑ*<Ô*<ÐCÑCÔCˆFð	Dð 	Dð 	Dñ 	Dô 	Dð 	Dð 	Dð 	Dð 	Dð 	Dð 	Døøøð 	Dð 	Dð 	Dð 	Dð �wˆÐs   Á4BÂBÂBc                 óÎ   — t           j                             | ¦  «        }t           j                             |¦  «        }||k    p!|                     |t           j        z   ¦  «        S )z?True iff ``path`` resolves inside ``base`` (symlinks resolved).)r   r   r   rš   r+   )Úbaser   Ú	base_realÚ	path_reals       r   Ú_withinzVolumeCache._within  sS   € õ ”G×$Ò$ TÑ*Ô*ˆ	Ý”G×$Ò$ TÑ*Ô*ˆ	Ø˜IÒ%ÐQ¨×)=Ò)=¸iÍ"Ì&Ñ>PÑ)QÔ)QÐQr   c                 ó”   — 	  |¦   «         S # t           $ r1}| j        s‚ t                               d|› �¦  «         |cY d }~S d }~ww xY w)NzVolumeCache operation failed: )Ú	Exceptionr.   r£   Úwarn)r2   ÚfnÚdefaultr©   s       r   Ú_guardzVolumeCache._guard  si   € ð	Ø�2‘4”4ˆKøÝð 	ð 	ð 	ØÔ$ð ØÝ�HŠHÐ;°cÐ;Ð;Ñ<Ô<Ð<ØˆNˆNˆNˆNˆNˆNøøøøð		øøøs   ‚	 Œ
A–&A¼AÁAc                 ó*   — t          j        d¦  «        S )NÚtar)r¡   Úwhichr7   s    r   Ú_tar_binaryzVolumeCache._tar_binary  s   € ÝŒ|˜EÑ"Ô"Ð"r   c                 ó  — t          j        | j        d¬¦  «         | j        › dt          j        ¦   «         › dt          j        ¦   «         › d�}d„ |D ¦   «         }	 |                      ¦   «         rÀ|› d�}	 t          |d¦  «        5 }| 	                    d 
                    |¦  «        ¦  «         d d d ¦  «         n# 1 swxY w Y   t          j        d	d
dddd|d|g	dt          j        t          j        i t           j        ¥ddi¥¬¦  «         t          |¦  «         np# t          |¦  «         w xY wt!          j        |d¦  «        5 }t#          ||¦  «        D ]\  }}|                     ||d¬¦  «         Œ	 d d d ¦  «         n# 1 swxY w Y   t          j        || j        ¦  «         dS # t(          t          j        t           j        f$ r7}	t.                               d|	› �¦  «         t          |¦  «         Y d }	~	dS d }	~	ww xY w)NTrh   r   rH   c                 óN   — g | ]"}t           j                             |d ¦  «        ‘Œ#S ©r   )r   r   Úrelpath)r   Úfs     r   r   z+VolumeCache._pack_small.<locals>.<listcomp>#  s(   € Ð7Ð7Ð7¨A•”—’  3Ñ'Ô'Ð7Ð7Ð7r   z.listrl   ú
rÍ   z-Cr   z-cz--no-recursionz-fz-TÚCOPYFILE_DISABLEÚ1)ÚcheckÚstdoutÚstderrÚenvF)ÚarcnameÚ	recursivez'VolumeCache: pack small bucket failed: )r   rm   r8   r?   ro   rp   rq   rÏ   rr   Úwriter6   Ú
subprocessÚrunÚDEVNULLr'   Ú_silent_removeÚtarfiler¹   Úaddru   rQ   ÚSubprocessErrorÚTarErrorr£   r¤   )
r2   rT   ry   ÚrelsÚlistingrz   ÚtfrÔ   Úrelr©   s
             r   Ú_pack_smallzVolumeCache._pack_small   s³  € Ý
Œ�DÔ%°Ð5Ñ5Ô5Ð5ØÔ)ÐZÐZ­B¬I©K¬KÐZÐZ½)Ô:MÑ:OÔ:OÐZÐZÐZˆØ7Ð7°Ð7Ñ7Ô7ˆð	Ø×ÒÑ!Ô!ð @Ø ˜-˜-˜-�ð,Ý˜g sÑ+Ô+ð 2¨rØŸš §¢¨4¡¤Ñ1Ô1Ð1ð2ð 2ð 2ñ 2ô 2ð 2ð 2ð 2ð 2ð 2ð 2øøøð 2ð 2ð 2ð 2å”NØ  c¨4Ð1AÀ4ÈÈdÐT[Ð\Ø"Ý)Ô1Ý)Ô1àC�rœzÐCÐ+=¸sÐCÐCðñ ô ð õ # 7Ñ+Ô+Ð+Ð+ø•N 7Ñ+Ô+Ð+Ð+øøøå”\ # sÑ+Ô+ð @¨rÝ"% e¨TÑ"2Ô"2ð @ð @™˜˜3ØŸš˜q¨#¸˜Ñ?Ô?Ð?Ð?ð@ð@ð @ð @ñ @ô @ð @ð @ð @ð @ð @ð @øøøð @ð @ð @ð @õ ŒJ�s˜DÔ4Ñ5Ô5Ð5Ø�4øÝ�Ô3µWÔ5EÐFð 	ð 	ð 	Ý�IŠIÐEÀÐEÐEÑFÔFÐFÝ˜3ÑÔÐØ�5�5�5�5�5øøøøð	øøøsy   ÁF' Á5D Â)B:Â.D Â:B>Â>D ÃB>ÃA	D ÄF' ÄD,Ä,F' Å/F Å4F' Æ FÆF' ÆFÆF' Æ'!G?Ç,G:Ç:G?c                 óÀ  — 	 t          j        | j        ¦  «        }n# t          t           j        f$ r Y dS w xY wd}	 	 |                     ¦   «         }n^# t          t           j        f$ rE}t                               d| j        › d|› �¦  «         |cY d }~|                     ¦   «          S d }~ww xY w|D ]Ü}| 	                    ¦   «         sŒt          j                             d|j        ¦  «        }|                      |¦  «        sŒR||j        |j        dœ}|                      |¦  «        rŒx	 |                      ||¦  «         |dz  }Œ•# t          t           j        f$ r/}t                               d|j        › d|› �¦  «         Y d }~ŒÕd }~ww xY w	 |                     ¦   «          n# |                     ¦   «          w xY w|rt                               d|› d	�¦  «         |S )
Nr   zVolumeCache: corrupt archive rŸ   r   rb   r   zVolumeCache: skip extract zVolumeCache: extracted z small file(s))rã   rr   r?   rQ   ræ   Ú
getmembersr£   r¤   ÚcloseÚisfiler   r   r6   rU   r�   r_   rc   r…   Ú_extract_memberÚinfo)r2   ré   Ú	extractedÚmembersr©   Úmemberr¨   r„   s           r   Ú_extract_smallzVolumeCache._extract_small?  s2  € ð	Ý”˜dÔ6Ñ7Ô7ˆBˆBøÝ�Ô)Ð*ð 	ð 	ð 	Ø�1�1ð	øøøàˆ	ð	ð!ØŸ-š-™/œ/��øÝ�WÔ-Ð.ð !ð !ð !Ý—	’	Ð[¸$Ô:RÐ[Ð[ÐVYÐ[Ð[Ñ\Ô\Ð\Ø Ð Ð Ð Ð Ð ð( �HŠH‰JŒJˆJˆJøøøøð-!øøøð "ð Qð Q�à—}’}‘”ð ØÝ”g—l’l 3¨¬Ñ4Ô4�à×)Ò)¨#Ñ.Ô.ð Øà #¨V¬[À6Ä<ÐPÐP�Ø×0Ò0°Ñ6Ô6ð ØðQØ×(Ò(¨¨VÑ4Ô4Ð4Ø ‘N�I�IøÝ¥Ô!1Ð2ð Qð Qð QÝ—I’IÐO¸6¼;ÐOÐOÈ#ÐOÐOÑPÔPÐPÐPÐPÐPÐPÐPøøøøðQøøøð!Qð& �HŠH‰JŒJˆJˆJøˆB�HŠH‰JŒJˆJˆJøøøØð 	JÝ�HŠHÐH¨yÐHÐHÐHÑIÔIÐIØÐsl   ‚ œ6µ6½A ÁF% ÁB-Á(&B(ÂB-ÂF% Â(B-Â-A=F% Ä+EÅF% ÅFÅ%FÆF% ÆFÆF% Æ%F;c                 ó�   — t          t          d¦  «        r|                      |dd¬¦  «         d S |                      |d¦  «         d S )NÚdata_filterr   Údata)Úfilter)Úhasattrrã   Úextract)ré   rô   s     r   rð   zVolumeCache._extract_memberc  sN   € õ •7˜MÑ*Ô*ð 	$Ø�JŠJ�v˜s¨6ˆJÑ2Ô2Ð2Ð2Ð2à�JŠJ�v˜sÑ#Ô#Ð#Ð#Ð#r   c                 óJ   — | j         sdS |                      | j        d¦  «        S )z«Reconcile volume mirror -> container.

        Copy files missing or newer in the container. Returns the number of
        files copied. No-op (0) if unavailable.
        r   )rF   rË   Ú_do_hydrater7   s    r   ÚhydratezVolumeCache.hydratep  s*   € ð Œ~ð 	Ø�1Ø�{Š{˜4Ô+¨QÑ/Ô/Ð/r   c                 óÎ  — |                       ¦   «         }|€dS d}|                     d¦  «        r||                      ¦   «         z  }g }|                     dg ¦  «        D ]´}t          j                             |d         d¦  «        }t          j                             d|¦  «        }t          j                             | j        |¦  «        }|                      |¦  «        r2|  	                    | j        |¦  «        r| 
                    ||f¦  «         Œµ|                      |¦  «        \  }}	|t          |¦  «        z  }|r%t                               d|› d| j        › �¦  «         |S )Nr   r]   r   r   r   zVolumeCache: hydrated z file(s) from )r€   r(   rõ   r   r   rÓ   r6   rB   r�   rÅ   r[   rÀ   Úlenr£   rñ   r8   )
r2   r�   ÚrestoredÚ	big_pairsÚentryrê   r¨   r§   r¿   Ú_currents
             r   rý   zVolumeCache._do_hydratez  sX  € Ø×&Ò&Ñ(Ô(ˆØÐØ�1ØˆØ�<Š<˜Ñ Ô ð 	.Ø˜×+Ò+Ñ-Ô-Ñ-ˆHØˆ	Ø—\’\ %¨Ñ,Ô,ð 	-ð 	-ˆEÝ”'—/’/ %¨¤-°Ñ5Ô5ˆCÝ”'—,’,˜s CÑ(Ô(ˆCÝ”'—,’,˜tœ~¨sÑ3Ô3ˆCð ×!Ò! #Ñ&Ô&ð -¨4¯<ª<¸¼ÈÑ+LÔ+Lð -Ø× Ò  # s Ñ,Ô,Ð,øØ×.Ò.¨yÑ9Ô9Ñˆ�Ø•C˜‘K”KÑˆØð 	[Ý�HŠHÐY¨hÐYÐYÀdÔFWÐYÐYÑZÔZÐZØˆr   ©Ú
backgroundc                óÐ   ‡ — ‰ j         sdS |r>t          j        ˆ fd„d¬¦  «        }t          |¦  «         |                     ¦   «          dS ‰                      ‰ j        d¦  «         dS )aO  Reconcile container -> volume mirror.

        Copy files missing or newer on the volume. When ``background=True``
        (default), run on a daemon thread and return immediately; a
        process-exit hook joins outstanding syncs so short-lived processes
        still complete. When False, run inline and return when done.
        Nc                  ó:   •— ‰                       ‰ j        d¦  «        S )Nr   )rË   Ú_do_syncr7   s   €r   r´   z"VolumeCache.sync.<locals>.<lambda>œ  s   ø€ °·²¸D¼MÈ1Ñ0MÔ0M€ r   T)r›   Údaemonr   )rF   rp   ÚThreadÚ_register_pendingÚstartrË   r	  )r2   r  Úts   `  r   ÚsynczVolumeCache.sync‘  sw   ø€ ð Œ~ð 	ØˆFØð 	*ÝÔ Ð(MÐ(MÐ(MÐ(MÐVZÐ[Ñ[Ô[ˆAÝ˜aÑ Ô Ð Ø�GŠG‰IŒIˆIˆIˆIà�KŠK˜œ qÑ)Ô)Ð)Ð)Ð)r   c                 óÎ  ‡ ‡— g }‰ j         D ]I}t          j                             |¦  «        r(|                     ‰                      |¦  «        ¦  «         ŒJ‰                      |¦  «        \  }}‰                      ¦   «         }d„ ˆ fd„|D ¦   «         D ¦   «         }d}|r›‰                      ||d¦  «        }d„ |r| 	                    dg ¦  «        ng D ¦   «         }	t          |	d„ |D ¦   «         z
  ¦  «        }
|s|
r@‰                      d„ |D ¦   «         ¦  «        rt          |¦  «        }n|d„ |D ¦   «         z   }g }|st          ‰ j        ¦  «         ˆ fd	„|D ¦   «         }‰                      |¦  «        \  }}||z  Šˆfd
„ˆ fd„|D ¦   «         D ¦   «         }t          |¦  «        }‰                      ||¦  «         ||z   }|r%t"                               d|› d‰ j        › �¦  «         |S )Nc                 ó   — g | ]}|¯|‘ŒS r   r   ©r   r‘   s     r   r   z(VolumeCache._do_sync.<locals>.<listcomp>ª  s   € ÐPÐPÐP˜AÈaÐP�aÐPÐPÐPr   c              3   óB   •K  — | ]}‰                      |¦  «        V — Œd S r:   ©rf   ©r   rÔ   r2   s     €r   rK   z'VolumeCache._do_sync.<locals>.<genexpr>ª  s/   øè è € Ð!JÐ!J¸ $§/¢/°!Ñ"4Ô"4Ð!JÐ!JÐ!JÐ!JÐ!JÐ!Jr   r   r]   c                 ó   — h | ]
}|d          ’ŒS rˆ   r   r‰   s     r   r°   z'VolumeCache._do_sync.<locals>.<setcomp>®  s   € Ð^Ð^Ð^¨˜1˜Vœ9Ð^Ð^Ð^r   c                 ó   — h | ]
}|d          ’ŒS rˆ   r   r  s     r   r°   z'VolumeCache._do_sync.<locals>.<setcomp>¯  s   € Ð)HÐ)HÐ)H¸¨!¨F¬)Ð)HÐ)HÐ)Hr   c                 ó   — g | ]
}|d          ‘ŒS rˆ   r   r  s     r   r   z(VolumeCache._do_sync.<locals>.<listcomp>¶  s   € Ð$CÐ$CÐ$C°1 Q v¤YÐ$CÐ$CÐ$Cr   c                 ó   — g | ]
}|d          ‘ŒS rˆ   r   r  s     r   r   z(VolumeCache._do_sync.<locals>.<listcomp>»  s   € Ð,KÐ,KÐ,K¸1¨Q¨v¬YÐ,KÐ,KÐ,Kr   c           
      óš   •— g | ]G}|t           j                             ‰j        t           j                             |d ¦  «        ¦  «        f‘ŒHS rÒ   )r   r   r6   rB   rÓ   r  s     €r   r   z(VolumeCache._do_sync.<locals>.<listcomp>Ä  sA   ø€ ÐcÐcÐcÐTU�a�œŸš d¤nµb´g·o²oÀaÈÑ6MÔ6MÑNÔNÐOÐcÐcÐcr   c                 ó,   •— g | ]}|r|d          ‰v ¯|‘ŒS rˆ   r   )r   r‘   Úmirroreds     €r   r   z(VolumeCache._do_sync.<locals>.<listcomp>Ë  s7   ø€ ð 
ð 
ð 
ØÀ!ð
ØHIÈ&Ì	ÐU]ÐH]ÐH]ˆAÐH]ÐH]ÐH]r   c              3   óB   •K  — | ]}‰                      |¦  «        V — Œd S r:   r  r  s     €r   rK   z'VolumeCache._do_sync.<locals>.<genexpr>Ì  s/   øè è € Ð>Ð>¨q˜Ÿš¨Ñ*Ô*Ð>Ð>Ð>Ð>Ð>Ð>r   zVolumeCache: synced z file(s) to )r&   r   r   rE   ÚextendrV   r`   r€   r’   r(   rD   rë   r   râ   r?   rÀ   r{   r£   rñ   r8   )r2   Ú	all_filesrR   Úsmall_filesÚ	big_filesr�   rv   Úsmall_transferredr�   Úprior_smallÚdeletedr  r¿   r¼   rw   Ú
big_copiedÚtotalr  s   `                @r   r	  zVolumeCache._do_sync¢  so  øø€ Øˆ	Ø”Jð 	9ð 	9ˆDÝŒw�}Š}˜TÑ"Ô"ð 9Ø× Ò  ×!1Ò!1°$Ñ!7Ô!7Ñ8Ô8Ð8øØ!%§¢°Ñ!;Ô!;Ñˆ�Yà×&Ò&Ñ(Ô(ˆØPÐPÐ!JÐ!JÐ!JÐ!J¸kÐ!JÑ!JÔ!JÐPÑPÔPˆ
ØÐØð 	$Ø×/Ò/°
¸HÀgÑNÔNˆGØ^Ð^ÈHÐ/\¨x¯|ª|¸GÀRÑ/HÔ/HÐ/HÐZ\Ð^Ñ^Ô^ˆKÝ˜;Ð)HÐ)H¸ZÐ)HÑ)HÔ)HÑHÑIÔIˆGØð $˜'ð $ð ×#Ò#Ð$CÐ$C¸
Ð$CÑ$CÔ$CÑDÔDð $Ý(+¨G©¬Ð%Ð%ð !*Ð,KÐ,KÀ
Ð,KÑ,KÔ,KÑ K�IØ!#�Jàð 	5õ ˜4Ô3Ñ4Ô4Ð4àcÐcÐcÐcÐYbÐcÑcÔcˆ	Ø×-Ò-¨iÑ8Ô8‰ˆ�ð
 ˜GÑ#ˆð
ð 
ð 
ð 
Ø>Ð>Ð>Ð>°IÐ>Ñ>Ô>ð
ñ 
ô 
ˆõ ˜‘[”[ˆ
à×Ò˜Z¨Ñ2Ô2Ð2ØÐ.Ñ.ˆØð 	TÝ�HŠHÐR¨EÐRÐR¸tÔ?PÐRÐRÑSÔSÐSØˆr   c                 ó.   — |                       ¦   «          | S r:   )rþ   r7   s    r   Ú	__enter__zVolumeCache.__enter__Ú  s   € Ø�Š‰ŒˆØˆr   c                 ó2   — |                       d¬¦  «         d S )NTr  )r  )r2   r©   s     r   Ú__exit__zVolumeCache.__exit__Þ  s   € Ø�	Š	˜Tˆ	Ñ"Ô"Ð"Øˆtr   )&Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r+   rO   r4   Úpropertyr8   r<   r?   rB   rF   rV   r`   rf   r{   r€   r…   r’   Ústaticmethodr—   r�   rª   rÀ   rÅ   rË   rÏ   rë   rõ   rð   rþ   rý   r  r	  r(  r*  r   r   r   r   r   ,   s   € € € € € ðð ð: œ6 F™?¨R¬VÑ3°R´V¸kÑ5IÈBÌFÑ5RÐSÐð "&Ð3CÐQUÐcgð!Nð !Nð !Nð !Nð !NðF ðJð Jñ „XðJð ð?ð ?ñ „Xð?ð ðDð Dñ „XðDð ð<ð <ñ „Xð<ð ðJð Jñ „XðJðð ð ðð ð ðHð Hð Hð-ð -ð -ðð ð ð^ð ^ð ^ðð ð ð ð	Tð 	Tñ „\ð	TðUð Uð Uðð ð ð"ð ð ð4 ðRð Rñ „\ðRðð ð ð#ð #ð #ðð ð ð>"ð "ð "ðH ð$ð $ñ „\ð$ð0ð 0ð 0ðð ð ð. "&ð *ð *ð *ð *ð *ð"2ð 2ð 2ðpð ð ðð ð ð ð r   r   c                 óR   — 	 t          j        | ¦  «         d S # t          $ r Y d S w xY wr:   )r   r¦   rQ   rˆ   s    r   râ   râ   è  s:   € ðÝ
Œ	�$‰ŒˆˆˆøÝð ð ð àˆˆðøøøs   ‚ ˜
&¥&c                 óp   — d„ t           D ¦   «         t           d d …<   t                                | ¦  «         d S )Nc                 ó:   — g | ]}|                      ¦   «         ¯|‘ŒS r   )Úis_alive)r   r  s     r   r   z%_register_pending.<locals>.<listcomp>ø  s%   € ÐCÐCÐC˜q°a·j²j±l´lÐC˜ÐCÐCÐCr   )Ú_pending_syncsr[   )Úthreads    r   r  r  ÷  s8   € ØCÐC¥NÐCÑCÔC…N�1�1�1ÑÝ×Ò˜&Ñ!Ô!Ð!Ð!Ð!r   c                  ó.  — t          t          ¦  «        D ]f} 	 |                      t          ¬¦  «         |                      ¦   «         r$t
                               dt          d›d�¦  «         ŒW# t          $ r Y Œcw xY wt                               ¦   «          d S )N)Útimeoutz3VolumeCache: background sync did not finish within z.0fz"s at exit; cache may be incomplete)	Úlistr5  r6   Ú_JOIN_TIMEOUT_SECONDSr4  r£   rÈ   rÇ   Úclear)r  s    r   Ú_join_pending_syncsr<  ü  s´   € Ý•.Ñ!Ô!ð 
ð 
ˆð		Ø�FŠFÕ0ˆFÑ1Ô1Ð1Ø�zŠz‰|Œ|ð Ý—’ðUÝ,ÐTðUð Uð Uñô ð øøõ ð 	ð 	ð 	àˆDð	øøøõ ×ÒÑÔÐÐÐs   ˜AA,Á,
A9Á8A9c                  ó8   — t                                ¦   «          d S r:   )r5  r;  r   r   r   Ú_reset_pending_for_testr>    s   € Ý×ÒÑÔÐÐÐr   )r.  Úatexitrs   r   r¡   rß   rã   rp   Úconcurrent.futuresr   Ú#runpod.serverless.modules.rp_loggerr   r£   rƒ   r:  rZ   rn   r;   r>   rA   r   râ   r5  r  r<  r>  Úregisterr   r   r   ú<module>rC     s;  ððð ð* €€€Ø €€€Ø 	€	€	€	Ø €€€Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1à <Ð <Ð <Ð <Ð <Ð <à€l�n„n€àÐ ØÐ Ø"Ð Ø€Ø €Ø!Ð Ø€ðtð tð tð tð tñ tô tð tðxð ð ð €ð"ð "ð "ð
ð ð ðð ð ð €„Ð#Ñ $Ô $Ð $Ð $Ð $r   