This commit is contained in:
Stanley Dimant
2024-04-28 12:52:26 +02:00
parent ff81b269b8
commit e7b72baa1e
4 changed files with 7 additions and 6 deletions

View File

@@ -48,6 +48,6 @@ public class CacheController : ControllerBase
_fileStatisticsService.LogRequest(requestSize); _fileStatisticsService.LogRequest(requestSize);
return _requestFileStreamResultFactory.Create(requestId, new BlockFileDataStream(substreams.ToArray())); return _requestFileStreamResultFactory.Create(requestId, new BlockFileDataStream(substreams));
} }
} }

View File

@@ -2,10 +2,10 @@
public sealed class BlockFileDataStream : Stream public sealed class BlockFileDataStream : Stream
{ {
private readonly BlockFileDataSubstream[] _substreams; private readonly List<BlockFileDataSubstream> _substreams;
private int _currentStreamIndex = 0; private int _currentStreamIndex = 0;
public BlockFileDataStream(BlockFileDataSubstream[] substreams) public BlockFileDataStream(List<BlockFileDataSubstream> substreams)
{ {
_substreams = substreams; _substreams = substreams;
} }
@@ -21,7 +21,7 @@ public sealed class BlockFileDataStream : Stream
int totalRead = 0; int totalRead = 0;
int currentOffset = 0; int currentOffset = 0;
int remainingCount = count; int remainingCount = count;
while (totalRead < count && _currentStreamIndex < _substreams.Length) while (totalRead < count && _currentStreamIndex < _substreams.Count)
{ {
var lastReadBytes = _substreams[_currentStreamIndex].Read(buffer, currentOffset, remainingCount); var lastReadBytes = _substreams[_currentStreamIndex].Read(buffer, currentOffset, remainingCount);
if (lastReadBytes < remainingCount) if (lastReadBytes < remainingCount)

View File

@@ -17,7 +17,7 @@ public sealed class BlockFileDataSubstream : IDisposable
public BlockFileDataSubstream(FileStream dataStream) public BlockFileDataSubstream(FileStream dataStream)
{ {
_headerStream = new MemoryStream(); _headerStream = new MemoryStream();
var headerStreamWriter = new BinaryWriter(_headerStream); using var headerStreamWriter = new BinaryWriter(_headerStream);
headerStreamWriter.Write(Encoding.ASCII.GetBytes("#" + new FileInfo(dataStream.Name).Name + ":" + dataStream.Length.ToString(CultureInfo.InvariantCulture) + "#")); headerStreamWriter.Write(Encoding.ASCII.GetBytes("#" + new FileInfo(dataStream.Name).Name + ":" + dataStream.Length.ToString(CultureInfo.InvariantCulture) + "#"));
headerStreamWriter.Flush(); headerStreamWriter.Flush();
_headerStream.Position = 0; _headerStream.Position = 0;

View File

@@ -34,6 +34,7 @@ public class RequestFileStreamResult : FileStreamResult
_requestQueueService.FinishRequest(_requestId); _requestQueueService.FinishRequest(_requestId);
_mareMetrics.DecGauge(MetricsAPI.GaugeCurrentDownloads); _mareMetrics.DecGauge(MetricsAPI.GaugeCurrentDownloads);
FileStream?.Dispose();
} }
} }
@@ -50,8 +51,8 @@ public class RequestFileStreamResult : FileStreamResult
finally finally
{ {
_requestQueueService.FinishRequest(_requestId); _requestQueueService.FinishRequest(_requestId);
_mareMetrics.DecGauge(MetricsAPI.GaugeCurrentDownloads); _mareMetrics.DecGauge(MetricsAPI.GaugeCurrentDownloads);
FileStream?.Dispose();
} }
} }
} }