
    Hmd>                     j    d dl Z d dlZd dlmZmZ d dlmZ  G d de          Z G d de          ZdS )    N)
RecordTypeunquote_plus_space_newline)output_path_preparec                   ,    e Zd ZdZd ZddZd Zd ZdS )	OutputMergerzL
    Class to merge the output files collected from
    different nodes
    c           
         t          j        |          | _        | j                                        | _        | j                                        | _        d}| j                            |           d}| j                            |           |D ]}t          j                            |          ryt          j        |          }|                                }d}|                    |          D ]9}| 	                    |d         |d         |d         |d         |d                    :| j        
                                 d S )	NzDROP TABLE IF EXISTS finallista"  
        CREATE TABLE finallist(
          id     INTEGER PRIMARY KEY AUTOINCREMENT,
          ts     VARCHAR,
          type   VARCHAR,
          gfid   VARCHAR,
          path1  VARCHAR,
          path2  VARCHAR,
          UNIQUE (type, path1, path2) ON CONFLICT IGNORE
        )
        z
                SELECT   ts, type, gfid, path1, path2
                FROM     gfidpath
                WHERE    path1 != ''
                ORDER BY id ASC
                r               )sqlite3connectconncursorcursor_readerexecuteospathexistsadd_if_not_existscommit)selfdb_pathall_dbsquerynode_dbr   r   rows           @/usr/lib/x86_64-linux-gnu/glusterfs/glusterfind/changelogdata.py__init__zOutputMerger.__init__   s8   OG,,	i&&((!Y--//0E"""
 	E"""
  	; 	;Gw~~g&& ;w// ">>%00 ; ;C**3q63q63q6+.q63q6; ; ; ; 		     c                 J    d}| j                             ||||||f           d S )Nzc
        INSERT INTO finallist(ts, type, gfid, path1, path2)
        VALUES(?, ?, ?, ?, ?)
        r   r   )r   tstygfidpath1path2r   s          r   r   zOutputMerger.add_if_not_exists>   s4     	EBD%#?@@@@@r    c                 :    d}| j                             |          S )NzHSELECT type, path1, path2 FROM finallist
        ORDER BY ts ASC, id ASCr   r   r   r   s     r   getzOutputMerger.getF   s     #!))%000r    c                 :    d}| j                             |          S )Nzw
        SELECT   gfid
        FROM     finallist
        WHERE path1 = '' OR (path2 = '' AND type = 'RENAME')
        r*   r+   s     r   get_failureszOutputMerger.get_failuresK   s"    
 !))%000r    N)r!   )__name__
__module____qualname____doc__r   r   r,   r.    r    r   r   r      sd         % % %NA A A A1 1 1
1 1 1 1 1r    r   c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Z	 	 d'dZd Zd Zd Zi fdZi fdZd Zd Zi fdZi fdZd Zd(dZd Zi fdZi fdZd Zd Zd Zd Zd  Z d! Z!d" Z"d# Z#d$ Z$d% Z%d&S ))ChangelogDatac                 D   t          j        |          | _        | j                                        | _        | j                                        | _        |                                  |                                  |                                  || _        d| _	        d S )N/)
r   r   r   r   r   _create_table_gfidpath_create_table_pgfid_create_table_inodegfidargspath_sep)r   dbpathr;   s      r   r   zChangelogData.__init__U   s    OF++	i&&((!Y--//##%%%  """$$&&&	r    c                     d}| j                             |           d}| j                             |           d}| j                             |           d S )NzDROP TABLE IF EXISTS gfidpatha  
        CREATE TABLE gfidpath(
            id     INTEGER PRIMARY KEY AUTOINCREMENT,
            ts     VARCHAR,
            type   VARCHAR,
            gfid   VARCHAR(40),
            pgfid1 VARCHAR(40) DEFAULT '',
            bn1    VARCHAR(500) DEFAULT '',
            pgfid2 VARCHAR(40) DEFAULT '',
            bn2    VARCHAR(500) DEFAULT '',
            path1  VARCHAR DEFAULT '',
            path2  VARCHAR DEFAULT ''
        )
        z<
        CREATE INDEX gfid_index ON gfidpath(gfid);
        r#   )r   
drop_tablecreate_tablecreate_indexs       r   r8   z$ChangelogData._create_table_gfidpath_   sa    4
J''' 	L))) 	L)))))r    c                 v    d}| j                             |           d}| j                             |           d S )NzDROP TABLE IF EXISTS inodegfidz
        CREATE TABLE inodegfid(
            inode     INTEGER PRIMARY KEY,
            gfid      VARCHAR(40),
            converted INTEGER DEFAULT 0,
            UNIQUE    (inode, gfid) ON CONFLICT IGNORE
        )
        r#   r   r?   r@   s      r   r:   z%ChangelogData._create_table_inodegfidx   sB    5
J''' 	L)))))r    c                 v    d}| j                             |           d}| j                             |           d S )NzDROP TABLE IF EXISTS pgfidz
        CREATE TABLE pgfid(
            pgfid  VARCHAR(40) PRIMARY KEY,
            UNIQUE (pgfid) ON CONFLICT IGNORE
        )
        r#   rC   s      r   r9   z!ChangelogData._create_table_pgfid   sB    1
J''' 	L)))))r    c                     g }d|z  }|                                 D ]"\  }}|d|z  z  }|                    |           #| j                            ||          S )NzSELECT * FROM %s WHERE 1=1 AND %s = ?itemsappendr   r   )r   	tablenamefiltersparamsr   keyvalues          r   _getzChangelogData._get   si    ,y8!--// 	! 	!JC]S((EMM%    !))%888r    c                     g }d|d|d}|                                 D ]"\  }}|d|z  z  }|                    |           #| j                            ||          S )NzSELECT DISTINCT z FROM z
 WHERE 1=1rF   rG   )r   rJ   distinct_fieldrK   rL   r   rM   rN   s           r   _get_distinctzChangelogData._get_distinct   sy    :H..:C))E "--// 	! 	!JC]S((EMM%    !))%888r    c                     d|z  }g }|                                 D ]"\  }}|d|z  z  }|                    |           #| j                            ||           d S )NzDELETE FROM %s WHERE 1=1rF   )rH   rI   r   r   )r   rJ   rK   r   rL   rM   rN   s          r   _deletezChangelogData._delete   sn    *Y6!--// 	! 	!JC]S((EMM%    E6*****r    c                 ^   d|z  }g }g }|                                 D ]/\  }}|                    |           |                    |           0t          |          dgz  }|d                    |          dd                    |          dz  }| j                            ||           d S )NzINSERT INTO %s(?,z	) VALUES())rH   rI   lenjoinr   r   )	r   rJ   datar   fieldsrL   rM   rN   values_substitutes	            r   _addzChangelogData._add   s    !I-**,, 	! 	!JCMM#MM%    KK-SXXf%5%5%5%5%(XX.?%@%@%@%@B 	BE6*****r    c                 x   g }g }|                                 D ]2\  }}|                    d|z             |                    |           3d|dd                    |          d}|                                 D ]"\  }}|d|z  z  }|                    |           #| j                            ||           d S )Nz%s = ?zUPDATE z SET z, z WHERE 1 = 1rF   )rH   rI   rZ   r   r   )	r   rJ   r[   rK   rL   update_fieldsrM   rN   r   s	            r   _updatezChangelogData._update   s    **,, 	! 	!JC  C000MM%    	! 3<))26))M2J2J2J2JL "--// 	! 	!JC]S((EMM%    E6*****r    c                    |sdS d|z  }g }|                                 D ]"\  }}|d|z  z  }|                    |           #| j                            ||           | j                                        }|d         dk    rdndS )NFz!SELECT COUNT(1) FROM %s WHERE 1=1rF   r   T)rH   rI   r   r   fetchone)r   rJ   rK   r   rL   rM   rN   r   s           r   _existszChangelogData._exists   s     	53i?!--// 	! 	!JC]S((EMM%    E6***k""$$1vzzttu,r    r!   c
                 x    |                      d|                    d          d         ||||||||	d	           d S )Ngfidpath.)	r$   typer&   pgfid1bn1pgfid2bn2r'   r(   )r^   split)
r   changelogfiler%   r&   rj   rk   rl   rm   r'   r(   s
             r   gfidpath_addzChangelogData.gfidpath_add   s\    		*%%c**2.

 

 
	 
	 
	 
	 
	r    c                 4    |                      d||           d S Nrf   ra   r   r[   rK   s      r   gfidpath_updatezChangelogData.gfidpath_update   s    Zw/////r    c                 2    |                      d|           d S rr   )rT   r   rK   s     r   gfidpath_deletezChangelogData.gfidpath_delete   s    Z)))))r    c                 .    |                      d|          S rr   rd   rw   s     r   gfidpath_existszChangelogData.gfidpath_exists   s    ||J000r    c                 .    |                      d|          S rr   rO   rw   s     r   gfidpath_getzChangelogData.gfidpath_get   s    yyW---r    c                 0    |                      d||          S rr   rR   r   rQ   rK   s      r   gfidpath_get_distinctz#ChangelogData.gfidpath_get_distinct   s    !!*ngFFFr    c                 6    |                      dd|i           d S Npgfidr^   )r   r   s     r   	pgfid_addzChangelogData.pgfid_add   s.    		'U
 	 	 	 	 	r    c                 4    |                      d||           d S r   rs   rt   s      r   pgfid_updatezChangelogData.pgfid_update  s    WdG,,,,,r    c                 .    |                      d|          S r   r}   rw   s     r   	pgfid_getzChangelogData.pgfid_get  s    yy'***r    c                 0    |                      d||          S r   r   r   s      r   pgfid_get_distinctz ChangelogData.pgfid_get_distinct
  s    !!'>7CCCr    c                 .    |                      d|          S r   rz   rw   s     r   pgfid_existszChangelogData.pgfid_exists  s    ||GW---r    r   c                 :    |                      d|||d           d S )N	inodegfid)inoder&   	convertedr   )r   r   r&   r   s       r   inodegfid_addzChangelogData.inodegfid_add  s7    		+" 
  
 	 	 	 	 	r    c                 4    |                      d||           d S Nr   rs   rt   s      r   inodegfid_updatezChangelogData.inodegfid_update  s    [$00000r    c                 .    |                      d|          S r   r}   rw   s     r   inodegfid_getzChangelogData.inodegfid_get  s    yyg...r    c                 0    |                      d||          S r   r   r   s      r   inodegfid_get_distinctz$ChangelogData.inodegfid_get_distinct  s    !!+~wGGGr    c                 .    |                      d|          S r   rz   rw   s     r   inodegfid_existszChangelogData.inodegfid_exists   s    ||K111r    c                 D    d}| j                             |||f           d S )NzpUPDATE gfidpath SET path1 = path1 || ',' || ?
        WHERE gfid IN (SELECT gfid FROM inodegfid WHERE inode = ?)r#   )r   r   r   r   s       r   append_path1zChangelogData.append_path1#  s,    FED%=11111r    c                    |dk    rd}d}n4d                     | j                  }d                     | j                  }d|z  }| j                            |||f           d|z  }| j                            |||f           d S )Nr!   z? || bn1? || bn2z? || '{0}' || bn1? || '{0}' || bn2z7UPDATE gfidpath SET path1 = %s
        WHERE pgfid1 = ?7UPDATE gfidpath SET path2 = %s
        WHERE pgfid2 = ?formatr<   r   r   )r   r'   rj   update_str1update_str2r   s         r   gfidpath_set_path1z ChangelogData.gfidpath_set_path1)  s    B;;$K$KK-44T]CCK-44T]CCK)*EE6?333)*EE6?33333r    c                     |dk    rd}nd                     | j                  }d|z  }| j                            |||f           d S )Nr!   r   r   r   r   )r   r(   rl   
update_strr   s        r   gfidpath_set_path2z ChangelogData.gfidpath_set_path2;  sX    B;;#JJ,33DMBBJ()EE6?33333r    c                     |d                              dd          \  }}| j        j        r!t          |                                          }|                     |t          j        |d         ||           d S )N   r7   r	   rn   r;   	no_encoder   striprp   r   NEWr   ro   r[   rj   rk   s        r   when_create_mknod_mkdirz%ChangelogData.when_create_mknod_mkdirF  sm     1gmmC++9 	:,S117799C-a&#NNNNNr    c           	         |d                              dd          \  }}|d                              dd          \  }}| j        j        rBt          |                                          }t          |                                          }|                     |d         d||d          r%|                     ||d|d         d||d           n|                     |d         d||d	          rh|                     |d         d||||d
          r!|                     |d         d||d	           nP|                     ||d|d         d||d	           n+|                     |t          j
        |d         ||||           |                     |d         dd          rG|                     |d         dd           |                     |t          j        |d                    d S d S )Nr   r7   r	   r   r   r&   ri   rj   rk   )rj   rk   RENAME)r&   ri   rl   rm   )r&   ri   rl   rm   rj   rk   )rl   rm   MODIFYr&   ri   )rn   r;   r   r   r   r{   ru   rx   rp   r   r   r   )r   ro   r[   rj   rk   rl   rm   s          r   when_renamezChangelogData.when_renameP  s   1gmmC++1gmmC++9 	:,S117799C,S117799Ca%+1#!? !? @ @ 	8   F3!?!?*.q'5,23"@ "@A A A A !!47H-3C#A #A B B 	8 ##T!Wh/5c/5c%C %C D D E $$d1gx06s&D &D E E E E $$s%C%C.21gx06s&D &DE E E E
 mZ->Q$c638 8 8 a( C CDD 	I   $q'8!D!DEEEmZ->QHHHHH	I 	Ir    c                     |d                              dd          \  }}| j        j        r!t          |                                          }|                     |t          j        |d         ||           d S )Nr   r7   r	   r   r   s        r   when_link_symlinkzChangelogData.when_link_symlink|  sm     1gmmC++9 	:,S117799C-a&#NNNNNr    c                     |                      |d         dd          sG|                      |d         dd          s+|                     |t          j        |d                    d S d S d S )Nr	   r   r   r   )r{   rp   r   r   )r   ro   r[   s      r   when_data_metazChangelogData.when_data_meta  s    ##T!We$D$DEE 	I##T!Wh$G$GHH	ImZ->QHHHHH	I 	I 	I 	Ir    c                    |d                              dd          \  }}| j        j        r!t          |                                          }t          |          dk    r|d         nd}|dk    r$t          |          }t          || j                  }|                     |d         d||d          r!|                     |d         d||d           n+| 	                    |t          j        |d         |||	           |                     d
|i|d         ||d           |                     d|it          j        |d         ||d           d                    | j                  }| j                            |||d         f           d                    | j                  }| j                            |||d         f           d S )Nr   r7   r	      r   r!   r   r   )r'   r'   )r&   rj   rk   r(   )ri   r&   rl   rm   zVUPDATE gfidpath SET path1 = ? || '{0}' || bn1
        WHERE pgfid1 = ? AND path1 != ''zVUPDATE gfidpath SET path2 = ? || '{0}' || bn1
        WHERE pgfid2 = ? AND path2 != '')rn   r;   r   r   r   rY   r   r{   rx   rp   r   DELETEru   r   r   r<   r   r   )r   ro   r[   rj   rk   deleted_pathquery1s          r   when_unlink_rmdirzChangelogData.when_unlink_rmdir  s   1gmmC++9 	:,S117799C"%d))q..tAwwb25lCCL.|TYGGLa%+1#!? !? @ @ 		?   $q'5,23"@ "@ A A A A mZ->Q$c  ? ? ? 	g|4tAwAG>A7C 7C 	D 	D 	D
 	g|4%G	7 7 	 	 	,,2F4=,A,A 	F\47$;<<<,,2F4=,A,A 	F\47$;<<<<<r    c                 8    | j                                          d S )N)r   r   )r   s    r   r   zChangelogData.commit  s    	r    N)r!   r!   r!   r!   r!   r!   )r   )&r/   r0   r1   r   r8   r:   r9   rO   rR   rT   r^   ra   rd   rp   ru   rx   r{   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r3   r    r   r5   r5   T   s         * * *2* * *
* 
* 
*	9 	9 	9
9 
9 
9	+ 	+ 	++ + ++ + +"- - - DF8:   0 0 0* * *1 1 1 $& . . . . =? G G G G  
- - - !# + + + + :< D D D D. . .   1 1 1 %' / / / / >@ H H H H2 2 22 2 24 4 4$	4 	4 	4O O O*I *I *IXO O OI I I*= *= *=X    r    r5   )	r   r   utilsr   r   r   objectr   r5   r3   r    r   <module>r      s     				 8 8 8 8 8 8 8 8 % % % % % %?1 ?1 ?1 ?1 ?16 ?1 ?1 ?1Dd d d d dF d d d d dr    