ALT Linux Team development discussions
 help / color / mirror / Atom feed
* [devel] Optimize rebuilt subtask packages identical to the packages in the target repo
@ 2020-06-04 19:58 Vladimir D. Seleznev
  2020-06-04 19:58 ` [devel] [PATCH] gb: add gb-task-build-post, optimize packages with identical rebuild Vladimir D. Seleznev
  0 siblings, 1 reply; 14+ messages in thread
From: Vladimir D. Seleznev @ 2020-06-04 19:58 UTC (permalink / raw)
  To: devel; +Cc: vseleznv


Hi, devel@!

The first step of binary package optimization. This patch is only about
subtask package rebuild within a particular repository.

--
  WBR,
  Vladimir D. Seleznev



^ permalink raw reply	[flat|nested] 14+ messages in thread

* [devel] [PATCH] gb: add gb-task-build-post, optimize packages with identical rebuild
  2020-06-04 19:58 [devel] Optimize rebuilt subtask packages identical to the packages in the target repo Vladimir D. Seleznev
@ 2020-06-04 19:58 ` Vladimir D. Seleznev
  2020-06-05 13:40   ` Alexey Tourbin
  0 siblings, 1 reply; 14+ messages in thread
From: Vladimir D. Seleznev @ 2020-06-04 19:58 UTC (permalink / raw)
  To: devel; +Cc: vseleznv

Introduce task post-build processing. It finds subtasks with package
rebuild and if the rebuilt packages identical to the same packages in
the target repo it optimizes them.

Whether subtasks in the particular repository should be check or not for
such optimization is controlling via GB_OPTIMIZE_IDENTICAL_REBUILD
option.

* gb/gb-build-task: Add gb-task-build-post.
* gb/gb-sh-conf: Add GB_OPTIMIZE_IDENTICAL_REBUILD option.
* gb/gb-task-build-post: New file.
* gb/gb-task-build-post-i: Likewise.
---
 gb/gb-build-task        |   1 +
 gb/gb-sh-conf           |   1 +
 gb/gb-task-build-post   |   9 ++++
 gb/gb-task-build-post-i | 114 ++++++++++++++++++++++++++++++++++++++++
 4 files changed, 125 insertions(+)
 create mode 100755 gb/gb-task-build-post
 create mode 100755 gb/gb-task-build-post-i

diff --git a/gb/gb-build-task b/gb/gb-build-task
index 0fb076e..5f4b23e 100755
--- a/gb/gb-build-task
+++ b/gb/gb-build-task
@@ -61,6 +61,7 @@ gb-task-set-summary
 	gb-task-copy-packages
 	gb-task-build-prep
 	gb-task-build
+	gb-task-build-post
 	fail_if_task_abort_requested
 	gb-x-girar task-make-index-html "$id" ||:
 
diff --git a/gb/gb-sh-conf b/gb/gb-sh-conf
index f1366fe..52bc79e 100644
--- a/gb/gb-sh-conf
+++ b/gb/gb-sh-conf
@@ -38,3 +38,4 @@ GB_AREPO_DIR="$TMPDIR/gb-arepo-$USER-$GB_REPO_NAME"
 	remote_host="build-$USER-$GB_REPO_NAME-$arch"
 
 : ${GB_ALLOW_SAME_NEVR=}
+: ${GB_OPTIMIZE_IDENTICAL_REBUILD=}
diff --git a/gb/gb-task-build-post b/gb/gb-task-build-post
new file mode 100755
index 0000000..e0af1ff
--- /dev/null
+++ b/gb/gb-task-build-post
@@ -0,0 +1,9 @@
+#!/bin/sh -efu
+
+. gb-sh-functions
+
+fail_if_task_abort_requested
+
+for i in $(src_nums); do
+	$0-i "$i"
+done
diff --git a/gb/gb-task-build-post-i b/gb/gb-task-build-post-i
new file mode 100755
index 0000000..104c294
--- /dev/null
+++ b/gb/gb-task-build-post-i
@@ -0,0 +1,114 @@
+#!/bin/sh -efu
+
+. gb-sh-functions
+. gb-sh-tmpdir
+
+[ -n "$GB_OPTIMIZE_IDENTICAL_REBUILD" ] ||
+	exit 0
+
+i="$1"; shift
+query_filename='%{name}-%{version}-%{release}.%{arch}.rpm'
+
+is_rebuild=
+st_is_rebuild()
+{
+	[ -z "$is_rebuild" ] ||
+		return 0
+
+	local arch="$1"; shift
+
+	srpm="$(find "build/$i/$arch/srpm/" \
+		-mindepth 1 -maxdepth 1 -type f \
+		-name '*.rpm' -printf '%f')"
+
+	[ -f "$GB_REPO_DIR/files/SRPMS/$srpm" ] ||
+		return 1
+
+	is_rebuild=1
+
+	return 0
+}
+
+mixed_arches=
+narchs=
+get_narchs()
+{
+	[ -z "$narchs" ] ||
+		return 0
+
+	narchs="$(find "build/$i/$arch/rpms/" \
+		-mindepth 1 -maxdepth 1 \
+		-type f -name '*.rpm' \
+		-execdir rpmquery --qf '%{arch}\n' -p '{}' '+' |
+		sort -u |wc -l)"
+
+	[ "$narchs" -eq 1 ] ||
+		mixed_arches=1
+}
+
+stamp_echo >&2 "#$i: Starting post build processing"
+
+first_arch=1
+for arch in $GB_ARCH; do
+	[ ! -s "build/$i/$arch/excluded" ] ||
+		continue
+
+	# exit if subtask is not a rebuild
+	st_is_rebuild "$arch" || {
+		stamp_echo >&2 "#$i: subtask is not a rebuild, skipping"
+		exit 0
+	}
+
+	get_narchs
+
+	find "build/$i/$arch/rpms/" -mindepth 1 -maxdepth 1 -type f -name '*.rpm' \
+		-execdir rpmquery --qf "$query_filename %{arch}\n" \
+		-p '{}' '+' >"$tmpdir/built.$arch.pkgs"
+
+	while read -r brpm barch; do
+		# debuginfo rpms are out of our interest
+		case "$brpm" in
+		*-debuginfo-*) continue ;;
+		esac
+
+		# skip non-first built noarch rpm in mixed arches subtask
+		[ -z "$mixed_arches" ] || [ -z "$first_arch" ] || [ "$barch" != "noarch" ] ||
+			continue
+
+		bid="$(rpmidentity -p "build/$i/$arch/rpms/$brpm")"
+		printf "%s %s %s\n" "$brpm" "$barch" "$bid" >>"$tmpdir/built.identity"
+		rid="$(rpmidentity -p "$GB_REPO_DIR/files/$barch/RPMS/$brpm")"
+		printf "%s %s %s\n" "$brpm" "$barch" "$rid" >>"$tmpdir/repo.identity"
+	done <"$tmpdir/built.$arch.pkgs"
+
+	first_arch=
+done
+
+sort -k 3 -o "$tmpdir/built.identity"{,}
+sort -k 3 -o "$tmpdir/repo.identity"{,}
+join -j 3 -v2 "$tmpdir/built.identity" "$tmpdir/repo.identity" |
+	cut -d' ' -f2 >"$tmpdir/nonidentical.arches"
+
+# Mixed noarch and arches build is a special case: we have to optimize either
+# all packages of all architectures or none of them
+if [ -n "$mixed_arches" -a -s "$tmpdir/nonidentical.arches" ]; then
+	echo >&2 "#$i: non-identical rebuild with mixed arches, skip optimizing"
+	exit 0
+fi
+
+for arch in $GB_ARCH; do
+	[ ! -s "build/$i/$arch/excluded" ] ||
+		continue
+
+	if grep -q "$arch" "$tmpdir/nonidentical.arches"; then
+		echo >&2 "[$arch] #$i rebuild is non-identical, skip optimizing"
+		continue
+	fi
+
+	echo >&2 "[$arch] #$i rebuild is identical, optimize packages"
+	while read brpm barch; do
+		cp -p "$GB_REPO_DIR/files/$barch/RPMS/$brpm" "build/$i/$arch/rpms/$brpm"
+		echo >&2 "[$arch] #$i $brpm is optimized"
+	done <"$tmpdir/built.$arch.pkgs"
+done
+
-- 
2.25.4



^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [devel] [PATCH] gb: add gb-task-build-post, optimize packages with identical rebuild
  2020-06-04 19:58 ` [devel] [PATCH] gb: add gb-task-build-post, optimize packages with identical rebuild Vladimir D. Seleznev
