#1738 Fix 'failable' handling for kiwibuild phase
Merged 10 months ago by lsedlar. Opened 10 months ago by adamwill.
adamwill/pungi kiwibuild-failable  into  master

file modified
+11 -10
@@ -84,11 +84,9 @@ 

  

                  repo = self._get_repo(image_conf, variant)

  

-                 can_fail = image_conf.pop("failable", [])

-                 if can_fail == ["*"]:

-                     can_fail = image_conf["arches"]

-                 if can_fail:

-                     can_fail = sorted(can_fail)

+                 failable_arches = image_conf.pop("failable", [])

+                 if failable_arches == ["*"]:

+                     failable_arches = image_conf["arches"]

  

                  self.pool.add(RunKiwiBuildThread(self.pool))

                  self.pool.queue_put(
@@ -100,7 +98,7 @@ 

                          release,

                          target,

                          repo,

-                         can_fail,

+                         failable_arches,

                      )

                  )

  
@@ -117,13 +115,15 @@ 

              release,

              target,

              repo,

-             can_fail,

+             failable_arches,

          ) = item

-         self.can_fail = can_fail

+         self.failable_arches = failable_arches

+         # the Koji task as a whole can only fail if *all* arches are failable

+         can_task_fail = set(failable_arches).issuperset(set(arches))

          self.num = num

          with util.failable(

              compose,

-             can_fail,

+             can_task_fail,

              variant,

              "*",

              "kiwibuild",
@@ -145,7 +145,8 @@ 

              profile=config["kiwi_profile"],

              release=release,

              repos=repo,

-             optional_arches=self.can_fail,

+             # this ensures the task won't fail if only failable arches fail

+             optional_arches=self.failable_arches,

          )

  

          koji.save_task_id(task_id)

The mechanisms here are a bit subtle and the kiwibuild phase
didn't quite get them right. The arg passed to util.failable
is supposed to be a boolean, but kiwibuild was passing it the
list of failable arches (which will always evaluate True).

How this is meant to work is that we only make the Koji task
as a whole
failable (by passing True to util.failable) if
all the arches in it are failable. If any arch in the task
is not failable, the task should not be failable.

We allow a subset of arches to fail by passing the Koji task a
list of optional_arches, later. If an arch is 'optional', that
arch failing won't cause the Koji task itself to be considered
failed.

This commit fixes the logic (I hope), renames all the variables
and adds a couple of comments to make it clearer what's going on,
and does a bit of making the code simpler.

Signed-off-by: Adam Williamson awilliam@redhat.com

you can compare the livemedia and image_build phases to get an idea of how this is meant to work. they both do more or less the same as this (in slightly different style, I of course think my style is the best :>)

rebased onto 0d306d4

10 months ago

dropped the sort entirely (we don't need it now since we use a set comparison)

Yup, this looks better.

The original code was from osbuild.py, which doesn't support this level of granularity (it's all or nothing).

Pull-Request has been merged by lsedlar

10 months ago

yes, sorry for missing that!

Metadata