CAS server

It is possible to configure BuildGrid with just a Content Addressable Storage service.

Configuration

Here is an example project configuration.

server:
  - !channel
    address: localhost:50051
    insecure_mode: true

instances:
  - name: main

    storages:
      - !disk-storage &main-storage
        path: !expand-path $HOME/cas

    services:
      - !cas
        storage: *main-storage

      - !bytestream
        storage: *main-storage

Hint

Use - name: "" if using with BuildStream, as instance names are not supported for that tool yet.

This defines a single main instance of the CAS and ByteStream services on port 55051. It is backed onto disk storage and will populate the folder $HOME/cas. To start the server, simply type into your terminal:

bgd server start data/config/artifacts.yml

The server should now be available to use.

Note

According to the Remote Execution API, when receiving a ByteStream.Write() request for a digest that was already uploaded, the server should immediately return a response with commited_size equal to the size of the blob.

However, half-closing a gRPC ByteStream can cause issues with some proxies. [1] In order to work around those limitations, the bytestream service provides an option to slightly alter its behavior:

- !bytestream
      storage: *cas-storage
      disable-overwrite-early-return: true

When enabled, the server will read all the client’s WriteRequest messages from the stream and return successfully without performing an actual write to the storage.