Skip to content
Snippets Groups Projects
Commit b79a7890 authored by Michael Schroeder's avatar Michael Schroeder
Browse files

[backend] chunk binaryversion requests when querying a remote server

Those requests can get very big for package builds, and many remote
servers cannot deal with overlong GET requests.

(cherry picked from commit ae77dd48)
parent 37914c3f
Branches 2.9
No related tags found
No related merge requests found
...@@ -669,6 +669,40 @@ sub getremotebinaryversions { ...@@ -669,6 +669,40 @@ sub getremotebinaryversions {
return $binaryversions; return $binaryversions;
} }
sub getpackagebinaryversionlist {
my ($proj, $projid, $repoid, $arch, $packages, $view) = @_;
my $xmldtd = $BSXML::packagebinaryversionlist;
my $elname = 'binaryversionlist';
my $jev = $BSServerEvents::gev;
my $binaryversionlist;
$binaryversionlist = $jev->{'binaryversionlist'} if $BSStdServer::isajax;
$binaryversionlist ||= {};
$jev->{'binaryversionlist'} = $binaryversionlist if $BSStdServer::isajax;
my @missing = grep {!exists $binaryversionlist->{$_}} @$packages;
while (@missing) {
# chunk it
my $chunkl = 0;
for (splice @missing) {
$chunkl += 9 + length($_);
last if @missing && $chunkl > 1900;
push @missing, $_;
}
my $param = {
'uri' => "$proj->{'remoteurl'}/build/$proj->{'remoteproject'}/$repoid/$arch",
'proxy' => $proj->{'remoteproxy'},
};
my @args = ("view=$view");
push @args, map {"package=$_"} @missing;
my $pbvl = BSWatcher::rpc($param, $xmldtd, @args);
return undef if $BSStdServer::isajax && !$pbvl;
for (@{$pbvl->{$elname} || []}) {
$binaryversionlist->{$_->{'package'}} = $_;
}
$binaryversionlist->{$_} ||= undef for @missing;
@missing = grep {!exists $binaryversionlist->{$_}} @$packages;
}
return { $elname => [ map {$binaryversionlist->{$_}} grep {$binaryversionlist->{$_}} @$packages ] };
}
sub getremotebinaries_cache { sub getremotebinaries_cache {
my ($projid, $repoid, $arch, $binaries, $binarylist) = @_; my ($projid, $repoid, $arch, $binaries, $binarylist) = @_;
......
...@@ -3950,6 +3950,11 @@ sub getpackagelist_build { ...@@ -3950,6 +3950,11 @@ sub getpackagelist_build {
if (!$BSStdServer::isajax) { if (!$BSStdServer::isajax) {
BSHandoff::handoff("/build/$projid/$repoid/$arch", undef, @args); BSHandoff::handoff("/build/$projid/$repoid/$arch", undef, @args);
} }
my $view = $cgi->{'view'};
if (@{$cgi->{'package'} || []} && ($view eq 'binaryversions' || $view eq 'binaryversionscode')) {
my $pbvl = BSSrcServer::Remote::getpackagebinaryversionlist($proj, $projid, $repoid, $arch, $cgi->{'package'}, $view);
return ($pbvl, $BSXML::packagebinaryversionlist);
}
$param->{'uri'} = "$proj->{'remoteurl'}/build/$proj->{'remoteproject'}/$repoid/$arch"; $param->{'uri'} = "$proj->{'remoteurl'}/build/$proj->{'remoteproject'}/$repoid/$arch";
$param->{'proxy'} = $proxy; $param->{'proxy'} = $proxy;
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment