Skip to content

Commit 338bbe7

Browse files
[Storage][DataMovement] Adjust local file buffer size (Azure#47043)
1 parent 94018d3 commit 338bbe7

File tree

6 files changed

+19
-19
lines changed

6 files changed

+19
-19
lines changed

sdk/storage/Azure.Storage.DataMovement/src/JobPlan/JobPartPlanFile.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,6 @@ internal class JobPartPlanFile : IDisposable
2929
/// </summary>
3030
public readonly SemaphoreSlim WriteLock;
3131

32-
private const int DefaultBufferSize = 81920;
33-
3432
private JobPartPlanFile()
3533
{
3634
WriteLock = new SemaphoreSlim(1);
@@ -66,7 +64,10 @@ public static async Task<JobPartPlanFile> CreateJobPartPlanFileAsync(
6664
{
6765
using (FileStream fileStream = File.Create(result.FileName.ToString()))
6866
{
69-
await headerStream.CopyToAsync(fileStream, DefaultBufferSize, cancellationToken).ConfigureAwait(false);
67+
await headerStream.CopyToAsync(
68+
fileStream,
69+
DataMovementConstants.DefaultStreamCopyBufferSize,
70+
cancellationToken).ConfigureAwait(false);
7071
}
7172
}
7273
catch (Exception)

sdk/storage/Azure.Storage.DataMovement/src/JobPlan/JobPlanFile.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,6 @@ internal class JobPlanFile : IDisposable
3535
/// </summary>
3636
public readonly SemaphoreSlim WriteLock;
3737

38-
private const int DefaultBufferSize = 81920;
39-
4038
private JobPlanFile(string id, string filePath)
4139
{
4240
Id = id;
@@ -63,7 +61,10 @@ public static async Task<JobPlanFile> CreateJobPlanFileAsync(
6361
{
6462
using (FileStream fileStream = File.Create(jobPlanFile.FilePath))
6563
{
66-
await headerStream.CopyToAsync(fileStream, DefaultBufferSize, cancellationToken).ConfigureAwait(false);
64+
await headerStream.CopyToAsync(
65+
fileStream,
66+
DataMovementConstants.DefaultStreamCopyBufferSize,
67+
cancellationToken).ConfigureAwait(false);
6768
}
6869
}
6970
catch (Exception)

sdk/storage/Azure.Storage.DataMovement/src/LocalFileStorageResource.cs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -142,11 +142,9 @@ protected internal override async Task CopyFromStreamAsync(
142142
{
143143
fileStream.Seek(position, SeekOrigin.Begin);
144144
}
145-
await stream.CopyToAsync(
146-
fileStream,
147-
(int)streamLength,
148-
cancellationToken)
149-
.ConfigureAwait(false);
145+
146+
int bufferSize = Math.Min((int)streamLength, DataMovementConstants.DefaultStreamCopyBufferSize);
147+
await stream.CopyToAsync(fileStream, bufferSize, cancellationToken).ConfigureAwait(false);
150148
}
151149
}
152150
}

sdk/storage/Azure.Storage.DataMovement/src/LocalTransferCheckpointer.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -152,8 +152,8 @@ public override async Task<Stream> ReadJobPlanFileAsync(
152152
int length,
153153
CancellationToken cancellationToken = default)
154154
{
155-
int maxArraySize = length > 0 ? length : DataMovementConstants.DefaultArrayPoolArraySize;
156-
Stream copiedStream = new PooledMemoryStream(ArrayPool<byte>.Shared, maxArraySize);
155+
int bufferSize = length > 0 ? length : DataMovementConstants.DefaultStreamCopyBufferSize;
156+
Stream copiedStream = new PooledMemoryStream(ArrayPool<byte>.Shared, bufferSize);
157157

158158
CancellationHelper.ThrowIfCancellationRequested(cancellationToken);
159159
if (_transferStates.TryGetValue(transferId, out JobPlanFile jobPlanFile))
@@ -164,7 +164,7 @@ public override async Task<Stream> ReadJobPlanFileAsync(
164164
using (MemoryMappedFile mmf = MemoryMappedFile.CreateFromFile(jobPlanFile.FilePath))
165165
using (MemoryMappedViewStream mmfStream = mmf.CreateViewStream(offset, length, MemoryMappedFileAccess.Read))
166166
{
167-
await mmfStream.CopyToAsync(copiedStream).ConfigureAwait(false);
167+
await mmfStream.CopyToAsync(copiedStream, bufferSize, cancellationToken).ConfigureAwait(false);
168168
}
169169

170170
copiedStream.Position = 0;
@@ -193,16 +193,16 @@ public override async Task<Stream> ReadJobPartPlanFileAsync(
193193
{
194194
if (jobPlanFile.JobParts.TryGetValue(partNumber, out JobPartPlanFile jobPartPlanFile))
195195
{
196-
int maxArraySize = length > 0 ? length : DataMovementConstants.DefaultArrayPoolArraySize;
197-
Stream copiedStream = new PooledMemoryStream(ArrayPool<byte>.Shared, maxArraySize);
196+
int bufferSize = length > 0 ? length : DataMovementConstants.DefaultStreamCopyBufferSize;
197+
Stream copiedStream = new PooledMemoryStream(ArrayPool<byte>.Shared, bufferSize);
198198

199199
await jobPartPlanFile.WriteLock.WaitAsync(cancellationToken).ConfigureAwait(false);
200200
try
201201
{
202202
using (MemoryMappedFile mmf = MemoryMappedFile.CreateFromFile(jobPartPlanFile.FilePath))
203203
using (MemoryMappedViewStream mmfStream = mmf.CreateViewStream(offset, length, MemoryMappedFileAccess.Read))
204204
{
205-
await mmfStream.CopyToAsync(copiedStream).ConfigureAwait(false);
205+
await mmfStream.CopyToAsync(copiedStream, bufferSize, cancellationToken).ConfigureAwait(false);
206206
}
207207

208208
copiedStream.Position = 0;

sdk/storage/Azure.Storage.DataMovement/src/Shared/DataMovementConstants.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ internal class DataMovementConstants
1414
internal const int MaxJobPartReaders = 64;
1515
internal const int MaxJobChunkTasks = 3000;
1616
internal const int StatusCheckInSec = 10;
17-
internal const int DefaultArrayPoolArraySize = 4 * 1024;
17+
internal const int DefaultStreamCopyBufferSize = 81920; // Use the .NET default
1818

1919
internal const long DefaultInitialTransferSize = 32 * Constants.MB;
2020
internal const long DefaultChunkSize = 4 * Constants.MB;

sdk/storage/Azure.Storage.DataMovement/src/UriToStreamJobPart.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -472,7 +472,7 @@ public async Task WriteChunkToTempFile(string chunkFilePath, Stream source)
472472
{
473473
await source.CopyToAsync(
474474
fileStream,
475-
Constants.DefaultDownloadCopyBufferSize,
475+
DataMovementConstants.DefaultStreamCopyBufferSize,
476476
_cancellationToken)
477477
.ConfigureAwait(false);
478478
}

0 commit comments

Comments
 (0)