summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulian Andres Klode <jak@debian.org>2025-06-24 16:48:24 +0000
committerJulian Andres Klode <jak@debian.org>2025-06-24 16:48:24 +0000
commitb0f13098c2e09555f878eea102d275acbcad6755 (patch)
treea63002a0c6cafb8c02f5c050cacd26c45bd9d28e
parentce1b1ea25738ae910f424a033e1acee2d05de524 (diff)
parent5378c38db0a5dedef34fdf35e357f76c104d717a (diff)
Merge branch 'lp2003851' into 'main'
Fix stuck acquire queues on partial server errors See merge request apt-team/apt!500
-rw-r--r--apt-pkg/acquire.cc6
-rwxr-xr-xtest/integration/test-ubuntu-bug-2003851-retry-after29
2 files changed, 32 insertions, 3 deletions
diff --git a/apt-pkg/acquire.cc b/apt-pkg/acquire.cc
index 41c3d9904..d2d32e52e 100644
--- a/apt-pkg/acquire.cc
+++ b/apt-pkg/acquire.cc
@@ -1031,7 +1031,7 @@ bool pkgAcquire::Queue::Enqueue(ItemDesc &Item)
};
QItem **OptimalI = &Items;
QItem **I = &Items;
- auto insertLocation = std::make_tuple(Item.Owner->FetchAfter(), -Item.Owner->Priority());
+ auto insertLocation = std::make_tuple(Item.Owner->FetchAfter(), Item.Owner->Priority());
// move to the end of the queue and check for duplicates here
for (; *I != 0; ) {
if (Item.URI == (*I)->URI && MetaKeysMatch(Item, *I))
@@ -1045,10 +1045,10 @@ bool pkgAcquire::Queue::Enqueue(ItemDesc &Item)
// Determine the optimal position to insert: before anything with a
// higher priority.
auto queueLocation = std::make_tuple((*I)->GetFetchAfter(),
- -(*I)->GetPriority());
+ (*I)->GetPriority());
I = &(*I)->Next;
- if (queueLocation <= insertLocation)
+ if (queueLocation >= insertLocation)
{
OptimalI = I;
}
diff --git a/test/integration/test-ubuntu-bug-2003851-retry-after b/test/integration/test-ubuntu-bug-2003851-retry-after
new file mode 100755
index 000000000..492dc2781
--- /dev/null
+++ b/test/integration/test-ubuntu-bug-2003851-retry-after
@@ -0,0 +1,29 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'amd64'
+
+insertpackage 'jammy,jammy-updates' 'testpkg' 'all' '1'
+
+setupaptarchive --no-update
+changetowebserver
+
+webserverconfig 'aptwebserver::failrequest' '503'
+webserverconfig 'aptwebserver::failrequest::dists/jammy/InRelease' '4'
+testwarningequal "Delaying http://localhost:${APTHTTPPORT} jammy InRelease by 1 seconds
+Ign:1 http://localhost:${APTHTTPPORT} jammy InRelease
+ 503 Service Unavailable
+Get:2 http://localhost:${APTHTTPPORT} jammy-updates InRelease [1398 B]
+Err:1 http://localhost:${APTHTTPPORT} jammy InRelease
+ 503 Service Unavailable
+Get:3 http://localhost:${APTHTTPPORT} jammy-updates/main all Packages [257 B]
+Get:4 http://localhost:${APTHTTPPORT} jammy-updates/main Translation-en [235 B]
+Reading package lists...
+Building dependency tree...
+All packages are up to date.
+W: Failed to fetch http://localhost:${APTHTTPPORT}/dists/jammy/InRelease 503 Service Unavailable
+W: Some index files failed to download. They have been ignored, or old ones used instead." apt update -o acquire::retries=1 -o debug::acquire::retries=1