Fixed AutoSavedStore's deletion of data when table was using composite keys.

This commit is contained in:
Tom
2025-01-09 03:38:23 +00:00
parent 3429c8f8dc
commit 467c3cf0b0
15 changed files with 202 additions and 221 deletions

View File

@@ -6,7 +6,6 @@ namespace HermesSocketServer.Store.Internal
{
public abstract class GroupSaveStore<K, V> : IStore<K, V> where K : class where V : class
{
private readonly Serilog.ILogger _logger;
protected readonly IDictionary<K, V> _store;
protected readonly IList<K> _added;
protected readonly IList<K> _modified;
@@ -14,9 +13,8 @@ namespace HermesSocketServer.Store.Internal
protected readonly object _lock;
public GroupSaveStore(Serilog.ILogger logger)
public GroupSaveStore()
{
_logger = logger;
_store = new Dictionary<K, V>();
_added = new List<K>();
_modified = new List<K>();
@@ -27,7 +25,7 @@ namespace HermesSocketServer.Store.Internal
public abstract Task Load();
protected abstract void OnInitialAdd(K key, V value);
protected abstract void OnInitialModify(K key, V value);
protected abstract void OnInitialRemove(K key);
protected abstract void OnPostRemove(K key, V value);
public abstract Task Save();
public V? Get(K key)
@@ -52,7 +50,7 @@ namespace HermesSocketServer.Store.Internal
{
if (key == null)
return false;
lock (_lock)
{
if (_store.TryGetValue(key, out V? value))
@@ -65,7 +63,6 @@ namespace HermesSocketServer.Store.Internal
if (!_added.Contains(key) && !_modified.Contains(key))
{
_modified.Add(key);
_logger.Information($"added key to _modified {key}");
}
return true;
}
@@ -80,21 +77,21 @@ namespace HermesSocketServer.Store.Internal
lock (_lock)
{
OnInitialRemove(key);
if (_store.Remove(key))
if (_store.TryGetValue(key, out var value))
{
_logger.Information($"removed key from _deleted {key}");
if (!_added.Remove(key))
if (_store.Remove(key))
{
_modified.Remove(key);
_logger.Information($"removed key from _added & _modified {key}");
if (!_deleted.Contains(key))
OnPostRemove(key, value);
if (!_added.Remove(key))
{
_deleted.Add(key);
_logger.Information($"added key to _deleted {key}");
_modified.Remove(key);
if (!_deleted.Contains(key))
{
_deleted.Add(key);
}
}
return true;
}
return true;
}
}
return false;
@@ -116,7 +113,6 @@ namespace HermesSocketServer.Store.Internal
if (!_added.Contains(key) && !_modified.Contains(key))
{
_modified.Add(key);
_logger.Information($"added key to _modified {key}");
}
return true;
}
@@ -128,7 +124,6 @@ namespace HermesSocketServer.Store.Internal
if (!_deleted.Remove(key) && !_added.Contains(key))
{
_added.Add(key);
_logger.Information($"added key to _added {key}");
}
return true;
}