You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@buildstream.apache.org by tv...@apache.org on 2021/02/04 08:22:53 UTC

[buildstream] 17/25: WIP: cascache: use inet socket on win32

This is an automated email from the ASF dual-hosted git repository.

tvb pushed a commit to branch aevri/win32_minimal
in repository https://gitbox.apache.org/repos/asf/buildstream.git

commit 6d9d6a2e6e9db567a2b6061d95c715d8d164c15d
Author: Angelos Evripiotis <je...@bloomberg.net>
AuthorDate: Thu Aug 29 14:14:36 2019 +0100

    WIP: cascache: use inet socket on win32
---
 src/buildstream/_cas/cascache.py | 42 ++++++++++++++++++++++++++--------------
 1 file changed, 28 insertions(+), 14 deletions(-)

diff --git a/src/buildstream/_cas/cascache.py b/src/buildstream/_cas/cascache.py
index 6002adc..fe21251 100644
--- a/src/buildstream/_cas/cascache.py
+++ b/src/buildstream/_cas/cascache.py
@@ -69,11 +69,12 @@ class CASCache():
         if casd:
             # Place socket in global/user temporary directory to avoid hitting
             # the socket path length limit.
-            self._casd_socket_tempdir = tempfile.mkdtemp(prefix='buildstream')
-            self._casd_socket_path = os.path.join(self._casd_socket_tempdir, 'casd.sock')
+            # self._casd_socket_tempdir = tempfile.mkdtemp(prefix='buildstream')
+            # self._casd_socket_path = os.path.join(self._casd_socket_tempdir, 'casd.sock')
+            self._casd_socket_connectstr = 'localhost:9000'
 
             casd_args = [utils.get_host_tool('buildbox-casd')]
-            casd_args.append('--bind=unix:' + self._casd_socket_path)
+            casd_args.append('--bind=' + self._casd_socket_connectstr)
 
             if cache_quota is not None:
                 casd_args.append('--quota-high={}'.format(int(cache_quota)))
@@ -82,7 +83,12 @@ class CASCache():
                 if protect_session_blobs:
                     casd_args.append('--protect-session-blobs')
 
-            casd_args.append(path)
+            # casd_args.append('--verbose')
+
+            # print("casd path:", os.path.abspath(path))
+            casd_args.append( os.path.abspath(path))
+            # casd_logfile = open("casd.logfile", "w")
+            # self._casd_process = subprocess.Popen(casd_args, cwd=path, stdout=casd_logfile, stderr=casd_logfile)
             self._casd_process = subprocess.Popen(casd_args, cwd=path)
             self._casd_start_time = time.time()
         else:
@@ -107,7 +113,7 @@ class CASCache():
         assert self._casd_process, "CASCache was instantiated without buildbox-casd"
 
         if not self._casd_channel:
-            self._casd_channel = grpc.insecure_channel('unix:' + self._casd_socket_path)
+            self._casd_channel = grpc.insecure_channel(self._casd_socket_connectstr)
             self._casd_cas = remote_execution_pb2_grpc.ContentAddressableStorageStub(self._casd_channel)
             self._local_cas = local_cas_pb2_grpc.LocalContentAddressableStorageStub(self._casd_channel)
 
@@ -200,7 +206,8 @@ class CASCache():
                         self._casd_process.wait(timeout=15)
             self._casd_process = None
 
-            shutil.rmtree(self._casd_socket_tempdir)
+            # TODO: only rmtree if not on Windows
+            # shutil.rmtree(self._casd_socket_tempdir)
 
     # contains():
     #
@@ -248,7 +255,8 @@ class CASCache():
             with open(path, 'rb') as f:
                 directory.ParseFromString(f.read())
                 if update_mtime:
-                    os.utime(f.fileno())
+                    # Seems like this is not supported on Windows.
+                    os.utime(f.name)
 
             # Optionally check presence of files
             if with_files:
@@ -394,10 +402,14 @@ class CASCache():
 
         with contextlib.ExitStack() as stack:
             if path is None:
-                tmp = stack.enter_context(self._temporary_object())
-                tmp.write(buffer)
-                tmp.flush()
-                path = tmp.name
+                tmpname = stack.enter_context(self._temporary_object())
+                with open(tmpname, "wb") as tmp:
+                    tmp.write(buffer)
+                    tmp.flush()  # Not necessary?
+                path = tmpname
+                # print("Temporary object:", path)
+
+            path = os.path.abspath(path)
 
             request = local_cas_pb2.CaptureFilesRequest()
             if instance_name:
@@ -419,6 +431,8 @@ class CASCache():
                 raise CASCacheError("Failed to capture blob {}: {}".format(path, blob_response.status.code))
             digest.CopyFrom(blob_response.digest)
 
+            # print("Saved temporary object:", path)
+
         return digest
 
     # set_ref():
@@ -752,10 +766,10 @@ class CASCache():
     # Create a named temporary file with 0o0644 access rights.
     @contextlib.contextmanager
     def _temporary_object(self):
-        with utils._tempnamedfile(dir=self.tmpdir) as f:
-            os.chmod(f.name,
+        with utils._tempnamedfile_name(dir=self.tmpdir) as fname:
+            os.chmod(fname,
                      stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP | stat.S_IROTH)
-            yield f
+            yield fname
 
     # _ensure_blob():
     #