Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 4 Nov 2023 15:54:42 -0700
From:      Mark Millard <marklmi@yahoo.com>
To:        Tatsuki Makino <tatsuki_makino@hotmail.com>
Cc:        "freebsd-ports@FreeBSD.org" <freebsd-ports@freebsd.org>
Subject:   Re: poudriere bulk -a fails on UFS: "Too many links" under logs/bulk/latest-per-pkg/ and then "Failed: starting"
Message-ID:  <17C21264-D87B-40D3-9228-579F7BC3DD7C@yahoo.com>
In-Reply-To: <SI2PR01MB503635F9FB1151333403B59AFAA4A@SI2PR01MB5036.apcprd01.prod.exchangelabs.com>
References:  <E200CC90-1103-4C62-B96C-40E15C19A0AD.ref@yahoo.com> <E200CC90-1103-4C62-B96C-40E15C19A0AD@yahoo.com> <SI2PR01MB503635F9FB1151333403B59AFAA4A@SI2PR01MB5036.apcprd01.prod.exchangelabs.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Nov 4, 2023, at 13:56, Tatsuki Makino <tatsuki_makino@hotmail.com> =
wrote:

> Hello.
> (I am replying to freebsd-ports only.)

Seems reasonable.

> Mark Millard wrote on 2023/11/04 21:00:
>> # ls -a /usr/local/poudriere/data/logs/bulk/latest-per-pkg/ | wc -l
>>   32767
>=20
> The number of packages will be inflated relative to the number of =
origins because FLAVORS uses PKGNAMEPREFIX and PKGNAMESUFFIX.

/usr/local/poudriere/data/logs/bulk/latest-per-pkg/ contains direcotries
that have the names of the packages with log files form bulk runs, not
origins.

> Therefore, something like BUILD_ALL_PYTHON_FLAVORS should not be used =
continuously for purposes other than development and debugging.

The from scratch bulk -a run is a kind of rare experiment that I do, not
a regular thing. It is deliberately a simple bulk -a run when I start
such an experimental sequence.

> Ports for which the origin directory no longer exists, and whose =
description no longer exists from MOVED (e.g. www/seamonkey), seem to =
remain in the package forever.
> It is better to run poudriere-pkgclean regularly.

The sequence used to start my experiments is as shown below:

#! /bin/sh
poudriere pkgclean -jmain-amd64-bulk_a -A
poudriere bulk -jmain-amd64-bulk_a -a

So pkgclean had been run. However, as I remember, this does
not manage log files. I do that separately.

For /usr/local/poudriere/data/logs/bulk/latest-per-pkg/
being empty at the start, the failure would still happen.

The 32767 is a UFS limitation via a 16 bit field associated with:

/usr/include/ufs/ufs/dinode.h:#define UFS_LINK_MAX 32767

Specifically di_nlink in sys/ufs/ufs/dinode.h :

struct ufs2_dinode {
	uint16_t	di_mode;	/*   0: IFMT, permissions; see =
below. */
	int16_t		di_nlink;	/*   2: File link count. */
. . .

Having more than 32767 packages attempted to be built
leads to:

/usr/local/poudriere/data/logs/bulk/latest-per-pkg/

trying to go beyond that UFS_LINK_MAX limit in what latest-per-pkg/
contains.

ZFS does not have the limitation and the prior from-scratch ZFS
based bulk -a experiment was able to finish its build. bulk -a
in the ZFS context historically used somewhat more RAM+SWAP space
than a UFS based bulk -a would.

> Would checking that area reduce that number?

For amd64, there are over 32767 packages that should get directories
in /usr/local/poudriere/data/logs/bulk/latest-per-pkg/ . The usage
poudriere puts them to counts them in di_nlink in UFS's directory inode
and the UFS limitation is reached before all the packages are present.
/usr/local/poudriere/data/logs/bulk/latest-per-pkg/ ends up just not
fitting in UFS's limitations for how things are currently organized.

I used to be able to compare/contrast the ZFS vs. UFS RAM+SWAP usage
for bulk -a runs. But last I did such was before the builds going
beyond 32767 packages with logs.

(I've not checked if /usr/local/poudriere/data/logs/bulk/latest-per-pkg/
is the only issue. It is just the first context to stop the build.)

=3D=3D=3D
Mark Millard
marklmi at yahoo.com




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?17C21264-D87B-40D3-9228-579F7BC3DD7C>