
    Wj-                       U d Z ddlm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
 ddlmZ ddlmZmZmZmZ ddlmZmZ dd	lmZ dd
lmZ ej2                  ej4                  z  ej6                  z  ej8                  z  Zded<    eej@                  ejB                  ejD                  ejF                  f      Z$ded<   e%e&e&f   Z' e       Z(ded<    e
dd       G d d             Z) e
dd       G d d             Z*d#dZ+d$dZ,d%dZ-d&dZ.d'dZ/ G d de      Z0d(dZ1	 	 	 	 	 	 	 	 d)dZ2d*dZ3e(d 	 	 	 	 	 	 	 	 	 d+d!Z4d,d"Z5y)-z>Unnamed-inode authority marker preparation and durable commit.    )annotationsN)Callable)	dataclass)Final)"WeeklyOperationsAlreadyInitialized#WeeklyOperationsAuthorityCompromiseWeeklyOperationsCorruption$WeeklyOperationsPlatformNotSupported)MARKER_NAMEvalidate_customer_inventory)link_unnamed_file)WeeklyOperationsParentAuthorityr   _FILE_FLAGS_UNSUPPORTEDzFinal[frozenset[str]]_NO_ENTRIEST)frozenslotsc                  6    e Zd ZU ded<   ded<   ded<   ded<   y	)
PreparedMarkerint
descriptorFileIdentityidentitybytespayloadstrmarker_digestN__name__
__module____qualname____annotations__     /home/cube/projects/richard/traning coach/task-12-independent-verification-r9/build/hermes-full/dualcoach/profile/checkin_cli/weekly_operations_publish.pyr   r      s    ONr$   r   c                  "    e Zd ZU ded<   ded<   y)PublishedMarkeros.stat_resultmarkerr   r   Nr   r#   r$   r%   r'   r'       s    r$   r'   c                2    | j                   | j                  fS )N)st_devst_ino)infos    r%   	_identityr.   &   s    ;;##r$   c                |    d}|t        |      k  r,|t        j                  | ||d        z  }|t        |      k  r+y y )Nr   )lenoswrite)r   r   offsets      r%   
_write_allr4   *   s=    F
3w<
"((:wvw'788 3w<
r$   c                T   t        j                  | dt         j                        }g }d}|rRt        j                  | |      x}r:|j	                  |       |t        |      z  }|rt        j                  | |      x}r:dj                  |      }t        |      dkD  rt        d      |S )Nr   i  r$   i   z%authority marker exceeds bounded size)r1   lseekSEEK_SETreadappendr0   joinr   )r   _chunks	remainingchunkr   s         r%   	_read_allr?   0   s    
Q,AFI
"''*i"@@@eSZ	 "''*i"@@@ hhvG
7|d12YZZNr$   c                   t        j                  | j                        xrV t        j                  | j                        dk(  xr2 | j                  t        j                         k(  xr | j                  |k(  S )N  )statS_ISREGst_modeS_IMODEst_uidr1   geteuidst_nlink)r-   linkss     r%   _safe_markerrJ   =   sm    <<%  I$,,t||*D*M  IRVR]R]acakakamRm  Irvrr  DI  sI  Ir$   c                   	 t        j                  t        t        |       }	 t        j                  |      }t        j                  t        | d      }t        |      }t        |d      rt        |      t        |      k7  rt        d      ||ft        j                  |       S # t        $ r}t        d      |d }~ww xY w# t        j                  |       w xY w)Ndir_fdzauthority marker name is unsafeF)rM   follow_symlinks   rI   z!authority marker identity changed)r1   openr   r   OSErrorr   fstatrB   r?   rJ   r.   close)	directoryr   errorr-   namedr   s         r%   _read_namedrX   A   s    `WW[+iH
xx
#IuMJ'D*io5AQ.Q56YZZW}
  `12STZ__` 	s#    B' A.C '	C0B<<CCc                      e Zd ZdZy)MarkerNameOccupiedzFDescriptor link found a marker name requiring unmasked classification.N)r   r    r!   __doc__r#   r$   r%   rZ   rZ   Q   s    Pr$   rZ   c                    t        |       \  }}t        |d      r ||      st        d      	 t        |        t        d      # t        $ r}t        d      |d }~ww xY w)NrO   rP   zauthority marker is preoccupiedz&existing authority inventory is unsafealready_initialized)rX   rJ   r   r   r	   r   )rU   	canonicalr-   r   rV   s        r%   classify_existing_markerr_   U   sl    	*MD'A&i.@12STTg#I. --B
