- 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]
Added plugin module detection and output path support for script exporters.
#rb none
#rnx
#preflight 624c266bc51908059af7b318
[CL 19622801 by Tim Smith 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]
The AssignLeaseAsync() method now returns a Task<Task<AgentLease>>. The outer task is awaited on each task source in priority order, and all inner tasks are awaited in parallell. Utility methods in TaskSourceBase (Skip/DrainAsync/Lease) exist to simplify creation of task objects to return.
#preflight none
[CL 19535087 by Ben Marsh in ue5-main branch]
- Fix serialization of lists, directories and arrays that are set to null.
- Throw an exception when serializing a type that does not have any explicit compact binary field attributes. This is usually an error, caused by serializing a framework type with no matching converter, but can also occur when serializing an empty base class instance. To handle these situations, the class can be marked with [CbObject] to explicitly opt-in to being valid for serialization.
#fyi Joe.Kirchoff
#preflight none
[CL 19526671 by Ben Marsh in ue5-main branch]
Added number of written files as an informational line.
#rb trivial
#rnx
#preflight 623dcf4b4302b204a3681279
[CL 19512496 by Tim Smith in ue5-main branch]