Skip to content

WIP more changes to acomodate openshift runners - #1771

Draft
bruno-fs wants to merge 12 commits into
rhinstaller:mainfrom
bruno-fs:adapt-to-openshift-runners
Draft

bruno-fs wants to merge 12 commits into
rhinstaller:mainfrom
bruno-fs:adapt-to-openshift-runners

Conversation

@bruno-fs

Copy link
Copy Markdown
Contributor

No description provided.

@bruno-fs
bruno-fs force-pushed the adapt-to-openshift-runners branch 2 times, most recently from 7d098ca to aaed85a Compare October 1, 2026 14:09
Comment thread scripts/select-mirrors.sh

source ./scripts/defaults.sh
if [ -e "./scripts/defaults-${platform}.sh" ]; then
source "./scripts/defaults-${platform}.sh"
Comment thread scripts/select-mirrors.sh

# Last run's answer, so a mirror that still works is kept rather than rolled.
if [ -e "${state}" ]; then
source "${state}"
bruno-fs and others added 12 commits October 2, 2026 09:30
dl.fedoraproject.org and download.fedoraproject.org both redirect http to
https. A transparent cache can only store plain http - https is spliced
through untouched - so every rpm was fetched again on every test, and a
suite downloaded the same packages dozens of times over.

Point rawhide at mirrors.rit.edu and ELN at ftp-stud.hs-esslingen.de, both
of which answer 200 over plain http and so are actually cacheable. ELN
moves from https to http for that reason; rpm signatures and repomd
checksums still apply, and rawhide was already plain http.

The rawhide FTP URL moves to the same host as its http URL, replacing
ftp.halifax.rwth-aachen.de. ELN already used esslingen for FTP.

KSTEST_METALINK and KSTEST_MIRRORLIST are deliberately left alone: those
tests exist to exercise mirror selection. Rawhide's KSTEST_MODULAR_URL is
also untouched - that tree is retired and 404s on every mirror, which is a
separate problem.

Assisted-by: Claude Opus 5
The timeout is what a hung test actually costs: anaconda frequently fails
within seconds and then sits on its error dialog until virt-install --wait
gives up, so every failure is billed at the full timeout regardless of how
quickly it went wrong.

Measured over 2495 successful runs on the OpenShift runners (2026-09-28 and
-09-30, all six scenarios): median 6.3 min, p99 10.8 min, slowest single run
15.1 min. No scenario exceeded 15.1, so 20 leaves about a third in hand and
would not have failed any observed passing run. daily-iso-webui goes 40 -> 25
on the same basis; its slowest success was 12.3 min, no worse than the others.

The old values were sized for the OpenStack instances, where the same suite
had a p99 of 25.8 min and a slowest success of 31.9 - there 20 would have
killed 5% of passing tests. Worth restoring if this ever runs on hardware of
that speed again.

Tests that need longer already declare their own get_timeout() and are
unaffected.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Esslingen is in Germany and stalls on sustained transfers, which is what
these tests do. Fetching ELN's 878MB install.img from a runner, fcix
finished in 22-31s at 27-37 MB/s; Esslingen managed 0.7-1.4 MB/s and hit a
five-minute cap on both attempts.

FTP stays on Esslingen - fcix runs no FTP server, and no US mirror carries
ELN over FTP.

Assisted-by: Claude Opus 5
The caching proxy keys on URL, so a mirror that differs between tests,
or between runs, is a cache that is always cold. Choose once on the
host and pass the answer to every test through the environment.

The choice is remembered in the runner's home, outside the workspace
that is wiped at the start of each run, and only revisited when the
mirror stops answering.

Assisted-by: Claude Opus 5
A full ELN run on mirror.fcix.net produced failures that this mirror
does not, and we do not know why: the two serve byte-identical repodata
and the same packages. fcix is far faster, so this costs us, but ELN
goes back to where it is known to pass.

Selection is left off for ELN so that a failover cannot put fcix back
before we understand this.

Assisted-by: Claude Opus 5
It was a shell block inside the YAML, which is the one place it cannot
be run by hand. As a script it can be: scripts/select-mirrors.sh
PLATFORM [STATE_DIR].

Assisted-by: Claude Opus 5
launch already runs whichever tests you name; what was missing locally
was the setup the workflow does around it - the caching proxy, and
choosing the payload mirror once so the proxy has something stable to
cache.

Assisted-by: Claude Opus 5
No mirror is named for Rawhide any more. One is chosen from MirrorManager
and kept while it answers, so a mirror being retired needs no edit.

Only mirrors serving plain http are accepted, because that is what the
caching proxy in front of the runners can store, and the advertised
protocol understates this - several listed as https serve http as well.

defaults-fedora_rawhide.sh stops being a symlink to defaults.sh so that
it can say which repo to ask about without every other platform, RHEL
included, inheriting Rawhide's.

Assisted-by: Claude Opus 5
eval of an empty string succeeds, so a selector that could not run at
all - missing, not executable - left the mirrors unset and said
nothing. The tests then ran against URLs built from an empty string.

Take the selector's output through a variable so its exit status is
seen, give it an explicit one of its own (the read loop ends non-zero
when there is nothing to choose), and refuse to carry on when a
platform asked for a mirror and did not get one.

Assisted-by: Claude Opus 5
An interrupted download left a short file that every later run then
took for the cached ISO, with "isoinfo: Short read on old image" as
the only hint. Download under a temporary name and rename it once
curl is done.

Assisted-by: Claude Opus 5
check-mirrors.sh is quiet when it keeps the previous choice, which is
the usual case, so a run said nothing about where its payload came
from - the first thing wanted when one behaves oddly. On stderr, so
stdout stays parseable for $GITHUB_ENV.

Assisted-by: Claude Opus 5
The choice was made inside the block that downloads one, so callers
bringing their own - anaconda's /kickstart-test hands Permian an ISO
built from the PR - ran with no mirror at all, and on Rawhide, which
pins none, with an empty URL.

Go through select-mirrors.sh rather than check-mirrors.sh so these
runs are as sticky, and as loud about what they picked, as the daily
one. A mirror the caller already named still wins.

Assisted-by: Claude Opus 5
@bruno-fs
bruno-fs force-pushed the adapt-to-openshift-runners branch from aaed85a to 610036c Compare October 2, 2026 12:30

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants