diff options
Diffstat (limited to 'plugins/VNLib.Data.Caching.Providers.VNCache')
6 files changed, 41 insertions, 25 deletions
diff --git a/plugins/VNLib.Data.Caching.Providers.VNCache/src/BucketLocalManagerFactory.cs b/plugins/VNLib.Data.Caching.Providers.VNCache/src/BucketLocalManagerFactory.cs index 0f49849..793e9fe 100644 --- a/plugins/VNLib.Data.Caching.Providers.VNCache/src/BucketLocalManagerFactory.cs +++ b/plugins/VNLib.Data.Caching.Providers.VNCache/src/BucketLocalManagerFactory.cs @@ -1,5 +1,5 @@ /* -* Copyright (c) 2023 Vaughn Nugent +* Copyright (c) 2024 Vaughn Nugent * * Library: VNLib * Package: ObjectCacheServer @@ -37,6 +37,22 @@ using VNLib.Plugins.Extensions.Loading; namespace VNLib.Data.Caching.Providers.VNCache { + /* + * How it works. + * + * The built-in object cache stores allow for a memory manager to be specified for + * each bucket. Since all operations on buckets are mutually exclusive, we can + * use a single heap for each bucket to get a little more performance on memory + * operations since no locking is required. + * + * This class may be called by a dependency injection container, or directly + * created calling the Create function. Configuration may specify allocation + * flags, currently only the zero all flag is supported. + * + * By default we just use the process global heap configuration to inizalize new + * private heap instances. + */ + [ConfigurationName("memory_manager", Required = false)] internal sealed class BucketLocalManagerFactory : VnDisposeable, ICacheMemoryManagerFactory { @@ -47,9 +63,9 @@ namespace VNLib.Data.Caching.Providers.VNCache public ICacheEntryMemoryManager CreateForBucket(uint bucketId) { //Init a new heap for a individual bucket - IUnmangedHeap localHeap = MemoryUtil.InitializeNewHeapForProcess(); + IUnmangedHeap localHeap = MemoryUtil.InitializeNewHeapForProcess(_zeroAll); - BucketLocalManager manager = new (localHeap, bucketId, _zeroAll); + BucketLocalManager manager = new (localHeap, bucketId); _managers.AddLast(manager); return manager; @@ -97,16 +113,16 @@ namespace VNLib.Data.Caching.Providers.VNCache * to get a little more performance on memory operations */ - private sealed record class BucketLocalManager(IUnmangedHeap Heap, uint BucketId, bool Zero) : ICacheEntryMemoryManager + private sealed record class BucketLocalManager(IUnmangedHeap Heap, uint BucketId) : ICacheEntryMemoryManager { ///<inheritdoc/> - public object AllocHandle(uint size) => Heap.Alloc<byte>(size, Zero); + public object AllocHandle(uint size) => Heap.Alloc<byte>(size, false); ///<inheritdoc/> public void FreeHandle(object handle) { - _ = handle ?? throw new ArgumentNullException(nameof(handle)); + ArgumentNullException.ThrowIfNull(handle); MemoryHandle<byte> _handle = Unsafe.As<object, MemoryHandle<byte>>(ref handle); //Free the handle @@ -116,7 +132,7 @@ namespace VNLib.Data.Caching.Providers.VNCache ///<inheritdoc/> public uint GetHandleSize(object handle) { - _ = handle ?? throw new ArgumentNullException(nameof(handle)); + ArgumentNullException.ThrowIfNull(handle); MemoryHandle<byte> _handle = Unsafe.As<object, MemoryHandle<byte>>(ref handle); return (uint)_handle.Length; @@ -125,7 +141,7 @@ namespace VNLib.Data.Caching.Providers.VNCache ///<inheritdoc/> public Span<byte> GetSpan(object handle, uint offset, uint length) { - _ = handle ?? throw new ArgumentNullException(nameof(handle)); + ArgumentNullException.ThrowIfNull(handle); MemoryHandle<byte> _handle = Unsafe.As<object, MemoryHandle<byte>>(ref handle); return _handle.GetOffsetSpan(offset, checked((int)length)); @@ -134,7 +150,7 @@ namespace VNLib.Data.Caching.Providers.VNCache ///<inheritdoc/> public MemoryHandle PinHandle(object handle, int offset) { - _ = handle ?? throw new ArgumentNullException(nameof(handle)); + ArgumentNullException.ThrowIfNull(handle); MemoryHandle<byte> _handle = Unsafe.As<object, MemoryHandle<byte>>(ref handle); //Pin the handle @@ -144,7 +160,7 @@ namespace VNLib.Data.Caching.Providers.VNCache ///<inheritdoc/> public void ResizeHandle(object handle, uint newSize) { - _ = handle ?? throw new ArgumentNullException(nameof(handle)); + ArgumentNullException.ThrowIfNull(handle); MemoryHandle<byte> _handle = Unsafe.As<object, MemoryHandle<byte>>(ref handle); //Resize the handle diff --git a/plugins/VNLib.Data.Caching.Providers.VNCache/src/FBMCacheClient.cs b/plugins/VNLib.Data.Caching.Providers.VNCache/src/FBMCacheClient.cs index e21cf4a..73783dc 100644 --- a/plugins/VNLib.Data.Caching.Providers.VNCache/src/FBMCacheClient.cs +++ b/plugins/VNLib.Data.Caching.Providers.VNCache/src/FBMCacheClient.cs @@ -1,5 +1,5 @@ /* -* Copyright (c) 2023 Vaughn Nugent +* Copyright (c) 2024 Vaughn Nugent * * Library: VNLib * Package: VNLib.Data.Caching.Providers.VNCache @@ -317,7 +317,7 @@ namespace VNLib.Data.Caching.Providers.VNCache } ///<inheritdoc/> - public override Task AddOrUpdateAsync<T>(string key, string? newKey, ObjectDataReader<T> callback, T state, CancellationToken cancellation) + public override Task AddOrUpdateAsync<T>(string key, string? newKey, ObjectDataGet<T> callback, T state, CancellationToken cancellation) { return !IsConnected ? throw new InvalidOperationException("The underlying client is not connected to a cache node") diff --git a/plugins/VNLib.Data.Caching.Providers.VNCache/src/MemoryCache.cs b/plugins/VNLib.Data.Caching.Providers.VNCache/src/MemoryCache.cs index 98f6a3d..0c1a2b5 100644 --- a/plugins/VNLib.Data.Caching.Providers.VNCache/src/MemoryCache.cs +++ b/plugins/VNLib.Data.Caching.Providers.VNCache/src/MemoryCache.cs @@ -1,5 +1,5 @@ /* -* Copyright (c) 2023 Vaughn Nugent +* Copyright (c) 2024 Vaughn Nugent * * Library: VNLib * Package: VNLib.Data.Caching.Providers.VNCache @@ -192,7 +192,7 @@ namespace VNLib.Data.Caching.Providers.VNCache } ///<inheritdoc/> - public override Task AddOrUpdateAsync<T>(string key, string? newKey, ObjectDataReader<T> callback, T state, CancellationToken cancellation) + public override Task AddOrUpdateAsync<T>(string key, string? newKey, ObjectDataGet<T> callback, T state, CancellationToken cancellation) { //Update object data return _memCache.AddOrUpdateObjectAsync(key, newKey, callback, state, default, cancellation).AsTask(); diff --git a/plugins/VNLib.Data.Caching.Providers.VNCache/src/RemoteBackedMemoryCache.cs b/plugins/VNLib.Data.Caching.Providers.VNCache/src/RemoteBackedMemoryCache.cs index c7952b4..ddc6c4b 100644 --- a/plugins/VNLib.Data.Caching.Providers.VNCache/src/RemoteBackedMemoryCache.cs +++ b/plugins/VNLib.Data.Caching.Providers.VNCache/src/RemoteBackedMemoryCache.cs @@ -1,5 +1,5 @@ /* -* Copyright (c) 2023 Vaughn Nugent +* Copyright (c) 2024 Vaughn Nugent * * Library: VNLib * Package: VNLib.Data.Caching.Providers.VNCache @@ -83,8 +83,8 @@ namespace VNLib.Data.Caching.Providers.VNCache public RemoteBackedMemoryCache(MemoryCacheConfig memCache, IGlobalCacheProvider backingStore, BucketLocalManagerFactory? factory):base(memCache) { - _ = memCache ?? throw new ArgumentNullException(nameof(memCache)); - _ = backingStore ?? throw new ArgumentNullException(nameof(backingStore)); + ArgumentNullException.ThrowIfNull(memCache); + ArgumentNullException.ThrowIfNull(backingStore); memCache.Validate(); @@ -166,9 +166,9 @@ namespace VNLib.Data.Caching.Providers.VNCache ///<inheritdoc/> public override async Task GetAsync<T>(string key, ObjectDataSet<T> setter, T state, CancellationToken cancellation) { - _ = key ?? throw new ArgumentNullException(nameof(key)); - _ = setter ?? throw new ArgumentNullException(nameof(setter)); - + ArgumentException.ThrowIfNullOrWhiteSpace(key); + ArgumentNullException.ThrowIfNull(setter); + CheckConnected(); IBlobCacheBucket bucket = _memCache.GetBucket(key); @@ -220,7 +220,7 @@ namespace VNLib.Data.Caching.Providers.VNCache } ///<inheritdoc/> - public override async Task AddOrUpdateAsync<T>(string key, string? newKey, ObjectDataReader<T> callback, T state, CancellationToken cancellation) + public override async Task AddOrUpdateAsync<T>(string key, string? newKey, ObjectDataGet<T> callback, T state, CancellationToken cancellation) { CheckConnected(); diff --git a/plugins/VNLib.Data.Caching.Providers.VNCache/src/VNCacheBase.cs b/plugins/VNLib.Data.Caching.Providers.VNCache/src/VNCacheBase.cs index f8a9ca6..c337ef4 100644 --- a/plugins/VNLib.Data.Caching.Providers.VNCache/src/VNCacheBase.cs +++ b/plugins/VNLib.Data.Caching.Providers.VNCache/src/VNCacheBase.cs @@ -1,5 +1,5 @@ /* -* Copyright (c) 2023 Vaughn Nugent +* Copyright (c) 2024 Vaughn Nugent * * Library: VNLib * Package: VNLib.Data.Caching.Providers.VNCache @@ -49,7 +49,7 @@ namespace VNLib.Data.Caching.Providers.VNCache public abstract Task AddOrUpdateAsync<T>(string key, string? newKey, T value, ICacheObjectSerializer serialzer, CancellationToken cancellation); ///<inheritdoc/> - public abstract Task AddOrUpdateAsync<T>(string key, string? newKey, ObjectDataReader<T> callback, T state, CancellationToken cancellation); + public abstract Task AddOrUpdateAsync<T>(string key, string? newKey, ObjectDataGet<T> callback, T state, CancellationToken cancellation); ///<inheritdoc/> public abstract Task<bool> DeleteAsync(string key, CancellationToken cancellation); diff --git a/plugins/VNLib.Data.Caching.Providers.VNCache/src/VNCacheClient.cs b/plugins/VNLib.Data.Caching.Providers.VNCache/src/VNCacheClient.cs index 9807939..20b9f69 100644 --- a/plugins/VNLib.Data.Caching.Providers.VNCache/src/VNCacheClient.cs +++ b/plugins/VNLib.Data.Caching.Providers.VNCache/src/VNCacheClient.cs @@ -1,5 +1,5 @@ /* -* Copyright (c) 2023 Vaughn Nugent +* Copyright (c) 2024 Vaughn Nugent * * Library: VNLib * Package: VNLib.Data.Caching.Providers.VNCache @@ -173,7 +173,7 @@ namespace VNLib.Data.Caching.Providers.VNCache } ///<inheritdoc/> - public Task AddOrUpdateAsync<T>(string key, string? newKey, ObjectDataReader<T> callback, T state, CancellationToken cancellation) + public Task AddOrUpdateAsync<T>(string key, string? newKey, ObjectDataGet<T> callback, T state, CancellationToken cancellation) { return _client.AddOrUpdateAsync(key, newKey, callback, state, cancellation); } |