This is an automated email from the ASF dual-hosted git repository. not-in-ldap pushed a commit to branch aevri/win32_minimal_seemstowork_20190829 in repository https://gitbox.apache.org/repos/asf/buildstream.git
commit e9e61f34c9977b2004050de1b2fa108b6493e7c3 Author: Angelos Evripiotis <[email protected]> AuthorDate: Tue Jul 9 17:35:32 2019 +0100 WIP: jobpickler, _{,un}reduce_plugincontext --- src/buildstream/_plugincontext.py | 13 ------------- src/buildstream/_scheduler/jobs/jobpickler.py | 24 ++++++++++++++++++++++++ 2 files changed, 24 insertions(+), 13 deletions(-) diff --git a/src/buildstream/_plugincontext.py b/src/buildstream/_plugincontext.py index 60d2475..c058c58 100644 --- a/src/buildstream/_plugincontext.py +++ b/src/buildstream/_plugincontext.py @@ -68,19 +68,6 @@ class PluginContext(): self._alternate_sources = {} self._format_versions = format_versions - def __getstate__(self): - import copy - state = copy.copy(self.__dict__) - del state['_site_source'] - state['_types'] = {} - return state - - def __setstate__(self, state): - self.__dict__ = state - self._site_source = self._plugin_base.make_plugin_source( - searchpath=self._site_plugin_path, - identifier='site_plugin-' + self._identifier) - # lookup(): # # Fetches a type loaded from a plugin in this plugin context diff --git a/src/buildstream/_scheduler/jobs/jobpickler.py b/src/buildstream/_scheduler/jobs/jobpickler.py index 5c1742f..841037c 100644 --- a/src/buildstream/_scheduler/jobs/jobpickler.py +++ b/src/buildstream/_scheduler/jobs/jobpickler.py @@ -28,6 +28,7 @@ from ..._protos.buildstream.v2.artifact_pb2 import Artifact as ArtifactProto from ... import Element, Source from ..._loader import Loader from ..._messenger import Messenger +from ..._plugincontext import PluginContext def _reduce_artifact_proto(instance): @@ -53,6 +54,7 @@ def _reduce_loader(instance): # time that seems just right is here, when preparing the child process' # copy of the Loader. # + # TODO: move this reduce func to loader.py del state['_fetch_subprojects'] return (Loader.__new__, (Loader,), state) @@ -72,11 +74,32 @@ def _reduce_messenger(instance): # which removes and restores the _message_handler. This wouldn't require # access to private details of Messenger. # + # TODO: move this reduce func to messenger.py del state['_message_handler'] return (Messenger.__new__, (Messenger,), state) +def _reduce_plugincontext(instance): + assert isinstance(instance, PluginContext) + state = instance.__dict__.copy() + del state['_site_source'] + state['_types'] = {} + + # TODO: move this reduce func to plugincontext.py + + return (_unreduce_plugincontext, (state,)) + + +def _unreduce_plugincontext(state): + instance = PluginContext() + instance.__dict__ = state + instance._site_source = instance._plugin_base.make_plugin_source( + searchpath=instance._site_plugin_path, + identifier='site_plugin-' + instance._identifier) + return instance + + def _reduce_element(element): assert isinstance(element, Element) meta_kind = element._meta_kind @@ -139,6 +162,7 @@ def pickle_child_job(child_job, context): pickler.dispatch_table[ArtifactProto] = _reduce_artifact_proto pickler.dispatch_table[Loader] = _reduce_loader pickler.dispatch_table[Messenger] = _reduce_messenger + pickler.dispatch_table[PluginContext] = _reduce_plugincontext pickler.dump(child_job) data.seek(0)
