From cc7a2acd4eef66345340074b8ef43a90cc90c2e6 Mon Sep 17 00:00:00 2001 From: Sean McCullough Date: Mon, 31 Aug 2020 15:11:02 -0500 Subject: [PATCH 1/2] Fixed PageBlobWriteStream Position bug --- .../src/PageBlobWriteStream.cs | 1 - .../tests/PageBlobClientTests.cs | 41 ++++ .../OpenWriteAsync_Position.json | 226 ++++++++++++++++++ .../OpenWriteAsync_PositionAsync.json | 226 ++++++++++++++++++ 4 files changed, 493 insertions(+), 1 deletion(-) create mode 100644 sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/OpenWriteAsync_Position.json create mode 100644 sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/OpenWriteAsync_PositionAsync.json diff --git a/sdk/storage/Azure.Storage.Blobs/src/PageBlobWriteStream.cs b/sdk/storage/Azure.Storage.Blobs/src/PageBlobWriteStream.cs index 6ffbd0ee9dc02..1e27a3b547c08 100644 --- a/sdk/storage/Azure.Storage.Blobs/src/PageBlobWriteStream.cs +++ b/sdk/storage/Azure.Storage.Blobs/src/PageBlobWriteStream.cs @@ -86,7 +86,6 @@ await WriteToBufferInternal( } } } - _position += count; } protected override async Task AppendInternal(bool async, CancellationToken cancellationToken) diff --git a/sdk/storage/Azure.Storage.Blobs/tests/PageBlobClientTests.cs b/sdk/storage/Azure.Storage.Blobs/tests/PageBlobClientTests.cs index 4db46d2382e0d..b777109caabcd 100644 --- a/sdk/storage/Azure.Storage.Blobs/tests/PageBlobClientTests.cs +++ b/sdk/storage/Azure.Storage.Blobs/tests/PageBlobClientTests.cs @@ -3329,6 +3329,47 @@ await TestHelper.CatchAsync( } } + [Test] + public async Task OpenWriteAsync_Position() + { + // Arrange + await using DisposingContainer test = await GetTestContainerAsync(); + PageBlobClient blob = await CreatePageBlobClientAsync(test.Container, Constants.KB); + + byte[] data0 = GetRandomBuffer(512); + byte[] data1 = GetRandomBuffer(512); + using Stream dataStream0 = new MemoryStream(data0); + using Stream dataStream1 = new MemoryStream(data1); + byte[] expectedData = new byte[Constants.KB]; + Array.Copy(data0, expectedData, 512); + Array.Copy(data1, 0, expectedData, 512, 512); + + // Act + Stream openWriteStream = await blob.OpenWriteAsync( + overwrite: false, + position: 0); + + Assert.AreEqual(0, openWriteStream.Position); + + await dataStream0.CopyToAsync(openWriteStream); + + Assert.AreEqual(512, openWriteStream.Position); + + await dataStream1.CopyToAsync(openWriteStream); + + Assert.AreEqual(1024, openWriteStream.Position); + + await openWriteStream.FlushAsync(); + + Assert.AreEqual(1024, openWriteStream.Position); + + Response result = await blob.DownloadAsync(); + MemoryStream dataResult = new MemoryStream(); + await result.Value.Content.CopyToAsync(dataResult); + Assert.AreEqual(expectedData.Length, dataResult.Length); + TestHelper.AssertSequenceEqual(expectedData, dataResult.ToArray()); + } + private PageBlobRequestConditions BuildAccessConditions( AccessConditionParameters parameters, bool lease = false, diff --git a/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/OpenWriteAsync_Position.json b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/OpenWriteAsync_Position.json new file mode 100644 index 0000000000000..b6822648572e4 --- /dev/null +++ b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/OpenWriteAsync_Position.json @@ -0,0 +1,226 @@ +{ + "Entries": [ + { + "RequestUri": "https://seanmcccanary3.blob.core.windows.net/test-container-ac7a6200-668e-a4b2-c8cd-0c3440d46daa?restype=container", + "RequestMethod": "PUT", + "RequestHeaders": { + "Authorization": "Sanitized", + "traceparent": "00-3ab35b85ffcf974887f2169f7c8a6524-70c85576df6f7947-00", + "User-Agent": [ + "azsdk-net-Storage.Blobs/12.6.0-dev.20200831.1", + "(.NET Core 4.6.29017.01; Microsoft Windows 10.0.18362 )" + ], + "x-ms-blob-public-access": "container", + "x-ms-client-request-id": "b6d9f9cc-aaf2-f662-6552-48948c76a3c1", + "x-ms-date": "Mon, 31 Aug 2020 19:59:26 GMT", + "x-ms-return-client-request-id": "true", + "x-ms-version": "2019-12-12" + }, + "RequestBody": null, + "StatusCode": 201, + "ResponseHeaders": { + "Content-Length": "0", + "Date": "Mon, 31 Aug 2020 19:59:24 GMT", + "ETag": "\u00220x8D84DE85C481705\u0022", + "Last-Modified": "Mon, 31 Aug 2020 19:59:24 GMT", + "Server": [ + "Windows-Azure-Blob/1.0", + "Microsoft-HTTPAPI/2.0" + ], + "x-ms-client-request-id": "b6d9f9cc-aaf2-f662-6552-48948c76a3c1", + "x-ms-request-id": "d1fa2670-101e-0017-41d1-7f73c9000000", + "x-ms-version": "2019-12-12" + }, + "ResponseBody": [] + }, + { + "RequestUri": "https://seanmcccanary3.blob.core.windows.net/test-container-ac7a6200-668e-a4b2-c8cd-0c3440d46daa/test-blob-4b101646-5f6e-479b-8a0b-a4c2b4df1969", + "RequestMethod": "PUT", + "RequestHeaders": { + "Authorization": "Sanitized", + "Content-Length": "0", + "traceparent": "00-0bffdfb449f0424e82feb20ab8100379-e871ea44bd4a2744-00", + "User-Agent": [ + "azsdk-net-Storage.Blobs/12.6.0-dev.20200831.1", + "(.NET Core 4.6.29017.01; Microsoft Windows 10.0.18362 )" + ], + "x-ms-blob-content-length": "1024", + "x-ms-blob-sequence-number": "0", + "x-ms-blob-type": "PageBlob", + "x-ms-client-request-id": "748cf028-fc4e-6cff-5e92-2be7069f4286", + "x-ms-date": "Mon, 31 Aug 2020 19:59:26 GMT", + "x-ms-return-client-request-id": "true", + "x-ms-version": "2019-12-12" + }, + "RequestBody": null, + "StatusCode": 201, + "ResponseHeaders": { + "Content-Length": "0", + "Date": "Mon, 31 Aug 2020 19:59:24 GMT", + "ETag": "\u00220x8D84DE85C598D1C\u0022", + "Last-Modified": "Mon, 31 Aug 2020 19:59:25 GMT", + "Server": [ + "Windows-Azure-Blob/1.0", + "Microsoft-HTTPAPI/2.0" + ], + "x-ms-client-request-id": "748cf028-fc4e-6cff-5e92-2be7069f4286", + "x-ms-request-id": "d1fa268c-101e-0017-56d1-7f73c9000000", + "x-ms-request-server-encrypted": "true", + "x-ms-version": "2019-12-12" + }, + "ResponseBody": [] + }, + { + "RequestUri": "https://seanmcccanary3.blob.core.windows.net/test-container-ac7a6200-668e-a4b2-c8cd-0c3440d46daa/test-blob-4b101646-5f6e-479b-8a0b-a4c2b4df1969", + "RequestMethod": "HEAD", + "RequestHeaders": { + "Authorization": "Sanitized", + "traceparent": "00-dd46709b5509b444b1923a03dba3f11e-01a5644032b69644-00", + "User-Agent": [ + "azsdk-net-Storage.Blobs/12.6.0-dev.20200831.1", + "(.NET Core 4.6.29017.01; Microsoft Windows 10.0.18362 )" + ], + "x-ms-client-request-id": "831ae77d-bd74-e2a2-9496-d038a1560097", + "x-ms-date": "Mon, 31 Aug 2020 19:59:26 GMT", + "x-ms-return-client-request-id": "true", + "x-ms-version": "2019-12-12" + }, + "RequestBody": null, + "StatusCode": 200, + "ResponseHeaders": { + "Accept-Ranges": "bytes", + "Content-Length": "0", + "Content-Type": "application/octet-stream", + "Date": "Mon, 31 Aug 2020 19:59:24 GMT", + "ETag": "\u00220x8D84DE85C598D1C\u0022", + "Last-Modified": "Mon, 31 Aug 2020 19:59:25 GMT", + "Server": [ + "Windows-Azure-Blob/1.0", + "Microsoft-HTTPAPI/2.0" + ], + "x-ms-blob-sequence-number": "0", + "x-ms-blob-type": "PageBlob", + "x-ms-client-request-id": "831ae77d-bd74-e2a2-9496-d038a1560097", + "x-ms-creation-time": "Mon, 31 Aug 2020 19:59:25 GMT", + "x-ms-lease-state": "available", + "x-ms-lease-status": "unlocked", + "x-ms-request-id": "d1fa269a-101e-0017-63d1-7f73c9000000", + "x-ms-server-encrypted": "true", + "x-ms-version": "2019-12-12" + }, + "ResponseBody": [] + }, + { + "RequestUri": "https://seanmcccanary3.blob.core.windows.net/test-container-ac7a6200-668e-a4b2-c8cd-0c3440d46daa/test-blob-4b101646-5f6e-479b-8a0b-a4c2b4df1969?comp=page", + "RequestMethod": "PUT", + "RequestHeaders": { + "Authorization": "Sanitized", + "Content-Length": "1024", + "If-Match": "\u00220x8D84DE85C598D1C\u0022", + "User-Agent": [ + "azsdk-net-Storage.Blobs/12.6.0-dev.20200831.1", + "(.NET Core 4.6.29017.01; Microsoft Windows 10.0.18362 )" + ], + "x-ms-client-request-id": "a312487c-5f95-cdee-9bce-3aca0868103a", + "x-ms-date": "Mon, 31 Aug 2020 19:59:26 GMT", + "x-ms-page-write": "update", + "x-ms-range": "bytes=0-1023", + "x-ms-return-client-request-id": "true", + "x-ms-version": "2019-12-12" + }, + "RequestBody": "ON8O7Q5bxo5fAKO6twPWRigRmsNSpRqJn/voZ4zPCQhyIl\u002BRNfWDzCr\u002BFU5ZRbVavOS/9AV\u002BM5PFhU0Tc14Cj/aaR5SkRBEyjs2ZVI/LL1pFjqunEBUD8\u002B/LzLCnb1nL\u002B4ZYv/0htXfTjWU45d4E\u002BVXzzuSzW37gllSk2Xhhih9zzlkJcnBdI9gz1IOvyw4Qx9JbtKF0F6AHdyiofNz/cQJGxBaF\u002BofklaoMf4b7MctFlBGlBtV9/7a4AfpItKf7NGKAaQb3isxLdh73aJcZC0ZcYufLWWssycVfzfmMm\u002BECEEsjesfETgpEWo\u002B2hZYfn/a07FG/L9v3VKBBl73Tv9o99FdM9ZB\u002BlxTdhv7cdUMuQC0D16\u002BPQ\u002BBvLCYng7ZMcZu0eZA\u002B0qllNVQ94ancGt5cElaP0OcrrrF33MhpVhRekBViJ/yy8G6EnaJbUmE3khJIynBfvaC0icrfx/bg\u002B94/31GTevPhqiLoCzJEz1tQP0m2IYuk/tN0rp0y0yh3o6LDG3MQoxgeZyBNd7Fub7lujoesKtpTm\u002BB9H8tVr9f5cGiPgbToQJswmLlrVociBT/jw0SgynnIcH\u002BSkoRNyLhIUwZJ3u0Fhk3sfJEg50RZWxmMceySWKXuxxE0Va4X4s8BIgKA2CdR3jz3tE7np4g7OTdqwVfMtvtgWhbc0TCf1JnCH8RB2YLyO5OvmqNXBx\u002BI\u002BBx2rSF4NGwHH30QdAwMWOC0JIjE\u002BV\u002B0eIbDHBtXCFP3VNgTKCd4SupYOrkF4caGo0LDo\u002BKXxP\u002B8wjSbtBdQsBYpGSA0\u002BC\u002B5PNmda7\u002Bmr5e/PHnYlGVwX4/YVmby3JXSB4mi28elUqoTCWYJ\u002BVg/FRKd23ieeBuxuLmQW6HIxl9Dy2Q1BNPPGerOxYr\u002BZ2Y3mUBTVQAdNI9u8CIOFfYJSkIHxS7zCRE/zsKNz7KQslFTWcJgdXFeJpbVxxOwwQTzxXpI96I3Q48vFIc\u002Bj2Tc3T7Rurw0qNXRqJ6XHkL9jgy\u002BmQo4SLquHBUyMGDqIJYy\u002BerU3wZIvxyld08DnyVNMoV6gPZZo5WEIp6mAXd054cIZSVYKK8Gddruk9Frqnzw5f7ab6Cg2FVVULxoob6kMJDH\u002Bjr/9AnWdAobaxDEGXghtht5mXfnaIzQA9fyndMbSmNAo69B8PD1BPuVhG1EkTdERuujK5YY35KuL/Ey49Y2ACGtg3XI4MUqhJV7UuQfi3KgrlfoeB7MKMMdk8D/wyAlXoRLlg3BfGUmeKcAnY2tjqR/kTV\u002BTocC4Fuxqk0EK8B1VvNg0/Rk3jLxwf93zIs2bwQcfzHqpxD8SbayD9EYIU3mi0aZTbqvG7MDjIyHixTPezpI6KyPiq/jYw==", + "StatusCode": 201, + "ResponseHeaders": { + "Content-Length": "0", + "Date": "Mon, 31 Aug 2020 19:59:24 GMT", + "ETag": "\u00220x8D84DE85C6D18BB\u0022", + "Last-Modified": "Mon, 31 Aug 2020 19:59:25 GMT", + "Server": [ + "Windows-Azure-Blob/1.0", + "Microsoft-HTTPAPI/2.0" + ], + "x-ms-blob-sequence-number": "0", + "x-ms-client-request-id": "a312487c-5f95-cdee-9bce-3aca0868103a", + "x-ms-content-crc64": "w0WgLlaqnHI=", + "x-ms-request-id": "d1fa26f7-101e-0017-2bd1-7f73c9000000", + "x-ms-request-server-encrypted": "true", + "x-ms-version": "2019-12-12" + }, + "ResponseBody": [] + }, + { + "RequestUri": "https://seanmcccanary3.blob.core.windows.net/test-container-ac7a6200-668e-a4b2-c8cd-0c3440d46daa/test-blob-4b101646-5f6e-479b-8a0b-a4c2b4df1969", + "RequestMethod": "GET", + "RequestHeaders": { + "Authorization": "Sanitized", + "traceparent": "00-5e80bea2119e304da53ad142b5ea29fa-aa184954282b8a45-00", + "User-Agent": [ + "azsdk-net-Storage.Blobs/12.6.0-dev.20200831.1", + "(.NET Core 4.6.29017.01; Microsoft Windows 10.0.18362 )" + ], + "x-ms-client-request-id": "58bbd17d-5d44-5602-fb63-d59caad8ac83", + "x-ms-date": "Mon, 31 Aug 2020 19:59:26 GMT", + "x-ms-return-client-request-id": "true", + "x-ms-version": "2019-12-12" + }, + "RequestBody": null, + "StatusCode": 200, + "ResponseHeaders": { + "Accept-Ranges": "bytes", + "Content-Length": "1024", + "Content-Type": "application/octet-stream", + "Date": "Mon, 31 Aug 2020 19:59:24 GMT", + "ETag": "\u00220x8D84DE85C6D18BB\u0022", + "Last-Modified": "Mon, 31 Aug 2020 19:59:25 GMT", + "Server": [ + "Windows-Azure-Blob/1.0", + "Microsoft-HTTPAPI/2.0" + ], + "x-ms-blob-sequence-number": "0", + "x-ms-blob-type": "PageBlob", + "x-ms-client-request-id": "58bbd17d-5d44-5602-fb63-d59caad8ac83", + "x-ms-creation-time": "Mon, 31 Aug 2020 19:59:25 GMT", + "x-ms-lease-state": "available", + "x-ms-lease-status": "unlocked", + "x-ms-request-id": "d1fa2717-101e-0017-44d1-7f73c9000000", + "x-ms-server-encrypted": "true", + "x-ms-version": "2019-12-12" + }, + "ResponseBody": "ON8O7Q5bxo5fAKO6twPWRigRmsNSpRqJn/voZ4zPCQhyIl\u002BRNfWDzCr\u002BFU5ZRbVavOS/9AV\u002BM5PFhU0Tc14Cj/aaR5SkRBEyjs2ZVI/LL1pFjqunEBUD8\u002B/LzLCnb1nL\u002B4ZYv/0htXfTjWU45d4E\u002BVXzzuSzW37gllSk2Xhhih9zzlkJcnBdI9gz1IOvyw4Qx9JbtKF0F6AHdyiofNz/cQJGxBaF\u002BofklaoMf4b7MctFlBGlBtV9/7a4AfpItKf7NGKAaQb3isxLdh73aJcZC0ZcYufLWWssycVfzfmMm\u002BECEEsjesfETgpEWo\u002B2hZYfn/a07FG/L9v3VKBBl73Tv9o99FdM9ZB\u002BlxTdhv7cdUMuQC0D16\u002BPQ\u002BBvLCYng7ZMcZu0eZA\u002B0qllNVQ94ancGt5cElaP0OcrrrF33MhpVhRekBViJ/yy8G6EnaJbUmE3khJIynBfvaC0icrfx/bg\u002B94/31GTevPhqiLoCzJEz1tQP0m2IYuk/tN0rp0y0yh3o6LDG3MQoxgeZyBNd7Fub7lujoesKtpTm\u002BB9H8tVr9f5cGiPgbToQJswmLlrVociBT/jw0SgynnIcH\u002BSkoRNyLhIUwZJ3u0Fhk3sfJEg50RZWxmMceySWKXuxxE0Va4X4s8BIgKA2CdR3jz3tE7np4g7OTdqwVfMtvtgWhbc0TCf1JnCH8RB2YLyO5OvmqNXBx\u002BI\u002BBx2rSF4NGwHH30QdAwMWOC0JIjE\u002BV\u002B0eIbDHBtXCFP3VNgTKCd4SupYOrkF4caGo0LDo\u002BKXxP\u002B8wjSbtBdQsBYpGSA0\u002BC\u002B5PNmda7\u002Bmr5e/PHnYlGVwX4/YVmby3JXSB4mi28elUqoTCWYJ\u002BVg/FRKd23ieeBuxuLmQW6HIxl9Dy2Q1BNPPGerOxYr\u002BZ2Y3mUBTVQAdNI9u8CIOFfYJSkIHxS7zCRE/zsKNz7KQslFTWcJgdXFeJpbVxxOwwQTzxXpI96I3Q48vFIc\u002Bj2Tc3T7Rurw0qNXRqJ6XHkL9jgy\u002BmQo4SLquHBUyMGDqIJYy\u002BerU3wZIvxyld08DnyVNMoV6gPZZo5WEIp6mAXd054cIZSVYKK8Gddruk9Frqnzw5f7ab6Cg2FVVULxoob6kMJDH\u002Bjr/9AnWdAobaxDEGXghtht5mXfnaIzQA9fyndMbSmNAo69B8PD1BPuVhG1EkTdERuujK5YY35KuL/Ey49Y2ACGtg3XI4MUqhJV7UuQfi3KgrlfoeB7MKMMdk8D/wyAlXoRLlg3BfGUmeKcAnY2tjqR/kTV\u002BTocC4Fuxqk0EK8B1VvNg0/Rk3jLxwf93zIs2bwQcfzHqpxD8SbayD9EYIU3mi0aZTbqvG7MDjIyHixTPezpI6KyPiq/jYw==" + }, + { + "RequestUri": "https://seanmcccanary3.blob.core.windows.net/test-container-ac7a6200-668e-a4b2-c8cd-0c3440d46daa?restype=container", + "RequestMethod": "DELETE", + "RequestHeaders": { + "Authorization": "Sanitized", + "traceparent": "00-f2dc7574206ffd4cb2187e20d567e096-2a473df1ef86024d-00", + "User-Agent": [ + "azsdk-net-Storage.Blobs/12.6.0-dev.20200831.1", + "(.NET Core 4.6.29017.01; Microsoft Windows 10.0.18362 )" + ], + "x-ms-client-request-id": "364c8577-b8ac-e2f5-a98e-3bb6245ced6b", + "x-ms-date": "Mon, 31 Aug 2020 19:59:26 GMT", + "x-ms-return-client-request-id": "true", + "x-ms-version": "2019-12-12" + }, + "RequestBody": null, + "StatusCode": 202, + "ResponseHeaders": { + "Content-Length": "0", + "Date": "Mon, 31 Aug 2020 19:59:24 GMT", + "Server": [ + "Windows-Azure-Blob/1.0", + "Microsoft-HTTPAPI/2.0" + ], + "x-ms-client-request-id": "364c8577-b8ac-e2f5-a98e-3bb6245ced6b", + "x-ms-request-id": "d1fa272a-101e-0017-53d1-7f73c9000000", + "x-ms-version": "2019-12-12" + }, + "ResponseBody": [] + } + ], + "Variables": { + "RandomSeed": "1793062639", + "Storage_TestConfigDefault": "ProductionTenant\nseanmcccanary3\nU2FuaXRpemVk\nhttps://seanmcccanary3.blob.core.windows.net\nhttps://seanmcccanary3.file.core.windows.net\nhttps://seanmcccanary3.queue.core.windows.net\nhttps://seanmcccanary3.table.core.windows.net\n\n\n\n\nhttps://seanmcccanary3-secondary.blob.core.windows.net\nhttps://seanmcccanary3-secondary.file.core.windows.net\nhttps://seanmcccanary3-secondary.queue.core.windows.net\nhttps://seanmcccanary3-secondary.table.core.windows.net\n\nSanitized\n\n\nCloud\nBlobEndpoint=https://seanmcccanary3.blob.core.windows.net/;QueueEndpoint=https://seanmcccanary3.queue.core.windows.net/;FileEndpoint=https://seanmcccanary3.file.core.windows.net/;BlobSecondaryEndpoint=https://seanmcccanary3-secondary.blob.core.windows.net/;QueueSecondaryEndpoint=https://seanmcccanary3-secondary.queue.core.windows.net/;FileSecondaryEndpoint=https://seanmcccanary3-secondary.file.core.windows.net/;AccountName=seanmcccanary3;AccountKey=Kg==;\nseanscope1" + } +} \ No newline at end of file diff --git a/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/OpenWriteAsync_PositionAsync.json b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/OpenWriteAsync_PositionAsync.json new file mode 100644 index 0000000000000..66c02dc58dac5 --- /dev/null +++ b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/OpenWriteAsync_PositionAsync.json @@ -0,0 +1,226 @@ +{ + "Entries": [ + { + "RequestUri": "https://seanmcccanary3.blob.core.windows.net/test-container-0255adb8-9010-f8af-cd50-84d7f952380b?restype=container", + "RequestMethod": "PUT", + "RequestHeaders": { + "Authorization": "Sanitized", + "traceparent": "00-aee9655fd8ff1644a8ef72ea40ca8342-1f9a84a4b798ca41-00", + "User-Agent": [ + "azsdk-net-Storage.Blobs/12.6.0-dev.20200831.1", + "(.NET Core 4.6.29017.01; Microsoft Windows 10.0.18362 )" + ], + "x-ms-blob-public-access": "container", + "x-ms-client-request-id": "ba4c8080-0332-6983-df31-04d33d3d070a", + "x-ms-date": "Mon, 31 Aug 2020 19:59:26 GMT", + "x-ms-return-client-request-id": "true", + "x-ms-version": "2019-12-12" + }, + "RequestBody": null, + "StatusCode": 201, + "ResponseHeaders": { + "Content-Length": "0", + "Date": "Mon, 31 Aug 2020 19:59:25 GMT", + "ETag": "\u00220x8D84DE85C9DDA4A\u0022", + "Last-Modified": "Mon, 31 Aug 2020 19:59:25 GMT", + "Server": [ + "Windows-Azure-Blob/1.0", + "Microsoft-HTTPAPI/2.0" + ], + "x-ms-client-request-id": "ba4c8080-0332-6983-df31-04d33d3d070a", + "x-ms-request-id": "9d0f9d30-901e-0019-11d1-7f5a79000000", + "x-ms-version": "2019-12-12" + }, + "ResponseBody": [] + }, + { + "RequestUri": "https://seanmcccanary3.blob.core.windows.net/test-container-0255adb8-9010-f8af-cd50-84d7f952380b/test-blob-df01144b-0f07-7d69-2694-b2bc84ed07ee", + "RequestMethod": "PUT", + "RequestHeaders": { + "Authorization": "Sanitized", + "Content-Length": "0", + "traceparent": "00-632cda1466105f4e96b158cd49b880d3-94358cf5bd2f6c48-00", + "User-Agent": [ + "azsdk-net-Storage.Blobs/12.6.0-dev.20200831.1", + "(.NET Core 4.6.29017.01; Microsoft Windows 10.0.18362 )" + ], + "x-ms-blob-content-length": "1024", + "x-ms-blob-sequence-number": "0", + "x-ms-blob-type": "PageBlob", + "x-ms-client-request-id": "dd76024d-c3dd-718d-17ce-949e50c7e4f2", + "x-ms-date": "Mon, 31 Aug 2020 19:59:26 GMT", + "x-ms-return-client-request-id": "true", + "x-ms-version": "2019-12-12" + }, + "RequestBody": null, + "StatusCode": 201, + "ResponseHeaders": { + "Content-Length": "0", + "Date": "Mon, 31 Aug 2020 19:59:25 GMT", + "ETag": "\u00220x8D84DE85CA48690\u0022", + "Last-Modified": "Mon, 31 Aug 2020 19:59:25 GMT", + "Server": [ + "Windows-Azure-Blob/1.0", + "Microsoft-HTTPAPI/2.0" + ], + "x-ms-client-request-id": "dd76024d-c3dd-718d-17ce-949e50c7e4f2", + "x-ms-request-id": "9d0f9d40-901e-0019-1dd1-7f5a79000000", + "x-ms-request-server-encrypted": "true", + "x-ms-version": "2019-12-12" + }, + "ResponseBody": [] + }, + { + "RequestUri": "https://seanmcccanary3.blob.core.windows.net/test-container-0255adb8-9010-f8af-cd50-84d7f952380b/test-blob-df01144b-0f07-7d69-2694-b2bc84ed07ee", + "RequestMethod": "HEAD", + "RequestHeaders": { + "Authorization": "Sanitized", + "traceparent": "00-c497e426dda16f4082c3d8780800dda6-e197ef49fb84e34b-00", + "User-Agent": [ + "azsdk-net-Storage.Blobs/12.6.0-dev.20200831.1", + "(.NET Core 4.6.29017.01; Microsoft Windows 10.0.18362 )" + ], + "x-ms-client-request-id": "26c9694a-fe71-b143-710e-6c762f20bc07", + "x-ms-date": "Mon, 31 Aug 2020 19:59:27 GMT", + "x-ms-return-client-request-id": "true", + "x-ms-version": "2019-12-12" + }, + "RequestBody": null, + "StatusCode": 200, + "ResponseHeaders": { + "Accept-Ranges": "bytes", + "Content-Length": "0", + "Content-Type": "application/octet-stream", + "Date": "Mon, 31 Aug 2020 19:59:25 GMT", + "ETag": "\u00220x8D84DE85CA48690\u0022", + "Last-Modified": "Mon, 31 Aug 2020 19:59:25 GMT", + "Server": [ + "Windows-Azure-Blob/1.0", + "Microsoft-HTTPAPI/2.0" + ], + "x-ms-blob-sequence-number": "0", + "x-ms-blob-type": "PageBlob", + "x-ms-client-request-id": "26c9694a-fe71-b143-710e-6c762f20bc07", + "x-ms-creation-time": "Mon, 31 Aug 2020 19:59:25 GMT", + "x-ms-lease-state": "available", + "x-ms-lease-status": "unlocked", + "x-ms-request-id": "9d0f9d46-901e-0019-23d1-7f5a79000000", + "x-ms-server-encrypted": "true", + "x-ms-version": "2019-12-12" + }, + "ResponseBody": [] + }, + { + "RequestUri": "https://seanmcccanary3.blob.core.windows.net/test-container-0255adb8-9010-f8af-cd50-84d7f952380b/test-blob-df01144b-0f07-7d69-2694-b2bc84ed07ee?comp=page", + "RequestMethod": "PUT", + "RequestHeaders": { + "Authorization": "Sanitized", + "Content-Length": "1024", + "If-Match": "\u00220x8D84DE85CA48690\u0022", + "User-Agent": [ + "azsdk-net-Storage.Blobs/12.6.0-dev.20200831.1", + "(.NET Core 4.6.29017.01; Microsoft Windows 10.0.18362 )" + ], + "x-ms-client-request-id": "6bab4714-f902-3ab4-cd20-8802c4bdaf9a", + "x-ms-date": "Mon, 31 Aug 2020 19:59:27 GMT", + "x-ms-page-write": "update", + "x-ms-range": "bytes=0-1023", + "x-ms-return-client-request-id": "true", + "x-ms-version": "2019-12-12" + }, + "RequestBody": "KhUmTuaNBM07b\u002B67ATVHchCfb4J2KRHpYeVhNuk6QSpnGwkgjTUrv/2pom3U0W/hhyGNsVhifAAEPOwBLM3kAC7EVOYsJ\u002BXbc6\u002BEzYejFJB2f6/HrZDRBJ8IG1BIKpIvxKE/EHyItWA7sj2o3q55YSdci6weHFOe8lBGJAuVk0kdVAjlZAQT7cpPi/tSKSXwjroo657mEahOoR4sQZFUph7zi4mmlPwjSJ7hzpBXS8gqVZVQbKeqNkNflsPl56s5\u002BuXcXp2cSvq9BaMABEMY9lVVAev7BDp3SVRGRv05PWHyqNOre\u002BwqjQubkmYDqjL/R59tkOW/PvaqZBVJVgT8hMdBDlxvbHtoKnPgYHHUc54iRv5dzK17MmrdARfW4TcGng6fwZvVkNokBGVx3t2E1vB2Jg8Gn7cZxtvykmtkkUg82sJjNLECTbYjOcdICVOMWSsmYLso//9WhfvA4/1uwHIcNQQbIKE\u002Bc9lZ4mXw0byHZjlAPTGNE9vCDK\u002B2Qmm4tHhUK9NPcDiJ5\u002BzizhyZZbM\u002BOX3ELoJBjyEoWBTxiDFvoC7sm6boN/UAtlZFqkS\u002BKab8dwns9Ib2E5uyJxckmF\u002B7cy7urMoMVQGHw3cs\u002B\u002BXcai9t9RAngqyn9ogLNhDd3B72iTcW0Hzc7yEHZDAPyRe21bzot6JOk/CBRrZBAR/xqudYNXGuxpqykAbvIB18mCxwVWFT9CV7qPZGlInGm\u002B4CFrpJt5SlBw4iNiacX3PTBa6J0au9nbXB3I17ZzEQ6/UY7AljMuGYyk1SML7\u002B3kiDc4/bPcpCRXkEh9oGKp/dEkoxhHNqb9LN8QZeamz2wv1F9/SiNa4r1aePXqsGkaCtdR50zVrVGQO8DUvD49oMDsXcwTKrO9ycBq7L2hAnxl9lsfVNgvWjcN7x5SdiZ/LNg1DlKtBtAjpC18erCT/ylEbsXjLkvovQOVFTuVW0OZ\u002B8/lbAQZyP9667C6ou\u002BGaf/lHgdgnA6MTFFfB/GkjkjZ4n7wvoMlKqXGaDKbPgoUHqtLsE08KW/BaS\u002ByyrD91m1n4MBghbt8z\u002BNhmiPL4Q5HOvlWWN4LnbkfL0VTcm/kyIHFM01Js4jv3uBp2p879XgRa4/Hp42fXFMHQWZmGU1zjMGh9q3A/YdwZontobMp4zndMgbgLSEENeb6MnISibWi5k3Nif7KUG4IR0Dzoaqf7W4smOdGg2\u002BgrbDG1ssFXdzESrt1bFk7AuGo5\u002BXQAIQ8WkUD9eDebGLuHOw984mi8ulkP2b/KoEE4YX1rat50K08mnx2AWf79e5Yh198/Q9X9fT8a8EtTT/D/wRq2L7HZDw/AWkNLPFxeEmIlqMxl/SGnae2jWTcH11MsgJQ==", + "StatusCode": 201, + "ResponseHeaders": { + "Content-Length": "0", + "Date": "Mon, 31 Aug 2020 19:59:25 GMT", + "ETag": "\u00220x8D84DE85CB48F0E\u0022", + "Last-Modified": "Mon, 31 Aug 2020 19:59:25 GMT", + "Server": [ + "Windows-Azure-Blob/1.0", + "Microsoft-HTTPAPI/2.0" + ], + "x-ms-blob-sequence-number": "0", + "x-ms-client-request-id": "6bab4714-f902-3ab4-cd20-8802c4bdaf9a", + "x-ms-content-crc64": "c4aYuMHXgMk=", + "x-ms-request-id": "9d0f9d50-901e-0019-2dd1-7f5a79000000", + "x-ms-request-server-encrypted": "true", + "x-ms-version": "2019-12-12" + }, + "ResponseBody": [] + }, + { + "RequestUri": "https://seanmcccanary3.blob.core.windows.net/test-container-0255adb8-9010-f8af-cd50-84d7f952380b/test-blob-df01144b-0f07-7d69-2694-b2bc84ed07ee", + "RequestMethod": "GET", + "RequestHeaders": { + "Authorization": "Sanitized", + "traceparent": "00-0bfdfd299734034d96b1fd4472482679-d910b0ed65ce6c44-00", + "User-Agent": [ + "azsdk-net-Storage.Blobs/12.6.0-dev.20200831.1", + "(.NET Core 4.6.29017.01; Microsoft Windows 10.0.18362 )" + ], + "x-ms-client-request-id": "e76145de-5075-b405-3da3-a4a608553d28", + "x-ms-date": "Mon, 31 Aug 2020 19:59:27 GMT", + "x-ms-return-client-request-id": "true", + "x-ms-version": "2019-12-12" + }, + "RequestBody": null, + "StatusCode": 200, + "ResponseHeaders": { + "Accept-Ranges": "bytes", + "Content-Length": "1024", + "Content-Type": "application/octet-stream", + "Date": "Mon, 31 Aug 2020 19:59:25 GMT", + "ETag": "\u00220x8D84DE85CB48F0E\u0022", + "Last-Modified": "Mon, 31 Aug 2020 19:59:25 GMT", + "Server": [ + "Windows-Azure-Blob/1.0", + "Microsoft-HTTPAPI/2.0" + ], + "x-ms-blob-sequence-number": "0", + "x-ms-blob-type": "PageBlob", + "x-ms-client-request-id": "e76145de-5075-b405-3da3-a4a608553d28", + "x-ms-creation-time": "Mon, 31 Aug 2020 19:59:25 GMT", + "x-ms-lease-state": "available", + "x-ms-lease-status": "unlocked", + "x-ms-request-id": "9d0f9d57-901e-0019-33d1-7f5a79000000", + "x-ms-server-encrypted": "true", + "x-ms-version": "2019-12-12" + }, + "ResponseBody": "KhUmTuaNBM07b\u002B67ATVHchCfb4J2KRHpYeVhNuk6QSpnGwkgjTUrv/2pom3U0W/hhyGNsVhifAAEPOwBLM3kAC7EVOYsJ\u002BXbc6\u002BEzYejFJB2f6/HrZDRBJ8IG1BIKpIvxKE/EHyItWA7sj2o3q55YSdci6weHFOe8lBGJAuVk0kdVAjlZAQT7cpPi/tSKSXwjroo657mEahOoR4sQZFUph7zi4mmlPwjSJ7hzpBXS8gqVZVQbKeqNkNflsPl56s5\u002BuXcXp2cSvq9BaMABEMY9lVVAev7BDp3SVRGRv05PWHyqNOre\u002BwqjQubkmYDqjL/R59tkOW/PvaqZBVJVgT8hMdBDlxvbHtoKnPgYHHUc54iRv5dzK17MmrdARfW4TcGng6fwZvVkNokBGVx3t2E1vB2Jg8Gn7cZxtvykmtkkUg82sJjNLECTbYjOcdICVOMWSsmYLso//9WhfvA4/1uwHIcNQQbIKE\u002Bc9lZ4mXw0byHZjlAPTGNE9vCDK\u002B2Qmm4tHhUK9NPcDiJ5\u002BzizhyZZbM\u002BOX3ELoJBjyEoWBTxiDFvoC7sm6boN/UAtlZFqkS\u002BKab8dwns9Ib2E5uyJxckmF\u002B7cy7urMoMVQGHw3cs\u002B\u002BXcai9t9RAngqyn9ogLNhDd3B72iTcW0Hzc7yEHZDAPyRe21bzot6JOk/CBRrZBAR/xqudYNXGuxpqykAbvIB18mCxwVWFT9CV7qPZGlInGm\u002B4CFrpJt5SlBw4iNiacX3PTBa6J0au9nbXB3I17ZzEQ6/UY7AljMuGYyk1SML7\u002B3kiDc4/bPcpCRXkEh9oGKp/dEkoxhHNqb9LN8QZeamz2wv1F9/SiNa4r1aePXqsGkaCtdR50zVrVGQO8DUvD49oMDsXcwTKrO9ycBq7L2hAnxl9lsfVNgvWjcN7x5SdiZ/LNg1DlKtBtAjpC18erCT/ylEbsXjLkvovQOVFTuVW0OZ\u002B8/lbAQZyP9667C6ou\u002BGaf/lHgdgnA6MTFFfB/GkjkjZ4n7wvoMlKqXGaDKbPgoUHqtLsE08KW/BaS\u002ByyrD91m1n4MBghbt8z\u002BNhmiPL4Q5HOvlWWN4LnbkfL0VTcm/kyIHFM01Js4jv3uBp2p879XgRa4/Hp42fXFMHQWZmGU1zjMGh9q3A/YdwZontobMp4zndMgbgLSEENeb6MnISibWi5k3Nif7KUG4IR0Dzoaqf7W4smOdGg2\u002BgrbDG1ssFXdzESrt1bFk7AuGo5\u002BXQAIQ8WkUD9eDebGLuHOw984mi8ulkP2b/KoEE4YX1rat50K08mnx2AWf79e5Yh198/Q9X9fT8a8EtTT/D/wRq2L7HZDw/AWkNLPFxeEmIlqMxl/SGnae2jWTcH11MsgJQ==" + }, + { + "RequestUri": "https://seanmcccanary3.blob.core.windows.net/test-container-0255adb8-9010-f8af-cd50-84d7f952380b?restype=container", + "RequestMethod": "DELETE", + "RequestHeaders": { + "Authorization": "Sanitized", + "traceparent": "00-7c3782b4be98384a9a46d8679a677b60-3c03e63a73d32e4e-00", + "User-Agent": [ + "azsdk-net-Storage.Blobs/12.6.0-dev.20200831.1", + "(.NET Core 4.6.29017.01; Microsoft Windows 10.0.18362 )" + ], + "x-ms-client-request-id": "7f24019b-c75b-5824-a02c-082c210cb1ba", + "x-ms-date": "Mon, 31 Aug 2020 19:59:27 GMT", + "x-ms-return-client-request-id": "true", + "x-ms-version": "2019-12-12" + }, + "RequestBody": null, + "StatusCode": 202, + "ResponseHeaders": { + "Content-Length": "0", + "Date": "Mon, 31 Aug 2020 19:59:25 GMT", + "Server": [ + "Windows-Azure-Blob/1.0", + "Microsoft-HTTPAPI/2.0" + ], + "x-ms-client-request-id": "7f24019b-c75b-5824-a02c-082c210cb1ba", + "x-ms-request-id": "9d0f9d93-901e-0019-60d1-7f5a79000000", + "x-ms-version": "2019-12-12" + }, + "ResponseBody": [] + } + ], + "Variables": { + "RandomSeed": "727006712", + "Storage_TestConfigDefault": "ProductionTenant\nseanmcccanary3\nU2FuaXRpemVk\nhttps://seanmcccanary3.blob.core.windows.net\nhttps://seanmcccanary3.file.core.windows.net\nhttps://seanmcccanary3.queue.core.windows.net\nhttps://seanmcccanary3.table.core.windows.net\n\n\n\n\nhttps://seanmcccanary3-secondary.blob.core.windows.net\nhttps://seanmcccanary3-secondary.file.core.windows.net\nhttps://seanmcccanary3-secondary.queue.core.windows.net\nhttps://seanmcccanary3-secondary.table.core.windows.net\n\nSanitized\n\n\nCloud\nBlobEndpoint=https://seanmcccanary3.blob.core.windows.net/;QueueEndpoint=https://seanmcccanary3.queue.core.windows.net/;FileEndpoint=https://seanmcccanary3.file.core.windows.net/;BlobSecondaryEndpoint=https://seanmcccanary3-secondary.blob.core.windows.net/;QueueSecondaryEndpoint=https://seanmcccanary3-secondary.queue.core.windows.net/;FileSecondaryEndpoint=https://seanmcccanary3-secondary.file.core.windows.net/;AccountName=seanmcccanary3;AccountKey=Kg==;\nseanscope1" + } +} \ No newline at end of file From ca563e14c087c4059f591e71d5d767c1d8e18042 Mon Sep 17 00:00:00 2001 From: Sean McCullough Date: Mon, 31 Aug 2020 15:12:38 -0500 Subject: [PATCH 2/2] Updated changelog --- sdk/storage/Azure.Storage.Blobs/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/sdk/storage/Azure.Storage.Blobs/CHANGELOG.md b/sdk/storage/Azure.Storage.Blobs/CHANGELOG.md index 393b8351c031d..0b82a88b3f007 100644 --- a/sdk/storage/Azure.Storage.Blobs/CHANGELOG.md +++ b/sdk/storage/Azure.Storage.Blobs/CHANGELOG.md @@ -3,6 +3,7 @@ ## 12.6.0-preview.1 (Unreleased) - Fixed bug where BlobClient.Upload(), BlockBlobClient.Upload(), AppendBlobClient.AppendBlock(), and PageBlobClient.UploadPages() would deadlock if the content stream's position was not 0. - Fixed bug in BlobBaseClient.OpenRead() causing us to do more download called than necessary. +- Fixed bug where PageBlobWriteStream would advance Position 2x the number of written bytes. ## 12.5.1 (2020-08-18) - Fixed bug in TaskExtensions.EnsureCompleted method that causes it to unconditionally throw an exception in the environments with synchronization context