#1077958 nmu: rust-async-broadcast_0.7.1-1

#1077958#5
Date:
2024-08-04 23:20:08 UTC
From:
To:
nmu rust-async-broadcast_0.7.1-1 . riscv64 . unstable . -m "Rebuild to fix previous broken build"

https://packages.debian.org/sid/riscv64/librust-async-broadcast-dev/filelist
looks really weird, and this is not seen on other architectures.

I suspect this broken binray package is the reason why the package fails on
debci and is holding up the rust-zbus transition

#1077958#12
Date:
2024-08-05 02:25:18 UTC
From:
To:
That is not the actual contents of the .deb. Download the .deb and
open it in file-roller or something to check for yourself. Or look at
the build log.

https://buildd.debian.org/status/package.php?p=rust-async-broadcast

Some Rust autopkgtests take a very long time to complete which is
especially noticeable on riscv64 which I think may be the slowest
autopkgtest infrastructure.

Some rust autopkgtests have additional trouble because
1. No riscv64 packages are in Testing yet
2. The Debian Rust team sets skip-not-installable by default. That
means the migration-reference autopkgtest will always show as neutral
since the dependencies are uninstallable when migration-reference is
the only trigger. I think skip-not-installable by default is bad for
other reasons but I think this situation makes it worse.

See for instance
https://ci.debian.net/packages/r/rust-gtk4/testing/riscv64/ which
passes once in a while. But I don't believe riscv64 is delaying the
rust-zbus transition.

Thank you,
Jeremy Bícha

#1077958#17
Date:
2024-08-05 06:09:01 UTC
From:
To:
Hi,

That's why the test timeout on riscv64 is double that of other
architectures:
https://salsa.debian.org/ci-team/debian-ci-config/-/blob/master/config/production/nodes.d/riscv64.yaml?ref_type=heads#L11

This is indeed a problem, largely because of 2.

I regret I added skip-not-installable to autopkgtest. It does more harm
than it helps.

Until yesterday at least rust-libseccomp was blocking a lot. I was
hoping that once that migrated (happend yesterday) new tests would have
more chance of succes, as it seems that several tests pass in a pure
unstable environment. So this hints at missing *versioned* dependencies.
But maybe it will resolve itself by time ordering.

Paul

#1077958#22
Date:
2024-08-05 11:57:27 UTC
From:
To:
Unfortunately in many cases, the performance difference seems a lot more
than a factor of two.

Take rust-gix for example, looking at the results for testing migration
tests I see

18-28m on amd64
53-59m on arm64
33-47m on armel
33-48m on armhf
1h59m-2h2m on i386
49m-1h37m on ppc64el
23m-55m on s390x

on riscv64 it was timing out after over 8 hours. To unblock things I modified it
to only test a single feature configuration. It then passed in 29 minuites.

If we assume all feature configurations take the same time (very rough) then
that suggests running the full set of tests on riscv64 would take of the order
of 23 hours. Over 10 times worse than the next-slowest architecture.

It seems to me that britney's autopkgtest scheduler sometimes fails to pick
up that stuff needs to go in together. Even though the main part of britney
knows that they do.

The end result of this is frequently that the fallback dependency solver
gets triggered and autopkgtest tries to run the tests from testing against
the package from unstable. This often results in a "crate directory not
found" error. In other cases the fallback depsolver is not invoked or
doesn't succeed and the testsuite fails with a "fail badpkg" error.

Why this is happening I'm not entirely sure. Though I have some theories

In some cases I suspect it happens because the dependencies are indirect.
or even involve going down the tree and back up again.

In some cases I suspect it happens because riscv64 testing is currently
a basket case, so the packages are already uninstallable in testing.

In some cases I suspect it happens due to the special treatment of arch
all packages (rust team packages are arch any, but Jonas's packages
are arch all). For example if we look at the migration page for
rust-event-listener, it seems britney has done the right thing on amd64
and arm64 (where arch all packages are required to be installable) but
not done the right thing on architectures where arch all packages are
not required to be installable.

#1077958#27
Date:
2024-08-05 12:03:37 UTC
From:
To:
https://ci.debian.net/packages/r/rust-async-broadcast/testing/riscv64/
being retried over and over again without progress?

In contrast to the rust-gtk5/testing/risc64 example, in
rust-async-broadcast/testing/riscv64 failures have logfiles that indicate
that the actual tests don't even run, still it is being counted as a
failure.

Also, looking at the description of "skip-not-installable":

    This restrictions may cause a test to miss a regression due to
    installability issues, so use with caution. If one only wants to
    skip certain architectures, use the ``Architecture`` field for
    that.

    This test might have test dependencies that can't be fulfilled in
    all suites or in derivatives. Therefore, when apt-get installs the
    test dependencies, it will fail. Don't treat this as a test
    failure, but instead treat it as if the test was skipped.

I need some help to understand how skipped tests lead to delaying the
package migration to testing. My naive understanding is that this flag
would rather allow issues to go through to testing?

Changing that would be a one-liner to
https://salsa.debian.org/rust-team/debcargo/-/blob/master/src/debian/control.rs?ref_type=heads#L149,
but before proposing that, I'd need to understand your concern better.


My question is basically: what needs to be done so that
https://tracker.debian.org/pkg/rust-event-listener can actually migrate
testing?

#1077958#32
Date:
2024-08-05 12:16:17 UTC
From:
To:
On Mon, 5 Aug 2024 12:57:27 +0100 Peter Green  <plugwash-urgent@p10link.net> wrote:
 > > That's why the test timeout on riscv64 is double that of other
