Subversion Repositories DevTools

Rev

Rev 7387 | Rev 7394 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 7387 Rev 7389
Line 596... Line 596...
596
#
596
#
597
# Returns         : 
597
# Returns         : 
598
#
598
#
599
sub transferTargetBin
599
sub transferTargetBin
600
{
600
{
-
 
601
    return if $isS3Target;
601
    my ($blatBinData) = @_;
602
    my ($blatBinData) = @_;
602
 
603
 
603
    my $blatBinList = getBlatBin();
604
    my $blatBinList = getBlatBin();
604
    foreach my $file ( keys %{$blatBinList} )
605
    foreach my $file ( keys %{$blatBinList} )
605
    {
606
    {
Line 631... Line 632...
631
    #
632
    #
632
    #   Is Release List Processing active
633
    #   Is Release List Processing active
633
    #   Can configure blat to disable release sync
634
    #   Can configure blat to disable release sync
634
    #   This will then allow 'new' packages to be sent
635
    #   This will then allow 'new' packages to be sent
635
    #
636
    #
636
    if ( $conf->{maxpackages} == 0 || $conf->{'synctime'} <= 0 || $isS3Target )
637
    if ( $conf->{maxpackages} == 0 || $conf->{'synctime'} <= 0 )
637
    {
638
    {
638
        $logger->verbose2("processReleaseList disabled");
639
        $logger->verbose2("processReleaseList disabled");
639
        $RemotePkgList = {};
640
        $RemotePkgList = {};
640
        return;
641
        return;
641
    }
642
    }
Line 655... Line 656...
655
    #
656
    #
656
    checkForBasicTools();
657
    checkForBasicTools();
657
 
658
 
658
    #
659
    #
659
    #   Get list of packages from Remote site
660
    #   Get list of packages from Remote site
660
    #   Invoke a program on the remote site and parse the results
-
 
661
    #
-
 
662
    #   Returned data looks like:
-
 
663
    #       Metadata avail="140100452"
-
 
664
    #       BlatBin MD5="9e2c6e45af600a20a01dbcb7570da1f1" file="stat.pl"
-
 
665
    #       time="1497586865" GMT="Fri Jun 16 04:21:05 2017" pname="ERGissaccounts" pver="1.0.7169.mas"
-
 
666
    #       time="1497586865" GMT="Fri Jun 16 04:21:05 2017" pname="ERGissaccounts" pver="1.0.7169.mas" "link=latest"
-
 
667
    #       time="1497954104" GMT="Tue Jun 20 10:21:44 2017" pname="ERGissaccounts" pver="1.0.7178.mas" deleted="0"
-
 
668
    #
661
    #
669
    my $remotePkgList;
662
    my $remotePkgList;
670
    my $remoteData;
663
    my $remoteData;
671
    my $blatBinData;
664
    my $blatBinData;
672
    my $ph;
-
 
673
    my $tgt_cmd = "$conf->{'bindir'}/get_plist.pl";
-
 
674
    my $ssh_cmd = sshCmd($tgt_cmd);
-
 
675
 
665
 
676
    $logger->verbose2("processReleaseList:ssh_cmd:$ssh_cmd");
-
 
677
    open ($ph, "$ssh_cmd |");
-
 
678
    while ( <$ph> )
-
 
679
    {
666
    #
-
 
667
    #   Get Data from an S3 bucket
-
 
668
    #   Can only get a part of the full data set. The timestamp can't be processed, so set it to -1
680
        chomp;
669
    #   
681
        if ($_ =~ m~^Metadata\s+~)
670
    if ($isS3Target ) {
682
        {
671
        my $ph;
683
            parsePkgMetaData($_, \%{$remoteData});
672
        my $tgt_cmd = "aws s3 ls $conf->{'S3Bucket'}/";
-
 
673
 
-
 
674
        $logger->verbose2("processReleaseList:s3_cmd:$tgt_cmd");
684
        }
675
        open ($ph, "$tgt_cmd |");
685
        elsif ($_ =~ m~^BlatBin\s+~)
676
        while ( <$ph> )
686
        {
677
        {
-
 
678
            chomp;
-
 
679
            m~.*\s(.*)__(.*).tgz$~;
687
            parseBlatBinData($_, \%{$blatBinData})
680
            $remotePkgList->{$1}{$2}{s3} = 1;
688
        }
681
        }
-
 
682
        close ($ph);
-
 
683
 
-
 
684
    } else {
-
 
685
        # Get Data from a dpkg_archive maintained via ssh
-
 
686
        #   Invoke a program on the remote site and parse the results
689
        else
687
        #
-
 
688
        #   Returned data looks like:
-
 
689
        #       Metadata avail="140100452"
-
 
690
        #       BlatBin MD5="9e2c6e45af600a20a01dbcb7570da1f1" file="stat.pl"
-
 
691
        #       time="1497586865" GMT="Fri Jun 16 04:21:05 2017" pname="ERGissaccounts" pver="1.0.7169.mas"
-
 
692
        #       time="1497586865" GMT="Fri Jun 16 04:21:05 2017" pname="ERGissaccounts" pver="1.0.7169.mas" "link=latest"
-
 
693
        #       time="1497954104" GMT="Tue Jun 20 10:21:44 2017" pname="ERGissaccounts" pver="1.0.7178.mas" deleted="0"
-
 
694
 
-
 
695
        my $ph;
-
 
696
        my $tgt_cmd = "$conf->{'bindir'}/get_plist.pl";
-
 
697
        my $ssh_cmd = sshCmd($tgt_cmd);
-
 
698
 
-
 
699
        $logger->verbose2("processReleaseList:ssh_cmd:$ssh_cmd");
-
 
700
        open ($ph, "$ssh_cmd |");
-
 
701
        while ( <$ph> )
690
        {
702
        {
-
 
703
            chomp;
691
            if ( parsePkgList($_, \%{$remotePkgList} ) )
704
            if ($_ =~ m~^Metadata\s+~)
692
            {
705
            {
693
                $logger->verbose2("processReleaseList:Data: $_");
706
                parsePkgMetaData($_, \%{$remoteData});
-
 
707
            }
-
 
708
            elsif ($_ =~ m~^BlatBin\s+~)
-
 
709
            {
-
 
710
                parseBlatBinData($_, \%{$blatBinData})
694
            }
711
            }
695
            else
712
            else
696
            {
713
            {
-
 
714
                if ( parsePkgList($_, \%{$remotePkgList} ) )
-
 
715
                {
-
 
716
                    $logger->verbose2("processReleaseList:Data: $_");
-
 
717
                }
-
 
718
                else
-
 
719
                {
697
                $logger->warn("processReleaseList:Bad Data: $_");
720
                    $logger->warn("processReleaseList:Bad Data: $_");
-
 
721
                }
698
            }
722
            }
699
        }
723
        }
-
 
724
        close ($ph);
700
    }
725
    }
701
    close ($ph);
-
 
702
    $logger->verbose("processReleaseList:End: $?");
726
    $logger->verbose("processReleaseList:End: $?");
703
    $RemotePkgList = $remotePkgList; 
727
    $RemotePkgList = $remotePkgList; 
704
 
728
 
705
    LogTxError ($?);
729
    LogTxError ($?);
706
    if ( $? != 0 )
730
    if ( $? != 0 )
Line 776... Line 800...
776
                #
800
                #
777
                #   Add the package the link points to
801
                #   Add the package the link points to
778
                #
802
                #
779
                $logger->verbose2("Add linked package: $pname, $lver, $pdata");
803
                $logger->verbose2("Add linked package: $pname, $lver, $pdata");
780
                $pkgList->{$pname}{$lver} = $pdata;
804
                $pkgList->{$pname}{$lver} = $pdata;
-
 
805
 
-
 
806
                if ($isS3Target) {
-
 
807
                    $logger->verbose2("Won't send symlink to S3: $pname, $pver, $lver");
-
 
808
                    next;
-
 
809
                }
-
 
810
 
781
            }
811
            }
782
 
812
 
783
            $logger->verbose2("Add extra package: $pname, $pver, $pdata");
813
            $logger->verbose2("Add extra package: $pname, $pver, $pdata");
784
            $pkgList->{$pname}{$pver} = $pdata;
814
            $pkgList->{$pname}{$pver} = $pdata;
785
        }
815
        }
786
    }
816
    }
787
#Utils::DebugDumpData ("parsePkgList", $rv);
817
#Utils::DebugDumpData ("parsePkgList", $rv);
-
 
818
#Utils::DebugDumpData ("remotePkgList", $remotePkgList);
788
 
819
 
789
 
820
 
790
    #
821
    #
791
    #   If there are no packages to process, then assume that this is an error
822
    #   If there are no packages to process, then assume that this is an error
792
    #   condition. Retry the operation soon.
823
    #   condition. Retry the operation soon.
Line 922... Line 953...
922
 
953
 
923
            #
954
            #
924
            #   Take care not to create an entry into $remotePkgList->{$pname}{$pver}
955
            #   Take care not to create an entry into $remotePkgList->{$pname}{$pver}
925
            #   if it does not exist. Existence of {$pname}{$pver} is used later
956
            #   if it does not exist. Existence of {$pname}{$pver} is used later
926
            #
957
            #
927
            my $tmtime = 0;
958
            my $tmtime = undef;
928
            if ($existsRemote && exists ($remotePkgList->{$pname}{$pver}{time})) {
959
            if ($existsRemote && exists ($remotePkgList->{$pname}{$pver}{time})) {
929
                $tmtime = $remotePkgList->{$pname}{$pver}{time};
960
                $tmtime = $remotePkgList->{$pname}{$pver}{time};
930
            }
961
            }
