summaryrefslogtreecommitdiffstats
path: root/func/overlord/client.py
diff options
context:
space:
mode:
authorMichael DeHaan <mdehaan@redhat.com>2008-01-13 15:10:48 -0500
committerMichael DeHaan <mdehaan@redhat.com>2008-01-13 15:10:48 -0500
commite87e62d301dbd8fe99ac74be7a38009b2e3748cb (patch)
treebd125c5daac096a7887ab0a12a6a9ea4633a40ca /func/overlord/client.py
parent8c4a154f196383f6d0969934e10641e83ac51af4 (diff)
downloadthird_party-func-e87e62d301dbd8fe99ac74be7a38009b2e3748cb.tar.gz
third_party-func-e87e62d301dbd8fe99ac74be7a38009b2e3748cb.tar.xz
third_party-func-e87e62d301dbd8fe99ac74be7a38009b2e3748cb.zip
Add jobthing, which is our async job engine. It's still in progress
and very much a prototype that isn't expected to work yet, but you get the idea.
Diffstat (limited to 'func/overlord/client.py')
-rwxr-xr-xfunc/overlord/client.py23
1 files changed, 16 insertions, 7 deletions
diff --git a/func/overlord/client.py b/func/overlord/client.py
index c6d8ab6..5eb6ef0 100755
--- a/func/overlord/client.py
+++ b/func/overlord/client.py
@@ -27,6 +27,7 @@ import sslclient
import command
import forkbomb
+import jobthing
# ===================================
# defaults
@@ -114,7 +115,7 @@ def isServer(server_string):
class Client(object):
def __init__(self, server_spec, port=DEFAULT_PORT, interactive=False,
- verbose=False, noglobs=False, nforks=1, config=None):
+ verbose=False, noglobs=False, nforks=1, async=False, config=None):
"""
Constructor.
@server_spec -- something like "*.example.org" or "foosball"
@@ -134,6 +135,7 @@ class Client(object):
self.interactive = interactive
self.noglobs = noglobs
self.nforks = nforks
+ self.async = async
self.servers = expand_servers(self.server_spec, port=self.port, noglobs=self.noglobs,verbose=self.verbose)
@@ -163,6 +165,14 @@ class Client(object):
# -----------------------------------------------
+ def job_status(self, jobid):
+ """
+ Use this to acquire status from jobs when using run with async client handles
+ """
+ return jobthing.job_status(jobid)
+
+ # -----------------------------------------------
+
def run(self, module, method, args, nforks=1):
"""
Invoke a remote method on one or more servers.
@@ -174,8 +184,6 @@ class Client(object):
just a single value, not a hash.
"""
-
-
results = {}
def process_server(bucketnumber, buckets, server):
@@ -210,14 +218,15 @@ class Client(object):
left = server.rfind("/")+1
right = server.rfind(":")
server_name = server[left:right]
- # TEST (changed for integration with forkbomb)
- # results[server_name] = retval
return (server_name, retval)
if not self.noglobs:
- if self.nforks > 1:
+ if self.nforks > 1 or self.async:
# using forkbomb module to distribute job over multiple threads
- results = forkbomb.batch_run(self.servers, process_server,nforks)
+ if not self.async:
+ results = forkbomb.batch_run(self.servers, process_server, nforks)
+ else:
+ results = jobthing.batch_run(self.servers, process_server, nforks)
else:
# no need to go through the fork code, we can do this directly
results = {}