* [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