[Notes] [Git][BuildGrid/buildgrid][mablanch/93-disk-storage-path-scheme] 3 commits: Updated `execute` command to `operation` in the documentation.



Title: GitLab

Martin Blanchard pushed to branch mablanch/93-disk-storage-path-scheme at BuildGrid / buildgrid

Commits:

3 changed files:

Changes:

  • buildgrid/client/cas.py
    ... ... @@ -283,7 +283,7 @@ class Downloader:
    283 283
                 try:
    
    284 284
                     batch_response = self.__cas_stub.BatchReadBlobs(batch_request)
    
    285 285
                     for response in batch_response.responses:
    
    286
    -                    assert response.digest.hash in digests
    
    286
    +                    assert response.digest in digests
    
    287 287
     
    
    288 288
                         read_blobs.append(response.data)
    
    289 289
     
    

  • buildgrid/server/cas/storage/disk.py
    ... ... @@ -21,7 +21,6 @@ A CAS storage provider that stores files as blobs on disk.
    21 21
     """
    
    22 22
     
    
    23 23
     import os
    
    24
    -import pathlib
    
    25 24
     import tempfile
    
    26 25
     
    
    27 26
     from .storage_abc import StorageABC
    
    ... ... @@ -30,28 +29,41 @@ from .storage_abc import StorageABC
    30 29
     class DiskStorage(StorageABC):
    
    31 30
     
    
    32 31
         def __init__(self, path):
    
    33
    -        self._path = pathlib.Path(path)
    
    34
    -        os.makedirs(str(self._path / "temp"), exist_ok=True)
    
    32
    +        if not os.path.isabs(path):
    
    33
    +            self.__root_path = os.path.abspath(path)
    
    34
    +        else:
    
    35
    +            self.__root_path = path
    
    36
    +        self.__cas_path = os.path.join(self.__root_path, 'cas')
    
    37
    +
    
    38
    +        self.objects_path = os.path.join(self.__cas_path, 'objects')
    
    39
    +        self.temp_path = os.path.join(self.__root_path, 'tmp')
    
    40
    +
    
    41
    +        os.makedirs(self.objects_path, exist_ok=True)
    
    42
    +        os.makedirs(self.temp_path, exist_ok=True)
    
    35 43
     
    
    36 44
         def has_blob(self, digest):
    
    37
    -        return (self._path / (digest.hash + "_" + str(digest.size_bytes))).exists()
    
    45
    +        return os.path.exists(self._get_object_path(digest))
    
    38 46
     
    
    39 47
         def get_blob(self, digest):
    
    40 48
             try:
    
    41
    -            return (self._path / (digest.hash + "_" + str(digest.size_bytes))).open('rb')
    
    49
    +            return open(self._get_object_path(digest), 'rb')
    
    42 50
             except FileNotFoundError:
    
    43 51
                 return None
    
    44 52
     
    
    45
    -    def begin_write(self, _digest):
    
    46
    -        return tempfile.NamedTemporaryFile("wb", dir=str(self._path / "temp"))
    
    53
    +    def begin_write(self, digest):
    
    54
    +        return tempfile.NamedTemporaryFile("wb", dir=self.temp_path)
    
    47 55
     
    
    48 56
         def commit_write(self, digest, write_session):
    
    49
    -        # Atomically move the temporary file into place.
    
    50
    -        path = self._path / (digest.hash + "_" + str(digest.size_bytes))
    
    51
    -        os.replace(write_session.name, str(path))
    
    57
    +        object_path = self._get_object_path(digest)
    
    58
    +
    
    52 59
             try:
    
    53
    -            write_session.close()
    
    54
    -        except FileNotFoundError:
    
    55
    -            # We moved the temporary file to a new location, so when Python
    
    56
    -            # tries to delete its old location, it'll fail.
    
    60
    +            os.makedirs(os.path.dirname(object_path), exist_ok=True)
    
    61
    +            os.link(write_session.name, object_path)
    
    62
    +        except FileExistsError:
    
    63
    +            # Object is already there!
    
    57 64
                 pass
    
    65
    +
    
    66
    +        write_session.close()
    
    67
    +
    
    68
    +    def _get_object_path(self, digest):
    
    69
    +        return os.path.join(self.objects_path, digest.hash[:2], digest.hash[2:])

  • docs/source/using_internal.rst
    ... ... @@ -20,7 +20,7 @@ In one terminal, start a server:
    20 20
     
    
    21 21
     In another terminal, upload an action to CAS:
    
    22 22
     
    
    23
    -.. code-block::sh
    
    23
    +.. code-block:: sh
    
    24 24
     
    
    25 25
        bgd cas upload-dummy
    
    26 26
     
    
    ... ... @@ -34,7 +34,7 @@ The stage should show as ``QUEUED`` as it awaits a bot to pick up the work:
    34 34
     
    
    35 35
     .. code-block:: sh
    
    36 36
     
    
    37
    -   bgd execute list
    
    37
    +   bgd operation list
    
    38 38
     
    
    39 39
     Create a bot session:
    
    40 40
     
    
    ... ... @@ -46,7 +46,7 @@ Show the work as completed:
    46 46
     
    
    47 47
     .. code-block:: sh
    
    48 48
     
    
    49
    -   bgd execute list
    
    49
    +   bgd operation list
    
    50 50
     
    
    51 51
     
    
    52 52
     .. _simple-build:
    



  • [Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]