Merge lp:~cjwatson/launchpad-buildd/rename-slave-classes into lp:launchpad-buildd

Proposed by Colin Watson
Status: Merged
Merged at revision: 366
Proposed branch: lp:~cjwatson/launchpad-buildd/rename-slave-classes
Merge into: lp:launchpad-buildd
Prerequisite: lp:~cjwatson/launchpad-buildd/rename-register-builder
Diff against target: 914 lines (+144/-146)
10 files modified
debian/changelog (+1/-0)
lpbuildd/binarypackage.py (+8/-8)
lpbuildd/buildd-slave.tac (+19/-20)
lpbuildd/builder.py (+66/-66)
lpbuildd/debian.py (+22/-25)
lpbuildd/livefs.py (+2/-2)
lpbuildd/snap.py (+7/-7)
lpbuildd/sourcepackagerecipe.py (+8/-8)
lpbuildd/tests/harness.py (+3/-3)
lpbuildd/translationtemplates.py (+8/-7)
To merge this branch: bzr merge lp:~cjwatson/launchpad-buildd/rename-slave-classes
Reviewer Review Type Date Requested Status
William Grant code Approve
Review via email: mp+363046@code.launchpad.net

Commit message

Rename BuildDSlave to Builder and XMLRPCBuildDSlave to XMLRPCBuilder.

