Subversion Repositories DevTools

Rev

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

Rev 6772 Rev 6776
Line 53... Line 53...
53
my $tagDirTime = 0;
53
my $tagDirTime = 0;
54
my $lastDirScan = 0;
54
my $lastDirScan = 0;
55
my $lastReleaseScan = 0;
55
my $lastReleaseScan = 0;
56
my $releaseScanMode = 0;
56
my $releaseScanMode = 0;
57
my $lastTagListScan = 0;
57
my $lastTagListScan = 0;
-
 
58
my $lastRmConfRead = 0;
-
 
59
my $lastRmConfFullRead = 0;
-
 
60
my $lastRmSeqNum = 0;
58
my $mtimeConfig = 0;
61
my $mtimeConfig = 0;
59
my $conf;
62
my $conf;
60
my $extraPkgs;
63
my $extraPkgs;
61
my $excludePkgs;
64
my $excludePkgs;
62
my %releaseData;
65
my %releaseData;
63
my $comError = 0;
66
my $comError = 0;
64
my $yday = -1;
67
my $yday = -1;
65
my $RemotePkgList = {};
68
my $RemotePkgList = {};
66
my $targetBinDir = "$FindBin::Bin/targetBin";
69
my $targetBinDir = "$FindBin::Bin/targetBin";
-
 
70
my $server_id;
-
 
71
my @projectList;
-
 
72
my @releaseList;
67
 
73
 
68
#
74
#
69
#   Contain statisics maintained while operating
75
#   Contain statisics maintained while operating
70
#       Can be dumped with a kill -USR2
76
#       Can be dumped with a kill -USR2
71
#       List here for documentation
77
#       List here for documentation
Line 124... Line 130...
124
    'logfile.size'    => {'default'   => '1M'   , 'fmt' => 'size'},
130
    'logfile.size'    => {'default'   => '1M'   , 'fmt' => 'size'},
125
    'logfile.count'   => {'default'   => 9      , 'fmt' => 'int'},
131
    'logfile.count'   => {'default'   => 9      , 'fmt' => 'int'},
126
    'verbose'         => {'default'   => 0      , 'fmt' => 'int'},
132
    'verbose'         => {'default'   => 0      , 'fmt' => 'int'},
127
    'user'            => {'mandatory' => 1      , 'fmt' => 'text'},
133
    'user'            => {'mandatory' => 1      , 'fmt' => 'text'},
128
    'hostname'        => {'mandatory' => 1      , 'fmt' => 'text'},
134
    'hostname'        => {'mandatory' => 1      , 'fmt' => 'text'},
-
 
135
    'rmHostName'      => {'default'   => undef  , 'fmt' => 'text'},
129
    'sshport'         => {'default'   => 0      , 'fmt' => 'int'},
136
    'sshport'         => {'default'   => 0      , 'fmt' => 'int'},
130
    'identity'        => {'mandatory' => 1      , 'fmt' => 'file'},
137
    'identity'        => {'mandatory' => 1      , 'fmt' => 'file'},
131
    'bindir'          => {'mandatory' => 1      , 'fmt' => 'text'},
138
    'bindir'          => {'mandatory' => 1      , 'fmt' => 'text'},
132
    'tagdir'          => {'mandatory' => 1      , 'fmt' => 'dir'},
139
    'tagdir'          => {'mandatory' => 1      , 'fmt' => 'dir'},
133
    'forcedirscan'    => {'default'   => 100    , 'fmt' => 'period'},
140
    'forcedirscan'    => {'default'   => 100    , 'fmt' => 'period'},
134
    'tagage'          => {'default'   => '10m'  , 'fmt' => 'period'},
141
    'tagage'          => {'default'   => '10m'  , 'fmt' => 'period'},
135
    'tagListUpdate'   => {'default'   => '1h'   , 'fmt' => 'period'},
142
    'tagListUpdate'   => {'default'   => '1h'   , 'fmt' => 'period'},
-
 
143
    'rmConfigCheck'   => {'default'   => '60'   , 'fmt' => 'period'},
-
 
144
    'rmConfFullRead'  => {'default'   => '1h'   , 'fmt' => 'period'},
136
    'synctime'        => {'default'   => '2h'   , 'fmt' => 'period'},
145
    'synctime'        => {'default'   => '2h'   , 'fmt' => 'period'},
137
    'syncretry'       => {'default'   => '5m'   , 'fmt' => 'period'},
146
    'syncretry'       => {'default'   => '5m'   , 'fmt' => 'period'},
138
    'allProjects'     => {'default'   => 0      , 'fmt' => 'bool'},
147
    'allProjects'     => {'default'   => 0      , 'fmt' => 'bool'},
139
    'allArchive'      => {'default'   => 0      , 'fmt' => 'bool'},
148
    'allArchive'      => {'default'   => 0      , 'fmt' => 'bool'},
140
    'project'         => {'mandatory' => 0      , 'fmt' => 'int_list'},
149
    'project'         => {'mandatory' => 0      , 'fmt' => 'int_list'},
Line 146... Line 155...
146
    'deleteAge'       => {'default'   => 0      , 'fmt' => 'period'},
155
    'deleteAge'       => {'default'   => 0      , 'fmt' => 'period'},
147
    'packageFilter'   => {'default'   => undef  , 'fmt' => 'text'},
156
    'packageFilter'   => {'default'   => undef  , 'fmt' => 'text'},
148
    'active'          => {'default'   => 1      , 'fmt' => 'bool'},
157
    'active'          => {'default'   => 1      , 'fmt' => 'bool'},
149
    'debug'           => {'default'   => 0      , 'fmt' => 'bool'},                 # Log to screen
158
    'debug'           => {'default'   => 0      , 'fmt' => 'bool'},                 # Log to screen
150
    'txdetail'        => {'default'   => 0      , 'fmt' => 'bool'},
159
    'txdetail'        => {'default'   => 0      , 'fmt' => 'bool'},
-
 
160
    'noTransfers'     => {'default'   => 0      , 'fmt' => 'bool'},                 # Debugging option to prevent transfers
151
    
161
    
152
);
162
);
153
 
163
 
154
 
164
 
155
#
165
#
156
#   Read in the configuration
166
#   Read in the configuration
157
#       Set up a logger
167
#       Set up a logger
158
#       Write a pidfile - thats not used
168
#       Write a pidfile - thats not used
-
 
169
$now = $startTime = time();
159
readConfig();
170
readConfig();
160
Utils::writepid($conf);
171
Utils::writepid($conf);
161
$logger->logmsg("Starting...");
172
$logger->logmsg("Starting...");
162
readStatistics();
173
readStatistics();
163
sighandlers($conf);
174
sighandlers($conf);
164
$startTime = time();
-
 
165
 
175
 
166
#
176
#
167
#   Main processing loop
177
#   Main processing loop
168
#   Will exit when terminated by parent
178
#   Will exit when terminated by parent
169
#
179
#
Line 286... Line 296...
286
        $logger->verbose("Filter Packages: " . $conf->{'packageFilter'})
296
        $logger->verbose("Filter Packages: " . $conf->{'packageFilter'})
287
            if ( defined $conf->{'packageFilter'} );
297
            if ( defined $conf->{'packageFilter'} );
288
 
298
 
289
        $logger->warn("Non standard ssh port: " . $conf->{'sshport'})
299
        $logger->warn("Non standard ssh port: " . $conf->{'sshport'})
290
            if ( $conf->{'sshport'} );
300
            if ( $conf->{'sshport'} );
291
            
-
 
292
        $logger->warn("Transfer session configured as not active")
-
 
293
            unless ( $conf->{'active'} );
-
 
294
 
-
 
295
        $logger->warn("Transfer all projects packages")
-
 
296
            if ( $conf->{'allProjects'} );
-
 
297
        $logger->warn("Transfer entire package archive")
-
 
298
            if ( $conf->{'allArchive'} );
-
 
299
 
301
 
-
 
302
        #
-
 
303
        #   Save Text based config for use in RmConfig
-
 
304
        #
-
 
305
        $conf->{'BaseActive'} = $conf->{'active'};
300
 
306
 
301
        #
307
        #
-
 
308
        #   Flag config has changed / been read
-
 
309
        #   Force full RM data fetch
-
 
310
        #
-
 
311
        $rv = 1;
-
 
312
        $lastRmSeqNum = 0;
-
 
313
        $lastRmConfRead = 0;
-
 
314
    }
-
 
315
 
-
 
316
    #
-
 
317
    #   Read the Release Manager configuration too
-
 
318
    #
-
 
319
    $rv |= ReadRmConfig();
-
 
320
    
-
 
321
    #
302
        #   When config is read force some actions
322
    #   When config is read force some actions
303
        #       - Force tagList to be created
323
    #       - Force tagList to be created
304
        #       - Force release scan
324
    #       - Force release scan
-
 
325
    if ($rv) {
305
        $lastTagListScan = 0;
326
        $lastTagListScan = 0;
306
        $lastReleaseScan = 0;
327
        $lastReleaseScan = 0;
-
 
328
 
-
 
329
        #
-
 
330
        #   Update global Project/Release list - only on change
-
 
331
        @projectList = split /[,\s]+/, $conf->{'project'} || '';
-
 
332
        @releaseList = split /[,\s]+/, $conf->{'release'} || '';
-
 
333
 
-
 
334
        $logger->logmsg("projectList: ". join(',',@projectList));
-
 
335
        $logger->logmsg("releaseList: ". join(',',@releaseList));
-
 
336
 
-
 
337
#Utils::DebugDumpData ("Config", $conf);
-
 
338
 
-
 
339
        $logger->warn("Transfer session configured as not active") unless ( $conf->{'active'} );
-
 
340
        $logger->warn("Transfer all project packages") if ( $conf->{'allProjects'} );
-
 
341
        $logger->warn("Transfer entire package archive") if ( $conf->{'allArchive'} );
-
 
342
        $logger->warn("All Transfers disabled") if ( $conf->{'noTransfers'} );
-
 
343
    }
-
 
344
 
-
 
345
    return $rv;
-
 
346
}
-
 
347
 
-
 
348
#-------------------------------------------------------------------------------
-
 
349
# Function        : ReadRmConfig 
-
 
350
#
-
 
351
# Description     : Read Configuration information from Release Manager
-
 
352
#                   If Rm configuration is to be used then it will override
-
 
353
#                   the project/release configuration in the text file
-
 
354
#                    
-
 
355
#
-
 
356
# Inputs          : Nothing
-
 
357
#
-
 
358
# Returns         : 0       - Config not read
-
 
359
#                   1       - Config read
-
 
360
#                             Config file has changed
-
 
361
#
-
 
362
sub ReadRmConfig
-
 
363
{
-
 
364
    #
-
 
365
    #   Time to perform a database read
-
 
366
    #   Will do at startup and every time period there after
-
 
367
    #
-
 
368
    return 0 unless $conf->{'rmHostName'};
-
 
369
    return 0 unless $conf->{'BaseActive'};
-
 
370
    return 0 unless ( $now > ($lastRmConfRead + $conf->{rmConfigCheck} ));
-
 
371
    $logger->verbose("ReadRmConfig");
-
 
372
    $lastRmConfRead = $now;
-
 
373
 
-
 
374
    my $rv = 0;
-
 
375
    my $RM_DB;
-
 
376
    my ($blat_seqnum, $blat_mode, $found);
-
 
377
    my $server_enabled = 1;
-
 
378
 
-
 
379
    #
-
 
380
    #   Read the BLAT_SERVER record from Release Manager
-
 
381
    #
-
 
382
    my $m_sqlstr = "select blat_id, blat_enable, blat_seqnum, blat_mode from RELEASE_MANAGER.blat_servers WHERE UPPER(BLAT_SERVER_NAME) = UPPER('$conf->{'rmHostName'}')";
-
 
383
 
-
 
384
    connectRM(\$RM_DB);
-
 
385
    my $sth = $RM_DB->prepare($m_sqlstr);
-
 
386
    if ( defined($sth) )
-
 
387
    {
-
 
388
        if ( $sth->execute( ) )
-
 
389
        {
-
 
390
            if ( $sth->rows )
-
 
391
            {
-
 
392
                while (my @row = $sth->fetchrow_array )
-
 
393
                {
-
 
394
                    $logger->verbose2("ReadRmConfig:Data:@row");
-
 
395
 
-
 
396
                    $server_id = $row[0] || 0;
-
 
397
                    $server_enabled = ($row[1] || 'N') eq 'Y'; 
-
 
398
                    $blat_seqnum = $row[2] || 0;
-
 
399
                    $blat_mode = ($row[3] || 'N');
-
 
400
                    $found = 1;
-
 
401
                    last;
-
 
402
                }
-
 
403
            }
-
 
404
            $sth->finish();
-
 
405
        }
-
 
406
        else
-
 
407
        {
-
 
408
            $logger->warn("ReadRmConfig: SQL Execute failure");
-
 
409
        }
-
 
410
    }
-
 
411
    else
-
 
412
    {
-
 
413
        $logger->warn("ReadRmConfig: SQL Prepare failure");
-
 
414
    }
-
 
415
    disconnectRM(\$RM_DB);
-
 
416
 
-
 
417
    #
-
 
418
    #   Process the extracted data
-
 
419
    #   
-
 
420
    if ( !$found) {
-
 
421
        $logger->warn("No Release Manager configuration for:" . $conf->{'rmHostName'});
-
 
422
        $server_id = 0;
-
 
423
        $lastRmSeqNum = 0;
-
 
424
        return 0;
-
 
425
    }
-
 
426
 
-
 
427
    #       Check for a change in config
-
 
428
    #
-
 
429
    if ($lastRmSeqNum != $blat_seqnum) {
307
        $rv = 1;
430
        $rv = 1;
-
 
431
        $lastRmSeqNum = $blat_seqnum;
308
    }
432
    }
-
 
433
 
-
 
434
    #
-
 
435
    #   Insert server configuration into the global config table
-
 
436
    #   Rm Config will override the text config
-
 
437
    #
-
 
438
    $conf->{'active'} = $server_enabled;
-
 
439
    $conf->{'allProjects'} = $blat_mode eq 'P';
-
 
440
    $conf->{'allArchive'} =  $blat_mode eq 'E';
-
 
441
 
-
 
442
    #
-
 
443
    #   If the config has changed, then read the Project and Release records from the database
-
 
444
    #   Insert these into the config provided by the text file confing
-
 
445
    #
-
 
446
    my $forceFullRead;
-
 
447
    if ( $now > ($lastRmConfFullRead + $conf->{rmConfFullRead} )) {
-
 
448
        $logger->verbose("ForceReadRmConfig");
-
 
449
        $lastRmConfFullRead = $now;
-
 
450
        $forceFullRead = 1;
-
 
451
    }
-
 
452
 
-
 
453
    if ($rv || $forceFullRead) {
-
 
454
        connectRM(\$RM_DB);
-
 
455
        my @projects;
-
 
456
        my @releases;
-
 
457
 
-
 
458
        my $m_sqlstr = "select proj_id as proj_id, null as rtag_id from release_manager.blat_projects where blat_id = $server_id and UPPER(bp_enabled) = 'Y'" .
-
 
459
                       " UNION " .
-
 
460
                       "select null as proj_id, rtag_id rtag_id from release_manager.blat_releases where blat_id = $server_id and UPPER(br_enabled) = 'Y'";
-
 
461
 
-
 
462
        my $sth = $RM_DB->prepare($m_sqlstr);
-
 
463
        if ( defined($sth) )
-
 
464
        {
-
 
465
            if ( $sth->execute( ) )
-
 
466
            {
-
 
467
                if ( $sth->rows )
-
 
468
                {
-
 
469
                    while (my @row = $sth->fetchrow_array )
-
 
470
                    {
-
 
471
                        $logger->verbose2("ReadRmConfig:Data:@row");
-
 
472
                        push (@projects, $row[0]) if ($row[0]);
-
 
473
                        push (@releases, $row[1]) if ($row[1] );
-
 
474
                    }
-
 
475
                }
-
 
476
                $sth->finish();
-
 
477
            }
-
 
478
            else
-
 
479
            {
-
 
480
                $logger->warn("ReadRmConfig: SQL Execute failure");
-
 
481
            }
-
 
482
        }
-
 
483
        else
-
 
484
        {
-
 
485
            $logger->warn("ReadRmConfig: SQL Prepare failure");
-
 
486
        }
-
 
487
        disconnectRM(\$RM_DB);
-
 
488
 
-
 
489
        #
-
 
490
        #   Reform the projects and releases into a comma separated list and detect changes
-
 
491
        #
-
 
492
        my $projects = join(',', sort @projects); 
-
 
493
        my $releases = join(',', sort @releases);
-
 
494
 
-
 
495
        if ((($projects || '') ne ($conf->{'project'} || '')) || (($releases || '') ne  ($conf->{'release'} || ''))) {
-
 
496
            $conf->{'project'} = $projects;
-
 
497
            $conf->{'release'} = $releases;
-
 
498
            $rv = 1;
-
 
499
        }
-
 
500
    }
