commit | 53d1ff8f3c0969c1225b229f74b6d204648fd180 | [log] [tgz] |
---|---|---|
author | Vadim Shtayura <vadimsh@chromium.org> | Fri Apr 04 19:43:52 2025 |
committer | LUCI CQ <infra-scoped@luci-project-accounts.iam.gserviceaccount.com> | Fri Apr 04 19:43:52 2025 |
tree | 0f408c515b279c0973b0d522a427cd45a2cd3003 | |
parent | 270d22109d6e93ba6196a7b662a688a7143e7b75 [diff] |
[swarming] Refactor "tasks" package and how it is tested. The primary motivation is to do all changes to state of tasks via a single interface tasks.Manager, which is passed to other server subsystems (botapi, rpcs, scan, etc). It encapsulates all necessary dependencies to change tasks (removing the need for callbacks soup added in https://chromium-review.googlesource.com/c/6427869). Tests for botapi and other server parts can just mock it out by using &tasks.MockedManager{}. But some RPC tests actually rely on implementation of tasks logic. To avoid breaking (or significantly changing) them, we need to use the "production" implementation, but mock some of its bits, in particular all TQ tasks. To avoid adding back the need to pass extra fields other than tasks.Manager, and to avoid excessively polluting tasks implementation with mocks, use tqtesting.Scheduler infrastructure in tests. This would also eventually allow to run more high-level integration-like tests (since tqtesting.Scheduler can actually run full workflows). Unfortunately, it has its own can of worms: tq.AddTask can only add tasks that have been registered in the dispatcher, and there are a bunch of different packages that register tasks. To avoid coupling between all these packages, move TQ task definitions into a dedicated "tqtasks" package that just exposes all known TQ tasks, without their implementations. Finally, make API of various existing task operations more consistent. In particular, cancellation now always require the caller to open a transaction, just like ClaimOp and AbandonOp. To simplify this transactional API, use txndefer.Defer(...) to register post-transactional work, like metrics reporting, instead of making callers to call post-txn functions explicitly. txndefer.Defer is already used by server/tq implementation, so it is already a significantly dependency of the server. R=chanli@chromium.org Change-Id: Ie016a416d9b0eec10bdd7e96d6a1a39476d6287c Reviewed-on: https://chromium-review.googlesource.com/c/infra/luci/luci-go/+/6433706 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.