[swarming] Add a mechanism to switch BQ exports Python => Go.

Each BQ export task (either Python or Go) has a timestamp of
the start of the time interval it exports.

We'll have an entity with the time when the switch should happen.
This entity will be read by both Python and Go task queue tasks
that do actual exports.

In the initial state (when the entity is missing or the exported
time range starts before designated switch time), Python TQ tasks
will do the export and Go tasks will just silently do nothing.

Once timestamp of export tasks cross the threshold, Python tasks
will start doing nothing and Go tasks will do actual exports.

As long as the time threshold is not inside of any exported
interval, we should have no gaps. Luckily both Python and Go
exporters align their export intervals on 1m grid, so as long
as we switch at an exact minute, there will be no gaps.

Such a separate entity allows to decouple deployment from the actual
switch. We'll deploy new Go code and pass correct CLI flags to
configure the export first. It will be running in noop mode
essentially, but we'll be able to confirm configs look good etc.

Once it is fully deploy and unlikely to be rolled back due to some
other unrelated reason, we'll create the entity to schedule the
switchover. The entity will be created semi-manually by modifying
datastore from a workstation by calling SetMigrationState.

R=chanli@chromium.org

Change-Id: Ica2d4dc34d82bc4b7bf7fe161fd6ad0c3763bd0a
Reviewed-on: https://chromium-review.googlesource.com/c/infra/luci/luci-go/+/5508235
Commit-Queue: Vadim Shtayura <vadimsh@chromium.org>
Reviewed-by: Chan Li <chanli@chromium.org>
3 files changed
tree: ddb5fca41b2a9ea7b4cf05c4fdbe183d6565fe8e
  1. analysis/
  2. appengine/
  3. auth/
  4. auth_service/
  5. bisection/
  6. build/
  7. buildbucket/
  8. casviewer/
  9. cipd/
  10. cipkg/
  11. client/
  12. common/
  13. config/
  14. config_service/
  15. cv/
  16. deploy/
  17. examples/
  18. gae/
  19. gce/
  20. grpc/
  21. hardcoded/
  22. led/
  23. logdog/
  24. luci_notify/
  25. lucicfg/
  26. lucictx/
  27. luciexe/
  28. mailer/
  29. milo/
  30. mmutex/
  31. provenance/
  32. resultdb/
  33. scheduler/
  34. scripts/
  35. server/
  36. standalone/
  37. starlark/
  38. swarming/
  39. teams/
  40. third_party/
  41. tokenserver/
  42. tools/
  43. tree_status/
  44. vpython/
  45. web/
  46. .gitallowed
  47. .gitattributes
  48. .gitignore
  49. .go-lintable
  50. AUTHORS
  51. codereview.settings
  52. CONTRIBUTING.md
  53. CONTRIBUTORS
  54. go.mod
  55. go.sum
  56. LICENSE
  57. OWNERS
  58. PRESUBMIT.py
  59. README.md
  60. tools.go
  61. WATCHLISTS
README.md

luci-go: LUCI services and tools in Go

GoReference

Installing

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

Contributing uses the same flow as Chromium contributions.