architectures:
 >
 > Unfortunately in many cases, the performance difference seems a lot more
 > than a factor of two.
 >
 > Take rust-gix for example, looking at the results for testing migration
 > tests I see
 >
 > 18-28m on amd64
 > 53-59m on arm64
 > 33-47m on armel
 > 33-48m on armhf
 > 1h59m-2h2m on i386
 > 49m-1h37m on ppc64el
 > 23m-55m on s390x
 >
 > on riscv64 it was timing out after over 8 hours. To unblock things I
modified it
 > to only test a single feature configuration. It then passed in 29
minuites.
 >
 > If we assume all feature configurations take the same time (very
rough) then
 > that suggests running the full set of tests on riscv64 would take of
the order
 > of 23 hours. Over 10 times worse than the next-slowest architecture.
 >
 > > So this hints at missing *versioned* dependencies.
 >
 > It seems to me that britney's autopkgtest scheduler sometimes fails
to pick
 > up that stuff needs to go in together. Even though the main part of
britney
 > knows that they do.
 >
 > The end result of this is frequently that the fallback dependency solver
 > gets triggered and autopkgtest tries to run the tests from testing
against
 > the package from unstable. This often results in a "crate directory not
 > found" error. In other cases the fallback depsolver is not invoked or
 > doesn't succeed and the testsuite fails with a "fail badpkg" error.
 >
 > Why this is happening I'm not entirely sure. Though I have some theories
 >
 > In some cases I suspect it happens because the dependencies are indirect.
 > or even involve going down the tree and back up again.
 >
 > In some cases I suspect it happens because riscv64 testing is currently
 > a basket case, so the packages are already uninstallable in testing.
 >
 > In some cases I suspect it happens due to the special treatment of arch
 > all packages (rust team packages are arch any, but Jonas's packages
 > are arch all). For example if we look at the migration page for
 > rust-event-listener, it seems britney has done the right thing on amd64
 > and arm64 (where arch all packages are required to be installable) but
 > not done the right thing on architectures where arch all packages are
 > not required to be installable.
 >

Converting the librust-* packages to arch:all is wrong anyway since this
can break crosscompling in some cases, but that's only part of the
problem here.

 From #debian-release:

"jochensp    werdahias: rust-async-channel breaks
rust-async-executor/1.12.0-3 and rust-mpris-server/0.7.0-1 and probably
more, if I get it right"

rust-libseccomp migrated but rust-async-broadcast can't migrate due to
rust-event-listener which seems to be missing a B+R.


best,

werdahias

#1077958#37
Date:
2024-08-05 18:44:11 UTC
From:
To:
Hi

What skipping means isn't up to autopkgtest to determine, but up to the
consumers of the test results. For migration to testing, that britney2
that's owned by the Release Team. We, the Release Team, want britney2 to
prevent migration:
a) the autopkgtest of a package doesn't fail in testing, but the test
fails with $something from unstable (regression). That $something should
be blocked.
b) the test is new to testing, but it fails (weird definition of
regression).

Good question. It seems that britney2 did schedule some combination
"correctly", but not all. That is probably due to the order in which
packages were uploaded. I.e. if a package needs some other package,
britney2 will schedule the test for both triggers and if it passes, it
counts for both. However, if the dependent-on package is later updated
again, britney2 doesn't see the relation and will not schedule the
combination. If the test than fails, the package is blocked. If there
would be a versioned Breaks (not sure if the package is really broken,
or merely the test, then a Breaks is a bit overkill), than britney2
would again trigger the combination.

Does this help to tell the right answer? If this is only a test issue,
and not really a versioned Breaks missing, I'm willing to manually
trigger the right test combination. But then people need to hold off
with uploading, otherwise the results might come too late.

Paul

#1077958#42
Date:
2024-08-06 02:21:56 UTC
From:
To:

So I think I managed to find the right combination of packages.
Basically, we need all of
- rust-async-channel
- rust-async-process
- rust-event-listener
- rust-async-broadcast

to migrate together. When triggering with all of these four sources from
unstable, I end up with a successful autopkgtest:
https://ci.debian.net/data/autopkgtest/testing/riscv64/r/rust-async-broadcast/50019012/log.gz

How to convey that to britney/debci?

Is that something that could be added as a hint by the release team, or
does that require adding what Breaks to what package exactly?

#1077958#47
Date:
2024-08-06 04:39:13 UTC
From:
To:
Hi,

Because they break each other, or merely because the test fail?

Ack, thanks.

Depending on the answer above, I'll need to manually trigger those jobs,
just like you did, but then with britney2 credentials.
need to figure out which package Breaks which package. I can't say from
this distance, because I can't distinguish package breakage from test
breakage.

I suddenly realize that rust packages are special in Debain. Do the
involved packages actually do anything besides providing source? Can
other packages actually break due to packages that provide source? I
recall rust packages are mostly meant to be used to build Debian
packages, and not intended to be used by users. Am I correct in that
understanding? Than, what happens if package A would migrate and package
B not: would it mean FTBFS in testing of reverse Build-Depends package C
until B migrates too? In the latter case, I think package A should have
a versioned Breaks on package B in testing.

Paul

#1077958#52
Date:
2024-08-06 05:15:52 UTC
From:
To:
Hi,

Wait, I think I now understand what you tried to say earlier (sorry,
it's very exciting at $dayjob and I'm not always as sharp at home as I
normally am). Apparently librust-async-io stopped providing
librust-async-io-2+default-dev (and others), or something along those
lines. I think we're running into limitations of britney2 here where it
isn't aware of how to deal with situations where only one package
Provides something else during the excuses phase. It's already for a
long time on my todo list, but alas.

Under the assumption that the above assessment above is correct, the
packages will migrate together because otherwise they become
not-installable and the second phase of britney2 protects against that.
Let me schedule the tests.

Paul