* [devel] Q: энтропия на сборочнице [bolt-0.9.1-alt1: Sisyphus/i586 test rebuild failed]
@ 2021-03-01 17:10 Konstantin Lepikhov
2021-03-01 17:40 ` Alexey V. Vissarionov
2021-03-01 17:56 ` Dmitry V. Levin
0 siblings, 2 replies; 4+ messages in thread
From: Konstantin Lepikhov @ 2021-03-01 17:10 UTC (permalink / raw)
To: ALT Linux Devel Mailing List
Привет!
Давно мучает меня эта "ошибка" пересборки
Код теста:
static void
test_strv_permute (TestRng *tt, gconstpointer user_data)
{
g_auto(GStrv) tst = NULL;
const char *ref[] = {"a", "b", "c", "d", NULL};
char *empty[] = {NULL};
guint N;
guint k = 0;
bolt_strv_permute (NULL);
bolt_strv_permute (empty);
g_assert_cmpuint (bolt_strv_length (empty), ==, 0U);
tst = g_strdupv ((char **) ref);
/* there are 4! = 24 possible permutations, do it
* at least N = 4! and pick a rather large threshold
* instead of a larger N */
N = (4 * 3 * 2 * 1);
for (guint i = 0; i < N; i++)
{
bolt_strv_permute (tst);
if (bolt_strv_equal ((char **) ref, (char **) tst))
k++;
}
g_debug ("permutation-test: %u of %u were equal", k, N);
g_assert_cmpuint (k, <, 5);
}
...
У меня есть смутные подозрения, что в какой-то момент в сборочнице
кончается энтропия и начинается фигня
----- Forwarded message from ALT beekeeper <hiver@altlinux.org> -----
Date: Mon, 1 Mar 2021 15:48:15 +0000 (UTC)
From: ALT beekeeper <hiver@altlinux.org>
To: lakostis@altlinux.org
CC: hiver@altlinux.org
Subject: bolt-0.9.1-alt1: Sisyphus/i586 test rebuild failed
Package: bolt-0.9.1-alt1
Status: Sisyphus/i586 test rebuild failed
Cannot build this package.
Please investigate.
Excerpt from build log:
....
Bail out! ERROR:../tests/test-common.c:2141:test_strv_permute: assertion failed (k < 5): (5 < 5)
stderr:
**
ERROR:../tests/test-common.c:2141:test_strv_permute: assertion failed (k < 5): (5 < 5)
――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
13/17 test-exported OK 0.21s
14/17 test-udev OK 0.07s
15/17 test-power OK 0.11s
16/17 test-sysfs OK 0.12s
17/17 test-reaper OK 0.52s
Summary of Failures:
12/17 test-common FAIL 0.29s killed by signal 6 SIGABRT
Ok: 16
Expected Fail: 0
Fail: 1
Unexpected Pass: 0
Skipped: 0
Timeout: 0
Full log written to /usr/src/RPM/BUILD/bolt-0.9.1/i586-alt-linux/meson-logs/testlog.txt
FAILED: meson-test
/usr/bin/meson test --no-rebuild --print-errorlogs
ninja: build stopped: subcommand failed.
error: Bad exit status from /usr/src/tmp/rpm-tmp.7416 (%check)
RPM build errors:
Bad exit status from /usr/src/tmp/rpm-tmp.7416 (%check)
Command exited with non-zero status 1
40.56user 3.99system 0:19.74elapsed 225%CPU (0avgtext+0avgdata 62568maxresident)k
0inputs+0outputs (0major+1547522minor)pagefaults 0swaps
hsh-rebuild: rebuild of `bolt-0.9.1-alt1.src.rpm' failed.
Command exited with non-zero status 1
--
Sincerely yours,
ALT beekeeper
----- End forwarded message -----
--
WBR et al.
^ permalink raw reply [flat|nested] 4+ messages in thread* Re: [devel] Q: энтропия на сборочнице [bolt-0.9.1-alt1: Sisyphus/i586 test rebuild failed] 2021-03-01 17:10 [devel] Q: энтропия на сборочнице [bolt-0.9.1-alt1: Sisyphus/i586 test rebuild failed] Konstantin Lepikhov @ 2021-03-01 17:40 ` Alexey V. Vissarionov 2021-03-01 17:56 ` Dmitry V. Levin 1 sibling, 0 replies; 4+ messages in thread From: Alexey V. Vissarionov @ 2021-03-01 17:40 UTC (permalink / raw) To: ALT Linux Team development discussions On 2021-03-01 18:10:32 +0100, Konstantin Lepikhov wrote: > Давно мучает меня эта "ошибка" пересборки > Код теста: > [...] > У меня есть смутные подозрения, что в какой-то момент в > сборочнице кончается энтропия и начинается фигня > [...] > Bail out! ERROR:../tests/test-common.c:2141:test_strv_permute: > assertion failed (k < 5): (5 < 5) > stderr: ** ERROR:../tests/test-common.c:2141:test_strv_permute: > assertion failed (k < 5): (5 < 5) Между buildtime и runtime тестами есть существенная разница, и очень печально, что в данном случае разработчики ее игнорируют. Если тест можно вынести в %package, чтобы проводить проверки в среде выполнения (а он, насколько я понимаю, нужен прежде всего именно там) - было бы хорошо именно так и сделать. Если же это нетривиально (неоправданно трудоемко) - думаю, вполне допустимо просто отключить этот тест: мы уже знаем, почему он не проходит. -- Alexey V. Vissarionov gremlin ПРИ altlinux ТЧК org; +vii-cmiii-ccxxix-lxxix-xlii GPG: 0D92F19E1C0DC36E27F61A29CD17E2B43D879005 @ hkp://keys.gnupg.net ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [devel] Q: энтропия на сборочнице [bolt-0.9.1-alt1: Sisyphus/i586 test rebuild failed] 2021-03-01 17:10 [devel] Q: энтропия на сборочнице [bolt-0.9.1-alt1: Sisyphus/i586 test rebuild failed] Konstantin Lepikhov 2021-03-01 17:40 ` Alexey V. Vissarionov @ 2021-03-01 17:56 ` Dmitry V. Levin 2021-03-02 9:36 ` Konstantin Lepikhov 1 sibling, 1 reply; 4+ messages in thread From: Dmitry V. Levin @ 2021-03-01 17:56 UTC (permalink / raw) To: devel On Mon, Mar 01, 2021 at 06:10:32PM +0100, Konstantin Lepikhov wrote: > Привет! > > Давно мучает меня эта "ошибка" пересборки > > Код теста: > > static void > test_strv_permute (TestRng *tt, gconstpointer user_data) > { > g_auto(GStrv) tst = NULL; > const char *ref[] = {"a", "b", "c", "d", NULL}; > char *empty[] = {NULL}; > guint N; > guint k = 0; > > bolt_strv_permute (NULL); > bolt_strv_permute (empty); > > g_assert_cmpuint (bolt_strv_length (empty), ==, 0U); > > tst = g_strdupv ((char **) ref); > > /* there are 4! = 24 possible permutations, do it > * at least N = 4! and pick a rather large threshold > * instead of a larger N */ > N = (4 * 3 * 2 * 1); > > for (guint i = 0; i < N; i++) > { > bolt_strv_permute (tst); > if (bolt_strv_equal ((char **) ref, (char **) tst)) > k++; > } > > g_debug ("permutation-test: %u of %u were equal", k, N); > g_assert_cmpuint (k, <, 5); > } > > ... > > У меня есть смутные подозрения, что в какой-то момент в сборочнице > кончается энтропия и начинается фигня Это что, неустранимо вероятностный тест, который, если его запускать достаточно много раз, обязательно упадёт? А где он добывает себе рандомизацию? -- ldv ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [devel] Q: энтропия на сборочнице [bolt-0.9.1-alt1: Sisyphus/i586 test rebuild failed] 2021-03-01 17:56 ` Dmitry V. Levin @ 2021-03-02 9:36 ` Konstantin Lepikhov 0 siblings, 0 replies; 4+ messages in thread From: Konstantin Lepikhov @ 2021-03-02 9:36 UTC (permalink / raw) To: devel Hi Dmitry! On 03/01/2021, at 08:56:20 PM you wrote: <skip> > > У меня есть смутные подозрения, что в какой-то момент в сборочнице > > кончается энтропия и начинается фигня > > Это что, неустранимо вероятностный тест, который, если его запускать > достаточно много раз, обязательно упадёт? А где он добывает себе > рандомизацию? Из того, что я вижу по логам пересборки, да, падения происходят периодически и почему-то только на i586 и x86_64 По рандомизации: /* general function */ typedef enum { BOLT_RNG_ERROR = -1, BOLT_RNG_URANDOM = 1, BOLT_RNG_PRNG = 2, BOLT_RNG_GETRANDOM = 3, } BoltRng; ... #if HAVE_FN_GETRANDOM #include <sys/random.h> # else # define GRND_NONBLOCK 0 #endif int bolt_get_random_data (void *buf, gsize n) { gboolean ok; ok = bolt_random_getrandom (buf, n, GRND_NONBLOCK, NULL); if (ok) return BOLT_RNG_GETRANDOM; ok = bolt_random_urandom (buf, n); if (ok) return BOLT_RNG_URANDOM; bolt_random_prng (buf, n); return BOLT_RNG_PRNG; } /* specific implementations */ gboolean bolt_random_getrandom (void *buf, gsize n, unsigned flags, GError **error) { int r = -1; g_return_val_if_fail (buf != NULL, FALSE); g_return_val_if_fail (error == NULL || *error == NULL, FALSE); #if HAVE_FN_GETRANDOM r = getrandom (buf, n, flags); #else errno = ENOSYS; #endif if (r < 0) { g_set_error (error, G_IO_ERROR, g_io_error_from_errno (errno), "failed to get random data: %s", g_strerror (errno)); return FALSE; } return TRUE; } gboolean bolt_random_urandom (void *buf, gsize n) { gboolean ok; int rndfd; gsize len; g_return_val_if_fail (buf != NULL, FALSE); rndfd = bolt_open ("/dev/urandom", O_RDONLY | O_CLOEXEC | O_NOCTTY, 0, NULL); if (rndfd < 0) return FALSE; ok = bolt_read_all (rndfd, buf, n, &len, NULL); (void) close (rndfd); /* NB: according to the man page random(4), "when calling read(2) for the device /dev/urandom, reads of up to 256 bytes will return as many bytes as are requested and will not be interrupted by a signal handler". */ return ok && len == n; } void bolt_random_prng (void *buf, gsize n) { char *ptr = buf; const gsize l = n % sizeof (guint32); const gsize k = n - l; if (buf == NULL || n == 0) return; for (gsize i = 0; i < k; i += sizeof (guint32)) { guint32 r = g_random_int (); memcpy (ptr + i, &r, sizeof (guint32)); } if (l > 0) { guint32 r = g_random_int (); memcpy (ptr + k, &r, l); } } -- WBR et al. ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2021-03-02 9:36 UTC | newest] Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2021-03-01 17:10 [devel] Q: энтропия на сборочнице [bolt-0.9.1-alt1: Sisyphus/i586 test rebuild failed] Konstantin Lepikhov 2021-03-01 17:40 ` Alexey V. Vissarionov 2021-03-01 17:56 ` Dmitry V. Levin 2021-03-02 9:36 ` Konstantin Lepikhov
ALT Linux Team development discussions This inbox may be cloned and mirrored by anyone: git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \ devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru public-inbox-index devel Example config snippet for mirrors. Newsgroup available over NNTP: nntp://lore.altlinux.org/org.altlinux.lists.devel AGPL code for this site: git clone https://public-inbox.org/public-inbox.git