add forceful deletion of files
This commit is contained in:
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,6 +20,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"MareSynchronos": {
|
"MareSynchronos": {
|
||||||
|
"ForcedDeletionOfFilesAfterHours": -1,
|
||||||
"CacheSizeHardLimitInGiB": -1,
|
"CacheSizeHardLimitInGiB": -1,
|
||||||
"UnusedFileRetentionPeriodInDays": 7,
|
"UnusedFileRetentionPeriodInDays": 7,
|
||||||
"CacheDirectory": "G:\\ServerTest",
|
"CacheDirectory": "G:\\ServerTest",
|
||||||
|
|||||||
Reference in New Issue
Block a user