- Each tool can have a number of deployments which are rolled out over time. Clients can specify a "phase" value indicating where in the queue they want to take updates (ie. whether they want to be early- or late-adopters), and deployments can be paused and cancelled.
- Tool channels are configured through the global configuration file. Tools can be marked "public", meaning that they do not require authentication against Horde for access. This can be useful for auto-update scenarios.
- The most recent 5 deployments are kept in the tool at any time.
The collection and controller implementation here is an experiment in reducing the amount of boilerplate currently adopted as a pattern in Horde. Notably:
- Model and collection classes are concrete rather than interfaces (since we don't generally mock them anyway).
- The same model class with annotations is used for response objects (paving the way to supporting patching and filtering using the same public model as the internal model).
- The VersionedCollection class is used to handle automatic migration of documents across schema versions, and cache document values with Redis.
- MongoDB property names are explicit and short, rather than just taking variable names.
#preflight none
[CL 19636699 by Ben Marsh in ue5-main branch]
- MongoService.GetCollection() has an overload that takes a list of indexes.
- A background task will add and remove indexes to the collection to ensure that this list of indexes is reflected in the database.
- A shared Redis lock is acquired to ensure only one server instance can upgrade collections at a time.
- The application version is now expected to be in SemVer format, and is saved into a singleton document whenever an upgrade is made. Upgrades are only performed if the current server version is greater or equal to the value stored here, in order to prevent servers of different versions trying to perform conflicting operations.
#preflight none
#fyi Carl.Bystrom, Josh.Engebretson
[CL 19589738 by Ben Marsh in ue5-main branch]
Kept it for leader election and replication as these will hit external services and thus all starting at the same time causes unhealth spikes.
#preflight none
[CL 19585648 by Joakim Lindqvist in ue5-main branch]
Also added some more tags to the DD scopes to better filter out operations that are of intrest
#preflight none
[CL 19571808 by Joakim Lindqvist in ue5-main branch]
I did keep the top level scope for replication as we do use that quite frequently to understand what the replicators are doing.
#preflight none
[CL 19571388 by Joakim Lindqvist in ue5-main branch]
- Fix uncapped growth of channel for stream updates.
- Prevent no-op changes unnecessarily triggering update iterations.
- Add functionality to AsyncEvent to support latching the event on, rather than just pulsing it.
#preflight none
[CL 19545492 by Ben Marsh in ue5-main branch]