help?
This commit is contained in:
@@ -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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user