-
 
501
 
-
 
502
    # Indicate if the config has changed
309
    return $rv;
503
    return $rv;
310
}
504
}
311
 
505
 
312
#-------------------------------------------------------------------------------
506
#-------------------------------------------------------------------------------
313
# Function        : checkForBasicTools 
507
# Function        : checkForBasicTools 
Line 904... Line 1098...
904
sub sendPackageList
1098
sub sendPackageList
905
{
1099
{
906
    my ($pkgList) = @_;
1100
    my ($pkgList) = @_;
907
    my ($fh, $filename) = tempfile( "/tmp/blat.$$.XXXX", SUFFIX => '.txt');
1101
    my ($fh, $filename) = tempfile( "/tmp/blat.$$.XXXX", SUFFIX => '.txt');
908
    $logger->verbose("sendPackageList:TmpFile: $filename");
1102
    $logger->verbose("sendPackageList:TmpFile: $filename");
-
 
1103
 
-
 
1104
    return if $conf->{'noTransfers'};
909
    
1105
    
910
    #
1106
    #
911
    #   Create a temp file with data
1107
    #   Create a temp file with data
912
    #
1108
    #
913
    foreach my $pname ( sort keys %{$pkgList} )
1109
    foreach my $pname ( sort keys %{$pkgList} )
Line 966... Line 1162...
966
 
1162
 
967
    #
1163
    #
968
    #   Determine the releases that are in this project
1164
    #   Determine the releases that are in this project
969
    #   Build up an sql query
1165
    #   Build up an sql query
970
    #
1166
    #
971
    my @m_rlist;
-
 
972
    push @m_rlist,"rc.RTAG_ID=$_" foreach ( @_ );
-
 
973
    my $m_rlist = join ' OR ', @m_rlist;
1167
    my $m_rlist = join ',', @_;
974
    my $m_sqlstr = "SELECT DISTINCT pv.PV_ID, pkg.PKG_NAME, pv.PKG_VERSION, pv.IS_DEPLOYABLE" .
1168
    my $m_sqlstr = "SELECT DISTINCT pv.PV_ID, pkg.PKG_NAME, pv.PKG_VERSION, pv.IS_DEPLOYABLE" .
975
                    " FROM RELEASE_MANAGER.RELEASE_CONTENT rc, RELEASE_MANAGER.PACKAGE_VERSIONS pv, RELEASE_MANAGER.PACKAGES pkg" .
1169
                    " FROM RELEASE_MANAGER.RELEASE_CONTENT rc, RELEASE_MANAGER.PACKAGE_VERSIONS pv, RELEASE_MANAGER.PACKAGES pkg" .
976
                    " WHERE ( $m_rlist ) AND rc.PV_ID = pv.PV_ID AND pv.PKG_ID = pkg.PKG_ID" .
1170
                    " WHERE ( RTAG_ID in ($m_rlist) ) AND rc.PV_ID = pv.PV_ID AND pv.PKG_ID = pkg.PKG_ID" .
977
                    " ORDER by PKG_NAME DESC";
1171
                    " ORDER by PKG_NAME DESC";
978
    $logger->verbose3("getPkgList:Sql:$m_sqlstr");
1172
    $logger->verbose3("getPkgList:Sql:$m_sqlstr");
979
                    
1173
                    
980
    my $sth = $RM_DB->prepare($m_sqlstr);
1174
    my $sth = $RM_DB->prepare($m_sqlstr);
981
    if ( defined($sth) )
1175
    if ( defined($sth) )
Line 1045... Line 1239...
1045
    else
1239
    else
1046
    {
1240
    {
1047
        #
1241
        #
1048
        #   Convert list of projects into a list of releases
1242
        #   Convert list of projects into a list of releases
1049
        #
1243
        #
1050
        my @plist = split /[,\s]+/, $conf->{'project'} || '';
-
 
1051
        if ( @plist )
1244
        if ( @projectList )
1052
        {
1245
        {
1053
            #
1246
            #
1054
            #   Determine the releases that are in this project
1247
            #   Determine the releases that are in this project
1055
            #   Build up an sql query
1248
            #   Build up an sql query
1056
            #
1249
            #
1057
            my @m_plist;
-
 
1058
            push @m_plist,"PROJ_ID=$_" foreach ( @plist );
-
 
1059
            my $m_plist = join ' OR ', @m_plist;
1250
            my $m_plist = join ',', @projectList;
1060
            $m_sqlstr = "SELECT rt.RTAG_ID" .
1251
            $m_sqlstr = "SELECT rt.RTAG_ID" .
1061
                        " FROM RELEASE_MANAGER.RELEASE_TAGS rt" .
1252
                        " FROM RELEASE_MANAGER.RELEASE_TAGS rt" .
1062
                        " WHERE ( $m_plist ) AND rt.OFFICIAL != 'A'";
1253
                        " WHERE ( PROJ_ID in ( $m_plist) ) AND rt.OFFICIAL != 'A'";
1063
                        #" AND rt.OFFICIAL != 'Y'";
1254
                        #" AND rt.OFFICIAL != 'Y'";
1064
        }
1255
        }
1065
    }
1256
    }
1066
 
1257
 
1067
    if ( defined $m_sqlstr )
1258
    if ( defined $m_sqlstr )
Line 1080... Line 1271...
1080
                        $logger->verbose2("getReleaseList:Data:@row");
1271
                        $logger->verbose2("getReleaseList:Data:@row");
1081
                        $rlist{$row[0]} = 1;
1272
                        $rlist{$row[0]} = 1;
1082
                    }
1273
                    }
