Commit Graph

34 Commits

Author SHA1 Message Date
Ben Marsh
5fa35c8922 Horde: Rename StorageCache to BundleReaderCache.
[CL 28056759 by Ben Marsh in ue5-main branch]
2023-09-20 17:05:49 -04:00
Ben Marsh
5add9bd272 Horde: Rename Program.cs to *App.cs in different programs to make it easier to navigate to.
[CL 27984139 by Ben Marsh in ue5-main branch]
2023-09-18 21:19:48 -04:00
Ben Marsh
609087ecc0 Horde: Make IStorageClient disposable. StorageService now returns reference-counted proxies for the underlying storage client, preventing errors when rolling over to new instances after the original instance is disposed.
[CL 27914992 by Ben Marsh in ue5-main branch]
2023-09-15 10:31:36 -04:00
Ben Marsh
e0f52d9dde Horde: Enable code style warnings in "Analyze" configuration for Horde.Agent and Horde.Agent.TrayApp, and fix current violations.
[CL 27801345 by Ben Marsh in ue5-main branch]
2023-09-12 14:30:37 -04:00
Ben Marsh
0e4f348199 Horde: Move IStorageClient implementations into the EpicGames.Horde.Storage.Clients namespace.
[CL 27738432 by Ben Marsh in ue5-main branch]
2023-09-09 10:14:12 -04:00
Ben Marsh
96454d2ea1 Horde: Add helper methods for opening file streams and subdirectories from bundles.
[CL 27574082 by Ben Marsh in ue5-main branch]
2023-09-01 20:20:15 -04:00
Ben Marsh
ba352e05af Horde: Add a custom StorageCache implementation rather than using IMemoryCache.
This creates separate arenas for different types of content, improving read performance due to header data being discarded, and also allows cache instances to be globally configured and injected via DI.

[CL 27528676 by Ben Marsh in ue5-main branch]
2023-08-31 13:35:03 -04:00
Ben Marsh
107ae45a97 Horde: Add an optional memory cache parameter to FileStorageClient.
[CL 27402767 by Ben Marsh in ue5-main branch]
2023-08-26 13:07:01 -04:00
Ben Marsh
db417ceb75 Horde: Use HTTP range headers for partial object fetches. This works better with redirect URLs, because the parameters are resent to the new location.
[CL 27113564 by Ben Marsh in ue5-main branch]
2023-08-15 14:43:49 -04:00
Ben Marsh
3fcf8b606f Horde: Rename WriteNodeAsync -> WriteRefAsync.
[CL 27059555 by Ben Marsh in ue5-main branch]
2023-08-12 10:20:31 -04:00
Ben Marsh
31a83fc628 Horde: Move bundle implementation into a separate namespace.
[CL 26226699 by Ben Marsh in ue5-main branch]
2023-06-24 16:37:55 -04:00
Ben Marsh
b7f9afb66a Horde: Add a custom handle type for nodes stored in bundles, abstracting implementation details away from most clients.
[CL 26226673 by Ben Marsh in ue5-main branch]
2023-06-24 16:22:48 -04:00
Ben Marsh
db2e9baf50 Horde: Rename BlobLocator -> BundleLocator. The regular API does not allow directly fetching individual blobs by name any more.
[CL 26225915 by Ben Marsh in ue5-main branch]
2023-06-24 10:39:30 -04:00
Ben Marsh
ee56115397 Horde: Remove methods for reading and writing bundles from IStorageClient. This is now an implementation detail specific to types derived from BundleStorageClient.
[CL 26225812 by Ben Marsh in ue5-main branch]
2023-06-24 09:09:10 -04:00
Ben Marsh
dcb955aaef Horde: Rename NodeLocator -> BundleNodeLocator.
[CL 26177183 by Ben Marsh in ue5-main branch]
2023-06-22 05:02:43 -04:00
Ben Marsh
2c12658c40 Horde: Remove HostId and BlobId classes from BlobLocators, and replace them with an opaque path. The backend can decide how to interpret this path as it sees fit.
[CL 26177089 by Ben Marsh in ue5-main branch]
2023-06-22 04:56:06 -04:00
Ben Marsh
d5ffd173f9 Horde: Include a hash in node locators.
[CL 25903979 by Ben Marsh in ue5-main branch]
2023-06-09 16:45:51 -04:00
Ben Marsh
7d5e31784a Horde: Start merging implementations of blobs and nodes in IStorageClient.
* Rename NodeType -> BlobType, NodeData -> BlobData, and NodeHandle -> BlobHandle.
* Add methods to BlobHandle to allow partial reads of payload, and querying refs and type without fetching all data.

[CL 25895881 by Ben Marsh in ue5-main branch]
2023-06-09 11:57:14 -04:00
Ben Marsh
e20d92da45 Horde: Make NodeRef objects immutable.
The collapse/expand state tracking that they used to do was error prone, and frequently required knowledge of implementation details to use correctly. Making the API more explicit makes it easier to use.

[CL 25886709 by Ben Marsh in ue5-main branch]
2023-06-08 20:45:22 -04:00
Ben Marsh
3b71eb6c0e Horde: Flush bundle writers before disposing of them. Ensures that node handles are not corrupted due to buffered data existing only in rented memory.
[CL 25864640 by Ben Marsh in ue5-main branch]
2023-06-07 22:20:37 -04:00
Ben Marsh
d9c08c3a83 Horde: Prevent direct access to locators in node handles, to allow implementations to delay computation until they have been flushed.
[CL 25850133 by Ben Marsh in ue5-main branch]
2023-06-07 13:19:54 -04:00
Ben Marsh
c6246d9472 Horde: Reverting CL 25709378; storing hashes with node locators/handles removes a lot of complexity, and makes it easier for clients to cache data.
#preflight 647a06955e71ee4db648158f

[CL 25762879 by Ben Marsh in ue5-main branch]
2023-06-02 11:35:51 -04:00
Ben Marsh
f77f72cd32 Horde: More refactoring of storage API to hide bundle implementation details.
- Rename StorageClientBase to BundleStorageClient. The current implementation assumes that bundles will be used for storage.
- Use ReadAsync() methods on NodeHandle to expand content, rather than requiring a TreeReader to be passed around.

#preflight none

[CL 25737520 by Ben Marsh in ue5-main branch]
2023-06-01 15:43:22 -04:00
Ben Marsh
a4e2059326 Horde: Abstract out logic for building bundles into an interface, so implementations can choose not to use it if they desire.
#preflight 6477f5eb313d43282fcf9a9f

[CL 25724155 by Ben Marsh in ue5-main branch]
2023-06-01 08:39:27 -04:00
Ben Marsh
221ce42510 Horde: Remove hashes from node handles by default. A separate HashedNodeHandle type bundles the handle with a hash value for round-tripping data through NodeRef objects.
#preflight none

[CL 25709378 by Ben Marsh in ue5-main branch]
2023-05-31 14:41:23 -04:00