commit | e80668aabb8ce79e3601444083b0d340ce399365 | [log] [tgz] |
---|---|---|
author | Vadim Shtayura <vadimsh@chromium.org> | Thu Jun 06 17:39:03 2024 |
committer | LUCI CQ <infra-scoped@luci-project-accounts.iam.gserviceaccount.com> | Thu Jun 06 17:39:03 2024 |
tree | f7d76485847899fdbacbd92c8a83d5a771725ae6 | |
parent | 642112a64a7508fd3963202b9fdbdb6eea77cc14 [diff] |
[prpc] Allow "peeking" into requests in the override callback. The override callback is primarily used to implement traffic splitting. It is called before an RPC handler and it may decide to fully execute the request itself (usually by proxying it to another service). In Swarming we'll need to look at the pagination cursors to decide if a listing request should be sent to Python or be processed in Go. Thus the override callback needs a way to "peek" into requests. One complication is that http.Request.Body can be read at most once. If we read it, and then decided to resume request execution normally, we need to make sure it can be read again. The only way to do that is to buffer the request in memory. This should be fine, since most RPC requests are tiny (and this is "temporary" code anyway). For the same reason, the "peeking" is not optimal: if we resume the processing of the request after "peeking", the request will be deserialized again (while in theory we could cache the peeked value and reuse it). But this will complicate the code even more, and, as mentioned, requests are tiny and this is temporary. R=chanli@chromium.org Change-Id: I03d4691db78b39bd1e2fe5a37ef279d2e2226675 Reviewed-on: https://chromium-review.googlesource.com/c/infra/luci/luci-go/+/5599264 Reviewed-by: Chan Li <chanli@chromium.org> Commit-Queue: Vadim Shtayura <vadimsh@chromium.org>
LUCI Go code is meant to be worked on from an Chromium infra.git checkout, which enforces packages versions and Go toolchain version. First get fetch via depot_tools.git then run:
fetch infra cd infra/go eval `./env.py` cd src/go.chromium.org/luci
It is now possible to directly install tools with go install:
go install go.chromium.org/luci/auth/client/cmd/...@latest go install go.chromium.org/luci/buildbucket/cmd/...@latest go install go.chromium.org/luci/cipd/client/cmd/...@latest go install go.chromium.org/luci/client/cmd/...@latest go install go.chromium.org/luci/cv/cmd/...@latest go install go.chromium.org/luci/gce/cmd/...@latest go install go.chromium.org/luci/grpc/cmd/...@latest go install go.chromium.org/luci/logdog/client/cmd/...@latest go install go.chromium.org/luci/luci_notify/cmd/...@latest go install go.chromium.org/luci/lucicfg/cmd/...@latest go install go.chromium.org/luci/luciexe/legacy/cmd/...@latest go install go.chromium.org/luci/mailer/cmd/...@latest go install go.chromium.org/luci/mmutex/cmd/...@latest go install go.chromium.org/luci/resultdb/cmd/...@latest go install go.chromium.org/luci/server/cmd/...@latest go install go.chromium.org/luci/swarming/cmd/...@latest go install go.chromium.org/luci/tokenserver/cmd/...@latest go install go.chromium.org/luci/tools/cmd/...@latest
Contributing uses the same flow as Chromium contributions.