To post a comment you must log in.
Revision history for this message
William Grant (wgrant) :
review: Approve (code)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'debian/changelog'
2--- debian/changelog 2019-02-11 12:22:42 +0000
3+++ debian/changelog 2019-02-12 10:36:12 +0000
4@@ -6,6 +6,7 @@
5 for core16 and core18.
6 * Move /usr/share/launchpad-buildd/slavebin to
7 /usr/share/launchpad-buildd/bin.
8+ * Rename BuildDSlave to Builder and XMLRPCBuildDSlave to XMLRPCBuilder.
9
10 -- Colin Watson <cjwatson@ubuntu.com> Fri, 08 Feb 2019 15:09:35 +0000
11
12
13=== modified file 'lpbuildd/binarypackage.py'
14--- lpbuildd/binarypackage.py 2019-02-11 12:22:42 +0000
15+++ lpbuildd/binarypackage.py 2019-02-12 10:36:12 +0000
16@@ -92,8 +92,8 @@
17
18 initial_build_state = BinaryPackageBuildState.SBUILD
19
20- def __init__(self, slave, buildid, **kwargs):
21- DebianBuildManager.__init__(self, slave, buildid, **kwargs)
22+ def __init__(self, builder, buildid, **kwargs):
23+ DebianBuildManager.__init__(self, builder, buildid, **kwargs)
24 self._sbuildpath = os.path.join(self._bin, "sbuild-package")
25
26 @property
27@@ -334,9 +334,9 @@
28 unsat_deps.append(or_dep)
29 return self.stripDependencies(unsat_deps)
30 except Exception:
31- self._slave.log("Failed to analyse dep-wait:\n")
32+ self._builder.log("Failed to analyse dep-wait:\n")
33 for line in traceback.format_exc().splitlines(True):
34- self._slave.log(line)
35+ self._builder.log(line)
36 return None
37
38 def iterate_SBUILD(self, success):
39@@ -400,17 +400,17 @@
40 if missing_dep is not None:
41 print("Returning build status: DEPFAIL")
42 print("Dependencies: " + missing_dep)
43- self._slave.depFail(missing_dep)
44+ self._builder.depFail(missing_dep)
45 elif success == SBuildExitCodes.GIVENBACK:
46 print("Returning build status: GIVENBACK")
47- self._slave.giveBack()
48+ self._builder.giveBack()
49 elif success == SBuildExitCodes.FAILED:
50 print("Returning build status: PACKAGEFAIL")
51- self._slave.buildFail()
52+ self._builder.buildFail()
53 elif success >= SBuildExitCodes.BUILDERFAIL:
54 # anything else is assumed to be a buildd failure
55 print("Returning build status: BUILDERFAIL")
56- self._slave.builderFail()
57+ self._builder.builderFail()
58 self.alreadyfailed = True
59 self.doReapProcesses(self._state)
60
61
62=== modified file 'lpbuildd/buildd-slave.tac'
63--- lpbuildd/buildd-slave.tac 2019-02-12 10:36:11 +0000
64+++ lpbuildd/buildd-slave.tac 2019-02-12 10:36:12 +0000
65@@ -1,8 +1,7 @@
66 # Copyright 2009-2011 Canonical Ltd. This software is licensed under the
67 # GNU Affero General Public License version 3 (see the file LICENSE).
68
69-# Buildd Slave implementation
70-# XXX: dsilvers: 2005/01/21: Currently everything logged in the slave gets
71+# XXX: dsilvers: 2005/01/21: Currently everything logged in the builder gets
72 # passed through to the twistd log too. this could get dangerous/big
73
74 try:
75@@ -23,9 +22,9 @@
76 )
77
78 from lpbuildd.binarypackage import BinaryPackageBuildManager
79+from lpbuildd.builder import XMLRPCBuilder
80 from lpbuildd.livefs import LiveFilesystemBuildManager
81 from lpbuildd.log import RotatableFileLogObserver
82-from lpbuildd.slave import XMLRPCBuildDSlave
83 from lpbuildd.snap import SnapBuildManager
84 from lpbuildd.sourcepackagerecipe import SourcePackageRecipeBuildManager
85 from lpbuildd.translationtemplates import TranslationTemplatesBuildManager
86@@ -38,31 +37,31 @@
87
88 conf = SafeConfigParser()
89 conf.read(conffile)
90-slave = XMLRPCBuildDSlave(conf)
91+builder = XMLRPCBuilder(conf)
92
93-slave.registerManager(BinaryPackageBuildManager, "binarypackage")
94-slave.registerManager(SourcePackageRecipeBuildManager, "sourcepackagerecipe")
95-slave.registerManager(
96+builder.registerManager(BinaryPackageBuildManager, "binarypackage")
97+builder.registerManager(SourcePackageRecipeBuildManager, "sourcepackagerecipe")
98+builder.registerManager(
99 TranslationTemplatesBuildManager, 'translation-templates')
100-slave.registerManager(LiveFilesystemBuildManager, "livefs")
101-slave.registerManager(SnapBuildManager, "snap")
102+builder.registerManager(LiveFilesystemBuildManager, "livefs")
103+builder.registerManager(SnapBuildManager, "snap")
104
105-application = service.Application('BuildDSlave')
106+application = service.Application('Builder')
107 application.addComponent(
108 RotatableFileLogObserver(options.get('logfile')), ignoreClass=1)
109-builddslaveService = service.IServiceCollection(application)
110-slave.slave.service = builddslaveService
111+builderService = service.IServiceCollection(application)
112+builder.builder.service = builderService
113
114 root = resource.Resource()
115-root.putChild('rpc', slave)
116+root.putChild('rpc', builder)
117 root.putChild('filecache', static.File(conf.get('slave', 'filecache')))
118-slavesite = server.Site(root)
119-
120-strports.service("tcp:%s" % slave.slave._config.get("slave", "bindport"),
121- slavesite).setServiceParent(builddslaveService)
122-
123-# You can interact with a running slave like this:
124-# (assuming the slave is on localhost:8221)
125+buildersite = server.Site(root)
126+
127+strports.service("tcp:%s" % builder.builder._config.get("slave", "bindport"),
128+ buildersite).setServiceParent(builderService)
129+
130+# You can interact with a running builder like this:
131+# (assuming the builder is on localhost:8221)
132 #
133 # python3
134 # from xmlrpc.client import ServerProxy
135
136=== renamed file 'lpbuildd/slave.py' => 'lpbuildd/builder.py'
137--- lpbuildd/slave.py 2019-02-12 10:36:11 +0000
138+++ lpbuildd/builder.py 2019-02-12 10:36:12 +0000
139@@ -75,10 +75,10 @@
140 #
141 # when we start using Twisted 2.0.
142 class RunCapture(protocol.ProcessProtocol):
143- """Run a command and capture its output to a slave's log"""
144+ """Run a command and capture its output to a builder's log."""
145
146- def __init__(self, slave, callback, stdin=None):
147- self.slave = slave
148+ def __init__(self, builder, callback, stdin=None):
149+ self.builder = builder
150 self.notify = callback
151 self.stdin = stdin
152 self.builderFailCall = None
153@@ -92,13 +92,13 @@
154
155 def outReceived(self, data):
156 """Pass on stdout data to the log."""
157- self.slave.log(data)
158+ self.builder.log(data)
159
160 def errReceived(self, data):
161 """Pass on stderr data to the log.
162
163 With a bit of luck we won't interleave horribly."""
164- self.slave.log(data)
165+ self.builder.log(data)
166
167 def processEnded(self, statusobject):
168 """This method is called when a child process got terminated.
169@@ -115,29 +115,29 @@
170 if self.builderFailCall and self.builderFailCall.active():
171 self.builderFailCall.cancel()
172
173- # notify the slave, it'll perform the required actions
174+ # notify the builder, it'll perform the required actions
175 if self.notify is not None:
176 self.notify(statusobject.value.exitCode)
177
178
179 class BuildManager(object):
180- """Build Daemon slave build manager abstract parent"""
181+ """Build manager abstract parent."""
182
183 backend_name = "chroot"
184
185- def __init__(self, slave, buildid, reactor=None):
186+ def __init__(self, builder, buildid, reactor=None):
187 """Create a BuildManager.
188
189- :param slave: A `BuildDSlave`.
190+ :param builder: A `Builder`.
191 :param buildid: Identifying string for this build.
192 """
193 object.__init__(self)
194 self._buildid = buildid
195- self._slave = slave
196+ self._builder = builder
197 if reactor is None:
198 reactor = default_reactor
199 self._reactor = reactor
200- self._sharepath = slave._config.get("slave", "sharepath")
201+ self._sharepath = builder._config.get("slave", "sharepath")
202 self._bin = os.path.join(self._sharepath, "bin")
203 self._preppath = os.path.join(self._bin, "builder-prep")
204 self._intargetpath = os.path.join(self._bin, "in-target")
205@@ -155,8 +155,8 @@
206 """Run a subprocess capturing the results in the log."""
207 if iterate is None:
208 iterate = self.iterate
209- self._subprocess = RunCapture(self._slave, iterate, stdin=stdin)
210- self._slave.log("RUN: %s %s\n" % (
211+ self._subprocess = RunCapture(self._builder, iterate, stdin=stdin)
212+ self._builder.log("RUN: %s %s\n" % (
213 command, " ".join(shell_escape(arg) for arg in args[1:])))
214 childfds = {
215 0: devnull.fileno() if stdin is None else "w",
216@@ -191,7 +191,7 @@
217 if state is not None and state in self._reaped_states:
218 # We've already reaped this state. To avoid a loop, proceed
219 # immediately to the next iterator.
220- self._slave.log("Already reaped from state %s...\n" % state)
221+ self._builder.log("Already reaped from state %s...\n" % state)
222 if notify:
223 self.iterateReap(state, 0)
224 else:
225@@ -211,7 +211,7 @@
226 # Sanitize the URLs in the buildlog file if this is a build
227 # in a private archive.
228 if self.needs_sanitized_logs:
229- self._slave.sanitizeBuildlog(self._slave.cachePath("buildlog"))
230+ self._builder.sanitizeBuildlog(self._builder.cachePath("buildlog"))
231
232 if self.fast_cleanup:
233 self.iterate(0, quiet=True)
234@@ -235,18 +235,18 @@
235 evaluates to True the build at hand is for a private archive.
236 """
237 if 'build_url' in extra_args:
238- self._slave.log("%s\n" % extra_args['build_url'])
239+ self._builder.log("%s\n" % extra_args['build_url'])
240
241 os.mkdir("%s/build-%s" % (self.home, self._buildid))
242 for f in files:
243- os.symlink( self._slave.cachePath(files[f]),
244+ os.symlink( self._builder.cachePath(files[f]),
245 "%s/build-%s/%s" % (self.home,
246 self._buildid, f))
247- self._chroottarfile = self._slave.cachePath(chroot)
248+ self._chroottarfile = self._builder.cachePath(chroot)
249
250 self.image_type = extra_args.get('image_type', 'chroot')
251 self.series = extra_args['series']
252- self.arch_tag = extra_args.get('arch_tag', self._slave.getArch())
253+ self.arch_tag = extra_args.get('arch_tag', self._builder.getArch())
254 self.fast_cleanup = extra_args.get('fast_cleanup', False)
255
256 # Check whether this is a build in a private archive and
257@@ -271,7 +271,7 @@
258 return {}
259
260 def iterate(self, success, quiet=False):
261- """Perform an iteration of the slave.
262+ """Perform an iteration of the builder.
263
264 The BuildManager tends to work by invoking several
265 subprocesses in order. the iterate method is called by the
266@@ -282,7 +282,7 @@
267 "used")
268
269 def iterateReap(self, state, success):
270- """Perform an iteration of the slave following subprocess reaping.
271+ """Perform an iteration of the builder following subprocess reaping.
272
273 Subprocess reaping is special, typically occurring at several
274 positions in a build manager's state machine. We therefore keep
275@@ -321,9 +321,9 @@
276
277 def builderFail(self, reason, primary_subprocess):
278 """Mark the builder as failed."""
279- self._slave.log("ABORTING: %s\n" % reason)
280+ self._builder.log("ABORTING: %s\n" % reason)
281 self._subprocess.builderFailCall = None
282- self._slave.builderFail()
283+ self._builder.builderFail()
284 self.alreadyfailed = True
285 # If we failed to kill all processes in the chroot, then the primary
286 # subprocess (i.e. the one running immediately before
287@@ -332,7 +332,7 @@
288 try:
289 primary_subprocess.transport.signalProcess('KILL')
290 except process.ProcessExitedAlready:
291- self._slave.log("ABORTING: Process Exited Already\n")
292+ self._builder.log("ABORTING: Process Exited Already\n")
293 primary_subprocess.transport.loseConnection()
294 # Leave the reaper running, but disconnect it from our state
295 # machine. Perhaps an admin can make something of it, and in any
296@@ -346,7 +346,7 @@
297 try:
298 fetched_path = os.path.join(fetched_dir, os.path.basename(path))
299 self.backend.copy_out(path, fetched_path)
300- self._slave.addWaitingFile(fetched_path)
301+ self._builder.addWaitingFile(fetched_path)
302 finally:
303 shutil.rmtree(fetched_dir)
304
305@@ -375,10 +375,8 @@
306 ABORTED = "BuildStatus.ABORTED"
307
308
309-class BuildDSlave(object):
310- """Build Daemon slave. Implementation of most needed functions
311- for a Build-Slave device.
312- """
313+class Builder(object):
314+ """The core of a builder."""
315
316 def __init__(self, config):
317 object.__init__(self)
318@@ -395,7 +393,7 @@
319 raise ValueError("FileCache path is not a dir")
320
321 def getArch(self):
322- """Return the Architecture tag for the slave."""
323+ """Return the Architecture tag for the builder."""
324 return self._config.get("slave","architecturetag")
325
326 def cachePath(self, file):
327@@ -423,7 +421,7 @@
328 """Ensure we have the file with the checksum specified.
329
330 Optionally you can provide the librarian URL and
331- the build slave will fetch the file if it doesn't have it.
332+ the builder will fetch the file if it doesn't have it.
333 Return a tuple containing: (<present>, <info>)
334 """
335 extra_info = 'No URL'
336@@ -497,19 +495,19 @@
337 if self.builderstatus == BuilderStatus.ABORTING:
338 # This might happen if the master side restarts in the middle of
339 # an abort cycle.
340- self.log("Slave already ABORTING when asked to abort")
341+ self.log("Builder already ABORTING when asked to abort")
342 return
343 if self.builderstatus != BuilderStatus.BUILDING:
344 # XXX: Should raise a known Fault so that the client can make
345 # useful decisions about the error!
346- raise ValueError("Slave is not BUILDING when asked to abort")
347+ raise ValueError("Builder is not BUILDING when asked to abort")
348 self.manager.abort()
349 self.builderstatus = BuilderStatus.ABORTING
350
351 def clean(self):
352 """Clean up pending files and reset the internal build state."""
353 if self.builderstatus != BuilderStatus.WAITING:
354- raise ValueError('Slave is not WAITING when asked to clean')
355+ raise ValueError('Builder is not WAITING when asked to clean')
356 for f in set(self.waitingfiles.values()):
357 os.remove(self.cachePath(f))
358 self.builderstatus = BuilderStatus.IDLE
359@@ -587,7 +585,8 @@
360 def startBuild(self, manager):
361 """Start a build with the provided BuildManager instance."""
362 if self.builderstatus != BuilderStatus.IDLE:
363- raise ValueError("Slave is not IDLE when asked to start building")
364+ raise ValueError(
365+ "Builder is not IDLE when asked to start building")
366 self.manager = manager
367 self.builderstatus = BuilderStatus.BUILDING
368 self.emptyLog()
369@@ -602,8 +601,8 @@
370 """Cease building because the builder has a problem."""
371 if self.builderstatus not in (BuilderStatus.BUILDING,
372 BuilderStatus.ABORTING):
373- raise ValueError("Slave is not BUILDING|ABORTING when set to "
374- "BUILDERFAIL")
375+ raise ValueError(
376+ "Builder is not BUILDING|ABORTING when set to BUILDERFAIL")
377 self.buildstatus = BuildStatus.BUILDERFAIL
378
379 def chrootFail(self):
380@@ -613,38 +612,38 @@
381 package.
382 """
383 if self.builderstatus != BuilderStatus.BUILDING:
384- raise ValueError("Slave is not BUILDING when set to CHROOTFAIL")
385+ raise ValueError("Builder is not BUILDING when set to CHROOTFAIL")
386 self.buildstatus = BuildStatus.CHROOTFAIL
387
388 def buildFail(self):
389 """Cease building because the package failed to build."""
390 if self.builderstatus != BuilderStatus.BUILDING:
391- raise ValueError("Slave is not BUILDING when set to PACKAGEFAIL")
392+ raise ValueError("Builder is not BUILDING when set to PACKAGEFAIL")
393 self.buildstatus = BuildStatus.PACKAGEFAIL
394
395 def buildOK(self):
396 """Having passed all possible failure states, mark a build as OK."""
397 if self.builderstatus != BuilderStatus.BUILDING:
398- raise ValueError("Slave is not BUILDING when set to OK")
399+ raise ValueError("Builder is not BUILDING when set to OK")
400 self.buildstatus = BuildStatus.OK
401
402 def depFail(self, dependencies):
403 """Cease building due to a dependency issue."""
404 if self.builderstatus != BuilderStatus.BUILDING:
405- raise ValueError("Slave is not BUILDING when set to DEPFAIL")
406+ raise ValueError("Builder is not BUILDING when set to DEPFAIL")
407 self.buildstatus = BuildStatus.DEPFAIL
408 self.builddependencies = dependencies
409
410 def giveBack(self):
411 """Give-back package due to a transient buildd/archive issue."""
412 if self.builderstatus != BuilderStatus.BUILDING:
413- raise ValueError("Slave is not BUILDING when set to GIVENBACK")
414+ raise ValueError("Builder is not BUILDING when set to GIVENBACK")
415 self.buildstatus = BuildStatus.GIVENBACK
416
417 def buildAborted(self):
418 """Mark a build as aborted."""
419 if self.builderstatus != BuilderStatus.ABORTING:
420- raise ValueError("Slave is not ABORTING when set to ABORTED")
421+ raise ValueError("Builder is not ABORTING when set to ABORTED")
422 if self.buildstatus != BuildStatus.BUILDERFAIL:
423 self.buildstatus = BuildStatus.ABORTED
424
425@@ -658,8 +657,8 @@
426 self.buildAborted()
427 self.builderstatus = BuilderStatus.WAITING
428 else:
429- raise ValueError("Slave is not BUILDING|ABORTING when told build "
430- "is complete")
431+ raise ValueError(
432+ "Builder is not BUILDING|ABORTING when told build is complete")
433
434 def sanitizeBuildlog(self, log_path):
435 """Removes passwords from buildlog URLs.
436@@ -699,8 +698,8 @@
437 sanitized_file.close()
438
439
440-class XMLRPCBuildDSlave(xmlrpc.XMLRPC):
441- """XMLRPC build daemon slave management interface"""
442+class XMLRPCBuilder(xmlrpc.XMLRPC):
443+ """XMLRPC builder management interface."""
444
445 def __init__(self, config):
446 xmlrpc.XMLRPC.__init__(self, allowNone=True)
447@@ -709,7 +708,7 @@
448 # implying the presence of /filecache/ /filecache/buildlog and
449 # the reduced and optimised XMLRPC interface.
450 self.protocolversion = '1.0'
451- self.slave = BuildDSlave(config)
452+ self.builder = Builder(config)
453 self._managers = {}
454 cache = apt.Cache()
455 try:
456@@ -728,7 +727,7 @@
457
458 def xmlrpc_info(self):
459 """Return the protocol version and the manager methods supported."""
460- return (self.protocolversion, self.slave.getArch(),
461+ return (self.protocolversion, self.builder.getArch(),
462 list(self._managers))
463
464 def xmlrpc_status(self):
465@@ -737,7 +736,7 @@
466 Depending on the builder status we return differing amounts of data,
467 but this always includes the builder status itself.
468 """
469- status = self.slave.builderstatus
470+ status = self.builder.builderstatus
471 statusname = status.split('.')[-1]
472 func = getattr(self, "status_" + statusname, None)
473 if func is None:
474@@ -746,8 +745,8 @@
475 if self._version is not None:
476 ret["builder_version"] = self._version
477 ret.update(func())
478- if self.slave.manager is not None:
479- ret.update(self.slave.manager.status())
480+ if self.builder.manager is not None:
481+ ret.update(self.builder.manager.status())
482 return ret
483
484 def status_IDLE(self):
485@@ -759,7 +758,7 @@
486
487 Returns the build id and up to one kilobyte of log tail.
488 """
489- tail = self.slave.getLogTail()
490+ tail = self.builder.getLogTail()
491 return {"build_id": self.buildid, "logtail": Binary(tail)}
492
493 def status_WAITING(self):
494@@ -770,13 +769,13 @@
495 and the build id but no file set.
496 """
497 ret = {
498- "build_status": self.slave.buildstatus,
499+ "build_status": self.builder.buildstatus,
500 "build_id": self.buildid,
501 }
502- if self.slave.buildstatus in (BuildStatus.OK, BuildStatus.PACKAGEFAIL,
503- BuildStatus.DEPFAIL):
504- ret["filemap"] = self.slave.waitingfiles
505- ret["dependencies"] = self.slave.builddependencies
506+ if self.builder.buildstatus in (
507+ BuildStatus.OK, BuildStatus.PACKAGEFAIL, BuildStatus.DEPFAIL):
508+ ret["filemap"] = self.builder.waitingfiles
509+ ret["dependencies"] = self.builder.builddependencies
510 return ret
511
512 def status_ABORTING(self):
513@@ -790,16 +789,16 @@
514
515 def xmlrpc_ensurepresent(self, sha1sum, url, username, password):
516 """Attempt to ensure the given file is present."""
517- return self.slave.ensurePresent(sha1sum, url, username, password)
518+ return self.builder.ensurePresent(sha1sum, url, username, password)
519
520 def xmlrpc_abort(self):
521 """Abort the current build."""
522- self.slave.abort()
523+ self.builder.abort()
524 return BuilderStatus.ABORTING
525
526 def xmlrpc_clean(self):
527- """Clean up the waiting files and reset the slave's internal state."""
528- self.slave.clean()
529+ """Clean up the waiting files and reset the builder's state."""
530+ self.builder.clean()
531 return BuilderStatus.IDLE
532
533 def xmlrpc_build(self, buildid, managertag, chrootsum, filemap, args):
534@@ -813,7 +812,7 @@
535 extra_info = "%s not in %r" % (managertag, list(self._managers))
536 return (BuilderStatus.UNKNOWNBUILDER, extra_info)
537 # check requested chroot availability
538- chroot_present, info = self.slave.ensurePresent(chrootsum)
539+ chroot_present, info = self.builder.ensurePresent(chrootsum)
540 if not chroot_present:
541 extra_info = """CHROOTSUM -> %s
542 ***** INFO *****
543@@ -823,7 +822,7 @@
544 return (BuilderStatus.UNKNOWNSUM, extra_info)
545 # check requested files availability
546 for filesum in filemap.values():
547- file_present, info = self.slave.ensurePresent(filesum)
548+ file_present, info = self.builder.ensurePresent(filesum)
549 if not file_present:
550 extra_info = """FILESUM -> %s
551 ***** INFO *****
552@@ -838,6 +837,7 @@
553 # builder is available, buildd is non empty,
554 # filelist is consistent, chrootsum is available, let's initiate...
555 self.buildid = buildid
556- self.slave.startBuild(self._managers[managertag](self.slave, buildid))
557- self.slave.manager.initiate(filemap, chrootsum, args)
558+ self.builder.startBuild(
559+ self._managers[managertag](self.builder, buildid))
560+ self.builder.manager.initiate(filemap, chrootsum, args)
561 return (BuilderStatus.BUILDING, buildid)
562
563=== modified file 'lpbuildd/debian.py'
564--- lpbuildd/debian.py 2018-10-19 06:41:14 +0000
565+++ lpbuildd/debian.py 2019-02-12 10:36:12 +0000
566@@ -4,8 +4,6 @@
567 # Authors: Daniel Silverstone <daniel.silverstone@canonical.com>
568 # and Adam Conrad <adam.conrad@canonical.com>
569
570-# Buildd Slave sbuild manager implementation
571-
572 __metaclass__ = type
573
574 import base64
575@@ -19,9 +17,7 @@
576 )
577 from twisted.python import log
578
579-from lpbuildd.slave import (
580- BuildManager,
581- )
582+from lpbuildd.builder import BuildManager
583
584
585 class DebianBuildState:
586@@ -39,11 +35,11 @@
587 class DebianBuildManager(BuildManager):
588 """Base behaviour for Debian chrooted builds."""
589
590- def __init__(self, slave, buildid, **kwargs):
591- BuildManager.__init__(self, slave, buildid, **kwargs)
592- self._cachepath = slave._config.get("slave", "filecache")
593+ def __init__(self, builder, buildid, **kwargs):
594+ BuildManager.__init__(self, builder, buildid, **kwargs)
595+ self._cachepath = builder._config.get("slave", "filecache")
596 self._state = DebianBuildState.INIT
597- slave.emptyLog()
598+ builder.emptyLog()
599 self.alreadyfailed = False
600 self._iterator = None
601
602@@ -110,12 +106,12 @@
603 The primary file we care about is the .changes file. We key from there.
604 """
605 path = self.getChangesFilename()
606- self._slave.addWaitingFile(path)
607+ self._builder.addWaitingFile(path)
608
609 chfile = open(path, "r")
610 try:
611 for fn in self._parseChangesFile(chfile):
612- self._slave.addWaitingFile(
613+ self._builder.addWaitingFile(
614 get_build_path(self.home, self._buildid, fn))
615 finally:
616 chfile.close()
617@@ -127,11 +123,12 @@
618 def failed_to_gather(failure):
619 if failure.check(defer.CancelledError):
620 if not self.alreadyfailed:
621- self._slave.log("Build cancelled unexpectedly!")
622- self._slave.buildFail()
623+ self._builder.log("Build cancelled unexpectedly!")
624+ self._builder.buildFail()
625 else:
626- self._slave.log("Failed to gather results: %s" % failure.value)
627- self._slave.buildFail()
628+ self._builder.log(
629+ "Failed to gather results: %s" % failure.value)
630+ self._builder.buildFail()
631 self.alreadyfailed = True
632
633 def reap(ignored):
634@@ -173,7 +170,7 @@
635 if success != 0:
636 if not self.alreadyfailed:
637 # The init failed, can't fathom why that would be...
638- self._slave.builderFail()
639+ self._builder.builderFail()
640 self.alreadyfailed = True
641 self._state = DebianBuildState.CLEANUP
642 self.doCleanup()
643@@ -186,7 +183,7 @@
644 if success != 0:
645 if not self.alreadyfailed:
646 # The unpack failed for some reason...
647- self._slave.chrootFail()
648+ self._builder.chrootFail()
649 self.alreadyfailed = True
650 self._state = DebianBuildState.CLEANUP
651 self.doCleanup()
652@@ -198,7 +195,7 @@
653 """Just finished doing the mounts."""
654 if success != 0:
655 if not self.alreadyfailed:
656- self._slave.chrootFail()
657+ self._builder.chrootFail()
658 self.alreadyfailed = True
659 self._state = DebianBuildState.UMOUNT
660 self.doUnmounting()
661@@ -258,7 +255,7 @@
662 """Just finished overwriting sources.list."""
663 if success != 0:
664 if not self.alreadyfailed:
665- self._slave.chrootFail()
666+ self._builder.chrootFail()
667 self.alreadyfailed = True
668 self.doReapProcesses(self._state)
669 elif self.trusted_keys:
670@@ -277,7 +274,7 @@
671 """Just finished adding trusted keys."""
672 if success != 0:
673 if not self.alreadyfailed:
674- self._slave.chrootFail()
675+ self._builder.chrootFail()
676 self.alreadyfailed = True
677 self.doReapProcesses(self._state)
678 else:
679@@ -293,7 +290,7 @@
680 """Just finished updating the chroot."""
681 if success != 0:
682 if not self.alreadyfailed:
683- self._slave.chrootFail()
684+ self._builder.chrootFail()
685 self.alreadyfailed = True
686 self.doReapProcesses(self._state)
687 else:
688@@ -309,7 +306,7 @@
689 """Just finished doing the unmounting."""
690 if success != 0:
691 if not self.alreadyfailed:
692- self._slave.builderFail()
693+ self._builder.builderFail()
694 self.alreadyfailed = True
695 self._state = DebianBuildState.CLEANUP
696 self.doCleanup()
697@@ -318,13 +315,13 @@
698 """Just finished the cleanup."""
699 if success != 0:
700 if not self.alreadyfailed:
701- self._slave.builderFail()
702+ self._builder.builderFail()
703 self.alreadyfailed = True
704 else:
705 # Successful clean
706 if not self.alreadyfailed:
707- self._slave.buildOK()
708- self._slave.buildComplete()
709+ self._builder.buildOK()
710+ self._builder.buildComplete()
711
712 def abortReap(self):
713 """Abort by killing all processes in the chroot, as hard as we can.
714
715=== modified file 'lpbuildd/livefs.py'
716--- lpbuildd/livefs.py 2019-01-28 13:07:53 +0000
717+++ lpbuildd/livefs.py 2019-02-12 10:36:12 +0000
718@@ -83,12 +83,12 @@
719 elif (retcode >= RETCODE_FAILURE_INSTALL and
720 retcode <= RETCODE_FAILURE_BUILD):
721 if not self.alreadyfailed:
722- self._slave.buildFail()
723+ self._builder.buildFail()
724 print("Returning build status: Build failed.")
725 self.alreadyfailed = True
726 else:
727 if not self.alreadyfailed:
728- self._slave.builderFail()
729+ self._builder.builderFail()
730 print("Returning build status: Builder failed.")
731 self.alreadyfailed = True
732 self.doReapProcesses(self._state)
733
734=== modified file 'lpbuildd/snap.py'
735--- lpbuildd/snap.py 2019-02-07 11:52:09 +0000
736+++ lpbuildd/snap.py 2019-02-12 10:36:12 +0000
737@@ -237,7 +237,7 @@
738 'referrer': referrer,
739 'agent': agent,
740 })
741- self.manager._slave.log(line.encode("UTF-8"))
742+ self.manager._builder.log(line.encode("UTF-8"))
743
744
745 class SnapBuildState(DebianBuildState):
746@@ -274,10 +274,10 @@
747 """Start the local snap proxy, if necessary."""
748 if not self.proxy_url:
749 return []
750- proxy_port = self._slave._config.get("snapmanager", "proxyport")
751+ proxy_port = self._builder._config.get("snapmanager", "proxyport")
752 proxy_factory = SnapProxyFactory(self, self.proxy_url, timeout=60)
753 self.proxy_service = strports.service(proxy_port, proxy_factory)
754- self.proxy_service.setServiceParent(self._slave.service)
755+ self.proxy_service.setServiceParent(self._builder.service)
756 if self.backend_name == "lxd":
757 proxy_host = self.backend.ipv4_network.ip
758 else:
759@@ -295,7 +295,7 @@
760 """Revoke builder proxy token."""
761 if not self.revocation_endpoint:
762 return
763- self._slave.log("Revoking proxy token...\n")
764+ self._builder.log("Revoking proxy token...\n")
765 url = urlparse(self.proxy_url)
766 auth = "{}:{}".format(url.username, url.password)
767 headers = {
768@@ -306,7 +306,7 @@
769 try:
770 urlopen(req)
771 except (HTTPError, URLError) as e:
772- self._slave.log(
773+ self._builder.log(
774 "Unable to revoke token for %s: %s" % (url.username, e))
775
776 def status(self):
777@@ -362,12 +362,12 @@
778 elif (retcode >= RETCODE_FAILURE_INSTALL and
779 retcode <= RETCODE_FAILURE_BUILD):
780 if not self.alreadyfailed:
781- self._slave.buildFail()
782+ self._builder.buildFail()
783 print("Returning build status: Build failed.")
784 self.alreadyfailed = True
785 else:
786 if not self.alreadyfailed:
787- self._slave.builderFail()
788+ self._builder.builderFail()
789 print("Returning build status: Builder failed.")
790 self.alreadyfailed = True
791 self.doReapProcesses(self._state)
792
793=== modified file 'lpbuildd/sourcepackagerecipe.py'
794--- lpbuildd/sourcepackagerecipe.py 2019-02-11 12:22:42 +0000
795+++ lpbuildd/sourcepackagerecipe.py 2019-02-12 10:36:12 +0000
796@@ -55,13 +55,13 @@
797
798 initial_build_state = SourcePackageRecipeBuildState.BUILD_RECIPE
799
800- def __init__(self, slave, buildid):
801+ def __init__(self, builder, buildid):
802 """Constructor.
803
804- :param slave: A build slave device.
805+ :param builder: A builder.
806 :param buildid: The id of the build (a str).
807 """
808- DebianBuildManager.__init__(self, slave, buildid)
809+ DebianBuildManager.__init__(self, builder, buildid)
810 self.build_recipe_path = os.path.join(self._bin, "buildrecipe")
811
812 def initiate(self, files, chroot, extra_args):
813@@ -109,24 +109,24 @@
814 '.*: Depends: ([^ ]*( \([^)]*\))?)')
815 _, mo = self.searchLogContents([[rx, re.M]])
816 if mo:
817- self._slave.depFail(mo.group(1))
818+ self._builder.depFail(mo.group(1))
819 print("Returning build status: DEPFAIL")
820 print("Dependencies: " + mo.group(1))
821 else:
822 print("Returning build status: Build failed")
823- self._slave.buildFail()
824+ self._builder.buildFail()
825 self.alreadyfailed = True
826 elif (
827 retcode >= RETCODE_FAILURE_INSTALL and
828 retcode <= RETCODE_FAILURE_BUILD_SOURCE_PACKAGE):
829 # XXX AaronBentley 2009-01-13: We should handle depwait separately
830 if not self.alreadyfailed:
831- self._slave.buildFail()
832+ self._builder.buildFail()
833 print("Returning build status: Build failed.")
834 self.alreadyfailed = True
835 else:
836 if not self.alreadyfailed:
837- self._slave.builderFail()
838+ self._builder.builderFail()
839 print("Returning build status: Builder failed.")
840 self.alreadyfailed = True
841 self.doReapProcesses(self._state)
842@@ -150,5 +150,5 @@
843 The manifest is also a useful record.
844 """
845 DebianBuildManager.gatherResults(self)
846- self._slave.addWaitingFile(get_build_path(
847+ self._builder.addWaitingFile(get_build_path(
848 self.home, self._buildid, 'manifest'))
849
850=== modified file 'lpbuildd/tests/harness.py'
851--- lpbuildd/tests/harness.py 2017-11-22 15:25:33 +0000
852+++ lpbuildd/tests/harness.py 2019-02-12 10:36:12 +0000
853@@ -18,7 +18,7 @@
854 from fixtures import EnvironmentVariable
855 from txfixtures.tachandler import TacTestFixture
856
857-from lpbuildd.slave import BuildDSlave
858+from lpbuildd.builder import Builder
859
860
861 test_conffile = os.path.join(
862@@ -41,12 +41,12 @@
863 """Unit tests for logtail mechanisms."""
864
865 def setUp(self):
866- """Setup a BuildDSlave using the test config."""
867+ """Setup a Builder using the test config."""
868 conf = SafeConfigParser()
869 conf.read(test_conffile)
870 conf.set("slave", "filecache", tempfile.mkdtemp())
871
872- self.slave = BuildDSlave(conf)
873+ self.slave = Builder(conf)
874 self.slave._log = True
875 self.slave.manager = MockBuildManager()
876
877
878=== modified file 'lpbuildd/translationtemplates.py'
879--- lpbuildd/translationtemplates.py 2018-10-19 06:41:14 +0000
880+++ lpbuildd/translationtemplates.py 2019-02-12 10:36:12 +0000
881@@ -24,14 +24,15 @@
882
883 This is the implementation of `TranslationTemplatesBuildJob`. The
884 latter runs on the master server; TranslationTemplatesBuildManager
885- runs on the build slave.
886+ runs on the builder.
887 """
888
889 initial_build_state = TranslationTemplatesBuildState.GENERATE
890
891- def __init__(self, slave, buildid):
892- super(TranslationTemplatesBuildManager, self).__init__(slave, buildid)
893- self._resultname = slave._config.get(
894+ def __init__(self, builder, buildid):
895+ super(TranslationTemplatesBuildManager, self).__init__(
896+ builder, buildid)
897+ self._resultname = builder._config.get(
898 "translationtemplatesmanager", "resultarchive")
899
900 def initiate(self, files, chroot, extra_args):
901@@ -67,11 +68,11 @@
902 else:
903 if not self.alreadyfailed:
904 if retcode == RETCODE_FAILURE_INSTALL:
905- self._slave.chrootFail()
906+ self._builder.chrootFail()
907 elif retcode == RETCODE_FAILURE_BUILD:
908- self._slave.buildFail()
909+ self._builder.buildFail()
910 else:
911- self._slave.builderFail()
912+ self._builder.builderFail()
913 self.alreadyfailed = True
914 self.doReapProcesses(self._state)
915

Subscribers

People subscribed via source and target branches

to all changes: