Commit Graph

7 Commits

Author SHA1 Message Date
carl bystrom
8dd1868e7b Horde: Mark unawaited transaction commands as fire-and-forget
Prevents task cancellation exceptions from being thrown.
#preflight 63481139e948501224cf6013

[CL 22502870 by carl bystrom in ue5-main branch]
2022-10-13 09:26:12 -04:00
Ben Marsh
60fb2115fb Horde: Upgrade all NuGet packages to latest.
#preflight 630cf402e1124837752f0cb3

[CL 21682720 by Ben Marsh in ue5-main branch]
2022-08-29 13:34:15 -04:00
carl bystrom
86d53262a2 Horde: Use a connection pool for all Redis commands
Only expose ConnectionPool from RedisService to avoid using Database or ConnectionMultiplexer directly.
#preflight 62f2661d3b773d041627aad0

[CL 21286130 by carl bystrom in ue5-main branch]
2022-08-09 09:55:46 -04:00
Ben Marsh
83041dec73 Horde: Add a subsystem for hosting tools on Horde.
- 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]
2022-04-05 20:17:50 -04:00
Ben Marsh
6d7c768fd5 Horde: Rename DatabaseService to MongoService for clarity, and symmetry with RedisService.
#preflight none

[CL 19579021 by Ben Marsh in ue5-main branch]
2022-03-31 17:22:28 -04:00
Ben Marsh
4b0764eee2 Horde: Fix coding conventions within Horde.Build.
#preflight none

[CL 19482916 by Ben Marsh in ue5-main branch]
2022-03-23 14:50:23 -04:00
Ben Marsh
1f22379448 Horde: Add a generic base class for versioned collections.
- Versioned collections support individual versioning of each document, through a discriminator that distinguishes between different possible implementations of the document.
- All documents are derived from a common base class which includes an id field, and last update timestamp.
- Atomic operations on documents are supported by querying the last update timestamp before applying updates.
- Documents are cached in Redis whenever read or updated, allowing for performant access without directly accessing the database.

#preflight none

[CL 19431072 by Ben Marsh in ue5-main branch]
2022-03-17 21:24:39 -04:00