diff options
author | Daniel Silverstone <daniel.silverstone@codethink.co.uk> | 2018-09-14 15:52:42 +0100 |
---|---|---|
committer | Daniel Silverstone <daniel.silverstone@codethink.co.uk> | 2018-09-18 09:45:50 +0100 |
commit | e32221b6965f0fc1c3b3e348af3ebe25d7aac46e (patch) | |
tree | c418b704514f63ceaa3406d36420fb40093330c0 | |
parent | 345f5f4978f0379a8bc3bfa216fa07e38154b207 (diff) | |
download | buildstream-e32221b6965f0fc1c3b3e348af3ebe25d7aac46e.tar.gz |
sandbox/_sandboxremote.py: Acquire artifact cache via Platform
The SandboxRemote used to construct its own CASCache which was
considered dangerous. This patch replaces that with acquisition of
the cache via the Platform singleton, hopefully eliminating issues
from having more than one artifact cache object in a single process.
Signed-off-by: Daniel Silverstone <daniel.silverstone@codethink.co.uk>
-rw-r--r-- | buildstream/sandbox/_sandboxremote.py | 19 |
1 files changed, 7 insertions, 12 deletions
diff --git a/buildstream/sandbox/_sandboxremote.py b/buildstream/sandbox/_sandboxremote.py index 296b20351..82968ecb0 100644 --- a/buildstream/sandbox/_sandboxremote.py +++ b/buildstream/sandbox/_sandboxremote.py @@ -27,7 +27,7 @@ from . import Sandbox from ..storage._filebaseddirectory import FileBasedDirectory from ..storage._casbaseddirectory import CasBasedDirectory from .._protos.build.bazel.remote.execution.v2 import remote_execution_pb2, remote_execution_pb2_grpc -from .._artifactcache.cascache import CASCache +from .._platform import Platform class SandboxError(Exception): @@ -43,7 +43,6 @@ class SandboxRemote(Sandbox): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) - self.cascache = None url = urlparse(kwargs['server_url']) if not url.scheme or not url.hostname or not url.port: @@ -56,12 +55,6 @@ class SandboxRemote(Sandbox): self.server_url = '{}:{}'.format(url.hostname, url.port) - def _get_cascache(self): - if self.cascache is None: - self.cascache = CASCache(self._get_context()) - self.cascache.setup_remotes(use_config=True) - return self.cascache - def run_remote_command(self, command, input_root_digest, working_directory, environment): # Sends an execution request to the remote execution server. # @@ -78,8 +71,8 @@ class SandboxRemote(Sandbox): output_files=[], output_directories=[self._output_directory], platform=None) - - cascache = self._get_cascache() + platform = Platform.get_platform() + cascache = platform.artifactcache # Upload the Command message to the remote CAS server command_digest = cascache.push_message(self._get_project(), remote_command) if not command_digest or not cascache.verify_digest_pushed(self._get_project(), command_digest): @@ -141,7 +134,8 @@ class SandboxRemote(Sandbox): if tree_digest is None or not tree_digest.hash: raise SandboxError("Output directory structure had no digest attached.") - cascache = self._get_cascache() + platform = Platform.get_platform() + cascache = platform.artifactcache # Now do a pull to ensure we have the necessary parts. dir_digest = cascache.pull_tree(self._get_project(), tree_digest) if dir_digest is None or not dir_digest.hash or not dir_digest.size_bytes: @@ -176,7 +170,8 @@ class SandboxRemote(Sandbox): upload_vdir.recalculate_hash() - cascache = self._get_cascache() + platform = Platform.get_platform() + cascache = platform.artifactcache # Now, push that key (without necessarily needing a ref) to the remote. vdir_digest = cascache.push_directory(self._get_project(), upload_vdir) if not vdir_digest or not cascache.verify_digest_pushed(self._get_project(), vdir_digest): |