From 87fdd55c50e2f0de0a8aa7a0a11a9282dad85ae9 Mon Sep 17 00:00:00 2001 From: rootdarkarchon Date: Wed, 14 Dec 2022 17:36:28 +0100 Subject: [PATCH] potential fixes for userpurge --- .../Hubs/MareHub.Groups.cs | 2 +- .../MareSynchronosServer/Hubs/MareHub.User.cs | 8 ++--- .../MareSynchronosServices/CleanupService.cs | 35 ++++++++++--------- 3 files changed, 24 insertions(+), 21 deletions(-) diff --git a/MareSynchronosServer/MareSynchronosServer/Hubs/MareHub.Groups.cs b/MareSynchronosServer/MareSynchronosServer/Hubs/MareHub.Groups.cs index 47bde0c..47750b8 100644 --- a/MareSynchronosServer/MareSynchronosServer/Hubs/MareHub.Groups.cs +++ b/MareSynchronosServer/MareSynchronosServer/Hubs/MareHub.Groups.cs @@ -316,7 +316,7 @@ public partial class MareHub { _logger.LogCallInfo(MareHubLogger.Args(gid, "Deleted")); - _dbContext.Remove(group); + _dbContext.Groups.Remove(group); } else { diff --git a/MareSynchronosServer/MareSynchronosServer/Hubs/MareHub.User.cs b/MareSynchronosServer/MareSynchronosServer/Hubs/MareHub.User.cs index 2d5c363..892f48f 100644 --- a/MareSynchronosServer/MareSynchronosServer/Hubs/MareHub.User.cs +++ b/MareSynchronosServer/MareSynchronosServer/Hubs/MareHub.User.cs @@ -40,7 +40,7 @@ public partial class MareHub await _authServiceClient.RemoveAuthAsync(new UidMessage() { Uid = userid }).ConfigureAwait(false); - _dbContext.RemoveRange(ownPairData); + _dbContext.ClientPairs.RemoveRange(ownPairData); await _dbContext.SaveChangesAsync().ConfigureAwait(false); var otherPairData = await _dbContext.ClientPairs.Include(u => u.User) .Where(u => u.OtherUser.UID == userid).AsNoTracking().ToListAsync().ConfigureAwait(false); @@ -60,9 +60,9 @@ public partial class MareHub _mareMetrics.IncCounter(MetricsAPI.CounterUsersRegisteredDeleted, 1); - _dbContext.RemoveRange(otherPairData); - _dbContext.Remove(userEntry); - _dbContext.Remove(auth); + _dbContext.ClientPairs.RemoveRange(otherPairData); + _dbContext.Users.Remove(userEntry); + _dbContext.Auth.Remove(auth); await _dbContext.SaveChangesAsync().ConfigureAwait(false); } diff --git a/MareSynchronosServer/MareSynchronosServices/CleanupService.cs b/MareSynchronosServer/MareSynchronosServices/CleanupService.cs index 8fe0598..102e402 100644 --- a/MareSynchronosServer/MareSynchronosServices/CleanupService.cs +++ b/MareSynchronosServer/MareSynchronosServices/CleanupService.cs @@ -128,6 +128,8 @@ public class CleanupService : IHostedService, IDisposable public async Task PurgeUser(User user, MareDbContext dbContext) { + _logger.LogInformation("Purging user: {uid}", user.UID); + var lodestone = dbContext.LodeStoneAuth.SingleOrDefault(a => a.User.UID == user.UID); if (lodestone != null) @@ -143,46 +145,47 @@ public class CleanupService : IHostedService, IDisposable dbContext.Files.RemoveRange(userFiles); var ownPairData = dbContext.ClientPairs.Where(u => u.User.UID == user.UID).ToList(); - - dbContext.RemoveRange(ownPairData); + dbContext.ClientPairs.RemoveRange(ownPairData); var otherPairData = dbContext.ClientPairs.Include(u => u.User) .Where(u => u.OtherUser.UID == user.UID).ToList(); + dbContext.ClientPairs.RemoveRange(otherPairData); - var userGroupPairs = await dbContext.GroupPairs.Include(g => g.Group).Where(u => u.GroupUserUID == user.UID).ToListAsync().ConfigureAwait(false); + var userJoinedGroups = await dbContext.GroupPairs.Include(g => g.Group).Where(u => u.GroupUserUID == user.UID).ToListAsync().ConfigureAwait(false); - foreach (var groupPair in userGroupPairs) + foreach (var userGroupPair in userJoinedGroups) { - bool ownerHasLeft = string.Equals(groupPair.Group.OwnerUID, user.UID, StringComparison.Ordinal); + bool ownerHasLeft = string.Equals(userGroupPair.Group.OwnerUID, user.UID, StringComparison.Ordinal); + if (ownerHasLeft) { - var groupPairs = await dbContext.GroupPairs.Where(g => g.GroupGID == groupPair.GroupGID).ToListAsync().ConfigureAwait(false); + var groupPairs = await dbContext.GroupPairs.Where(g => g.GroupGID == userGroupPair.GroupGID).ToListAsync().ConfigureAwait(false); if (!groupPairs.Any()) { - _logger.LogInformation("Group {gid} has no new owner, deleting", groupPair.GroupGID); - dbContext.Remove(groupPair.Group); + _logger.LogInformation("Group {gid} has no new owner, deleting", userGroupPair.GroupGID); + dbContext.Groups.Remove(userGroupPair.Group); } else { - var groupHasMigrated = await SharedDbFunctions.MigrateOrDeleteGroup(dbContext, groupPair.Group, groupPairs, _configuration.GetValue("MaxExistingGroupsByUser", 3)).ConfigureAwait(false); - continue; + var groupHasMigrated = await SharedDbFunctions.MigrateOrDeleteGroup(dbContext, userGroupPair.Group, groupPairs, _configuration.GetValue("MaxExistingGroupsByUser", 3)).ConfigureAwait(false); } } else { - dbContext.Remove(groupPair); + dbContext.GroupPairs.Remove(userGroupPair); } - dbContext.SaveChanges(); + await dbContext.SaveChangesAsync(); } _logger.LogInformation("User purged: {uid}", user.UID); - metrics.DecGauge(MetricsAPI.GaugeUsersRegistered, 1); + dbContext.Auth.Remove(auth); + dbContext.Users.Remove(user); - dbContext.RemoveRange(otherPairData); - dbContext.Remove(auth); - dbContext.Remove(user); + await dbContext.SaveChangesAsync(); + + metrics.DecGauge(MetricsAPI.GaugeUsersRegistered, 1); } public Task StopAsync(CancellationToken cancellationToken)