summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Schubert <bschubert15@bloomberg.net>2020-12-05 14:47:55 +0000
committerBenjamin Schubert <bschubert15@bloomberg.net>2020-12-05 14:52:45 +0000
commit57beae424a5ce86cfe9d27d410d191abc3f69308 (patch)
tree0e0c234188073967d40e2348f45eae0b655962e8
parent458c05751f089673dc1cae8b8edfabfa32cf21b7 (diff)
downloadbuildstream-57beae424a5ce86cfe9d27d410d191abc3f69308.tar.gz
job.py: Remove the ability to send child data to the parent
This is currently only used by the ElementJob to send back information about the workspace, that we can get directly now that we run in the same process * elementjob.py: Remove the returning of the workspace dict. This is directly available in the main thread. * queue.py: Use the workspace from the element directly instead of going through child data
-rw-r--r--src/buildstream/_scheduler/jobs/elementjob.py9
-rw-r--r--src/buildstream/_scheduler/jobs/job.py22
-rw-r--r--src/buildstream/_scheduler/queues/queue.py15
3 files changed, 7 insertions, 39 deletions
diff --git a/src/buildstream/_scheduler/jobs/elementjob.py b/src/buildstream/_scheduler/jobs/elementjob.py
index 683129506..c72be4052 100644
--- a/src/buildstream/_scheduler/jobs/elementjob.py
+++ b/src/buildstream/_scheduler/jobs/elementjob.py
@@ -91,12 +91,3 @@ class ChildElementJob(ChildJob):
# Run the action
return self._action_cb(self._element)
-
- def child_process_data(self):
- data = {}
-
- workspace = self._element._get_workspace()
- if workspace is not None:
- data["workspace"] = workspace.to_dict()
-
- return data
diff --git a/src/buildstream/_scheduler/jobs/job.py b/src/buildstream/_scheduler/jobs/job.py
index 2e8f5ca1a..b2c65b6ba 100644
--- a/src/buildstream/_scheduler/jobs/job.py
+++ b/src/buildstream/_scheduler/jobs/job.py
@@ -74,7 +74,6 @@ class _MessageType(FastEnum):
LOG_MESSAGE = 1
ERROR = 2
RESULT = 3
- CHILD_DATA = 4
# Job()
@@ -121,7 +120,6 @@ class Job:
self.id = "{}-{}".format(action_name, next(Job._id_generator))
self.name = None # The name of the job, set by the job's subclass
self.action_name = action_name # The action name for the Queue
- self.child_data = None # Data to be sent to the main process
#
# Private members
@@ -394,9 +392,6 @@ class Job:
elif envelope.message_type is _MessageType.RESULT:
assert self._result is None
self._result = envelope.message
- elif envelope.message_type is _MessageType.CHILD_DATA:
- # If we retry a job, we assign a new value to this
- self.child_data = envelope.message
else:
assert False, "Unhandled message type '{}': {}".format(envelope.message_type, envelope.message)
@@ -527,20 +522,6 @@ class ChildJob:
def child_process(self):
raise ImplError("ChildJob '{kind}' does not implement child_process()".format(kind=type(self).__name__))
- # child_process_data()
- #
- # Abstract method to retrieve additional data that should be
- # returned to the parent process. Note that the job result is
- # retrieved independently.
- #
- # Values can later be retrieved in Job.child_data.
- #
- # Returns:
- # (dict) A dict containing values to be reported to the main process
- #
- def child_process_data(self):
- return {}
-
# child_action()
#
# Perform the action in the child process, this calls the action_cb.
@@ -599,8 +580,6 @@ class ChildJob:
sandbox=e.sandbox,
)
- self._send_message(_MessageType.CHILD_DATA, self.child_process_data())
-
# Report the exception to the parent (for internal testing purposes)
self._child_send_error(e)
@@ -622,7 +601,6 @@ class ChildJob:
else:
# No exception occurred in the action
- self._send_message(_MessageType.CHILD_DATA, self.child_process_data())
self._child_send_result(result)
elapsed = datetime.datetime.now() - timeinfo.start_time
diff --git a/src/buildstream/_scheduler/queues/queue.py b/src/buildstream/_scheduler/queues/queue.py
index e05d95188..38595729c 100644
--- a/src/buildstream/_scheduler/queues/queue.py
+++ b/src/buildstream/_scheduler/queues/queue.py
@@ -269,19 +269,18 @@ class Queue:
#
# Args:
# element (Element): The element which completed
- # job (Job): The job which completed
#
- def _update_workspaces(self, element, job):
- workspace_dict = None
- if job.child_data:
- workspace_dict = job.child_data.get("workspace", None)
+ def _update_workspaces(self, element):
+ # FIXME: Does this really needs to be done for every job or only some?
+ # If some, we should only run it for those.
+ workspace = element._get_workspace()
# Handle any workspace modifications now
#
- if workspace_dict:
+ if workspace:
context = element._get_context()
workspaces = context.get_workspaces()
- if workspaces.update_workspace(element._get_full_name(), workspace_dict):
+ if workspaces.update_workspace(element._get_full_name(), workspace.to_dict()):
try:
workspaces.save_config()
except BstError as e:
@@ -311,7 +310,7 @@ class Queue:
# Update values that need to be synchronized in the main task
# before calling any queue implementation
- self._update_workspaces(element, job)
+ self._update_workspaces(element)
# Give the result of the job to the Queue implementor,
# and determine if it should be considered as processed