From d8f4dbdfe07df8cbb576e32f653c86190f07c392 Mon Sep 17 00:00:00 2001 From: Jannis Pohlmann Date: Mon, 23 Jan 2012 17:52:37 +0000 Subject: Add controller, worker classes and a new "build-distributed" command. This commit introduces four new classes: BuildController: * takes an app instance and a tempdir * allows to add BuildWorker objects * provides a build() method that takes a set of blobs and a build order that is then built by assigning work to the build workers as needed * the build() method takes care of polling the workers for their state, moving them between busy and idle states reliably, collect and print their output in a non-confusing order, and makes sure to wait for all workers to finish before processing the next group in the build order. * at this point, when waiting for one or more workers to become idle to assign them another blob to build, the controller always picks the worker that has been idling for the longest period of time. this can be changed later. BuildWorker: * base class for all worker classes * takes a name and an app instance * has a idle_since datetime property * provides a build() method that takes a Blob object and builds it in whatever way the subclasses implement it * provides a check_complete(timeout) method that checks whether the worker has finished building the blob yet or not LocalBuildWorker: * worker class for local builds that don't go through SSH * it uses morphlib.execute.Execute to run morph in a child process in build() * at the moment, this class executes "./morph" instead of "morph" as it assumes the user to run morph from its source tree. obviously, this will have to be fixed later. RemoteBuildWorker: * doesn't implement anything yet, will be used for distributing work to other machines running morph via SSH Notes: * At the moment, there is a degree of undesired redundancy when building a stratum in a worker, as this will cause the worker to rebuild all its dependencies. This will have to be fixed as it is avoidable and wastes a lot of time and processing power. --- without-test-modules | 2 ++ 1 file changed, 2 insertions(+) (limited to 'without-test-modules') diff --git a/without-test-modules b/without-test-modules index 4d716837..52a7e602 100644 --- a/without-test-modules +++ b/without-test-modules @@ -1,5 +1,7 @@ morphlib/__init__.py +morphlib/buildcontroller.py morphlib/builddependencygraph.py +morphlib/buildworker.py morphlib/builder.py morphlib/tester.py morphlib/git.py -- cgit v1.2.1