Skip to content

Commit 9865179

Browse files
committed
ci(apt): pin Azure mirror as primary via priority: annotations
`apt-transport-mirror` treats unannotated peer URLs in a mirrorlist as equal, and spreads each `apt-get update` request across them for load balancing. That combined with `mirror+file://` in bf848fa means one `InRelease` can come from azure while the matching `Packages.gz` comes from archive.ubuntu.com (or vice versa), and when the two hosts are mid-sync apt fails with: File has unexpected size (4263777 != 4263737). Mirror sync in progress? Observed on an earlier PR run at step:15 line 881 — archive served an `InRelease` that disagreed with the `Packages.gz` its mirror had just rotated. `Acquire::Retries` doesn't help here because the bad file is consistently returned until the mirror finishes its push. Annotate the mirrorlist with `priority:` (lower = preferred) so every request goes to azure first and archive is touched only when azure fails. This eliminates the cross-host version-skew race entirely; the only remaining case is a mid-push on azure alone, which is rare and typically covered by `Acquire::Retries`. Secondary benefit: on GHA runners (which live inside Azure's network) azure.archive.ubuntu.com is an order of magnitude faster than the public archive.ubuntu.com, so pinning azure as primary is also a throughput win — "load balancing" over an unevenly fast pair was a pessimization, not a speedup. Signed-off-by: Mete Fatih Cırıt <mfc@autoware.org>
1 parent bf848fa commit 9865179

2 files changed

Lines changed: 2 additions & 2 deletions

File tree

.github/workflows/setup-universe.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ jobs:
4646
echo 'Acquire::Retries "5";' > /etc/apt/apt.conf.d/99-retries
4747
echo 'Acquire::http::Timeout "30";' >> /etc/apt/apt.conf.d/99-retries
4848
echo 'Acquire::https::Timeout "30";' >> /etc/apt/apt.conf.d/99-retries
49-
printf 'http://azure.archive.ubuntu.com/ubuntu\nhttp://archive.ubuntu.com/ubuntu\n' > /etc/apt/ubuntu-mirrors.list
49+
printf 'http://azure.archive.ubuntu.com/ubuntu\tpriority:1\nhttp://archive.ubuntu.com/ubuntu\tpriority:2\n' > /etc/apt/ubuntu-mirrors.list
5050
for f in /etc/apt/sources.list /etc/apt/sources.list.d/ubuntu.sources; do
5151
if [ -f "$f" ]; then
5252
sed -E -i 's|http://archive\.ubuntu\.com/ubuntu/?|mirror+file:///etc/apt/ubuntu-mirrors.list|g' "$f"

docker-new/base.Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ RUN rm -f /etc/apt/apt.conf.d/docker-clean && \
1414
echo 'Acquire::Retries "5";' > /etc/apt/apt.conf.d/99-retries && \
1515
echo 'Acquire::http::Timeout "30";' >> /etc/apt/apt.conf.d/99-retries && \
1616
echo 'Acquire::https::Timeout "30";' >> /etc/apt/apt.conf.d/99-retries && \
17-
printf 'http://azure.archive.ubuntu.com/ubuntu\nhttp://archive.ubuntu.com/ubuntu\n' > /etc/apt/ubuntu-mirrors.list && \
17+
printf 'http://azure.archive.ubuntu.com/ubuntu\tpriority:1\nhttp://archive.ubuntu.com/ubuntu\tpriority:2\n' > /etc/apt/ubuntu-mirrors.list && \
1818
for f in /etc/apt/sources.list /etc/apt/sources.list.d/ubuntu.sources; do \
1919
if [ -f "$f" ]; then \
2020
sed -E -i 's|http://archive\.ubuntu\.com/ubuntu/?|mirror+file:///etc/apt/ubuntu-mirrors.list|g' "$f"; \

0 commit comments

Comments
 (0)