invalid data deletion fix

This commit is contained in:
Timerix 2025-05-23 01:21:20 +05:00
parent 4d7fbeae42
commit 9415c60287
2 changed files with 19 additions and 17 deletions

View File

@ -51,15 +51,15 @@ public class DatabaseConnector
{ {
meta.errorMessage = errorMessage; meta.errorMessage = errorMessage;
await UpdateMetadataStatus(meta, SaveFileProcessingStatus.Error); await UpdateMetadataStatus(meta, SaveFileProcessingStatus.Error);
DeleteAssociatedFiles(meta); TryDeleteAssociatedFiles(meta);
} }
public async Task DeleteMetadata(SaveFileMetadata meta) public async Task DeleteMetadata(SaveFileMetadata meta, string reason)
{ {
_logger.LogDebug($"Deleting save file (id: {meta.id} status: {meta.status} " + _logger.LogDebug($"Deleting save file (id: {meta.id} reason: {reason}" +
$"uploadDate: {meta.uploadDateTime:yyyy/MM/dd})"); $"uploadDate: {meta.uploadDateTime:yyyy/MM/dd})");
await _db.DeleteAsync(meta); await _db.DeleteAsync(meta);
DeleteAssociatedFiles(meta); TryDeleteAssociatedFiles(meta);
} }
/// <summary> /// <summary>
@ -71,20 +71,21 @@ public class DatabaseConnector
var expirationDate = DateTime.Now.AddDays(-_uploadsLifetimeDays); var expirationDate = DateTime.Now.AddDays(-_uploadsLifetimeDays);
var metadataTable = _db.Table<SaveFileMetadata>(); var metadataTable = _db.Table<SaveFileMetadata>();
int rowCount = await metadataTable.CountAsync(); var metadataList = await metadataTable.ToListAsync();
int i = 0;
int deleteCount = 0; int deleteCount = 0;
while(i < rowCount) foreach (var meta in metadataList)
{
var meta = await metadataTable.ElementAtAsync(i)!;
if(meta.status != SaveFileProcessingStatus.Done ||
meta.uploadDateTime < expirationDate ||
!meta.AssociatedFilesExist())
{ {
string deletionReason;
if(meta.status != SaveFileProcessingStatus.Done)
deletionReason = $"invalid status ({meta.status})";
else if (meta.uploadDateTime < expirationDate)
deletionReason = "expired";
else if(!meta.AssociatedFilesExist())
deletionReason = "files not found";
else continue;
deleteCount++; deleteCount++;
await DeleteMetadata(meta); await DeleteMetadata(meta, deletionReason);
}
i++;
} }
_logger.LogInfo($"Deleted {deleteCount} invalid records"); _logger.LogInfo($"Deleted {deleteCount} invalid records");
@ -97,7 +98,7 @@ public class DatabaseConnector
File.Delete(file); File.Delete(file);
} }
private void DeleteAssociatedFiles(SaveFileMetadata meta) private void TryDeleteAssociatedFiles(SaveFileMetadata meta)
{ {
TryDeleteFile(meta.GetSaveFilePath()); TryDeleteFile(meta.GetSaveFilePath());
TryDeleteFile(meta.GetParsedDataPath()); TryDeleteFile(meta.GetParsedDataPath());

View File

@ -1,3 +1,4 @@
## WebAPI.SaveParsingOperation: ## WebAPI.SaveParsingOperation:
Save parsed data in protobuf Save parsed data in protobuf
Re-parse if saved data was parsed with another query Re-parse if saved data was parsed with another query
Implement automatic database cleanup