diff --git a/MareSynchronosServer/MareSynchronosServer/Hubs/MareHub.User.cs b/MareSynchronosServer/MareSynchronosServer/Hubs/MareHub.User.cs index 9b60df0..6fc2b05 100644 --- a/MareSynchronosServer/MareSynchronosServer/Hubs/MareHub.User.cs +++ b/MareSynchronosServer/MareSynchronosServer/Hubs/MareHub.User.cs @@ -64,11 +64,9 @@ public partial class MareHub User = user, }; await _dbContext.ClientPairs.AddAsync(wl).ConfigureAwait(false); - await _dbContext.SaveChangesAsync().ConfigureAwait(false); _cacheService.MarkAsStale(UserUID, otherUser.UID); - - var existingData = await _cacheService.GetPairData(UserUID, otherUser.UID).ConfigureAwait(false); + var existingData = await _cacheService.GetPairData(UserUID, otherUser.UID, _dbContext).ConfigureAwait(false); var permissions = existingData?.OwnPermissions; if (permissions == null || !permissions.Sticky) @@ -101,9 +99,9 @@ public partial class MareHub _dbContext.Permissions.Update(existingDbPerms); } - await _dbContext.SaveChangesAsync().ConfigureAwait(false); } + await _dbContext.SaveChangesAsync().ConfigureAwait(false); _cacheService.MarkAsStale(UserUID, otherUser.UID); // get the opposite entry of the client pair @@ -293,7 +291,7 @@ public partial class MareHub await _dbContext.ClientPairs.SingleOrDefaultAsync(w => w.UserUID == UserUID && w.OtherUserUID == dto.User.UID).ConfigureAwait(false); if (callerPair == null) return; - var pairData = await _cacheService.GetPairData(UserUID, dto.User.UID).ConfigureAwait(false); + var pairData = await _cacheService.GetPairData(UserUID, dto.User.UID, _dbContext).ConfigureAwait(false); // delete from database, send update info to users pair list _dbContext.ClientPairs.Remove(callerPair); @@ -325,7 +323,7 @@ public partial class MareHub // if the either had paused, do nothing if (callerHadPaused && otherHadPaused) return; - var currentPairData = await _cacheService.GetPairData(UserUID, dto.User.UID).ConfigureAwait(false); + var currentPairData = await _cacheService.GetPairData(UserUID, dto.User.UID, _dbContext).ConfigureAwait(false); // if neither user had paused each other and either is not in an unpaused group with each other, change state to offline if (!currentPairData?.IsSynced ?? true) @@ -386,7 +384,7 @@ public partial class MareHub UserPermissionSet prevPermissions = await _dbContext.Permissions.SingleOrDefaultAsync(w => w.UserUID == UserUID && w.OtherUserUID == dto.User.UID).ConfigureAwait(false); if (prevPermissions == null) return; // you always should have permissions to another user - var oldPairData = await _cacheService.GetPairData(UserUID, dto.User.UID).ConfigureAwait(false); + var oldPairData = await _cacheService.GetPairData(UserUID, dto.User.UID, _dbContext).ConfigureAwait(false); bool setSticky = false; if (!oldPairData.GIDs.Contains(Constants.IndividualKeyword, StringComparer.Ordinal)) { @@ -416,7 +414,7 @@ public partial class MareHub await Clients.User(UserUID).Client_UserUpdateSelfPairPermissions(new UserPermissionsDto(dto.User, permCopy)).ConfigureAwait(false); await Clients.User(dto.User.UID).Client_UserUpdateOtherPairPermissions(new UserPermissionsDto(new UserData(UserUID), dto.Permissions)).ConfigureAwait(false); - var newPairData = await _cacheService.GetPairData(UserUID, dto.User.UID).ConfigureAwait(false); + var newPairData = await _cacheService.GetPairData(UserUID, dto.User.UID, _dbContext).ConfigureAwait(false); if (newPairData.OwnPermissions.IsPaused != oldPairData.OwnPermissions.IsPaused) { diff --git a/MareSynchronosServer/MareSynchronosServer/Services/UserPairCacheService.cs b/MareSynchronosServer/MareSynchronosServer/Services/UserPairCacheService.cs index 881ee61..027b51c 100644 --- a/MareSynchronosServer/MareSynchronosServer/Services/UserPairCacheService.cs +++ b/MareSynchronosServer/MareSynchronosServer/Services/UserPairCacheService.cs @@ -40,21 +40,19 @@ public class UserPairCacheService : IHostedService return _cache[uid]; } - public async Task GetPairData(string uid, string otheruid) + public async Task GetPairData(string uid, string otheruid, MareDbContext dbContext) { await WaitForProcessing(uid, otheruid).ConfigureAwait(false); if (!_cache.TryGetValue(uid, out var cachedInfos)) { _logger.LogDebug("Building full cache: Did not find PairData for {uid}:{otheruid}", uid, otheruid); - using var dbContext = await _dbContextFactory.CreateDbContextAsync().ConfigureAwait(false); _cache[uid] = cachedInfos = await BuildFullCache(dbContext, uid).ConfigureAwait(false); } if (!cachedInfos.TryGetValue(otheruid, out var info)) { _logger.LogDebug("Building individual cache: Did not find PairData for {uid}:{otheruid}", uid, otheruid); - using var dbContext = await _dbContextFactory.CreateDbContextAsync().ConfigureAwait(false); info = await BuildIndividualCache(dbContext, uid, otheruid).ConfigureAwait(false); _cache[uid][otheruid] = info; }