summaryrefslogtreecommitdiff
path: root/morph
diff options
context:
space:
mode:
authorJannis Pohlmann <jannis.pohlmann@codethink.co.uk>2012-01-24 14:23:34 +0000
committerJannis Pohlmann <jannis.pohlmann@codethink.co.uk>2012-01-24 14:40:08 +0000
commit14e768ce2e5693ebf6418e7a6e94fe4fb9a71844 (patch)
tree6c629c56aa6e32092a5745bc6de3b50d5c86fbc5 /morph
parent10122174305ac5c6040212a8b526a77ee473577b (diff)
downloadmorph-14e768ce2e5693ebf6418e7a6e94fe4fb9a71844.tar.gz
Share functionality in BuildWorker, implement SSH, add name/ident concept.
All BuildWorker subclasses are likely to make use of the multiprocessing library anyway, so most of the functionality can be shared. All workers now have an ident (e.g. "user@hostname" or "local") which is used by the BuildController to generate enumerated names for them (e.g. "user@hostname-1", "user@hostname-2" or "local-1" and "local-2"), which makes it easier to identify who does what. The RemoteBuildWorker now runs "ssh HOSTNAME fakeroot morph" for building stuff remotely.
Diffstat (limited to 'morph')
-rwxr-xr-xmorph16
1 files changed, 10 insertions, 6 deletions
diff --git a/morph b/morph
index 42aa6f38..cbebc46d 100755
--- a/morph
+++ b/morph
@@ -24,6 +24,8 @@ import logging
import os
import morphlib
+from morphlib import buildworker
+from morphlib import buildcontroller
from morphlib.morphologyloader import MorphologyLoader
from morphlib.builddependencygraph import BuildDependencyGraph
@@ -226,17 +228,19 @@ class Morph(cliapp.Application):
source_manager = morphlib.sourcemanager.SourceManager(self)
# create a build controller
- controller = morphlib.buildcontroller.BuildController(self, tempdir)
+ controller = buildcontroller.BuildController(self, tempdir)
# create and add the build workers
if len(self.settings['worker']) == 0:
- worker = morphlib.buildworker.LocalBuildWorker("local-1", self)
- controller.add_worker(worker)
- worker = morphlib.buildworker.LocalBuildWorker("local-2", self)
- controller.add_worker(worker)
+ num_workers = morphlib.util.make_concurrency()
+ for i in range(num_workers):
+ name = controller.generate_worker_name('local')
+ worker = buildworker.LocalBuildWorker(name, 'local', self)
+ controller.add_worker(worker)
else:
for worker in self.settings['worker']:
- worker = morphlib.buildworker.RemoteBuildWorker(self)
+ name = controller.generate_worker_name(worker)
+ worker = buildworker.RemoteBuildWorker(name, worker, self)
controller.add_worker(worker)
result = []