931
            $packageVersionCount++;
962
            $packageVersionCount++;
932
 
963
 
Line 955... Line 986...
955
                    $writableCount++;
986
                    $writableCount++;
956
                    next;
987
                    next;
957
                }
988
                }
958
            }
989
            }
959
 
990
 
960
            if ( $mtime != $tmtime ) {
991
            if (! $existsRemote ) {
-
 
992
                #
-
 
993
                #   Package does not exist in the remote, and is eligible for transfer
-
 
994
                #
-
 
995
                $logger->verbose("Package Needs to be transferred: $pname, $pver");
-
 
996
                $must_transfer = 1;
-
 
997
 
-
 
998
            } elsif ( defined $tmtime && ($mtime != $tmtime) ) {
-
 
999
                #
-
 
1000
                #   Package exists in both source and target
-
 
1001
                #   If the package-time is known, then ensure that they are the same
-
 
1002
                #
961
                $logger->verbose("Package Needs to be transferred: $pname, $pver, $mtime, $tmtime");
1003
                $logger->verbose("Package Needs to be transferred: $pname, $pver, $mtime, $tmtime");
962
                $must_transfer = 1;
1004
                $must_transfer = 1;
963
            }
1005
            }
964
            elsif ($existsRemote)
1006
            else
965
            {
1007
            {
966
                #
1008
                #
967
                #   Package exists in both source and target
1009
                #   Package exists in both source and target
968
                #   Symlink test: Ensure symlinks are the same
1010
                #   Symlink test: Ensure symlinks are the same
969
                #
1011
                #
Line 1137... Line 1179...
1137
#                   Don't really care about any errors from this process
1179
#                   Don't really care about any errors from this process
1138
#                   Its not essential
1180
#                   Its not essential
1139
#
1181
#
1140
sub sendPackageList
1182
sub sendPackageList
1141
{
1183
{
-
 
1184
    return if $isS3Target;
-
 
1185
 
1142
    my ($pkgList) = @_;
1186
    my ($pkgList) = @_;
1143
    my ($fh, $filename) = tempfile( "/tmp/blat.$$.XXXX", SUFFIX => '.txt');
1187
    my ($fh, $filename) = tempfile( "/tmp/blat.$$.XXXX", SUFFIX => '.txt');
1144
    $logger->verbose("sendPackageList:TmpFile: $filename");
1188
    $logger->verbose("sendPackageList:TmpFile: $filename");
1145
 
1189
 
1146
    return if $conf->{'noTransfers'};
1190
    return if $conf->{'noTransfers'};
Line 1619... Line 1663...
1619
                    $txcount = 0;
1663
                    $txcount = 0;
1620
                    $tagDirTime = 0;
1664
                    $tagDirTime = 0;
1621
                    last send_tags;
1665
                    last send_tags;
1622
                }
1666
                }
1623
 
1667
 
1624
 
-
 
1625
                #
1668
#               #
1626
                #   Don't transfer 'extra' packages
1669
#               #   Don't transfer 'extra' packages
-
 
1670
#               #   Removed. It was casuing a tarZip to be triggered, but never transferred
1627
                #
1671
#               #
1628
                if (exists ($extraPkgs->{$package}) ) 
1672
#               if (exists ($extraPkgs->{$package}) )
1629
                {
1673
#               {
1630
                    $logger->warn ("Delete excess package tag: $package::$version");
1674
#                   $logger->warn ("Delete excess package tag: $package::$version");
1631
                    unlink $file;
1675
#                   unlink $file;
1632
 
1676
#
-
 
1677
#               } else
1633
                } elsif ( transferPackage( $package, $version )) {
1678
                if ( transferPackage( $package, $version )) {
1634
                    unlink $file;
1679
                    unlink $file;
1635
                }
1680
                }
1636
                else
1681
                else
1637
                {
1682
                {
1638
                    if ($conf->{'tagage'} > 0) {
1683
                    if ($conf->{'tagage'} > 0) {
Line 1724... Line 1769...
1724
sub transferPackage
1769
sub transferPackage
1725
{
1770
{
1726
    my ($pname, $pver ) = @_;
1771
    my ($pname, $pver ) = @_;
1727
    my $rv = 0;
1772
    my $rv = 0;
1728
    my $cmdRv = 0;
1773
    my $cmdRv = 0;
1729
    $logger->logmsg("transferPackage: @_");
1774
    $logger->verbose("Enter transferPackage: @_");
1730
    my $startTime = time;
1775
    my $startTime = time;
1731
 
1776
 
1732
    #
1777
    #
1733
    #   Do not transfer excluded files
1778
    #   Do not transfer excluded files
1734
    #
1779
    #
Line 1776... Line 1821...
1776
        $logger->verbose("transferPackage: tarZip not found - $tzpath");
1821
        $logger->verbose("transferPackage: tarZip not found - $tzpath");
1777
 
1822
 
1778
        $conf->{'tagdir'} =~ m~^(.*)/~;
1823
        $conf->{'tagdir'} =~ m~^(.*)/~;
1779
        my $tagRoot = $1;
1824
        my $tagRoot = $1;
1780
        my $tag = "$pname::$pver";
1825
        my $tag = "$pname::$pver";
1781
        Utils::TouchFile($conf, catfile($tagRoot, 'tarZip', $tag));
1826
        my $zipTag = catfile($tagRoot, 'tarZip', $tag);
-
 
1827
        my $myTag =  catfile($conf->{'tagdir'} , $tag);
-
 
1828
 
-
 
1829
        $logger->logmsg("transferPackage. Request Zip: @_") unless ( -f $zipTag && -f $myTag );
-
 
1830
 
-
 
1831
        Utils::TouchFile($conf, $myTag) unless -f $myTag;
-
 
1832
        Utils::TouchFile($conf, $zipTag) unless -f $zipTag;
1782
        return 0;
1833
        return 0;
1783
    }
1834
    }
1784
 
1835
 
1785
 
1836
 
1786
    ###########################################################################
1837
    ###########################################################################
1787
    #   Transfer the package / symlink
1838
    #   Transfer the package / symlink
1788
    #
1839
    #
-
 
1840
    $logger->logmsg("transferPackage: @_");
-
 
1841
    my $tzfsize = -s $tzpath; 
1789
    if ($isS3Target) {
1842
    if ($isS3Target) {
1790
        $cmdRv = transferPackageS3($tzdir, $tzfile, $pname, $pver);
1843
        $cmdRv = transferPackageS3($tzdir, $tzfile, $pname, $pver);
1791
    } else {
1844
    } else {
1792
        $cmdRv = transferPackageSsh($tzdir, $tzfile, $sfile, $pname, $pver);
1845
        $cmdRv = transferPackageSsh($tzdir, $tzfile, $sfile, $pname, $pver);
1793
    }
1846
    }
1794
 
1847
 
1795
    #
1848
    #
1796
    #   Display the size of the package
1849
    #   Display the size of the package (tarZipped)
1797
    #       Diagnostic use
1850
    #       Diagnostic use
1798
    #
1851
    #
1799
    if ($conf->{txdetail}) {
1852
    if ($conf->{txdetail}) {
1800
        my $ph;
-
 
1801
        open ( $ph, "du -bs $sfile 2>/dev/null |" );
-
 
1802
        my $line = <$ph>;
-
 
1803
        $line =~ m/^([0-9]+)/;
-
 
1804
        $line = $1 || 0;
-
 
1805
        my $size = sprintf "%.3f", $line / 1024 / 1024 / 1024 ;
1853
        my $size = sprintf "%.3f", $tzfsize / 1024 / 1024 / 1024 ;
1806
        close $ph;
-
 
1807
        my $duration = time - $startTime;
1854
        my $duration = time - $startTime;
1808
        $logger->logmsg("transferPackage: Stats: $pname, $pver, $size Gb, $duration Secs");
1855
        $logger->logmsg("transferPackage: Stats: $pname, $pver, $size Gb, $duration Secs");
1809
    }
1856
    }
1810
 
1857
 
1811
    if ( $cmdRv == 0 ) {           
1858
    if ( $cmdRv == 0 ) {           
Line 1960... Line 2007...
1960
#
2007
#
1961
# Inputs          : $pname          - Name of the package
2008
# Inputs          : $pname          - Name of the package
1962
#                   $pver           - Package version
2009
#                   $pver           - Package version
1963
#                   $pdata          - Hash of extra data
2010
#                   $pdata          - Hash of extra data
1964
#
2011
#
1965
# Returns         : true    - Package transferred
2012
# Returns         : true    - Package deleted
1966
#                   false   - Package not transferred
2013
#                   false   - Package not deleted
1967
#
2014
#
1968
sub deletePackage
2015
sub deletePackage
1969
{
2016
{
1970
    my ($pname, $pver, $pdata ) = @_;
2017
    my ($pname, $pver, $pdata ) = @_;
1971
    my $rv = 0;
2018
    my $rv = 0;
1972
    my $cmdRv = 0;
2019
    my $cmdRv = 0;
1973
    $logger->logmsg("deletePackage: $pname, $pver");
2020
    $logger->logmsg("deletePackage: $pname, $pver");
1974
 
2021
 
1975
    #
2022
    if ($isS3Target) {
1976
    #   Create the process pipe to delete the package
2023
        #   Create the process pipe to delete the package
1977
    #   ssh  ... "./delete_package ${rx_opts} \"$pname\" \"$pver\""
-
 
1978
    #
-
 
1979
    unless ($conf->{'noTransfers'}) {
-
 
1980
        my $ph;
-
 
1981
        my $flags = $pdata->{FORCEDELETE}  ? '' : ' -T';
-
 
1982
        my $tgt_cmd = "$conf->{'bindir'}/delete_package $flags \"$pname\" \"$pver\"";
-
 
1983
        my $ssh_cmd = sshCmd($tgt_cmd);
-
 
1984
 
2024
 
1985
        $logger->verbose2("deletePackage:tgt_cmd:$tgt_cmd");
2025
        my $tzfile = $pname . '__' . $pver . '.tgz';
-
 
2026
        my $s3_cmd = "aws --profile $conf->{'S3Profile'} s3 rm s3://$conf->{'S3Bucket'}/$tzfile";
1986
        $logger->verbose2("deletePackage:ssh_cmd:$ssh_cmd");
2027
        $logger->verbose2("deletePackage:s3_cmd:$s3_cmd");
1987
 
2028
 
-
 
2029
        my $ph;
1988
        open ($ph, "$ssh_cmd |");
2030
        open ($ph, "$s3_cmd |");
1989
        while ( <$ph> )
2031
        while ( <$ph> )
1990
        {
2032
        {
1991
            chomp;
2033
            chomp;
1992
            $logger->verbose2("deletePackage:Data: $_");
2034
            $logger->verbose2("deletePackage:Data: $_");
1993
        }
2035
        }
1994
        close ($ph);
2036
        close ($ph);
1995
        $cmdRv = $?;
2037
        $cmdRv = $?;
1996
 
2038
 
-
 
2039
    } else {
-
 
2040
        #
-
 
2041
        #   Create the process pipe to delete the package
-
 
2042
        #   ssh  ... "./delete_package ${rx_opts} \"$pname\" \"$pver\""
-
 
2043
        #
-
 
2044
        unless ($conf->{'noTransfers'}) {
-
 
2045
            my $ph;
-
 
2046
            my $flags = $pdata->{FORCEDELETE}  ? '' : ' -T';
-
 
2047
            my $tgt_cmd = "$conf->{'bindir'}/delete_package $flags \"$pname\" \"$pver\"";
-
 
2048
            my $ssh_cmd = sshCmd($tgt_cmd);
-
 
2049
 
-
 
2050
            $logger->verbose2("deletePackage:tgt_cmd:$tgt_cmd");
-
 
2051
            $logger->verbose2("deletePackage:ssh_cmd:$ssh_cmd");
-
 
2052
 
-
 
2053
            open ($ph, "$ssh_cmd |");
-
 
2054
            while ( <$ph> )
-
 
2055
            {
-
 
2056
                chomp;
1997
        $logger->verbose("deletePackage:End: $?");
2057
                $logger->verbose2("deletePackage:Data: $_");
-
 
2058
            }
-
 
2059
            close ($ph);
-
 
2060
            $cmdRv = $?;
-
 
2061
        }
1998
    }
2062
    }
1999
 
2063
 
-
 
2064
    #
-
 
2065
    #   Common code
-
 
2066
    #
-
 
2067
    $logger->verbose("deletePackage:End: $cmdRv");
2000
    if ( $cmdRv == 0 )
2068
    if ( $cmdRv == 0 )
2001
    {
2069
    {
2002
        $rv = 1;
2070
        $rv = 1;
2003
        $statistics{delCount}++;
2071
        $statistics{delCount}++;
2004
        delete $RemotePkgList->{$pname}{$pver};
2072
        delete $RemotePkgList->{$pname}{$pver};