Commit Graph

35 Commits

Author SHA1 Message Date
carl bystrom
95e82bf3cc Horde: Add support for compressed blob uploading in remote exec test client
#preflight 628e1030841e8395c64fcb7c

[CL 20362422 by carl bystrom in ue5-main branch]
2022-05-25 07:21:20 -04:00
carl bystrom
a60142dcec Horde: Mark compressed blob reading as not supported in certain clients
Instead of NotImplementedException.

#preflight none

[CL 20324348 by carl bystrom in ue5-main branch]
2022-05-23 08:12:37 -04:00
carl bystrom
e717f21af5 Horde: Add support for compressed files in compute tasks
When FileNode is marked as compressed, the appropriate method for download is used as compressed blobs are references by their uncompressed hash.
Files are still downloaded as-is and are not decompressed by the agent executor.

Flagging compression for files during upload is still left to be implemented.
#preflight 6287b26d5b568e5761f9a1a1

[CL 20295190 by carl bystrom in ue5-main branch]
2022-05-20 11:28:28 -04:00
Ben Marsh
e54ac34152 Upgrade EpicGames.Horde to NET 6.
#preflight 62842632ac1a933d4784bccc

[CL 20253385 by Ben Marsh in ue5-main branch]
2022-05-17 19:12:52 -04:00
Ben Marsh
722fbe2155 Horde: Thread-safe store for small objects backed by a memory-mapped file, optimized for read/write performance and data integrity.
Reads are typically lock free. Writes require a lock but otherwise complete quickly and in constant time. The store is transactional, and is designed not to lose data if the process is terminated between flushes. To accomplish this, blocks are not reused until the store is flushed via a call to Save().

Blobs allocated in the store may be split into multiple cells, so do not support access to a contiguous underlying memory region. The cells comprising a blob may be enumerated and accessed individually via a handle to the blob.
The store also supports storage of tree objects which can be addressed by hash. Internally, these objects are reference counted and maintain a list of references to other blobs separately to their payload.

If the store runs out of space, supplemental stores may be allocated in granularity of <see cref="LocalBlobStoreOptions.ExpandStepSize"/>. These stores are merged into the main one during the next Save() call.

#preflight none
#preflight 625872ee7f628a9018e480e5

[CL 19761303 by Ben Marsh in ue5-main branch]
2022-04-14 15:21:19 -04:00
Ben Marsh
a18929e82f Horde: Add timing stats to remote execution responses.
Two sets of data are returned - one detailing the timeline of the task on the server (being queued, through dispatched, to completed), and one detailing the timeline of the task on the remote agent (downloading data, executing the task, and uploading the result).

The standalone compute command implementation in Horde.Agent also logs its own timeline of events.

#preflight none

[CL 19675739 by Ben Marsh in ue5-main branch]
2022-04-07 15:34:25 -04:00
Ben Marsh
965a6031d8 Horde: Add support for pushing data to Horde storage without knowing the hash in advance.
#preflight none

[CL 19628357 by Ben Marsh in ue5-main branch]
2022-04-05 14:03:07 -04:00
Ben Marsh
faeb37fd20 Horde: Add a basic executor that will extract data from a bundle.
Also add matching grpc wrapper types for namespace, bucket and ref identifiers.

#preflight none

[CL 19598907 by Ben Marsh in ue5-main branch]
2022-04-01 22:37:15 -04:00
Ben Marsh
4f74fda8c1 Horde: Use standard coding style for EpicGames.Horde.
#preflight none

[CL 19452872 by Ben Marsh in ue5-main branch]
2022-03-21 11:58:35 -04:00
Ben Marsh
f035ee86ae Horde: Rename ReadObject/WriteObject methods on IStorageClient to ReadBlob/WriteBlob for consistency. Objects and blobs are generally treated as identical now.
#preflight none

[CL 19374912 by Ben Marsh in ue5-main branch]
2022-03-14 13:37:17 -04:00
Ben Marsh
5df05854df Horde: Add cancellation token arguments to all IStorageClient extension methods.
#preflight none

[CL 19374508 by Ben Marsh in ue5-main branch]
2022-03-14 13:15:29 -04:00
Ben Marsh
ab05edcdd0 Horde: Add stats for writing out new bundles to storage.
#preflight none

[CL 19373739 by Ben Marsh in ue5-main branch]
2022-03-14 12:14:47 -04:00
Joe Kirchoff
73a88da8b3 Horde: Bump DefaultMaxInMemoryBlobLength
#rnx
#rb none
#preflight none

