launchpad-reviewers team mailing list archive
-
launchpad-reviewers team
-
Mailing list archive
-
Message #18565
Re: [Merge] lp:~wgrant/launchpad/processor-nonvirt into lp:launchpad
Review: Approve
Just a couple of nits, but looks fine, thanks.
Diff comments:
> === modified file 'lib/lp/buildmaster/interfaces/processor.py'
> --- lib/lp/buildmaster/interfaces/processor.py 2015-05-14 08:57:55 +0000
> +++ lib/lp/buildmaster/interfaces/processor.py 2015-05-14 08:57:55 +0000
> @@ -71,11 +71,20 @@
> "Whether this processor is enabled on archives by default.")),
> as_of='devel', readonly=True)
> supports_virtualized = exported(
> - Bool(title=_("Whether this processor supports virtualized builds.")),
> + Bool(
> + title=_("Supports virtualized builds"),
> + description=_(
> + "Whether the processor has virtualized builders. If not, "
> + "archives that require virtualized builds won't build on "
> + "this processor.")),
> as_of='devel', readonly=True)
> supports_nonvirtualized = exported(
> - Bool(title=_(
> - "Whether this processor supports non-virtualized builds.")),
> + Bool(
> + title=_("Supports non-virtualized builds"),
> + description=_(
> + "Whether the processor has non-virtualized builders. If not, "
> + "all builds for this processor will build on virtualized "
> + "builders, even for non-virtualized archives.")),
> as_of='devel', readonly=True)
>
>
>
> === modified file 'lib/lp/buildmaster/model/processor.py'
> --- lib/lp/buildmaster/model/processor.py 2015-05-14 08:57:55 +0000
> +++ lib/lp/buildmaster/model/processor.py 2015-05-14 08:57:55 +0000
> @@ -28,8 +28,18 @@
> title = StringCol(dbName='title', notNull=True)
> description = StringCol(dbName='description', notNull=True)
> restricted = Bool(allow_none=False, default=False)
> +
> + # When setting this to true you may want to add missing
> + # ArchiveArches.
> build_by_default = Bool(allow_none=False, default=False)
> +
> + # This controls build creation, so you may want to create or cancel
> + # some builds after changing it on an existing processor.
> supports_virtualized = Bool(allow_none=False, default=False)
> +
> + # Queued and failed builds' BuildQueue.virtualized and
> + # BinaryPackageBuild.virtualized may need tweaking if this is
> + # changed on an existing processor.
> supports_nonvirtualized = Bool(allow_none=False, default=True)
>
> def __repr__(self):
>
> === modified file 'lib/lp/buildmaster/tests/test_buildqueue.py'
> --- lib/lp/buildmaster/tests/test_buildqueue.py 2014-06-11 08:29:40 +0000
> +++ lib/lp/buildmaster/tests/test_buildqueue.py 2015-05-14 08:57:55 +0000
> @@ -196,7 +196,7 @@
>
> # Make sure the 'virtualized' properties are the same.
> self.assertEqual(
> - bq.virtualized, build.is_virtualized,
> + bq.virtualized, build.virtualized,
> "The 'virtualized' property deviates.")
>
>
>
> === modified file 'lib/lp/buildmaster/tests/test_queuedepth.py'
> --- lib/lp/buildmaster/tests/test_queuedepth.py 2015-04-20 09:48:57 +0000
> +++ lib/lp/buildmaster/tests/test_queuedepth.py 2015-05-14 08:57:55 +0000
> @@ -391,7 +391,7 @@
> build = self.builds[0]
> # The build in question is an x86/native one.
> self.assertEqual(self.x86_proc.id, build.processor.id)
> - self.assertEqual(False, build.is_virtualized)
> + self.assertEqual(False, build.virtualized)
>
> # To test this non-interface method, we need to remove the
> # security proxy.
> @@ -403,36 +403,36 @@
> "The number of native x86 builders is wrong")
> # Initially all 4 builders are free.
> free_count = get_free_builders_count(
> - build.processor, build.is_virtualized)
> + build.processor, build.virtualized)
> self.assertEqual(4, free_count)
> # Once we assign a build to one of them we should see the free
> # builders count drop by one.
> assign_to_builder(self, 'postgres', 1)
> free_count = get_free_builders_count(
> - build.processor, build.is_virtualized)
> + build.processor, build.virtualized)
> self.assertEqual(3, free_count)
> # When we assign another build to one of them we should see the free
> # builders count drop by one again.
> assign_to_builder(self, 'gcc', 2)
> free_count = get_free_builders_count(
> - build.processor, build.is_virtualized)
> + build.processor, build.virtualized)
> self.assertEqual(2, free_count)
> # Let's use up another builder.
> assign_to_builder(self, 'apg', 3)
> free_count = get_free_builders_count(
> - build.processor, build.is_virtualized)
> + build.processor, build.virtualized)
> self.assertEqual(1, free_count)
> # And now for the last one.
> assign_to_builder(self, 'flex', 4)
> free_count = get_free_builders_count(
> - build.processor, build.is_virtualized)
> + build.processor, build.virtualized)
> self.assertEqual(0, free_count)
> # If we reset the 'flex' build the builder that was assigned to it
> # will be free again.
> build, bq = find_job(self, 'flex')
> bq.reset()
> free_count = get_free_builders_count(
> - build.processor, build.is_virtualized)
> + build.processor, build.virtualized)
> self.assertEqual(1, free_count)
>
>
>
> === modified file 'lib/lp/code/interfaces/sourcepackagerecipebuild.py'
> --- lib/lp/code/interfaces/sourcepackagerecipebuild.py 2013-11-21 03:42:38 +0000
> +++ lib/lp/code/interfaces/sourcepackagerecipebuild.py 2015-05-14 08:57:55 +0000
> @@ -67,8 +67,6 @@
> ISourcePackageRelease, title=_("The produced source package release"),
> readonly=True)
>
> - is_virtualized = Bool(title=_('If True, this build is virtualized.'))
> -
> def getFileByName(filename):
> """Return the file under +files with specified name."""
>
>
> === modified file 'lib/lp/code/model/recipebuilder.py'
> --- lib/lp/code/model/recipebuilder.py 2014-06-26 11:35:59 +0000
> +++ lib/lp/code/model/recipebuilder.py 2015-05-14 08:57:55 +0000
> @@ -117,7 +117,7 @@
> distroseries state.
> """
> build = self.build
> - assert not (not self._builder.virtualized and build.is_virtualized), (
> + assert self._builder.virtualized, (
> "Attempt to build virtual item on a non-virtual builder.")
>
> # This should already have been checked earlier, but just check again
>
> === modified file 'lib/lp/code/model/sourcepackagerecipebuild.py'
> --- lib/lp/code/model/sourcepackagerecipebuild.py 2015-04-30 01:45:30 +0000
> +++ lib/lp/code/model/sourcepackagerecipebuild.py 2015-05-14 08:57:55 +0000
> @@ -118,8 +118,6 @@
> """See `IPackageBuild`."""
> return self.distroseries.distribution
>
> - is_virtualized = True
> -
> recipe_id = Int(name='recipe')
> recipe = Reference(recipe_id, 'SourcePackageRecipe.id')
>
>
> === modified file 'lib/lp/soyuz/interfaces/binarypackagebuild.py'
> --- lib/lp/soyuz/interfaces/binarypackagebuild.py 2015-05-12 01:13:19 +0000
> +++ lib/lp/soyuz/interfaces/binarypackagebuild.py 2015-05-14 08:57:55 +0000
> @@ -134,9 +134,6 @@
> description=_(
> "Whether or not this build record can be cancelled.")))
>
> - is_virtualized = Attribute(
> - "Whether or not this build requires a virtual build host or not.")
> -
> upload_changesfile = Attribute(
> "The `LibraryFileAlias` object containing the changes file which "
> "was originally uploaded with the results of this build. It's "
>
> === modified file 'lib/lp/soyuz/model/binarypackagebuild.py'
> --- lib/lp/soyuz/model/binarypackagebuild.py 2015-05-14 08:57:55 +0000
> +++ lib/lp/soyuz/model/binarypackagebuild.py 2015-05-14 08:57:55 +0000
> @@ -297,9 +297,9 @@
> return DecoratedResultSet(results, itemgetter(0)).one()
>
> @property
> - def is_virtualized(self):
> + def can_be_nonvirtualized(self):
> """See `IBuild`"""
> - return self.archive.require_virtualized
> + return not self.archive.require_virtualized
You don't use this new method name anywhere, and it isn't in the interface, so perhaps you can delete it entirely.
>
> @property
> def title(self):
> @@ -918,14 +918,17 @@
> build_farm_job = getUtility(IBuildFarmJobSource).new(
> BinaryPackageBuild.job_type, status, date_created, builder,
> archive)
> + processor = distro_arch_series.processor
> + virtualized = (
> + archive.require_virtualized
> + or not processor.supports_nonvirtualized)
> return BinaryPackageBuild(
> build_farm_job=build_farm_job,
> distro_arch_series=distro_arch_series,
> source_package_release=source_package_release,
> archive=archive, pocket=pocket, arch_indep=arch_indep,
> - status=status, processor=distro_arch_series.processor,
> - virtualized=archive.require_virtualized, builder=builder,
> - is_distro_archive=archive.is_main,
> + status=status, processor=processor, virtualized=virtualized,
> + builder=builder, is_distro_archive=archive.is_main,
> distribution=distro_arch_series.distroseries.distribution,
> distro_series=distro_arch_series.distroseries,
> source_package_name=source_package_release.sourcepackagename,
>
> === modified file 'lib/lp/soyuz/model/binarypackagebuildbehaviour.py'
> --- lib/lp/soyuz/model/binarypackagebuildbehaviour.py 2014-11-03 07:19:10 +0000
> +++ lib/lp/soyuz/model/binarypackagebuildbehaviour.py 2015-05-14 08:57:55 +0000
> @@ -97,9 +97,9 @@
> distroseries state.
> """
> build = self.build
> - if build.is_virtualized and not self._builder.virtualized:
> + if build.archive.require_virtualized and not self._builder.virtualized:
> raise AssertionError(
> - "Attempt to build virtual item on a non-virtual builder.")
> + "Attempt to build virtual archive on a non-virtual builder.")
>
> # Assert that we are not silently building SECURITY jobs.
> # See findBuildCandidates. Once we start building SECURITY
>
> === modified file 'lib/lp/soyuz/model/livefsbuild.py'
> --- lib/lp/soyuz/model/livefsbuild.py 2014-06-17 11:01:51 +0000
> +++ lib/lp/soyuz/model/livefsbuild.py 2015-05-14 08:57:55 +0000
> @@ -349,7 +349,8 @@
> livefsbuild = LiveFSBuild(
> build_farm_job, requester, livefs, archive, distro_arch_series,
> pocket, distro_arch_series.processor,
> - livefs.require_virtualized or archive.require_virtualized,
> + not distro_arch_series.processor.supports_nonvirtualized
> + or livefs.require_virtualized or archive.require_virtualized,
> unique_key, metadata_override, date_created)
> store.add(livefsbuild)
> return livefsbuild
>
> === modified file 'lib/lp/soyuz/tests/test_binarypackagebuild.py'
> --- lib/lp/soyuz/tests/test_binarypackagebuild.py 2015-05-12 01:13:19 +0000
> +++ lib/lp/soyuz/tests/test_binarypackagebuild.py 2015-05-14 08:57:55 +0000
> @@ -78,7 +78,7 @@
> self.assertEqual(
> self.build.build_farm_job, removeSecurityProxy(bq)._build_farm_job)
> self.assertEqual(self.build, bq.specific_build)
> - self.assertEqual(self.build.is_virtualized, bq.virtualized)
> + self.assertEqual(self.build.virtualized, bq.virtualized)
> self.assertIsNotNone(bq.processor)
> self.assertEqual(bq, self.build.buildqueue_record)
>
>
> === modified file 'lib/lp/soyuz/tests/test_binarypackagebuildbehaviour.py'
> --- lib/lp/soyuz/tests/test_binarypackagebuildbehaviour.py 2014-11-03 07:19:10 +0000
> +++ lib/lp/soyuz/tests/test_binarypackagebuildbehaviour.py 2015-05-14 08:57:55 +0000
> @@ -317,7 +317,7 @@
> e = self.assertRaises(
> AssertionError, behaviour.verifyBuildRequest, BufferLogger())
> self.assertEqual(
> - 'Attempt to build virtual item on a non-virtual builder.',
> + 'Attempt to build virtual archive on a non-virtual builder.',
> str(e))
>
> def test_verifyBuildRequest_no_chroot(self):
>
> === modified file 'lib/lp/soyuz/tests/test_build.py'
> --- lib/lp/soyuz/tests/test_build.py 2015-05-14 08:57:55 +0000
> +++ lib/lp/soyuz/tests/test_build.py 2015-05-14 08:57:55 +0000
> @@ -87,7 +87,7 @@
> self.assertEquals(self.das, build.distro_arch_series)
> self.assertEquals(PackagePublishingPocket.RELEASE, build.pocket)
> self.assertEquals(self.das.architecturetag, build.arch_tag)
> - self.assertTrue(build.is_virtualized)
> + self.assertTrue(build.virtualized)
> self.assertEquals(
> '%s - %s' % (spph.source_package_name,
> spph.source_package_version),
>
> === modified file 'lib/lp/soyuz/tests/test_build_set.py'
> --- lib/lp/soyuz/tests/test_build_set.py 2015-05-14 08:57:55 +0000
> +++ lib/lp/soyuz/tests/test_build_set.py 2015-05-14 08:57:55 +0000
> @@ -92,6 +92,36 @@
> b.buildqueue_record.destroySelf()
> self.builds += builds
>
> + def test_new_virtualization(self):
I dislike describing things as "new" when they're going to stay around for years and will eventually not be new. (I once lived in a part of college called "New Court" which was built in 1825.)
> + # Builds are virtualized unless Processor.support_nonvirtualized
> + # and not Archive.require_virtualized.
> +
> + def make(proc_virt, proc_nonvirt, archive_virt):
> + proc = self.factory.makeProcessor(
> + supports_nonvirtualized=proc_nonvirt,
> + supports_virtualized=proc_virt)
> + das = self.factory.makeDistroArchSeries(processor=proc)
> + archive = self.factory.makeArchive(
> + distribution=das.distroseries.distribution,
> + virtualized=archive_virt)
> + bpb = getUtility(IBinaryPackageBuildSet).new(
> + self.factory.makeSourcePackageRelease(),
> + archive, das, PackagePublishingPocket.RELEASE)
> + self.assertEqual(proc, bpb.processor)
> + return bpb
> +
> + vvvbpb = make(proc_virt=True, proc_nonvirt=True, archive_virt=True)
> + self.assertTrue(vvvbpb.virtualized)
> +
> + vvnbpb = make(proc_virt=True, proc_nonvirt=True, archive_virt=False)
> + self.assertFalse(vvnbpb.virtualized)
> +
> + vnvbpb = make(proc_virt=True, proc_nonvirt=False, archive_virt=True)
> + self.assertTrue(vnvbpb.virtualized)
> +
> + vnvbpb = make(proc_virt=True, proc_nonvirt=False, archive_virt=False)
> + self.assertTrue(vnvbpb.virtualized)
> +
> def test_get_for_distro_distribution(self):
> # Test fetching builds for a distro's main archives
> self.setUpBuilds()
>
> === modified file 'lib/lp/soyuz/tests/test_livefs.py'
> --- lib/lp/soyuz/tests/test_livefs.py 2015-05-07 10:52:10 +0000
> +++ lib/lp/soyuz/tests/test_livefs.py 2015-05-14 08:57:55 +0000
> @@ -193,15 +193,21 @@
> PackagePublishingPocket.RELEASE)
>
> def test_requestBuild_virtualization(self):
> - # New builds are virtualized if either the livefs or the archive
> - # requires it.
> - distroarchseries = self.factory.makeDistroArchSeries()
> - for livefs_virt, archive_virt, build_virt in (
> - (False, False, False),
> - (False, True, True),
> - (True, False, True),
> - (True, True, True),
> + # New builds are virtualized if any of the processor, livefs or
> + # archive require it.
> + for proc_nonvirt, livefs_virt, archive_virt, build_virt in (
> + (True, False, False, False),
> + (True, False, True, True),
> + (True, True, False, True),
> + (True, True, True, True),
> + (False, False, False, True),
> + (False, False, True, True),
> + (False, True, False, True),
> + (False, True, True, True),
> ):
> + distroarchseries = self.factory.makeDistroArchSeries(
> + processor=self.factory.makeProcessor(
> + supports_nonvirtualized=proc_nonvirt))
> livefs = self.factory.makeLiveFS(
> distroseries=distroarchseries.distroseries,
> require_virtualized=livefs_virt)
>
--
https://code.launchpad.net/~wgrant/launchpad/processor-nonvirt/+merge/259088
Your team Launchpad code reviewers is subscribed to branch lp:launchpad.
References