From 9fe2ba3039ccc74f92317fe952f59221d75564e1 Mon Sep 17 00:00:00 2001 From: James Turner Date: Thu, 21 Sep 2023 22:47:50 +0930 Subject: [PATCH] Fix file manifest null reference exception (#265) The cache manifest can deserialize as `null` under certain circumstances. In those cases, we need to initialise the cache manifest as if this is a fresh file. --- src/CacheTower/Providers/FileSystem/FileCacheLayer.cs | 3 ++- src/CacheTower/Providers/FileSystem/FileCacheLayerOptions.cs | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/CacheTower/Providers/FileSystem/FileCacheLayer.cs b/src/CacheTower/Providers/FileSystem/FileCacheLayer.cs index 65ef50c7..f98ae9af 100644 --- a/src/CacheTower/Providers/FileSystem/FileCacheLayer.cs +++ b/src/CacheTower/Providers/FileSystem/FileCacheLayer.cs @@ -89,6 +89,7 @@ private async Task TryLoadManifestAsync() if (File.Exists(ManifestPath)) { CacheManifest = await DeserializeFileAsync>(ManifestPath); + CacheManifest ??= new(); } else { @@ -97,7 +98,7 @@ private async Task TryLoadManifestAsync() Directory.CreateDirectory(Options.DirectoryPath); } - CacheManifest = new ConcurrentDictionary(); + CacheManifest = new(); await SerializeFileAsync(ManifestPath, CacheManifest); } } diff --git a/src/CacheTower/Providers/FileSystem/FileCacheLayerOptions.cs b/src/CacheTower/Providers/FileSystem/FileCacheLayerOptions.cs index fcde2bdc..e0f25f24 100644 --- a/src/CacheTower/Providers/FileSystem/FileCacheLayerOptions.cs +++ b/src/CacheTower/Providers/FileSystem/FileCacheLayerOptions.cs @@ -13,9 +13,9 @@ ICacheSerializer Serializer ) { /// - /// The default manifest save interval of 5 minutes. + /// The default manifest save interval of 30 seconds. /// - public static readonly TimeSpan DefaultManifestSaveInterval = TimeSpan.FromMinutes(5); + public static readonly TimeSpan DefaultManifestSaveInterval = TimeSpan.FromSeconds(30); /// /// The time interval controlling how often the cache manifest is saved to disk.