[CL 19363383 by Joe Kirchoff in ue5-main branch]
2022-03-11 18:27:39 -05:00
Ben Marsh
719fa0b9d9 Horde: Fix infinite recursion when trying to upload compact binary encoded objects.
#preflight none
#fyi Joe.Kirchoff

[CL 19362130 by Ben Marsh in ue5-main branch]
2022-03-11 17:35:08 -05:00
Joe Kirchoff
bb75809a0e Horde: Add IStorageClient.FindMissingBlobsAsync
#rnx
#rb none
#preflight none

[CL 19358297 by Joe Kirchoff in ue5-main branch]
2022-03-11 13:32:51 -05:00
Ben Marsh
17ddfdfdfc Horde: More improvements to Bundles.
- Now does all string manipulations in UTF8 rather than converting to and fro with data received from Perforce
- Added support for reading a stream out of a CbWriter object. This allows pushing data directly to Horde Storage from the piecemeal 1kb buffers it allocates without having to concatenate everything into a contiguous array first, removing some big allocations and data copying on the common path for serializing objects into Horde Storage.
- Refactored the way that BundleNodeRef objects work so they don't need to track the Bundle that owns them, so we can add some serialization/deserialization tests without having to set up as much framework code.

#preflight none

[CL 19345769 by Ben Marsh in ue5-main branch]
2022-03-10 19:56:01 -05:00
Ben Marsh
529370dad2 Horde: Missing implementation for HasBlobAsync on TracingStorageClient.
#preflight none

[CL 19281590 by Ben Marsh in ue5-main branch]
2022-03-05 10:14:30 -05:00
Ben Marsh
a7605df9a8 Horde: Add a storage client which traces interactions with the underlying storage system to the log.
#preflight none

[CL 19281563 by Ben Marsh in ue5-main branch]
2022-03-05 09:49:28 -05:00
Joe Kirchoff
2c5b4f559e Horde: Add IStorageClient.HasBlobAsync
#rnx
#rb Ben.Marsh
#preflight none

[CL 19272109 by Joe Kirchoff in ue5-main branch]
2022-03-04 14:26:17 -05:00
Ben Marsh
5bf92bfe33 Horde: Hardening for storage bundles.
- CommitService now writes bundles rather than tree pack objects.
- Legacy TreePack classes removed.
- Added commands for creating, extracting, diffing bundles to Horde Agent and Horde Build (implemented in both places using shared code, in order to account for convenience in configuring the matching storage backend).
- Some bug fixes.

#preflight none

[CL 19176653 by Ben Marsh in ue5-main branch]
2022-02-28 12:55:47 -05:00
Joakim Lindqvist
2bb47356d3 Horde Storage - Introduced a batch api for refs, this allows you to GET/PUT and check for existence (HEAD) in batch. This requires compact binary response types as we want to return the ref payload inline in the response.
Also removed the old Compact binary serialization code as its not used anymore.
Lastly I fix the old exist batch api (that uses query strings) as it wasnt working and had no tests (this shouldnt really need to be used though as the new api replaces it but a simpler api might be useful for someone)

#preflight none

[CL 19171580 by Joakim Lindqvist in ue5-main branch]
2022-02-28 05:13:30 -05:00
Ben Marsh
1b3110c5ec Horde: Refactored system for creating bundles of tree objects.
- Tree can now be modified without having to have entire working set in memory.
- Multiple nodes can be compressed/decompressed together, and an optional IMemoryCache allows caching decompressed blocks.
- Added support for specifying custom compact-binary serializers on individual properties.
- Added test suite to test bundling functionality.
- Fixed issue where VarInts of negative values would not serialize correctly.
#preflight 621952f68849a7424fa36567

[CL 19158249 by Ben Marsh in ue5-main branch]
2022-02-25 17:11:58 -05:00
Ben Marsh
95b572f0f6 Horde: Fix documentation comments for EpicGames.Horde.
#preflight none

[CL 19153686 by Ben Marsh in ue5-main branch]
2022-02-25 14:49:52 -05:00
Ben Marsh
1839e4e0f4 Horde: Add commands to analyze and extract contents of tree packs, and add support for creating "pointer files" in packs to Perforce depot/revision numbers rather than actually including the file contents themselves.
#preflight none

[CL 19042497 by Ben Marsh in ue5-main branch]
2022-02-17 16:39:27 -05:00
Ben Marsh
41d7f3c295 Horde: Simplify process for converting TreePack objects into refs, prior to adding to commit service.
#preflight 620d145101253d2e19133d94

[CL 19014499 by Ben Marsh in ue5-main branch]
2022-02-16 10:17:52 -05:00