- Agent and server both use the IStorageClient interface in EpicGames.Horde to communicate with the storage backend.
- An instance of Horde.Storage is run in the same process as Horde.Build for local development, but is compiled out for containerized builds.
- Compute clusters are defined in global config file, and control permissions for who can create remote execution jobs. In the future it will likely be used to control access for different machines, prioritization, etc...
- Each compute cluster has an identifier, and the API for starting/monitoring jobs includes that identifier as part of the route (ie. /api/v1/compute/<cluster-id>).
- Removed gRPC interface for storage and compute services. May be resurrected in the future.
#preflight none
[CL 18784247 by Ben Marsh in ue5-main branch]
- Data read from stdout/stderr is now writen to buffers posted in a Channel<T>, which correctly supports await and cancellation (unlike AsynchronousPipe).
- Public StdOut/StdErr streams are now a custom stream implementation that reads from the channel and copies data into the output buffer.
- Buffer objects are sized at 1024 bytes and pooled, which should be enough to accomodate most output lines without splitting.
- When the process is disposed, we now terminate the entire process tree. The tasks left reading from the child process terminate asynchronously.
Tested in a command line and WinForms app (by forcing SupportsJobObjects to return false) with asynchronous and synchronous reads to ensure code does not deadlock.
#preflight 61e062b3ed50181feb511e39
[CL 18601195 by Ben Marsh in ue5-main branch]
- Now uses the custom C++ Perforce library developed for Horde. This removes dependencies on an installed P4.EXE tool, improves performance, and paves the way to cross-platform support via command line invocations.
- As part of the migration to the new Perforce library, the codebase now uses async/await extensively instead of background threads, and supports a proper cancellation path rather than aborting threads.
- ILogger is now used for writing log files.
- Started converting to use of nullable annotations.
#preflight none
[CL 18511154 by Ben Marsh in ue5-main branch]
When a header is specified via the -File=... or -FileList=... arguments, we scan the engine and project directories for source files and parse the include directives from them. A lookup table is built that maps from filename to files that include it, allowing building a (conservative) superset of the files which may include it.
#preflight 61bd194a6041819fd179bf21
[CL 18486253 by Ben Marsh in ue5-main branch]
Nodes can now be implemented by arbitary C# methods. Graph structure is specified through expression trees implemented using Bg* types, which are not substituted with values until execution time. Doing so allows determination of node and option dependencies for a particular target, allowing us to generate dynamic UI for presenting relevant settings to the user.
Includes partial implementation of Installed Build script as an example implementation.
#preflight 61bb85d46c2686e86322eec9
[CL 18477305 by Ben Marsh in ue5-main branch]
- HordeControllerBase defines methods for generating standard 404, 503 responses with typed data.
- Unhandled exceptions include an exception field detailing the source of the error.
- Added a string typeconverter for AgentId and SubResourceId, so they can be bound directly to controller routes.
- Modified SessionId to be an alias for ObjectId<ISession>.
#fyi Josh.Engebretson
[CL 18369047 by Ben Marsh in ue5-main branch]