⚡ Speed up delete of recycled files by skipping check
This commit is contained in:
@@ -548,11 +548,13 @@ public class FileService(
|
|||||||
await DeleteFileDataAsync(file);
|
await DeleteFileDataAsync(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task DeleteFileDataAsync(CloudFile file)
|
private async Task DeleteFileDataAsync(CloudFile file, bool force = false)
|
||||||
{
|
{
|
||||||
if (file.StorageId is null) return;
|
if (file.StorageId is null) return;
|
||||||
if (!file.PoolId.HasValue) return;
|
if (!file.PoolId.HasValue) return;
|
||||||
|
|
||||||
|
if (!force)
|
||||||
|
{
|
||||||
// Check if any other file with the same storage ID is referenced
|
// Check if any other file with the same storage ID is referenced
|
||||||
var sameOriginFiles = await db.Files
|
var sameOriginFiles = await db.Files
|
||||||
.Where(f => f.StorageId == file.StorageId && f.Id != file.Id)
|
.Where(f => f.StorageId == file.StorageId && f.Id != file.Id)
|
||||||
@@ -562,6 +564,7 @@ public class FileService(
|
|||||||
// Check if any of these files are referenced
|
// Check if any of these files are referenced
|
||||||
if (sameOriginFiles.Count != 0)
|
if (sameOriginFiles.Count != 0)
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// If any other file with the same storage ID is referenced, don't delete the actual file data
|
// If any other file with the same storage ID is referenced, don't delete the actual file data
|
||||||
var dest = await GetRemoteStorageConfig(file.PoolId.Value);
|
var dest = await GetRemoteStorageConfig(file.PoolId.Value);
|
||||||
@@ -593,6 +596,7 @@ public class FileService(
|
|||||||
logger.LogWarning("Failed to delete compressed version of file {fileId}", file.Id);
|
logger.LogWarning("Failed to delete compressed version of file {fileId}", file.Id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (file.HasThumbnail)
|
if (file.HasThumbnail)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@@ -755,7 +759,7 @@ public class FileService(
|
|||||||
.Where(f => f.AccountId == accountId && f.IsMarkedRecycle)
|
.Where(f => f.AccountId == accountId && f.IsMarkedRecycle)
|
||||||
.ToListAsync();
|
.ToListAsync();
|
||||||
var count = files.Count;
|
var count = files.Count;
|
||||||
var tasks = files.Select(DeleteFileDataAsync);
|
var tasks = files.Select(f => DeleteFileDataAsync(f, true));
|
||||||
await Task.WhenAll(tasks);
|
await Task.WhenAll(tasks);
|
||||||
var fileIds = files.Select(f => f.Id).ToList();
|
var fileIds = files.Select(f => f.Id).ToList();
|
||||||
await _PurgeCacheRangeAsync(fileIds);
|
await _PurgeCacheRangeAsync(fileIds);
|
||||||
@@ -770,7 +774,7 @@ public class FileService(
|
|||||||
.Where(f => f.PoolId == poolId && f.IsMarkedRecycle)
|
.Where(f => f.PoolId == poolId && f.IsMarkedRecycle)
|
||||||
.ToListAsync();
|
.ToListAsync();
|
||||||
var count = files.Count;
|
var count = files.Count;
|
||||||
var tasks = files.Select(DeleteFileDataAsync);
|
var tasks = files.Select(f => DeleteFileDataAsync(f, true));
|
||||||
await Task.WhenAll(tasks);
|
await Task.WhenAll(tasks);
|
||||||
var fileIds = files.Select(f => f.Id).ToList();
|
var fileIds = files.Select(f => f.Id).ToList();
|
||||||
await _PurgeCacheRangeAsync(fileIds);
|
await _PurgeCacheRangeAsync(fileIds);
|
||||||
@@ -785,7 +789,7 @@ public class FileService(
|
|||||||
.Where(f => f.IsMarkedRecycle)
|
.Where(f => f.IsMarkedRecycle)
|
||||||
.ToListAsync();
|
.ToListAsync();
|
||||||
var count = files.Count;
|
var count = files.Count;
|
||||||
var tasks = files.Select(DeleteFileDataAsync);
|
var tasks = files.Select(f => DeleteFileDataAsync(f, true));
|
||||||
await Task.WhenAll(tasks);
|
await Task.WhenAll(tasks);
|
||||||
var fileIds = files.Select(f => f.Id).ToList();
|
var fileIds = files.Select(f => f.Id).ToList();
|
||||||
await _PurgeCacheRangeAsync(fileIds);
|
await _PurgeCacheRangeAsync(fileIds);
|
||||||
|
Reference in New Issue
Block a user