@ 2020-06-05 13:40   ` Alexey Tourbin
  2020-06-05 14:22     ` Vladimir D. Seleznev
  0 siblings, 1 reply; 14+ messages in thread
From: Alexey Tourbin @ 2020-06-05 13:40 UTC (permalink / raw)
  To: ALT Linux Team development discussions

On Thu, Jun 4, 2020 at 10:58 PM Vladimir D. Seleznev
<vseleznv@altlinux.org> wrote:
> Introduce task post-build processing. It finds subtasks with package
> rebuild and if the rebuilt packages identical to the same packages in
> the target repo it optimizes them.

It doesn't make much sense. When we rebuild a package without changing
the release, we expect something else in the package to change because
of the rebuild (e.g. a binary will be linked with a new library
version). If the package hasn't changed, it is an alarming condition
which indicates that some of the packager's assumptions were wrong
(e.g. the binary actually doesn't link with the library). So should we
really "optimize" this case? We might as well prohibit it! The
packager should be cognizant that some of his efforts aren't making
any difference. :)


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [devel] [PATCH] gb: add gb-task-build-post, optimize packages with identical rebuild
  2020-06-05 13:40   ` Alexey Tourbin
@ 2020-06-05 14:22     ` Vladimir D. Seleznev
  2020-06-06 13:42       ` Alexey Tourbin
  0 siblings, 1 reply; 14+ messages in thread
From: Vladimir D. Seleznev @ 2020-06-05 14:22 UTC (permalink / raw)
  To: ALT Linux Team development discussions

On Fri, Jun 05, 2020 at 04:40:52PM +0300, Alexey Tourbin wrote:
> On Thu, Jun 4, 2020 at 10:58 PM Vladimir D. Seleznev
> <vseleznv@altlinux.org> wrote:
> > Introduce task post-build processing. It finds subtasks with package
> > rebuild and if the rebuilt packages identical to the same packages in
> > the target repo it optimizes them.
> 
> It doesn't make much sense. When we rebuild a package without changing
> the release, we expect something else in the package to change because
> of the rebuild (e.g. a binary will be linked with a new library
> version). If the package hasn't changed, it is an alarming condition
> which indicates that some of the packager's assumptions were wrong
> (e.g. the binary actually doesn't link with the library). So should we
> really "optimize" this case? We might as well prohibit it!

By "prohibit" you mean make task build fail? I would say that it is
unnecessary. It'd produce additional difficulties for maintainers
without any profit.

> The packager should be cognizant that some of his efforts aren't
> making any difference. :)

But packager can know that this kind of effort aren't making any
difference because of build log warning. And this can be convenient in
case of mass rebuild, for example.

P.S. This suggestion seems like a joke to me :)

-- 
   WBR,
   Vladimir D. Seleznev


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [devel] [PATCH] gb: add gb-task-build-post, optimize packages with identical rebuild
  2020-06-05 14:22     ` Vladimir D. Seleznev
@ 2020-06-06 13:42       ` Alexey Tourbin
  2020-06-13 17:45         ` Dmitry V. Levin
  0 siblings, 1 reply; 14+ messages in thread
From: Alexey Tourbin @ 2020-06-06 13:42 UTC (permalink / raw)
  To: ALT Linux Team development discussions

On Fri, Jun 5, 2020 at 5:23 PM Vladimir D. Seleznev
<vseleznv@altlinux.org> wrote:
> > > Introduce task post-build processing. It finds subtasks with package
> > > rebuild and if the rebuilt packages identical to the same packages in
> > > the target repo it optimizes them.
> >
> > It doesn't make much sense. When we rebuild a package without changing
> > the release, we expect something else in the package to change because
> > of the rebuild (e.g. a binary will be linked with a new library
> > version). If the package hasn't changed, it is an alarming condition
> > which indicates that some of the packager's assumptions were wrong
> > (e.g. the binary actually doesn't link with the library). So should we
> > really "optimize" this case? We might as well prohibit it!
>
> By "prohibit" you mean make task build fail? I would say that it is
> unnecessary. It'd produce additional difficulties for maintainers
> without any profit.

The difficulties are all in the maintainers' heads.
There must be a valid reason for rebuilding a package.

> > The packager should be cognizant that some of his efforts aren't
> > making any difference. :)
>
> But packager can know that this kind of effort aren't making any
> difference because of build log warning. And this can be convenient in
> case of mass rebuild, for example.

So are we to permit the tasks that don't change the repo? Then you
should also optimize base/pkglist and the and release files, their
timestamps should not be clobbered. So that the end user immediately
sees there's no need to update from the repo, although a few tasks
have been committed.  Nice optimization this, eh?


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [devel] [PATCH] gb: add gb-task-build-post, optimize packages with identical rebuild
  2020-06-06 13:42       ` Alexey Tourbin
@ 2020-06-13 17:45         ` Dmitry V. Levin
  2020-06-13 18:50           ` Andrey Savchenko
  2020-06-13 19:32           ` Vladimir D. Seleznev
  0 siblings, 2 replies; 14+ messages in thread
From: Dmitry V. Levin @ 2020-06-13 17:45 UTC (permalink / raw)
  To: ALT Devel discussion list

On Sat, Jun 06, 2020 at 04:42:21PM +0300, Alexey Tourbin wrote:
> On Fri, Jun 5, 2020 at 5:23 PM Vladimir D. Seleznev wrote:
> > > > Introduce task post-build processing. It finds subtasks with package
> > > > rebuild and if the rebuilt packages identical to the same packages in
> > > > the target repo it optimizes them.
> > >
> > > It doesn't make much sense. When we rebuild a package without changing
> > > the release, we expect something else in the package to change because
> > > of the rebuild (e.g. a binary will be linked with a new library
> > > version). If the package hasn't changed, it is an alarming condition
> > > which indicates that some of the packager's assumptions were wrong
> > > (e.g. the binary actually doesn't link with the library). So should we
> > > really "optimize" this case? We might as well prohibit it!
> >
> > By "prohibit" you mean make task build fail? I would say that it is
> > unnecessary. It'd produce additional difficulties for maintainers
> > without any profit.
> 
> The difficulties are all in the maintainers' heads.
> There must be a valid reason for rebuilding a package.

Given that rebuilding a package costs so little for the maintainer,
we definitely should reject rebuilds that do not result to changed
packages.


-- 
ldv


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [devel] [PATCH] gb: add gb-task-build-post, optimize packages with identical rebuild
  2020-06-13 17:45         ` Dmitry V. Levin
@ 2020-06-13 18:50           ` Andrey Savchenko
  2020-06-13 20:48             ` Dmitry V. Levin
  2020-06-13 19:32           ` Vladimir D. Seleznev
  1 sibling, 1 reply; 14+ messages in thread
From: Andrey Savchenko @ 2020-06-13 18:50 UTC (permalink / raw)
  To: ALT Linux Team development discussions

[-- Attachment #1: Type: text/plain, Size: 1589 bytes --]

On Sat, 13 Jun 2020 20:45:19 +0300 Dmitry V. Levin wrote:
> On Sat, Jun 06, 2020 at 04:42:21PM +0300, Alexey Tourbin wrote:
> > On Fri, Jun 5, 2020 at 5:23 PM Vladimir D. Seleznev wrote:
> > > > > Introduce task post-build processing. It finds subtasks with package
> > > > > rebuild and if the rebuilt packages identical to the same packages in
> > > > > the target repo it optimizes them.
> > > >
> > > > It doesn't make much sense. When we rebuild a package without changing
> > > > the release, we expect something else in the package to change because
> > > > of the rebuild (e.g. a binary will be linked with a new library
> > > > version). If the package hasn't changed, it is an alarming condition
> > > > which indicates that some of the packager's assumptions were wrong
> > > > (e.g. the binary actually doesn't link with the library). So should we
> > > > really "optimize" this case? We might as well prohibit it!
> > >
> > > By "prohibit" you mean make task build fail? I would say that it is
> > > unnecessary. It'd produce additional difficulties for maintainers
> > > without any profit.
> > 
> > The difficulties are all in the maintainers' heads.
> > There must be a valid reason for rebuilding a package.
> 
> Given that rebuilding a package costs so little for the maintainer,
> we definitely should reject rebuilds that do not result to changed
> packages.

There are valid cases when it is impossible to determine beforehand
if rebuild will result in changed package or not, e.g. during boost
updates.

Best regards,
Andrew Savchenko

[-- Attachment #2: Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [devel] [PATCH] gb: add gb-task-build-post, optimize packages with identical rebuild
  2020-06-13 17:45         ` Dmitry V. Levin
  2020-06-13 18:50           ` Andrey Savchenko
@ 2020-06-13 19:32           ` Vladimir D. Seleznev
  2020-06-13 21:03             ` Dmitry V. Levin
  1 sibling, 1 reply; 14+ messages in thread
From: Vladimir D. Seleznev @ 2020-06-13 19:32 UTC (permalink / raw)
  To: ALT Linux Team development discussions

On Sat, Jun 13, 2020 at 08:45:19PM +0300, Dmitry V. Levin wrote:
> On Sat, Jun 06, 2020 at 04:42:21PM +0300, Alexey Tourbin wrote:
> > On Fri, Jun 5, 2020 at 5:23 PM Vladimir D. Seleznev wrote:
> > > > > Introduce task post-build processing. It finds subtasks with package
> > > > > rebuild and if the rebuilt packages identical to the same packages in
> > > > > the target repo it optimizes them.
> > > >
> > > > It doesn't make much sense. When we rebuild a package without changing
> > > > the release, we expect something else in the package to change because
> > > > of the rebuild (e.g. a binary will be linked with a new library
> > > > version). If the package hasn't changed, it is an alarming condition
> > > > which indicates that some of the packager's assumptions were wrong
> > > > (e.g. the binary actually doesn't link with the library). So should we
> > > > really "optimize" this case? We might as well prohibit it!
> > >
> > > By "prohibit" you mean make task build fail? I would say that it is
> > > unnecessary. It'd produce additional difficulties for maintainers
> > > without any profit.
> > 
> > The difficulties are all in the maintainers' heads.
> > There must be a valid reason for rebuilding a package.
> 
> Given that rebuilding a package costs so little for the maintainer,
> we definitely should reject rebuilds that do not result to changed
> packages.

So you think than tasks should fail if rebuild do not result to changed
packages. I argue with that. Packages optimization in that case is more
graceful solution and less disturbing. And imaging the case when you
have a big task with a lot of subtasks caused by brand new Python
update.  Some of these subtasks may be unchanged after rebuild and I
don't see why they should be failed. But if they will, this will
produce too much needless work for the poor maintainer.

Now subtasks do not fail if somebody just rebuilds packages if their
builds aren't broken, and if their results unchange packages, we have
wasted storage space. If packages will be optimized, this storage space
will be saved.

But I like the idea to optimize repo updates for optimized subtasks. And
I think there will be no harm if task will fail if all of its subtasks
will have unchanged packages after rebuild.

-- 
   WBR,
   Vladimir D. Seleznev


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [devel] [PATCH] gb: add gb-task-build-post, optimize packages with identical rebuild
  2020-06-13 18:50           ` Andrey Savchenko
@ 2020-06-13 20:48             ` Dmitry V. Levin
  2020-06-13 20:57               ` Andrey Savchenko
  0 siblings, 1 reply; 14+ messages in thread
From: Dmitry V. Levin @ 2020-06-13 20:48 UTC (permalink / raw)
  To: ALT Devel discussion list

On Sat, Jun 13, 2020 at 09:50:37PM +0300, Andrey Savchenko wrote:
> On Sat, 13 Jun 2020 20:45:19 +0300 Dmitry V. Levin wrote:
> > On Sat, Jun 06, 2020 at 04:42:21PM +0300, Alexey Tourbin wrote:
> > > On Fri, Jun 5, 2020 at 5:23 PM Vladimir D. Seleznev wrote:
> > > > > > Introduce task post-build processing. It finds subtasks with package
> > > > > > rebuild and if the rebuilt packages identical to the same packages in
> > > > > > the target repo it optimizes them.
> > > > >
> > > > > It doesn't make much sense. When we rebuild a package without changing
> > > > > the release, we expect something else in the package to change because
> > > > > of the rebuild (e.g. a binary will be linked with a new library
> > > > > version). If the package hasn't changed, it is an alarming condition
> > > > > which indicates that some of the packager's assumptions were wrong
> > > > > (e.g. the binary actually doesn't link with the library). So should we
> > > > > really "optimize" this case? We might as well prohibit it!
> > > >
> > > > By "prohibit" you mean make task build fail? I would say that it is
> > > > unnecessary. It'd produce additional difficulties for maintainers
> > > > without any profit.
> > > 
> > > The difficulties are all in the maintainers' heads.
> > > There must be a valid reason for rebuilding a package.
> > 
> > Given that rebuilding a package costs so little for the maintainer,
> > we definitely should reject rebuilds that do not result to changed
> > packages.
> 
> There are valid cases when it is impossible to determine beforehand
> if rebuild will result in changed package or not, e.g. during boost
> updates.

So what?  Failed build is not a crime, let it fail.


-- 
ldv


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [devel] [PATCH] gb: add gb-task-build-post, optimize packages with identical rebuild
  2020-06-13 20:48             ` Dmitry V. Levin
@ 2020-06-13 20:57               ` Andrey Savchenko
  2020-06-13 21:10                 ` Dmitry V. Levin
  0 siblings, 1 reply; 14+ messages in thread
From: Andrey Savchenko @ 2020-06-13 20:57 UTC (permalink / raw)
  To: ALT Linux Team development discussions

[-- Attachment #1: Type: text/plain, Size: 2027 bytes --]

On Sat, 13 Jun 2020 23:48:38 +0300 Dmitry V. Levin wrote:
> On Sat, Jun 13, 2020 at 09:50:37PM +0300, Andrey Savchenko wrote:
> > On Sat, 13 Jun 2020 20:45:19 +0300 Dmitry V. Levin wrote:
> > > On Sat, Jun 06, 2020 at 04:42:21PM +0300, Alexey Tourbin wrote:
> > > > On Fri, Jun 5, 2020 at 5:23 PM Vladimir D. Seleznev wrote:
> > > > > > > Introduce task post-build processing. It finds subtasks with package
> > > > > > > rebuild and if the rebuilt packages identical to the same packages in
> > > > > > > the target repo it optimizes them.
> > > > > >
> > > > > > It doesn't make much sense. When we rebuild a package without changing
> > > > > > the release, we expect something else in the package to change because
> > > > > > of the rebuild (e.g. a binary will be linked with a new library
> > > > > > version). If the package hasn't changed, it is an alarming condition
> > > > > > which indicates that some of the packager's assumptions were wrong
> > > > > > (e.g. the binary actually doesn't link with the library). So should we
> > > > > > really "optimize" this case? We might as well prohibit it!
> > > > >
> > > > > By "prohibit" you mean make task build fail? I would say that it is
> > > > > unnecessary. It'd produce additional difficulties for maintainers
> > > > > without any profit.
> > > > 
> > > > The difficulties are all in the maintainers' heads.
> > > > There must be a valid reason for rebuilding a package.
> > > 
> > > Given that rebuilding a package costs so little for the maintainer,
> > > we definitely should reject rebuilds that do not result to changed
> > > packages.
> > 
> > There are valid cases when it is impossible to determine beforehand
> > if rebuild will result in changed package or not, e.g. during boost
> > updates.
> 
> So what?  Failed build is not a crime, let it fail.

Intentionally wasted maintainer's time is a huge crime. Let a
machine work instead of a human, this way we can be more productive.

Best regards,
Andrew Savchenko

[-- Attachment #2: Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [devel] [PATCH] gb: add gb-task-build-post, optimize packages with identical rebuild
  2020-06-13 19:32           ` Vladimir D. Seleznev
@ 2020-06-13 21:03             ` Dmitry V. Levin
  2020-06-13 22:03               ` Vladimir D. Seleznev
  0 siblings, 1 reply; 14+ messages in thread
From: Dmitry V. Levin @ 2020-06-13 21:03 UTC (permalink / raw)
  To: ALT Devel discussion list

On Sat, Jun 13, 2020 at 10:32:13PM +0300, Vladimir D. Seleznev wrote:
> On Sat, Jun 13, 2020 at 08:45:19PM +0300, Dmitry V. Levin wrote:
> > On Sat, Jun 06, 2020 at 04:42:21PM +0300, Alexey Tourbin wrote:
> > > On Fri, Jun 5, 2020 at 5:23 PM Vladimir D. Seleznev wrote:
> > > > > > Introduce task post-build processing. It finds subtasks with package
> > > > > > rebuild and if the rebuilt packages identical to the same packages in
> > > > > > the target repo it optimizes them.
> > > > >
> > > > > It doesn't make much sense. When we rebuild a package without changing
> > > > > the release, we expect something else in the package to change because
> > > > > of the rebuild (e.g. a binary will be linked with a new library
> > > > > version). If the package hasn't changed, it is an alarming condition
> > > > > which indicates that some of the packager's assumptions were wrong
> > > > > (e.g. the binary actually doesn't link with the library). So should we
> > > > > really "optimize" this case? We might as well prohibit it!
> > > >
> > > > By "prohibit" you mean make task build fail? I would say that it is
> > > > unnecessary. It'd produce additional difficulties for maintainers
> > > > without any profit.
> > > 
> > > The difficulties are all in the maintainers' heads.
> > > There must be a valid reason for rebuilding a package.
> > 
> > Given that rebuilding a package costs so little for the maintainer,
> > we definitely should reject rebuilds that do not result to changed
> > packages.
> 
> So you think than tasks should fail if rebuild do not result to changed
> packages. I argue with that. Packages optimization in that case is more
> graceful solution and less disturbing. And imagine the case when you
> have a big task with a lot of subtasks caused by brand new Python
> update.  Some of these subtasks may be unchanged after rebuild and I
> don't see why they should be failed. But if they will, this will
> produce too much needless work for the poor maintainer.

No, I don't buy these arguments.  If a subtask produced a non-changer,
just remove it.


-- 
ldv


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [devel] [PATCH] gb: add gb-task-build-post, optimize packages with identical rebuild
  2020-06-13 20:57               ` Andrey Savchenko
@ 2020-06-13 21:10                 ` Dmitry V. Levin
  2020-06-13 22:30                   ` Andrey Savchenko
  0 siblings, 1 reply; 14+ messages in thread
From: Dmitry V. Levin @ 2020-06-13 21:10 UTC (permalink / raw)
  To: ALT Devel discussion list

On Sat, Jun 13, 2020 at 11:57:08PM +0300, Andrey Savchenko wrote:
> On Sat, 13 Jun 2020 23:48:38 +0300 Dmitry V. Levin wrote:
> > On Sat, Jun 13, 2020 at 09:50:37PM +0300, Andrey Savchenko wrote:
> > > On Sat, 13 Jun 2020 20:45:19 +0300 Dmitry V. Levin wrote:
> > > > On Sat, Jun 06, 2020 at 04:42:21PM +0300, Alexey Tourbin wrote:
> > > > > On Fri, Jun 5, 2020 at 5:23 PM Vladimir D. Seleznev wrote:
> > > > > > > > Introduce task post-build processing. It finds subtasks with package
> > > > > > > > rebuild and if the rebuilt packages identical to the same packages in
> > > > > > > > the target repo it optimizes them.
> > > > > > >
> > > > > > > It doesn't make much sense. When we rebuild a package without changing
> > > > > > > the release, we expect something else in the package to change because
> > > > > > > of the rebuild (e.g. a binary will be linked with a new library
> > > > > > > version). If the package hasn't changed, it is an alarming condition
> > > > > > > which indicates that some of the packager's assumptions were wrong
> > > > > > > (e.g. the binary actually doesn't link with the library). So should we
> > > > > > > really "optimize" this case? We might as well prohibit it!
> > > > > >
> > > > > > By "prohibit" you mean make task build fail? I would say that it is
> > > > > > unnecessary. It'd produce additional difficulties for maintainers
> > > > > > without any profit.
> > > > > 
> > > > > The difficulties are all in the maintainers' heads.
> > > > > There must be a valid reason for rebuilding a package.
> > > > 
> > > > Given that rebuilding a package costs so little for the maintainer,
> > > > we definitely should reject rebuilds that do not result to changed
> > > > packages.
> > > 
> > > There are valid cases when it is impossible to determine beforehand
> > > if rebuild will result in changed package or not, e.g. during boost
> > > updates.
> > 
> > So what?  Failed build is not a crime, let it fail.
> 
> Intentionally wasted maintainer's time is a huge crime. Let a
> machine work instead of a human, this way we can be more productive.

I suppose packages are built for a reason, so every unchanged build
must be a mistake, and I read this as an argument to fail such builds.


-- 
ldv


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [devel] [PATCH] gb: add gb-task-build-post, optimize packages with identical rebuild
  2020-06-13 21:03             ` Dmitry V. Levin
@ 2020-06-13 22:03               ` Vladimir D. Seleznev
  0 siblings, 0 replies; 14+ messages in thread
From: Vladimir D. Seleznev @ 2020-06-13 22:03 UTC (permalink / raw)
  To: ALT Linux Team development discussions

On Sun, Jun 14, 2020 at 12:03:40AM +0300, Dmitry V. Levin wrote:
> On Sat, Jun 13, 2020 at 10:32:13PM +0300, Vladimir D. Seleznev wrote:
> > On Sat, Jun 13, 2020 at 08:45:19PM +0300, Dmitry V. Levin wrote:
> > > On Sat, Jun 06, 2020 at 04:42:21PM +0300, Alexey Tourbin wrote:
> > > > On Fri, Jun 5, 2020 at 5:23 PM Vladimir D. Seleznev wrote:
> > > > > > > Introduce task post-build processing. It finds subtasks with package
> > > > > > > rebuild and if the rebuilt packages identical to the same packages in
> > > > > > > the target repo it optimizes them.
> > > > > >
> > > > > > It doesn't make much sense. When we rebuild a package without changing
> > > > > > the release, we expect something else in the package to change because
> > > > > > of the rebuild (e.g. a binary will be linked with a new library
> > > > > > version). If the package hasn't changed, it is an alarming condition
> > > > > > which indicates that some of the packager's assumptions were wrong
> > > > > > (e.g. the binary actually doesn't link with the library). So should we
> > > > > > really "optimize" this case? We might as well prohibit it!
> > > > >
> > > > > By "prohibit" you mean make task build fail? I would say that it is
> > > > > unnecessary. It'd produce additional difficulties for maintainers
> > > > > without any profit.
> > > > 
> > > > The difficulties are all in the maintainers' heads.
> > > > There must be a valid reason for rebuilding a package.
> > > 
> > > Given that rebuilding a package costs so little for the maintainer,
> > > we definitely should reject rebuilds that do not result to changed
> > > packages.
> > 
> > So you think than tasks should fail if rebuild do not result to changed
> > packages. I argue with that. Packages optimization in that case is more
> > graceful solution and less disturbing. And imagine the case when you
> > have a big task with a lot of subtasks caused by brand new Python
> > update.  Some of these subtasks may be unchanged after rebuild and I
> > don't see why they should be failed. But if they will, this will
> > produce too much needless work for the poor maintainer.
> 
> No, I don't buy these arguments.  If a subtask produced a non-changer,
> just remove it.

Ok, that's fine with me, if this remove will be done automatically. But
theoretically there can be cases where in non-mixed arches you have
non-changed rebuilt packages on some architectures, but changed packages
on anoter. I would prefer to optimize non-changed than to pretend that
this whole rebuild produced changed packages.

Non-mixed arches build means either all the built packages are
arch-specific, or they all are noarch.

-- 
   WBR,
   Vladimir D. Seleznev


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [devel] [PATCH] gb: add gb-task-build-post, optimize packages with identical rebuild
  2020-06-13 21:10                 ` Dmitry V. Levin
@ 2020-06-13 22:30                   ` Andrey Savchenko
  0 siblings, 0 replies; 14+ messages in thread
From: Andrey Savchenko @ 2020-06-13 22:30 UTC (permalink / raw)
  To: ALT Linux Team development discussions

[-- Attachment #1: Type: text/plain, Size: 2603 bytes --]

On Sun, 14 Jun 2020 00:10:49 +0300 Dmitry V. Levin wrote:
> On Sat, Jun 13, 2020 at 11:57:08PM +0300, Andrey Savchenko wrote:
> > On Sat, 13 Jun 2020 23:48:38 +0300 Dmitry V. Levin wrote:
> > > On Sat, Jun 13, 2020 at 09:50:37PM +0300, Andrey Savchenko wrote:
> > > > On Sat, 13 Jun 2020 20:45:19 +0300 Dmitry V. Levin wrote:
> > > > > On Sat, Jun 06, 2020 at 04:42:21PM +0300, Alexey Tourbin wrote:
> > > > > > On Fri, Jun 5, 2020 at 5:23 PM Vladimir D. Seleznev wrote:
> > > > > > > > > Introduce task post-build processing. It finds subtasks with package
> > > > > > > > > rebuild and if the rebuilt packages identical to the same packages in
> > > > > > > > > the target repo it optimizes them.
> > > > > > > >
> > > > > > > > It doesn't make much sense. When we rebuild a package without changing
> > > > > > > > the release, we expect something else in the package to change because
> > > > > > > > of the rebuild (e.g. a binary will be linked with a new library
> > > > > > > > version). If the package hasn't changed, it is an alarming condition
> > > > > > > > which indicates that some of the packager's assumptions were wrong
> > > > > > > > (e.g. the binary actually doesn't link with the library). So should we
> > > > > > > > really "optimize" this case? We might as well prohibit it!
> > > > > > >
> > > > > > > By "prohibit" you mean make task build fail? I would say that it is
> > > > > > > unnecessary. It'd produce additional difficulties for maintainers
> > > > > > > without any profit.
> > > > > > 
> > > > > > The difficulties are all in the maintainers' heads.
> > > > > > There must be a valid reason for rebuilding a package.
> > > > > 
> > > > > Given that rebuilding a package costs so little for the maintainer,
> > > > > we definitely should reject rebuilds that do not result to changed
> > > > > packages.
> > > > 
> > > > There are valid cases when it is impossible to determine beforehand
> > > > if rebuild will result in changed package or not, e.g. during boost
> > > > updates.
> > > 
> > > So what?  Failed build is not a crime, let it fail.
> > 
> > Intentionally wasted maintainer's time is a huge crime. Let a
> > machine work instead of a human, this way we can be more productive.
> 
> I suppose packages are built for a reason, so every unchanged build
> must be a mistake, and I read this as an argument to fail such builds.

Filter them out automatically if you can, keep them if you can't.
But wasting human time for such type of work is nonsense and should
not be allowed.

Best regards,
Andrew Savchenko

[-- Attachment #2: Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2020-06-13 22:30 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-06-04 19:58 [devel] Optimize rebuilt subtask packages identical to the packages in the target repo Vladimir D. Seleznev
2020-06-04 19:58 ` [devel] [PATCH] gb: add gb-task-build-post, optimize packages with identical rebuild Vladimir D. Seleznev
2020-06-05 13:40   ` Alexey Tourbin
2020-06-05 14:22     ` Vladimir D. Seleznev
2020-06-06 13:42       ` Alexey Tourbin
2020-06-13 17:45         ` Dmitry V. Levin
2020-06-13 18:50           ` Andrey Savchenko
2020-06-13 20:48             ` Dmitry V. Levin
2020-06-13 20:57               ` Andrey Savchenko
2020-06-13 21:10                 ` Dmitry V. Levin
2020-06-13 22:30                   ` Andrey Savchenko
2020-06-13 19:32           ` Vladimir D. Seleznev
2020-06-13 21:03             ` Dmitry V. Levin
2020-06-13 22:03               ` Vladimir D. Seleznev

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