1083
                }
1274
                }
1084
                $sth->finish();
1275
                $sth->finish();
-
 
1276
            } else {
-
 
1277
                $logger->warn("getReleaseList: SQL Execute failure");
1085
            }
1278
            }
1086
        }
1279
        }
1087
        else
1280
        else
1088
        {
1281
        {
1089
            $logger->warn("getReleaseList: SQL Prepare failure");
1282
            $logger->warn("getReleaseList: SQL Prepare failure");
Line 1092... Line 1285...
1092
    }
1285
    }
1093
 
1286
 
1094
    #
1287
    #
1095
    #   Add in the user specified list of releases
1288
    #   Add in the user specified list of releases
1096
    #
1289
    #
1097
    my @rlist = split /[,\s]+/, $conf->{'release'} || '';
-
 
1098
    $rlist{$_} = 1 foreach(@rlist);
1290
    $rlist{$_} = 1 foreach(@releaseList);
1099
 
1291
 
1100
    #
1292
    #
1101
    #   Sort for pretty display only
1293
    #   Sort for pretty display only
1102
    #
1294
    #
1103
    @{$releaseData{getReleaseList}} = sort {$a <=> $b} keys %rlist;
1295
    @{$releaseData{getReleaseList}} = sort {$a <=> $b} keys %rlist;
Line 1265... Line 1457...
1265
    {
1457
    {
1266
        $config{allProjects} = 1;
1458
        $config{allProjects} = 1;
1267
    }
1459
    }
1268
    else
1460
    else
1269
    {
1461
    {
1270
        %{$config{projects}} = map { $_ => 1 } split (/[,\s]+/, $conf->{'project'} || '');
1462
        %{$config{projects}} = map { $_ => 1 } @projectList;
1271
        %{$config{releases}} = map { $_ => 1 } getReleaseList();
1463
        %{$config{releases}} = map { $_ => 1 } getReleaseList();
1272
    }
1464
    }
1273
 
1465
 
1274
    #
1466
    #
1275
    #   Save data
1467
    #   Save data
