Skip to content

Commit 967247f

Browse files
authored
[Storage] Binary data in blobs (Azure#19176)
* upload * download. * fix build. * renames. * upload tests. * api * download tests. * changelog. * pr feedback.
1 parent 5b06127 commit 967247f

File tree

96 files changed

+14761
-590
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

96 files changed

+14761
-590
lines changed

sdk/storage/Azure.Storage.Blobs.Batch/README.md

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -72,9 +72,9 @@ container.Create();
7272
BlobClient foo = container.GetBlobClient("foo");
7373
BlobClient bar = container.GetBlobClient("bar");
7474
BlobClient baz = container.GetBlobClient("baz");
75-
foo.Upload(new MemoryStream(Encoding.UTF8.GetBytes("Foo!")));
76-
bar.Upload(new MemoryStream(Encoding.UTF8.GetBytes("Bar!")));
77-
baz.Upload(new MemoryStream(Encoding.UTF8.GetBytes("Baz!")));
75+
foo.Upload(BinaryData.FromString("Foo!"));
76+
bar.Upload(BinaryData.FromString("Bar!"));
77+
baz.Upload(BinaryData.FromString("Baz!"));
7878

7979
// Delete all three blobs at once
8080
BlobBatchClient batch = service.GetBlobBatchClient();
@@ -96,9 +96,9 @@ container.Create();
9696
BlobClient foo = container.GetBlobClient("foo");
9797
BlobClient bar = container.GetBlobClient("bar");
9898
BlobClient baz = container.GetBlobClient("baz");
99-
foo.Upload(new MemoryStream(Encoding.UTF8.GetBytes("Foo!")));
100-
bar.Upload(new MemoryStream(Encoding.UTF8.GetBytes("Bar!")));
101-
baz.Upload(new MemoryStream(Encoding.UTF8.GetBytes("Baz!")));
99+
foo.Upload(BinaryData.FromString("Foo!"));
100+
bar.Upload(BinaryData.FromString("Bar!"));
101+
baz.Upload(BinaryData.FromString("Baz!"));
102102

103103
// Set the access tier for all three blobs at once
104104
BlobBatchClient batch = service.GetBlobBatchClient();
@@ -121,11 +121,11 @@ container.Create();
121121
BlobClient foo = container.GetBlobClient("foo");
122122
BlobClient bar = container.GetBlobClient("bar");
123123
BlobClient baz = container.GetBlobClient("baz");
124-
foo.Upload(new MemoryStream(Encoding.UTF8.GetBytes("Foo!")));
124+
foo.Upload(BinaryData.FromString("Foo!"));
125125
foo.CreateSnapshot();
126-
bar.Upload(new MemoryStream(Encoding.UTF8.GetBytes("Bar!")));
126+
bar.Upload(BinaryData.FromString("Bar!"));
127127
bar.CreateSnapshot();
128-
baz.Upload(new MemoryStream(Encoding.UTF8.GetBytes("Baz!")));
128+
baz.Upload(BinaryData.FromString("Baz!"));
129129

130130
// Create a batch with three deletes
131131
BlobBatchClient batchClient = service.GetBlobBatchClient();
@@ -156,7 +156,7 @@ container.Create();
156156

157157
// Create a blob named "valid"
158158
BlobClient valid = container.GetBlobClient("valid");
159-
valid.Upload(new MemoryStream(Encoding.UTF8.GetBytes("Valid!")));
159+
valid.Upload(BinaryData.FromString("Valid!"));
160160

161161
// Get a reference to a blob named "invalid", but never create it
162162
BlobClient invalid = container.GetBlobClient("invalid");

sdk/storage/Azure.Storage.Blobs.Batch/samples/Sample03a_Batching.cs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,9 @@ public void BatchDelete()
4343
BlobClient foo = container.GetBlobClient("foo");
4444
BlobClient bar = container.GetBlobClient("bar");
4545
BlobClient baz = container.GetBlobClient("baz");
46-
foo.Upload(new MemoryStream(Encoding.UTF8.GetBytes("Foo!")));
47-
bar.Upload(new MemoryStream(Encoding.UTF8.GetBytes("Bar!")));
48-
baz.Upload(new MemoryStream(Encoding.UTF8.GetBytes("Baz!")));
46+
foo.Upload(BinaryData.FromString("Foo!"));
47+
bar.Upload(BinaryData.FromString("Bar!"));
48+
baz.Upload(BinaryData.FromString("Baz!"));
4949

5050
// Delete all three blobs at once
5151
BlobBatchClient batch = service.GetBlobBatchClient();
@@ -79,9 +79,9 @@ public void BatchSetAccessTierCool()
7979
BlobClient foo = container.GetBlobClient("foo");
8080
BlobClient bar = container.GetBlobClient("bar");
8181
BlobClient baz = container.GetBlobClient("baz");
82-
foo.Upload(new MemoryStream(Encoding.UTF8.GetBytes("Foo!")));
83-
bar.Upload(new MemoryStream(Encoding.UTF8.GetBytes("Bar!")));
84-
baz.Upload(new MemoryStream(Encoding.UTF8.GetBytes("Baz!")));
82+
foo.Upload(BinaryData.FromString("Foo!"));
83+
bar.Upload(BinaryData.FromString("Bar!"));
84+
baz.Upload(BinaryData.FromString("Baz!"));
8585

8686
// Set the access tier for all three blobs at once
8787
BlobBatchClient batch = service.GetBlobBatchClient();
@@ -119,11 +119,11 @@ public void FineGrainedBatching()
119119
BlobClient foo = container.GetBlobClient("foo");
120120
BlobClient bar = container.GetBlobClient("bar");
121121
BlobClient baz = container.GetBlobClient("baz");
122-
foo.Upload(new MemoryStream(Encoding.UTF8.GetBytes("Foo!")));
122+
foo.Upload(BinaryData.FromString("Foo!"));
123123
foo.CreateSnapshot();
124-
bar.Upload(new MemoryStream(Encoding.UTF8.GetBytes("Bar!")));
124+
bar.Upload(BinaryData.FromString("Bar!"));
125125
bar.CreateSnapshot();
126-
baz.Upload(new MemoryStream(Encoding.UTF8.GetBytes("Baz!")));
126+
baz.Upload(BinaryData.FromString("Baz!"));
127127

128128
// Create a batch with three deletes
129129
BlobBatchClient batchClient = service.GetBlobBatchClient();
@@ -164,7 +164,7 @@ public void BatchErrors()
164164

165165
// Create a blob named "valid"
166166
BlobClient valid = container.GetBlobClient("valid");
167-
valid.Upload(new MemoryStream(Encoding.UTF8.GetBytes("Valid!")));
167+
valid.Upload(BinaryData.FromString("Valid!"));
168168

169169
// Get a reference to a blob named "invalid", but never create it
170170
BlobClient invalid = container.GetBlobClient("invalid");

sdk/storage/Azure.Storage.Blobs.Batch/samples/Sample03b_BatchingAsync.cs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,9 @@ public async Task BatchDeleteAsync()
3737
BlobClient foo = container.GetBlobClient("foo");
3838
BlobClient bar = container.GetBlobClient("bar");
3939
BlobClient baz = container.GetBlobClient("baz");
40-
await foo.UploadAsync(new MemoryStream(Encoding.UTF8.GetBytes("Foo!")));
41-
await bar.UploadAsync(new MemoryStream(Encoding.UTF8.GetBytes("Bar!")));
42-
await baz.UploadAsync(new MemoryStream(Encoding.UTF8.GetBytes("Baz!")));
40+
await foo.UploadAsync(BinaryData.FromString("Foo!"));
41+
await bar.UploadAsync(BinaryData.FromString("Bar!"));
42+
await baz.UploadAsync(BinaryData.FromString("Baz!"));
4343

4444
// Delete all three blobs at once
4545
BlobBatchClient batch = service.GetBlobBatchClient();
@@ -71,9 +71,9 @@ public async Task BatchSetAccessTierAsync()
7171
BlobClient foo = container.GetBlobClient("foo");
7272
BlobClient bar = container.GetBlobClient("bar");
7373
BlobClient baz = container.GetBlobClient("baz");
74-
await foo.UploadAsync(new MemoryStream(Encoding.UTF8.GetBytes("Foo!")));
75-
await bar.UploadAsync(new MemoryStream(Encoding.UTF8.GetBytes("Bar!")));
76-
await baz.UploadAsync(new MemoryStream(Encoding.UTF8.GetBytes("Baz!")));
74+
await foo.UploadAsync(BinaryData.FromString("Foo!"));
75+
await bar.UploadAsync(BinaryData.FromString("Bar!"));
76+
await baz.UploadAsync(BinaryData.FromString("Baz!"));
7777

7878
// Set the access tier for all three blobs at once
7979
BlobBatchClient batch = service.GetBlobBatchClient();
@@ -106,9 +106,9 @@ public async Task FineGrainedBatchingAsync()
106106
BlobClient foo = container.GetBlobClient("foo");
107107
BlobClient bar = container.GetBlobClient("bar");
108108
BlobClient baz = container.GetBlobClient("baz");
109-
await foo.UploadAsync(new MemoryStream(Encoding.UTF8.GetBytes("Foo!")));
110-
await bar.UploadAsync(new MemoryStream(Encoding.UTF8.GetBytes("Bar!")));
111-
await baz.UploadAsync(new MemoryStream(Encoding.UTF8.GetBytes("Baz!")));
109+
await foo.UploadAsync(BinaryData.FromString("Foo!"));
110+
await bar.UploadAsync(BinaryData.FromString("Bar!"));
111+
await baz.UploadAsync(BinaryData.FromString("Baz!"));
112112

113113
// Create a batch with three deletes
114114
BlobBatchClient batchClient = service.GetBlobBatchClient();
@@ -149,7 +149,7 @@ public async Task BatchErrorsAsync()
149149
{
150150
// Create a blob named "valid"
151151
BlobClient valid = container.GetBlobClient("valid");
152-
await valid.UploadAsync(new MemoryStream(Encoding.UTF8.GetBytes("Valid!")));
152+
await valid.UploadAsync(BinaryData.FromString("Valid!"));
153153

154154
// Get a reference to a blob named "invalid", but never create it
155155
BlobClient invalid = container.GetBlobClient("invalid");

sdk/storage/Azure.Storage.Blobs.Batch/tests/BlobBatchClientTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1005,7 +1005,7 @@ public async Task<BlobClient[]> CreateBlobsAsync(BlobContainerClient container,
10051005
for (int i = 0; i < count; i++)
10061006
{
10071007
blobs[i] = _test.InstrumentClient(container.GetBlobClient("blob" + (++_blobId)));
1008-
await blobs[i].UploadAsync(new MemoryStream(_test.GetRandomBuffer(Constants.KB)));
1008+
await blobs[i].UploadAsync(BinaryData.FromBytes(_test.GetRandomBuffer(Constants.KB)));
10091009
}
10101010
return blobs;
10111011
}

sdk/storage/Azure.Storage.Blobs.ChangeFeed/src/ChangeFeedFactory.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,14 +83,14 @@ public async Task<ChangeFeed> BuildChangeFeed(
8383

8484
// Get last consumable
8585
BlobClient blobClient = _containerClient.GetBlobClient(Constants.ChangeFeed.MetaSegmentsPath);
86-
BlobDownloadInfo blobDownloadInfo;
86+
BlobDownloadStreamingResult blobDownloadInfo;
8787
if (async)
8888
{
89-
blobDownloadInfo = await blobClient.DownloadAsync(cancellationToken: cancellationToken).ConfigureAwait(false);
89+
blobDownloadInfo = await blobClient.DownloadStreamingAsync(cancellationToken: cancellationToken).ConfigureAwait(false);
9090
}
9191
else
9292
{
93-
blobDownloadInfo = blobClient.Download(cancellationToken: cancellationToken);
93+
blobDownloadInfo = blobClient.DownloadStreaming(cancellationToken: cancellationToken);
9494
}
9595

9696
JsonDocument jsonMetaSegment;

sdk/storage/Azure.Storage.Blobs.ChangeFeed/src/LazyLoadingBlobStream.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -101,15 +101,15 @@ private async Task Initalize(bool async, CancellationToken cancellationToken)
101101
/// </summary>
102102
private async Task DownloadBlock(bool async, CancellationToken cancellationToken)
103103
{
104-
Response<BlobDownloadInfo> response;
104+
Response<BlobDownloadStreamingResult> response;
105105
HttpRange range = new HttpRange(_offset, _blockSize);
106106

107107
response = async
108-
? await _blobClient.DownloadAsync(range, cancellationToken: cancellationToken).ConfigureAwait(false)
109-
: _blobClient.Download(range, cancellationToken: cancellationToken);
108+
? await _blobClient.DownloadStreamingAsync(range, cancellationToken: cancellationToken).ConfigureAwait(false)
109+
: _blobClient.DownloadStreaming(range, cancellationToken: cancellationToken);
110110
_stream = response.Value.Content;
111-
_offset += response.Value.ContentLength;
112-
_lastDownloadBytes = response.Value.ContentLength;
111+
_offset += response.Value.Details.ContentLength;
112+
_lastDownloadBytes = response.Value.Details.ContentLength;
113113
_blobLength = GetBlobLength(response);
114114
}
115115

@@ -192,7 +192,7 @@ private static void ValidateReadParameters(byte[] buffer, int offset, int count)
192192
}
193193
}
194194

195-
private static long GetBlobLength(Response<BlobDownloadInfo> response)
195+
private static long GetBlobLength(Response<BlobDownloadStreamingResult> response)
196196
{
197197
string lengthString = response.Value.Details.ContentRange;
198198
string[] split = lengthString.Split('/');

sdk/storage/Azure.Storage.Blobs.ChangeFeed/src/SegmentFactory.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,27 +40,27 @@ public virtual async Task<Segment> BuildSegment(
4040

4141
// Download segment manifest
4242
BlobClient blobClient = _containerClient.GetBlobClient(manifestPath);
43-
BlobDownloadInfo blobDownloadInfo;
43+
BlobDownloadStreamingResult blobDownloadStreamingResult;
4444

4545
if (async)
4646
{
47-
blobDownloadInfo = await blobClient.DownloadAsync().ConfigureAwait(false);
47+
blobDownloadStreamingResult = await blobClient.DownloadStreamingAsync().ConfigureAwait(false);
4848
}
4949
else
5050
{
51-
blobDownloadInfo = blobClient.Download();
51+
blobDownloadStreamingResult = blobClient.DownloadStreaming();
5252
}
5353

5454
// Parse segment manifest
5555
JsonDocument jsonManifest;
5656

5757
if (async)
5858
{
59-
jsonManifest = await JsonDocument.ParseAsync(blobDownloadInfo.Content).ConfigureAwait(false);
59+
jsonManifest = await JsonDocument.ParseAsync(blobDownloadStreamingResult.Content).ConfigureAwait(false);
6060
}
6161
else
6262
{
63-
jsonManifest = JsonDocument.Parse(blobDownloadInfo.Content);
63+
jsonManifest = JsonDocument.Parse(blobDownloadStreamingResult.Content);
6464
}
6565

6666
foreach (JsonElement shardJsonElement in jsonManifest.RootElement.GetProperty("chunkFilePaths").EnumerateArray())

sdk/storage/Azure.Storage.Blobs.ChangeFeed/tests/ChangeFeedTests.cs

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -56,16 +56,16 @@ public async Task GetCursor()
5656

5757
using FileStream stream = File.OpenRead(
5858
$"{Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)}{Path.DirectorySeparatorChar}Resources{Path.DirectorySeparatorChar}{"ChangeFeedManifest.json"}");
59-
BlobDownloadInfo blobDownloadInfo = BlobsModelFactory.BlobDownloadInfo(content: stream);
60-
Response<BlobDownloadInfo> downloadResponse = Response.FromValue(blobDownloadInfo, new MockResponse(200));
59+
BlobDownloadStreamingResult blobDownloadInfo = BlobsModelFactory.BlobDownloadStreamingResult(content: stream);
60+
Response<BlobDownloadStreamingResult> downloadResponse = Response.FromValue(blobDownloadInfo, new MockResponse(200));
6161

6262
if (IsAsync)
6363
{
64-
blobClient.Setup(r => r.DownloadAsync(default)).ReturnsAsync(downloadResponse);
64+
blobClient.Setup(r => r.DownloadStreamingAsync(default, default, default, default)).ReturnsAsync(downloadResponse);
6565
}
6666
else
6767
{
68-
blobClient.Setup(r => r.Download(default)).Returns(downloadResponse);
68+
blobClient.Setup(r => r.DownloadStreaming(default, default, default, default)).Returns(downloadResponse);
6969
}
7070

7171
if (IsAsync)
@@ -191,11 +191,11 @@ public async Task GetCursor()
191191

192192
if (IsAsync)
193193
{
194-
blobClient.Verify(r => r.DownloadAsync(default));
194+
blobClient.Verify(r => r.DownloadStreamingAsync(default, default, default, default));
195195
}
196196
else
197197
{
198-
blobClient.Verify(r => r.Download(default));
198+
blobClient.Verify(r => r.DownloadStreaming(default, default, default, default));
199199
}
200200

201201
if (IsAsync)
@@ -293,16 +293,16 @@ public async Task GetPage()
293293

294294
using FileStream stream = File.OpenRead(
295295
$"{Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)}{Path.DirectorySeparatorChar}Resources{Path.DirectorySeparatorChar}{"ChangeFeedManifest.json"}");
296-
BlobDownloadInfo blobDownloadInfo = BlobsModelFactory.BlobDownloadInfo(content: stream);
297-
Response<BlobDownloadInfo> downloadResponse = Response.FromValue(blobDownloadInfo, new MockResponse(200));
296+
BlobDownloadStreamingResult blobDownloadInfo = BlobsModelFactory.BlobDownloadStreamingResult(content: stream);
297+
Response<BlobDownloadStreamingResult> downloadResponse = Response.FromValue(blobDownloadInfo, new MockResponse(200));
298298

299299
if (IsAsync)
300300
{
301-
blobClient.Setup(r => r.DownloadAsync(default)).ReturnsAsync(downloadResponse);
301+
blobClient.Setup(r => r.DownloadStreamingAsync(default, default, default, default)).ReturnsAsync(downloadResponse);
302302
}
303303
else
304304
{
305-
blobClient.Setup(r => r.Download(default)).Returns(downloadResponse);
305+
blobClient.Setup(r => r.DownloadStreaming(default, default, default, default)).Returns(downloadResponse);
306306
}
307307

308308
if (IsAsync)
@@ -508,11 +508,11 @@ public async Task GetPage()
508508

509509
if (IsAsync)
510510
{
511-
blobClient.Verify(r => r.DownloadAsync(default));
511+
blobClient.Verify(r => r.DownloadStreamingAsync(default, default, default, default));
512512
}
513513
else
514514
{
515-
blobClient.Verify(r => r.Download(default));
515+
blobClient.Verify(r => r.DownloadStreaming(default, default, default, default));
516516
}
517517

518518
if (IsAsync)
@@ -631,16 +631,16 @@ public async Task NoYearsAfterStartTime()
631631

632632
using FileStream stream = File.OpenRead(
633633
$"{Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)}{Path.DirectorySeparatorChar}Resources{Path.DirectorySeparatorChar}{"ChangeFeedManifest.json"}");
634-
BlobDownloadInfo blobDownloadInfo = BlobsModelFactory.BlobDownloadInfo(content: stream);
635-
Response<BlobDownloadInfo> downloadResponse = Response.FromValue(blobDownloadInfo, new MockResponse(200));
634+
BlobDownloadStreamingResult blobDownloadInfo = BlobsModelFactory.BlobDownloadStreamingResult(content: stream);
635+
Response<BlobDownloadStreamingResult> downloadResponse = Response.FromValue(blobDownloadInfo, new MockResponse(200));
636636

637637
if (IsAsync)
638638
{
639-
blobClient.Setup(r => r.DownloadAsync(default)).ReturnsAsync(downloadResponse);
639+
blobClient.Setup(r => r.DownloadStreamingAsync(default, default, default, default)).ReturnsAsync(downloadResponse);
640640
}
641641
else
642642
{
643-
blobClient.Setup(r => r.Download(default)).Returns(downloadResponse);
643+
blobClient.Setup(r => r.DownloadStreaming(default, default, default, default)).Returns(downloadResponse);
644644
}
645645

646646
if (IsAsync)
@@ -696,11 +696,11 @@ public async Task NoYearsAfterStartTime()
696696

697697
if (IsAsync)
698698
{
699-
blobClient.Verify(r => r.DownloadAsync(default));
699+
blobClient.Verify(r => r.DownloadStreamingAsync(default, default, default, default));
700700
}
701701
else
702702
{
703-
blobClient.Verify(r => r.Download(default));
703+
blobClient.Verify(r => r.DownloadStreaming(default, default, default, default));
704704
}
705705

706706
if (IsAsync)
@@ -760,16 +760,16 @@ public async Task NoSegmentsRemainingInStartYear()
760760

761761
using FileStream stream = File.OpenRead(
762762
$"{Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)}{Path.DirectorySeparatorChar}Resources{Path.DirectorySeparatorChar}{"ChangeFeedManifest.json"}");
763-
BlobDownloadInfo blobDownloadInfo = BlobsModelFactory.BlobDownloadInfo(content: stream);
764-
Response<BlobDownloadInfo> downloadResponse = Response.FromValue(blobDownloadInfo, new MockResponse(200));
763+
BlobDownloadStreamingResult blobDownloadInfo = BlobsModelFactory.BlobDownloadStreamingResult(content: stream);
764+
Response<BlobDownloadStreamingResult> downloadResponse = Response.FromValue(blobDownloadInfo, new MockResponse(200));
765765

766766
if (IsAsync)
767767
{
768-
blobClient.Setup(r => r.DownloadAsync(default)).ReturnsAsync(downloadResponse);
768+
blobClient.Setup(r => r.DownloadStreamingAsync(default, default, default, default)).ReturnsAsync(downloadResponse);
769769
}
770770
else
771771
{
772-
blobClient.Setup(r => r.Download(default)).Returns(downloadResponse);
772+
blobClient.Setup(r => r.DownloadStreaming(default, default, default, default)).Returns(downloadResponse);
773773
}
774774

775775
if (IsAsync)
@@ -904,11 +904,11 @@ public async Task NoSegmentsRemainingInStartYear()
904904

905905
if (IsAsync)
906906
{
907-
blobClient.Verify(r => r.DownloadAsync(default));
907+
blobClient.Verify(r => r.DownloadStreamingAsync(default, default, default, default));
908908
}
909909
else
910910
{
911-
blobClient.Verify(r => r.Download(default));
911+
blobClient.Verify(r => r.DownloadStreaming(default, default, default, default));
912912
}
913913

914914
if (IsAsync)

0 commit comments

Comments
 (0)