[rsproxy] Re-pack ResultStore upload requests

Adapt the UploadRequests from the input stream to the ResultStore API:
a CreateInvocationRequest, followed by any number of
UploadBatchRequests.

cmd/rsproxy/main.go:
remove unused flags, fields from partialInvocation() are be merged with
the Invocation data coming from the input file/fifo to form
a complete CreateInvocationRequest.

internal/pkg/rsproxy/resultstore.go:
The main Run() function is now responsible for splitting the
initial CreateInvocation request from the UploadRequest stream.
Forward remaining requests to the internal request queue,
where they will be assembled into batches for the UploadBatch RPC.

internal/pkg/rsproxy/server.go:
Move ResultStore-related logic into ResultStore.
Server now just forwards an io.Reader directly to the
ResultStoreUploader via LoadUploadRequestsFromFile.
Run() is now much simplified.

Test: Running rsproxy alongside ninja connected by temporary mkfifo.
Bug: 390427892
Change-Id: Ia596c5917f21fca3c51ccc388ffdc3d15e0cadc2
Reviewed-on: https://fuchsia-review.googlesource.com/c/rsclient/+/1342064
Commit-Queue: David Fang <fangism@google.com>
Reviewed-by: Jay Zhuang <jayzhuang@google.com>
6 files changed
tree: 0668bb19d06144a06d85151b5c84e761c10aefbd
  1. cmd/
  2. internal/
  3. scripts/
  4. tools/
  5. .bazelversion
  6. .gitignore
  7. AUTHORS
  8. BUILD.bazel
  9. CONTRIBUTING.md
  10. go.mod
  11. go.sum
  12. LICENSE
  13. MODULE.bazel
  14. OWNERS
  15. PATENTS
  16. README.md
  17. version.bzl
README.md

ResultStore Client Tools

The rsclient repository contains tools that support the use of ResultStore services and API.

rsproxy acts as a bridge between build tools and the ResultStore service.

The first supported build tool is Fuchsia's fork of ninja.

Developing from source

Prerequisites

  • rsclient builds with Bazel. We recommend using Bazelisk to use the version of Bazel currently supported by this code base.

rsclient is supported for Linux, and is yet untested on other platforms.

Setup

Before working with the code base, we recommend installing the precommit hook once per git clone with:

./scripts/install_precommit.sh

This runs a variety of checks and automatic regeneration steps for you before committing local changes.

Building

To build everything:

$ bazelisk build ...

Testing

To run tests:

$ bazelisk test ...

Install

Versioning

Not yet applicable.

Releases

Not yet applicable.