-
Notifications
You must be signed in to change notification settings - Fork 38
Description
Background
Tasks have a concept of tags
. While dimensions
are meant to help with task->bot matching, tags are for management purposes. Tags are leveraged by /tasklist
to provide efficient searchability and accounting mechanism. While dimensions
are the what, tags
are the why. The concept of task tags is relatively recent (2 years) but it is fully leveraged now.
At the present, bots can be searched for via their dimensions
(the what) and a few special hardcoded special metadata like quarantined
, is_busy
and is_dead
. See BotsRequest
at appengine/swarming/swarming_rpcs.py#L413.
This is a significant limitation. Tasks were done first because Chrome manages around half a million tasks per day but only has a few thousands of bots, which meant that continuously enumerating all bots for each query was relatively acceptable but it is increasingly not. As the number of bots increases, manageability of bots becomes increasingly important.
There's no other way to search for bots without making this a dimension at the moment. Bots can expose state
but it is intentionally fully unstructured data. This resulted in a fair amount of hardcoded logic in the Polymer UI; for example mp_lease_id
https://github.com/luci/luci-py/blob/master/appengine/swarming/ui/res/imp/botlist/bot-list.html#L366
To help with the explosion of metadata, _BotCommon.composite was added but it is inherently a hack and not extensible.
Goal
Make bots more consistent to tasks by using the same concepts of dimensions
and tags
. Transition the relevant subset of key:value style items from state
into tags
.
Similar to tasks, the server reserves the right add arbitrary tags.
This is to increase accountability of the bots, to expose more properties without necessarily making these attributes selectable for task selection. For example, a task shall not have the ability to select a Machine Provider managed VM or not. On the other hand, it is totally sensible for an administrator to search for all MP managed bots.
Action Items
Addition
- Add generic tag mechanism in the Bot API.
- Update the DB to store these.
- Update bot_config.py to have a structured way to report tags.
- Update bot_main.py to send tags from bot_config.py to the bot api.
- Update indexes to add search by tags.
- Change the server to transparently convert quarantined (maybe is_busy/is_dead too?) to tags.
- Update Cloud Endpoints API message items to surface the tags in bot info.
- Update Cloud Endpoints API bots/list to accept searching by tag.
- Add Polymer UI to surface this new information.
- Update documentation Magic-Values.md.
Cleanup
- Deprecate hardcoded
quarantined
and replace with special tag 'quarantined:0' or 'quarantined:1'. - Deprecate
quarantined
as eitherdimensions
orstate
and migrate to a tag asquarantined:1
andquarantined_reasons:foo
. - Update documentation Magic-Values.md.
- Update indexes again to trim composite.
- Remove hardcoded filters in bot-list.html.