
    9h!                         S SK JrJrJr  S SKJrJr  S SKJr  S SK	J
r
  \" SSS/5      rSrSr " S	 S
\5      r " S S\5      r " S S\5      r " S S5      rg)    )defaultdictdeque
namedtuple)EnumIntEnum)TopicPartition)create_futurePidAndEpochpidepochc                   $    \ rS rSrSrSrSrSrSrg)SubscriptionType                N)	__name__
__module____qualname____firstlineno__NONEAUTO_TOPICSAUTO_PATTERNUSER_ASSIGNED__static_attributes__r       jC:\Suresh\moveshuttle\MDcreated\moveengine\venv\Lib\site-packages\aiokafka/producer/transaction_manager.pyr   r      s    DKLMr   r   c                       \ rS rSrSrSrSrg)TransactionResult   r   r   r   N)r   r   r   r   ABORTCOMMITr   r   r   r    r"   r"      s    EFr   r"   c                   @    \ rS rSrSrSrSrSrSrSr	Sr
\S	 5       rS
rg)TransactionState   r   r   r   r            c                 f   X R                   :X  a&  UU R                  U R                  U R                  4;   $ X R                  :X  a  XR                   :H  $ X R                  :X  a  XR                  :H  $ X R                  :X  a  XR                  U R
                  4;   $ X R
                  U R                  4;   $ N)READYUNINITIALIZEDCOMMITTING_TRANSACTIONABORTING_TRANSACTIONIN_TRANSACTIONABORTABLE_ERRORFATAL_ERROR)clssourcetargets      r    is_transition_valid$TransactionState.is_transition_valid!   s    YY!!**((  
 )))YY&&111///////00#2E2EFFF113??CCCr   r   N)r   r   r   r   r/   r.   r2   r0   r1   r3   r4   classmethodr8   r   r   r   r    r'   r'      s;    MENOKD Dr   r'   c                      \ rS rSrS rS\S\4S jrS rS rS\	4S	 jr
S\	S
\4S jr\S 5       r\S 5       rS rS rS rS rS rS rS rS\	4S jrS rS rS rS rS rS\	4S jrS rS r\S 5       rS r S  r!S! r"S" r#S# r$S$ r%S%r&g&)'TransactionManager3   c                 <   Xl         X l        [        R                  U l        [        [        [        5      U l        [        5       U l
        [        S 5      U l        S U l        S U l        [        5       U l        [        5       U l        S U l        ['        5       U l        g )Nc                      gNr   r   r   r   r    <lambda>-TransactionManager.__init__.<locals>.<lambda>;   s    Qr   )transactional_idtransaction_timeout_msr'   r/   stater
   NO_PRODUCER_IDNO_PRODUCER_EPOCH_pid_and_epochr	   _pid_waiterr   _sequence_numbers_transaction_waiter_task_waiterset_txn_partitions_pending_txn_partitions_txn_consumer_groupr   _pending_txn_offsets)selfrC   rD   s      r    __init__TransactionManager.__init__4   sx     0&<#%33
).:KL(?!,Y!7#'  "u'*u$#' $)G!r   r   r   c                     [        X5      U l        U R                  R                  S 5        U R                  (       a   U R                  [        R                  5        g g r-   )r
   rH   rI   
set_resultrC   _transition_tor'   r.   )rR   r   r   s      r    set_pid_and_epoch$TransactionManager.set_pid_and_epochF   sF    )#5##D)   0 6 67 !r   c                 <    U R                   R                  [        :g  $ r-   )rH   r   rF   rR   s    r    has_pidTransactionManager.has_pidL   s    ""&&.88r   c                 d   #    U R                  5       (       a  g U R                  I S h  vN   g  N7fr-   )r\   rI   r[   s    r    wait_for_pidTransactionManager.wait_for_pidO   s"     <<>>""""s   &0.0tpc                      U R                   U   $ r-   rJ   rR   ra   s     r    sequence_number"TransactionManager.sequence_numberU   s    %%b))r   	incrementc                 Z    U R                   U   U-   nUS:  a  US-  nX0R                   U'   g )Nil        rc   )rR   ra   rg   seqs       r    increment_sequence_number,TransactionManager.increment_sequence_numberX   s7     $$R(94?5LC%(r"r   c                 .    U R                   R                  $ r-   )rH   r   r[   s    r    producer_idTransactionManager.producer_id`   s    ""&&&r   c                 .    U R                   R                  $ r-   )rH   r   r[   s    r    producer_epoch!TransactionManager.producer_epochd   s    ""(((r   c                     [         R                  U R                  U5      (       d   SU R                   SU 35       eXl        g )NzInvalid state transition z -> )r'   r8   rE   )rR   r7   s     r    rW   !TransactionManager._transition_toj   sJ    33JJ
 
 	@&tzzl$vh?	@ 
 
r   c                 `    U R                  [        R                  5        [        5       U l        g r-   )rW   r'   r2   r	   rK   r[   s    r    begin_transaction$TransactionManager.begin_transactionp   s!    ,;;<#0? r   c                     U R                   [        R                  :X  a  U R                  R	                  5         U R                  [        R                  5        U R                  5         g r-   )rE   r'   r3   rK   resultrW   r0   notify_task_waiterr[   s    r    committing_transaction)TransactionManager.committing_transactiont   sH    ::)999$$++-,CCD!r   c                     U R                  [        R                  5        U R                  R	                  5       (       a  [        5       U l        U R                  5         g r-   )rW   r'   r1   rK   doner	   ry   r[   s    r    aborting_transaction'TransactionManager.aborting_transaction|   sD    ,AAB ##((**'4D$!r   c                 F   U R                   (       a   eU R                  (       a   eU R                  [        R                  5        U R
                  R                  5         S U l        U R                  R                  5       (       d  U R                  R                  S 5        g g r-   )rO   rQ   rW   r'   r.   rN   clearrP   rK   r}   rV   r[   s    r    complete_transaction'TransactionManager.complete_transaction   s}    ////,,,,,223""$#' '',,..$$//5 /r   c                 p   U R                  [        R                  5        U R                  R	                  5         S U l        U R                  R	                  5         U R                   H  u    p#UR                  U5        M     U R                  R	                  5         U R                  R                  U5        g r-   )
rW   r'   r3   rN   r   rP   rO   rQ   set_exceptionrK   rR   exc_futs       r    error_transaction$TransactionManager.error_transaction   s    ,<<=""$#' $$**,22IAqc" 3!!'')  ..s3r   c                    U R                  [        R                  5        U R                  R	                  5         S U l        U R                  R	                  5         U R                   H  u    p#UR                  U5        M     U R                  R	                  5         U R                  R                  5       (       a  [        5       U l	        U R                  R                  U5        g r-   )rW   r'   r4   rN   r   rP   rO   rQ   r   rK   r}   r	   r   s       r    fatal_errorTransactionManager.fatal_error   s    ,889""$#' $$**,22IAqc" 3!!'')##((**'4D$  ..s3r   c                     U R                   c  g U R                  5       (       d   eXR                  ;  a,  U R                  R	                  U5        U R                  5         g g r-   )rC   is_in_transactionrN   rO   addry   rd   s     r    maybe_add_partition_to_txn-TransactionManager.maybe_add_partition_to_txn   sW      (%%'''')))((,,R0##% *r   c                     U R                  5       (       d   eU R                  (       d   e[        5       nU R                  R	                  X!U45        U R                  5         U$ r-   )r   rC   r	   rQ   appendry   )rR   offsetsgroup_idr   s       r    add_offsets_to_txn%TransactionManager.add_offsets_to_txn   sW    %%''''$$$$o!!(((S)AB!
r   c                 <    U R                   [        R                  :H  $ r-   )rE   r'   r2   r[   s    r    r   $TransactionManager.is_in_transaction   s    zz-<<<<r   c                     U R                   $ r-   )rO   r[   s    r    partitions_to_add$TransactionManager.partitions_to_add   s    +++r   c                 R    U R                   b  g U R                   H	  u  n  nUs  $    g r-   rP   rQ   )rR   r   r   s      r    consumer_group_to_add(TransactionManager.consumer_group_to_add   s/    ##/"77NHaO 8r   c                 R    U R                   c  g U R                   H	  u  pnX!4s  $    g r-   r   )rR   r   r   r   s       r    offsets_to_commit$TransactionManager.offsets_to_commit   s2    ##+$($=$= Hq$$ %>r   c                 p    U R                   R                  U5        U R                  R                  U5        g r-   )rO   removerN   r   rd   s     r    partition_added"TransactionManager.partition_added   s*    $$++B/  $r   c                     Xl         g r-   )rP   )rR   r   s     r    consumer_group_added'TransactionManager.consumer_group_added   s    #+ r   c                     U R                   S   u  pEnXC:X  d   eX;   a  XQ   R                  U:X  d   eXQ	 U(       d,  UR                  S 5        U R                   R                  5         g g r@   )rQ   offsetrV   popleft)rR   ra   r   r   pending_group_idpending_offsetsr   s          r    offset_committed#TransactionManager.offset_committed   sl    151J1J11M.3+++$)<)C)Cv)MMMNN4 %%--/ r   c                     U R                   $ r-   )rN   r[   s    r    txn_partitions!TransactionManager.txn_partitions   s    ###r   c                     U R                   [        R                  :X  a  [        R                  $ U R                   [        R
                  :X  a  [        R                  $ g r-   )rE   r'   r0   r"   r%   r1   r$   r[   s    r    needs_transaction_commit+TransactionManager.needs_transaction_commit   sC    ::)@@@$+++ZZ+@@@$***r   c                 \    [        U R                  5      S:H  =(       a    U R                  S L $ r@   )lenr   rP   r[   s    r    is_empty_transaction'TransactionManager.is_empty_transaction   s(    4&&'1,Q1I1IT1QQr   c                 <    U R                   [        R                  :H  $ r-   )rE   r'   r4   r[   s    r    is_fatal_error!TransactionManager.is_fatal_error   s    zz-9999r   c                     U R                   $ r-   )rK   r[   s    r    wait_for_transaction_end+TransactionManager.wait_for_transaction_end   s    '''r   c                     U R                   b<  U R                   R                  5       (       d  U R                   R                  S 5        g g g r-   )rL   r}   rV   r[   s    r    ry   %TransactionManager.notify_task_waiter   s?    (1B1B1G1G1I1I((. 2J(r   c                 8    [        5       U l        U R                  $ r-   )r	   rL   r[   s    r    make_task_waiter#TransactionManager.make_task_waiter   s    )O   r   )rQ   rO   rH   rI   rJ   rL   rK   rP   rN   rE   rD   rC   N)'r   r   r   r   rS   intrX   r\   r_   r   re   rj   propertyrm   rp   rW   ru   rz   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ry   r   r   r   r   r    r<   r<   3   s    ,$8S 8 89#*. *)N )s ) ' ' ) )
3""644&^ &=,%. %,0 $ $R:(/!r   r<   N)collectionsr   r   r   enumr   r   aiokafka.structsr   aiokafka.utilr	   r
   rF   rG   r   r"   r'   r<   r   r   r    <module>r      sb    6 6  + '(89 t  
Dt D6B! B!r   