Line 1387... Line 1579...
1387
#
1579
#
1388
sub transferBlatBin
1580
sub transferBlatBin
1389
{
1581
{
1390
    my ($hash) = @_;
1582
    my ($hash) = @_;
1391
    $logger->verbose("transferBlatBin");
1583
    $logger->verbose("transferBlatBin");
-
 
1584
 
-
 
1585
    return if $conf->{'noTransfers'};
-
 
1586
 
1392
    foreach my $file ( sort keys %{$hash})
1587
    foreach my $file ( sort keys %{$hash})
1393
    {
1588
    {
1394
        $logger->logmsg("transferBlatBin: $file");
1589
        $logger->logmsg("transferBlatBin: $file");
1395
 
1590
 
1396
        #
1591
        #
Line 1441... Line 1636...
1441
#
1636
#
1442
sub transferPackage
1637
sub transferPackage
1443
{
1638
{
1444
    my ($pname, $pver ) = @_;
1639
    my ($pname, $pver ) = @_;
1445
    my $rv = 0;
1640
    my $rv = 0;
-
 
1641
    my $cmdRv = 0;
1446
    $logger->logmsg("transferPackage: @_");
1642
    $logger->logmsg("transferPackage: @_");
1447
    my $startTime = time;
1643
    my $startTime = time;
1448
 
1644
 
1449
    #
1645
    #
1450
    #   Do not transfer excluded files
1646
    #   Do not transfer excluded files
Line 1527... Line 1723...
1527
 
1723
 
1528
    $logger->verbose2("transferPackage:tar_cmd:$tar_cmd") if defined $tar_cmd;
1724
    $logger->verbose2("transferPackage:tar_cmd:$tar_cmd") if defined $tar_cmd;
1529
    $logger->verbose2("transferPackage:tgt_cmd:$tgt_cmd");
1725
    $logger->verbose2("transferPackage:tgt_cmd:$tgt_cmd");
1530
    $logger->verbose2("transferPackage:ssh_cmd:$ssh_cmd");
1726
    $logger->verbose2("transferPackage:ssh_cmd:$ssh_cmd");
1531
 
1727
 
-
 
1728
    unless ($conf->{'noTransfers'}) {
1532
    my $ph;
1729
        my $ph;
1533
    my @cmd_list;
1730
        my @cmd_list;
1534
    push (@cmd_list, $tar_cmd) if defined $tar_cmd;
1731
        push (@cmd_list, $tar_cmd) if defined $tar_cmd;
1535
    push (@cmd_list, $ssh_cmd);
1732
        push (@cmd_list, $ssh_cmd);
1536
    my $cmd = join (' | ', @cmd_list);
1733
        my $cmd = join (' | ', @cmd_list);
1537
    open ($ph, "$cmd |");
1734
        open ($ph, "$cmd |");
1538
    while ( <$ph> )
1735
        while ( <$ph> )
1539
    {
1736
        {
1540
        chomp;
1737
            chomp;
1541
        $logger->verbose2("transferPackage:Data: $_");
1738
            $logger->verbose2("transferPackage:Data: $_");
-
 
1739
        }
-
 
1740
        close ($ph);
-
 
1741
        $cmdRv = $?;
-
 
1742
        $logger->verbose("transferPackage:End: $?");
1542
    }
1743
    }
1543
    close ($ph);
-
 
1544
    $logger->verbose("transferPackage:End: $?");
-
 
1545
 
1744
 
1546
    #
1745
    #
1547
    #   Display the size of the package
1746
    #   Display the size of the package
1548
    #       Diagnostic use
1747
    #       Diagnostic use
1549
    #
1748
    #
1550
    if ($conf->{txdetail}) {
1749
    if ($conf->{txdetail}) {
-
 
1750
        my $ph;
1551
        open ( $ph, "du -bs $sfile 2>/dev/null |" );
1751
        open ( $ph, "du -bs $sfile 2>/dev/null |" );
1552
        my $line = <$ph>;
1752
        my $line = <$ph>;
1553
        $line =~ m/^([0-9]+)/;
1753
        $line =~ m/^([0-9]+)/;
1554
        $line = $1 || 0;
1754
        $line = $1 || 0;
1555
        my $size = sprintf "%.3f", $line / 1024 / 1024 / 1024 ;
1755
        my $size = sprintf "%.3f", $line / 1024 / 1024 / 1024 ;
1556
        close $ph;
1756
        close $ph;
1557
        my $duration = time - $startTime;
1757
        my $duration = time - $startTime;
1558
        $logger->logmsg("transferPackage: Stats: $pname, $pver, $size Gb, $duration Secs");
1758
        $logger->logmsg("transferPackage: Stats: $pname, $pver, $size Gb, $duration Secs");
1559
    }
1759
    }
1560
 
1760
 
1561
    if ( $? == 0 )
1761
    if ( $cmdRv == 0 )
1562
    {
1762
    {           
1563
        #
1763
        #
1564
        #   Mark has having been transferred in the current cycle
1764
        #   Mark has having been transferred in the current cycle
1565
        #
1765
        #
1566
        $RemotePkgList->{$pname}{$pver}{transferred} = 1;
1766
        $RemotePkgList->{$pname}{$pver}{transferred} = 1;
1567
        $rv = 1;
1767
        $rv = 1;
Line 1589... Line 1789...
1589
#
1789
#
1590
sub deletePackage
1790
sub deletePackage
1591
{
1791
{
1592
    my ($pname, $pver, $pdata ) = @_;
1792
    my ($pname, $pver, $pdata ) = @_;
1593
    my $rv = 0;
1793
    my $rv = 0;
-
 
1794
    my $cmdRv = 0;
1594
    $logger->logmsg("deletePackage: $pname, $pver");
1795
    $logger->logmsg("deletePackage: $pname, $pver");
1595
 
1796
 
1596
    #
1797
    #
1597
    #   Create the process pipe to delete the package
1798
    #   Create the process pipe to delete the package
1598
    #   ssh  ... "./delete_package ${rx_opts} \"$pname\" \"$pver\""
1799
    #   ssh  ... "./delete_package ${rx_opts} \"$pname\" \"$pver\""
1599
    #
1800
    #
-
 
1801
    unless ($conf->{'noTransfers'}) {
1600
    my $ph;
1802
        my $ph;
1601
    my $flags = $pdata->{FORCEDELETE}  ? '' : ' -T';
1803
        my $flags = $pdata->{FORCEDELETE}  ? '' : ' -T';
1602
    my $tgt_cmd = "$conf->{'bindir'}/delete_package $flags \"$pname\" \"$pver\"";
1804
        my $tgt_cmd = "$conf->{'bindir'}/delete_package $flags \"$pname\" \"$pver\"";
1603
    my $ssh_cmd = sshCmd($tgt_cmd);
1805
        my $ssh_cmd = sshCmd($tgt_cmd);
1604
 
1806
 
1605
    $logger->verbose2("deletePackage:tgt_cmd:$tgt_cmd");
1807
        $logger->verbose2("deletePackage:tgt_cmd:$tgt_cmd");
1606
    $logger->verbose2("deletePackage:ssh_cmd:$ssh_cmd");
1808
        $logger->verbose2("deletePackage:ssh_cmd:$ssh_cmd");
1607
 
1809
 
1608
    open ($ph, "$ssh_cmd |");
1810
        open ($ph, "$ssh_cmd |");
1609
    while ( <$ph> )
1811
        while ( <$ph> )
1610
    {
1812
        {
1611
        chomp;
1813
            chomp;
1612
        $logger->verbose2("deletePackage:Data: $_");
1814
            $logger->verbose2("deletePackage:Data: $_");
-
 
1815
        }
-
 
1816
        close ($ph);
-
 
1817
        $cmdRv = $?;
-
 
1818
 
-
 
1819
        $logger->verbose("deletePackage:End: $?");
1613
    }
1820
    }
1614
    close ($ph);
-
 
1615
    $logger->verbose("deletePackage:End: $?");
-
 
-
 
1821
 
1616
    if ( $? == 0 )
1822
    if ( $cmdRv == 0 )
1617
    {
1823
    {
1618
        $rv = 1;
1824
        $rv = 1;
1619
        $statistics{delCount}++;
1825
        $statistics{delCount}++;
1620
        delete $RemotePkgList->{$pname}{$pver};
1826
        delete $RemotePkgList->{$pname}{$pver};
1621
    }
1827
    }
Line 1891... Line 2097...
1891
    $SIG{USR1} = sub {
2097
    $SIG{USR1} = sub {
1892
        # On Force Archive Sync
2098
        # On Force Archive Sync
1893
        $logger->logmsg('Received SIGUSR1.');
2099
        $logger->logmsg('Received SIGUSR1.');
1894
        $lastReleaseScan = 0;
2100
        $lastReleaseScan = 0;
1895
        $lastTagListScan = 0;
2101
        $lastTagListScan = 0;
-
 
2102
        $lastRmConfRead = 0;
1896
    };
2103
    };
1897
 
2104
 
1898
    alarm 60;
2105
    alarm 60;
1899
    $SIG{ALRM} = sub {
2106
    $SIG{ALRM} = sub {
1900
        # On Dump Statistics
2107
        # On Dump Statistics