CC & g12Z[affgs   A 	A AA c                    t        t        j                  |             }||k(  ry t        |v rt	        | |       t        d      )Nz.uninitialized authority directory is not empty)	frozensetr1   listdirr   r_   r	   )rU   r^   allowedentriess       r%   _require_emptyre   `   s@     

9-.G'g I6
$%U
VVr$   c                ^    t        |       \  }}t        |      |k7  s||k7  rt        d      |S )Nz-published marker does not match unnamed inode)rX   r.   r   )rU   expectedr   r-   observeds        r%   reconcile_owned_markerri   k   s4     +ND(("h'&912abbKr$   )rc   c                  | j                          t        | j                  ||       	 t        j                  dt        j
                  t        j                  z  t        j                  z  d| j                        }	 t        ||       t        j                  |       t        j                  |      }t!        |d      st#        d	      t%        |t'        |      |t)        j*                  |      j-                               S # t        $ r/}|j                  t        v rt        d      |t        d      |d}~ww xY w# t        t        t.        t0        f$ r t        j2                  |        w xY w)
z4Create and validate a complete unnamed marker inode..rA   rL   z.O_TMPFILE authority publication is unsupportedz(unnamed authority marker creation failedNr   rP   z"unnamed authority marker is unsafe)verifyre   r   r1   rQ   	O_TMPFILEO_RDWR	O_CLOEXECrR   errnor   r
   r	   r4   fsyncrS   rJ   r   r   r.   hashlibsha256	hexdigestKeyboardInterrupt
SystemExitrT   )parentr   r^   rc   	temporaryrV   temporary_infos          r%   prepare_authority_markerrz   r   s&   
 MMO6$$i9`GGC		!9BLL!H%X^XiXij	
	9g&
),N!456Z[[i>)BGW^^\cMdMnMnMpqq  `;;,&67ghnss()STZ__` /1BJO 
s%   AD =BD> 	D;*D66D;>0E.c                D   	 t        |j                  | j                  t               	 t        j                  | j                         t        | j                  |j                  |j                        }t        ||j                        S # t        $ r}t	        d      |d}~wt
        $ r  t        $ rP}	 t        | j                  |j                  |j                        }n# t
        $ r t        d      |w xY wY d}~d}~ww xY w# t        $ r}t        d      |d}~ww xY w)zVLink, directory-fsync, and reconcile; SIGKILL/power loss before fsync stays ambiguous.z!authority marker name is occupiedNzdescriptor marker link failedz authority directory fsync failed)r   r   r   FileExistsErrorrZ   r	   rR   ri   r   r   r1   rq   r'   r   )rw   preparedrV   r;   r)   s        r%   commit_authority_markerr~      s   
Y(--v/@/@+NX
""# $F$5$5x7H7H(JZJZ[F68#9#9::  Q !DE5P%  Y	Y&v'8'8(:K:KXM]M]^A) 	Y,-LMSXX	Y Y  X()KLRWWXsL   %B D 	DBD3+CC=C55C==D	DDD)r-   r(   returnr   )r   r   r   r   r   None)r   r   r   r   )r-   r(   rI   r   r   bool)rU   r   r   ztuple[os.stat_result, bytes])rU   r   r^   Callable[[bytes], bool]r   r   )rU   r   r^   r   rc   frozenset[str]r   r   )rU   r   rg   r   r   r   r   r(   )
rw   r   r   r   r^   r   rc   r   r   r   )rw   r   r}   r   r   r'   )6r[   
__future__r   rp   rr   r1   rB   collections.abcr   dataclassesr   typingr   checkin_cli.weekly_operationsr   r   r	   r
   $checkin_cli.weekly_operations_layoutr   r   "checkin_cli.weekly_operations_linkr   $checkin_cli.weekly_operations_parentr   O_RDONLY
O_NOFOLLOWro   
O_NONBLOCKr   r"   ra   ENOSYS
EOPNOTSUPPEINVALEPERMr   tupler   r   r   r   r'   r.   r4   r?   rJ   rX   rZ   r_   re   ri   rz   r~   r#   r$   r%   <module>r      s{   D "   	  $ !  t  t Y @ P[[2==02<<?"--OU Ou/?/?u{{ [\e \S#X%.[" 0 $d#  $ $d#  $
$9
I Q3 QDWW6WAOW	W FQ+6;&4B 2;r$   