optimize for readability

This commit is contained in:
rootdarkarchon
2022-12-29 14:10:02 +01:00
parent a9337eda11
commit 6a34f88a24

View File

@@ -24,16 +24,7 @@ public class CachedFileProvider
_basePath = configuration.GetValue<string>(nameof(StaticFilesServerConfiguration.CacheDirectory));
}
public async Task<FileStream?> GetFileStream(string hash, string auth)
{
var fi = FilePathUtil.GetFileInfoForHash(_basePath, hash);
bool hasTransferTask = _currentTransfers.TryGetValue(hash, out var transferTask);
if (fi == null && !hasTransferTask)
{
if (IsMainServer) return null;
if (transferTask == null)
{
_currentTransfers[hash] = Task.Run(async () =>
private async Task DownloadTask(string hash, string auth)
{
// download file from remote
var downloadUrl = new Uri(_remoteCacheSourceUri, hash);
@@ -65,37 +56,28 @@ public class CachedFileProvider
_metrics.IncGauge(MetricsAPI.GaugeFilesTotal);
_metrics.IncGauge(MetricsAPI.GaugeFilesTotalSize, FilePathUtil.GetFileInfoForHash(_basePath, hash).Length);
});
}
transferTask = _currentTransfers[hash];
}
if (transferTask != null)
public async Task<FileStream?> GetFileStream(string hash, string auth)
{
await transferTask.ConfigureAwait(false);
_currentTransfers.Remove(hash, out _);
var fi = FilePathUtil.GetFileInfoForHash(_basePath, hash);
if (fi == null && IsMainServer) return null;
if (fi == null && !_currentTransfers.ContainsKey(hash))
{
_currentTransfers[hash] = DownloadTask(hash, auth).ContinueWith(r => _currentTransfers.Remove(hash, out _));
}
if (fi == null && _currentTransfers.TryGetValue(hash, out var downloadTask))
{
await downloadTask.ConfigureAwait(false);
}
fi = FilePathUtil.GetFileInfoForHash(_basePath, hash);
if (fi == null) return null;
}
_fileStatisticsService.LogFile(hash, fi.Length);
int attempts = 0;
while (attempts < 5)
{
try
{
return new FileStream(fi.FullName, FileMode.Open, FileAccess.Read, FileShare.Inheritable | FileShare.Read);
}
catch (Exception ex)
{
attempts++;
_logger.LogWarning(ex, "Error opening file, retrying");
await Task.Delay(TimeSpan.FromSeconds(1)).ConfigureAwait(false);
}
}
throw new IOException("Could not open file " + fi.FullName);
}
}