Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GET Blob Structured Message #42959

Conversation

jaschrep-msft
Copy link
Member

GET Blob uses structured message when requesting a CRC on an unspecified range, or a range larger than 4 MiB.

@github-actions github-actions bot added the Storage Storage Service (Queues, Blobs, Files) label Mar 25, 2024
@azure-sdk
Copy link
Collaborator

azure-sdk commented Mar 25, 2024

API change check

APIView has identified API level changes in this PR and created following API reviews.

Azure.Storage.Blobs
Azure.Storage.Common

rangeGetContentMD5 = true;
break;
case StorageChecksumAlgorithm.StorageCrc64:
if (pageRange?.Length <= Constants.StructuredMessage.MaxDownloadCrcWithHeader)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hmm, do we want to just always use Structured Message for this download? Is splitting the logic worth the efficiency gain of using the header? I guess the logic split is not very impactful in code, but I wonder if customers who are watching requests might be confused? Not really sure here, just thinking aloud.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We already have to split for crc vs md5. I'd rather just use the simpler implementation when we're able.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sticking with this for compatibility on certain error states.

@@ -1725,8 +1753,15 @@ private void SetNameFieldsIfNull()
long length = response.IsUnavailable() ? 0 : response.Headers.ContentLength ?? 0;
ClientConfiguration.Pipeline.LogTrace($"Response: {response.GetRawResponse().Status}, ContentLength: {length}");

BlobDownloadStreamingResult result = response.ToBlobDownloadStreamingResult();
if (response.GetRawResponse().Headers.TryGetValue(Constants.StructuredMessage.CrcStructuredMessageHeader, out string _) &&
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we want to fail if we asked for structured message but didn't get one back? Again, not sure here, just a thought.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Probably. Need to think on that more. Good catch.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

throw added as sanity check, but relying on service to return a 400

@jaschrep-msft jaschrep-msft merged commit 9c0fcbc into Azure:feature/storage/ContentValidation Mar 26, 2024
15 checks passed
jaschrep-msft added a commit to jaschrep-msft/azure-sdk-for-net that referenced this pull request Aug 13, 2024
* download range structured message

* testproxy

* throw when service fails to give back structured message

* test

* testproxy
jaschrep-msft added a commit that referenced this pull request Aug 20, 2024
* Structured Message Decode Stream (#42079)

* Initial implementation and basic test

* seek/write tests

* fix test param

* fix exceptions

* Content validation update spec (#42191)

* enum rename and footer read/write methods

* align encode/decode tests | update encoding stream

* decode stream footer

* rename

* decode tests & bugfixes (#42256)

* decode tests & bugfixes

* roundtrip tests

* more tests

* better errors | remove duplicate test

* test coverage | exception message (#42363)

* Structured Message Decode: Validate Content Length (#42370)

* validate stream length

* tests

* stageblock | appendblock | putpages StructuredMessage (#42699)

* regenerate and stage block uses structured message

* page and append

* testproxy

* cleanup

* fix datalake/share tests

* testproxy

* testproxy

* re-add null-safe access

* GET Blob Structured Message (#42959)

* download range structured message

* testproxy

* throw when service fails to give back structured message

* test

* testproxy

* PUT Blob Structured Message (#43130)

* putblob structured message

* testproxy

* fixes

* Structured Message: DataLake Append (#43275)

* datalake append

* null fix

* fixes

* Retriable decode (#44155)

* retriable decode

* rewind mock test

* bugfix

* bugfix

* tests

* Download retriable stream structured message (#44176)

* blobs retriable structured message download

* test proxy

* testproxy

* remove commented code

* CRC: Always Structured Message (#44955)

* blockblob working

* revert testing change

* page/append

* datalake file

* testfix

* bug fixes | test fixes

* disable new API for presenting CRC from structured message

* fix nunit

* whitespace

* fix/test-proxy

* csproj

* more csproj removeals

This is building fine locally idk what's up

* Trigger Fresh Build

* fileshare testproxy

* fix mock

* Update macos image from 11 to latest (#44607)

* Update macos image from 11 to latest

* Update eng/pipelines/templates/jobs/ci.mgmt.yml

Co-authored-by: Ben Broderick Phillips <ben@benbp.net>

---------

Co-authored-by: Ben Broderick Phillips <ben@benbp.net>

* Revert "Update macos image from 11 to latest (#44607)"

this is causing too many problems. skipping macos tests for now. They'll
run when this feature branch merges into main.

This reverts commit 29e87b4.

---------

Co-authored-by: Wes Haggard <weshaggard@users.noreply.github.com>
Co-authored-by: Ben Broderick Phillips <ben@benbp.net>

* Enable fileshare crc (#45124)

* impl

* testproxy

* shares fix

* testproxy

* block blob fix (#45129)

* block blob fix

* testproxy

* rename and validation (#45160)

* rename and validation

* fix

* crc tracking converted to longs (#45307)

* Crc reporting pt2 (#45447)

* expose crc from structured message

* testproxy

* undo typo

* exportapi

* testproxy

* remove unused parameter

* add `ExpectTrailingDetails` to download response

* fix test inconsistency

* fix auto

---------

Co-authored-by: Wes Haggard <weshaggard@users.noreply.github.com>
Co-authored-by: Ben Broderick Phillips <ben@benbp.net>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Storage Storage Service (Queues, Blobs, Files)
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants