add forceful deletion of files

This commit is contained in:
rootdarkarchon
2022-12-20 19:29:25 +01:00
parent a99b3a36b8
commit 02353d5ebe
2 changed files with 17 additions and 4 deletions

View File

@@ -108,15 +108,18 @@ public class FileCleanupService : IHostedService
{ {
try try
{ {
if (!int.TryParse(_configuration["UnusedFileRetentionPeriodInDays"], CultureInfo.InvariantCulture, out int filesOlderThanDays)) var filesOlderThanDays = _configuration.GetValue("UnusedFileRetentionPeriodInDays", 7);
{ var forcedDeletionHours = _configuration.GetValue("ForcedDeletionOfFilesAfterHours", -1);
filesOlderThanDays = 7;
}
_logger.LogInformation("Cleaning up files older than {filesOlderThanDays} days", filesOlderThanDays); _logger.LogInformation("Cleaning up files older than {filesOlderThanDays} days", filesOlderThanDays);
if (forcedDeletionHours > 0)
{
_logger.LogInformation("Cleaning up files written to longer than {hours}h ago", forcedDeletionHours);
}
// clean up files in DB but not on disk or last access is expired // clean up files in DB but not on disk or last access is expired
var prevTime = DateTime.Now.Subtract(TimeSpan.FromDays(filesOlderThanDays)); var prevTime = DateTime.Now.Subtract(TimeSpan.FromDays(filesOlderThanDays));
var prevTimeForcedDeletion = DateTime.Now.Subtract(TimeSpan.FromHours(forcedDeletionHours));
var allFiles = dbContext.Files.ToList(); var allFiles = dbContext.Files.ToList();
foreach (var fileCache in allFiles.Where(f => f.Uploaded)) foreach (var fileCache in allFiles.Where(f => f.Uploaded))
{ {
@@ -135,6 +138,15 @@ public class FileCleanupService : IHostedService
if (_isMainServer) if (_isMainServer)
dbContext.Files.Remove(fileCache); dbContext.Files.Remove(fileCache);
} }
else if (file != null && forcedDeletionHours > 0 && file.LastWriteTime < prevTimeForcedDeletion)
{
_metrics.DecGauge(MetricsAPI.GaugeFilesTotalSize, file.Length);
_metrics.DecGauge(MetricsAPI.GaugeFilesTotal);
_logger.LogInformation("File forcefully deleted: {fileName}, {fileSize}MiB", file.Name, ByteSize.FromBytes(file.Length).MebiBytes);
file.Delete();
if (_isMainServer)
dbContext.Files.Remove(fileCache);
}
ct.ThrowIfCancellationRequested(); ct.ThrowIfCancellationRequested();
} }

View File

@@ -20,6 +20,7 @@
} }
}, },
"MareSynchronos": { "MareSynchronos": {
"ForcedDeletionOfFilesAfterHours": -1,
"CacheSizeHardLimitInGiB": -1, "CacheSizeHardLimitInGiB": -1,
"UnusedFileRetentionPeriodInDays": 7, "UnusedFileRetentionPeriodInDays": 7,
"CacheDirectory": "G:\\ServerTest", "CacheDirectory": "G:\\ServerTest",