Data is currently stored as a single file node; may be worth changing to a proper chunked tree in the future.
#preflight none
[CL 24501529 by Ben Marsh in ue5-main branch]
* IOptions<GlobalConfig> is now authoritative for all configuration data.
* ProjectCollection/ProjectService have been removed, since they only contained a redundant copy of the config data. StreamService has been removed due to no longer providing any functionality over IStreamCollection.
* Global configuration file can now include project/stream definitions directly, or can include them in other files. Each file can include other files using the "Include" property at top level scope.
#preflight none
[CL 23685875 by Ben Marsh in ue5-main branch]
Combined config state is serialized back into a JSON object and compressed, then stored in Redis and broadcast to other server instances via pub/sub events. Update notifications are supported via IChangeTokens and callbacks on IOptionsMonitor.
Exists in parallel with the legacy config system for the time being.
#preflight none
[CL 23599785 by Ben Marsh in ue5-main branch]
Only expose ConnectionPool from RedisService to avoid using Database or ConnectionMultiplexer directly.
#preflight 62f2661d3b773d041627aad0
[CL 21286130 by carl bystrom in ue5-main branch]
* Controllers and messages are now stored alongside their related classes.
* "Impl" folders have been removed to allow more logical grouping of code by subject area rather than implementation details.
#fyi Josh.Engebretson, Carl.Bystrom
#preflight none
[CL 20540527 by Ben Marsh in ue5-main branch]
- 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]