diff options
author | Florent Villard <warly@mandriva.com> | 2006-06-19 05:59:07 +0000 |
---|---|---|
committer | Florent Villard <warly@mandriva.com> | 2006-06-19 05:59:07 +0000 |
commit | cff1e729b9fe60a0de6867765ba502f8c67dea33 (patch) | |
tree | 1a782cce049a74c552c0a6b986390089cc136f34 | |
parent | 280a6e0c648961b49ee745ac5fb7eeb388767291 (diff) | |
download | iurt-cff1e729b9fe60a0de6867765ba502f8c67dea33.tar iurt-cff1e729b9fe60a0de6867765ba502f8c67dea33.tar.gz iurt-cff1e729b9fe60a0de6867765ba502f8c67dea33.tar.bz2 iurt-cff1e729b9fe60a0de6867765ba502f8c67dea33.tar.xz iurt-cff1e729b9fe60a0de6867765ba502f8c67dea33.zip |
- add a new max_command_retry to limit the number of time iurt will try to perform a command (in perform_command)
- try to fix the maintainer allocation in the 'needed' cache section
- try to migrate old cache needed structure from tables to hashes (will need a cleaning mechanism someday)
- send less mail
- remove the chroot tar after one week
-rwxr-xr-x | iurt2 | 37 |
1 files changed, 27 insertions, 10 deletions
@@ -266,6 +266,7 @@ my %config_usage = ( log_size_date => { desc => 'Number of days log should be kept', default => '30' }, log_url => { desc => 'Where the log can be seen', default => '' }, minimum_package_number => { "Minimum number of packages in a synthesis file to consider it valid", default => 1000 }, + max_command_retry => { "Maximum number of retry Iurt will perform for a given command", fault => 20 }, no_mail => { desc => 'Hash table with people mail address where we should not send any mails', default => {} }, packager => { desc => 'Name of the build bot', default => 'Iurt' }, repository => { desc => 'Prefix of the repositories', default => '/mnt/BIG/dis/' }, @@ -540,7 +541,7 @@ do { my ($srpm_name) = $srpm =~ /(.*)-[^-]+-[^-]+\.src\.rpm$/ or next; my ($maintainer, $cc); if (!$run{warn}) { - $maintainer = get_maint(\%run, $srpm); + ($maintainer) = get_maint(\%run, $srpm); $cc = "$maint{$srpm}";#, maintainers\@mandriva.com"; chomp $maintainer; if (!$maintainer || $maintainer eq 'NOT_FOUND') { @@ -575,7 +576,6 @@ do { # installed packages, retrying several time to be sure something is really broken if (!perform_command("sudo $run{urpmi_command} $path_srpm/$srpm", \%run, $config, - mail => $config->{admin}, error => "[REBUILD] install of build dependencies of $srpm failed on $run{my_arch}", hash => "install_deps_$srpm", timeout => 900, @@ -616,7 +616,7 @@ do { } else { $missing_package = '' } - my $other_maint = get_maint(\%run, $p); + my ($other_maint) = get_maint(\%run, $p); print {$run{LOG}} "missing dep: $missing_deps ($other_maint) missing_package $missing_package ($first_maint)\n"; foreach my $m ($first_maint, $other_maint) { if ($other_maint && $other_maint ne 'NOT_FOUND') { @@ -961,8 +961,20 @@ sub check_needed { my ($srpm, $cache, $provides) = @_; if (!defined $cache->{needed}{$srpm} && !ref $cache->{needed}{$srpm}) { return 1 } my $ok = 1; - foreach my $name (keys %{$cache->{needed}{$srpm}}) { - my ($package, $version, $maint) = @{$cache->{needed}{$srpm}{$name}}{'package', 'version','maint'}; + # migrate old cache format + my $ent = $cache->{needed}{$srpm}; + if (ref $ent eq 'ARRAY') { + my $table = $ent; + foreach my $t (@$table) { + my ($missing, $version, $maint) = @$t; + $cache->{needed}{$srpm}{$missing} = { + version => $version, + maint => $maint + } + } + } + foreach my $name (keys %$ent) { + my ($package, $version, $maint) = @{$ent->{$name}}{'package', 'version','maint'}; # if packages does not exist anymore, it may have been rebuild, then try to recompute the build dependencies last if $package && !$provides->{$package}; my ($p_version) = $provides->{$name}; @@ -972,7 +984,7 @@ sub check_needed { } $ok = 0; if ($version) { - $cache->{needed}{$srpm}{$name}{version} = $version; + $ent->{$name}{version} = $version; } my $v ||= $version; if ($package) { @@ -1141,6 +1153,7 @@ sub perform_command { my $call_ret = 1; my ($err, $pid, $try); my $logfile = "$opt{log}/$opt{hash}.$run->{run}.log"; + my $max_retry = $config->{max_command_retry} < $retry ? $retry : $config->{max_command_retry}; while ($retry) { $try++; if ($opt{retry} > 1) { @@ -1227,11 +1240,11 @@ sub perform_command { if ($output =~ /$wr/m) { $inc = $opt{wait_regexp}{$wr}(\%opt, $output) if ref $opt{wait_regexp}{$wr}; print {$run->{LOG}} "ERROR iurt: $wr !\n"; - sendmail($config->{admin}, '' , "$opt{hash} on $run->{my_arch} for $run->{media}: could not proceed", "$wr\n\n$comment\n$output", 0, 0, $opt{debug_mail}); + sendmail($config->{admin}, '' , "$opt{hash} on $run->{my_arch} for $run->{media}: could not proceed", "$wr\n\n$comment\n$output", 0, 0, $opt{debug_mail}) if $opt{wait_mail} } } } - if ($inc) { + if ($inc && $try < $max_retry) { $retry += $inc } elsif ($call_ret && !$kill && !$err && !$opt{error_regexp} || $fulloutput !~ /$opt{error_regexp}/) { $retry = 0 @@ -1294,9 +1307,14 @@ sub check_chroot { print {$run{LOG}} "iurt: checking basesystem tar\n" if $run{verbose}; system(qq{sudo pkill -9 -u root -f "urpmi $urpmi_options --root $chroot" &> /dev/null}); if (!clean_chroot($chroot, $run, 1)) { - print "ERROR iurt: Could no prepare initial chroot"; + print {$run{LOG}} "ERROR iurt: Could no prepare initial chroot"; return } + my (@stat) = stat $chroot_tar; + if (time - $stat[9] > 604800) { + print {$run{LOG}} "iurt check_chroot: tar chroot is more than one week old, forcing the rebuild\n"; + system("sudo rm -rf $chroot_tar $chroot"); + } perform_command("sudo $config->{install_chroot_binary} $config->{basesystem_media_root} $config->{basesystem_media_root}/media/$config->{basesystem_media} $chroot_tar $chroot 501 basesystem tar rpm-build rpm-mandriva-setup-build", $run, $config, mail => $config->{admin}, @@ -1604,7 +1622,6 @@ sub add_packages { my $f; if (!perform_command("sudo $run{urpmi_command} @packages", $run, $config, - mail => $config->{admin}, timeout => 300, freq => 1, retry => 2, |