Skip to content

Add STG105 Storage features - #7448

Merged
JinmingHu (Jinming-Hu) merged 12 commits into
Azure:mainfrom
Jinming-Hu:stg105-all-features
Oct 16, 2026
Merged

JinmingHu (Jinming-Hu) merged 12 commits into
Azure:mainfrom
Jinming-Hu:stg105-all-features

Conversation

@Jinming-Hu

@Jinming-Hu JinmingHu (Jinming-Hu) commented Oct 6, 2026 •

Copy link
Copy Markdown
Member

Summary

Adds the STG105 Storage SDK features across Blobs, Data Lake, and Files Shares:

  • Update partitioned-transfer defaults and overlap remaining downloads with consumption of the initial response.
  • Use Apache Arrow by default for flat and hierarchical Blob listings, retaining explicit XML selection.
  • Update the Files Shares API version to 2027-03-07 and incorporate reproducible generation customizations.
  • Expose share creation time in Get Properties and List Shares.
  • Add Files Change Feed configuration and properties.
  • Support file/directory addressing by file ID and listing a file's hard links.
  • Add opt-in persisted-session authentication for eligible Blob and Data Lake downloads, with shared session providers.
  • Add Blob/Data Lake GetLayout APIs, download hints, and explicit one-shot and managed locality routing. Layout models expose ranges directly as vectors.

Default behavior

  • Blob/Data Lake initial partitioned-transfer sizes change from 256 MiB to 4 MiB. Explicit InitialChunkSize and SingleUploadThreshold values remain respected.
  • Blob listing defaults change from XML to Apache Arrow. Set ResponseFormat to StorageResponseFormat::Xml to retain XML responses.
  • Sessions remain opt-in; automatic session authentication is disabled by default.
  • Managed download locality routing is Disabled by default for both Blob and Data Lake. Explicit Auto and Enabled remain supported.

Commit organization

The ten-commit history is rebuilt on latest upstream main (443592ef3), with no NFS List V2 feature or revert commits. Seven feature commits each include their owning changelog changes. Partitioned transfers and data locality are combined in commit c2cbcff4c. Standalone comments/documentation and spelling allowlist updates have separate commits. All new and modified test sources, shared test helpers, test build definitions, and the published recordings pin are collected in dedicated commit d940bc507.

Test results and rollout gates

Earlier feature-snapshot runs produced the following historical results, before the subsequent CI fixes and routing-default changes:

Run Passed Failed Skipped
Original 67-case feature set LIVE with ordinary account configuration 59 0 8
Session integration tests LIVE against the session-enabled account 3 0 0
Original 67-case feature set PLAYBACK with a fresh test-proxy process 67 0 0

Subsequent targeted runs exercised the four rollout-dependent Files cases LIVE against the enabled account, regenerated their playback-only recordings, and confirmed PLAYBACK passes and LIVE skips. The default-disabled locality changes passed 24 targeted Blob/Data Lake cases.

The complete Files ShareProperties, ListShares, ChangeFeed, and FileIdAddressing cases are temporarily playback-only pending CI-account feature availability. Their assertions remain intact, including existing quota and listing coverage. Restore LIVE execution after the relevant rollout. Other session/locality gates are tracked in #7449.

Recordings are published and pinned to cpp/storage_01f138ad9c. Session recordings redact tokens/keys and replace expiration with a fixed future date. Future RECORD runs must register the session sanitizers on test-proxy before recording and verify the saved recordings afterward; sanitizer setup is handled by the recording workflow, not C++ test helpers.

Review notes

  • This introduces public APIs and default-behavior changes requiring API review.
  • The Files Shares generation input currently uses the integrated STG105 specification branch in Jinming-Hu/azure-rest-api-specs.

Copilot AI balanced review requested due to automatic review settings October 6, 2026 02:30
@github-actions github-actions Bot added the Storage Storage Service (Queues, Blobs, Files) label Oct 6, 2026
@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 2 pipeline(s).
8 pipeline(s) were filtered out due to trigger conditions.
There may be pipelines that require an authorized user to comment /azp run to run.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot review overview

🟡 Changes recommended

Listing metadata conversion and mixed-case session endpoint parsing still have correctness issues.

Review effort: Balanced
Findings: 4 Medium severity

Open (4)
What changed in this PR

Adds STG105 capabilities across the Storage SDK, extending shared infrastructure, Blob and Data Lake downloads, and Files Shares APIs.

Changes:

  • Adds opt-in session authentication and locality-aware downloads.
  • Changes transfer defaults to 4 MiB and Blob listing defaults to Arrow.
  • Adds Files Shares metadata, NFS listing types, change feed configuration, and file-ID addressing, with tests and documentation.
File Description
sdk/​storage/​azure-storage-files-shares/​test/​ut/​share_service_client_test.cpp Checks listed share creation times.
sdk/​storage/​azure-storage-files-shares/​test/​ut/​share_file_client_test.cpp Tests file-ID addressing and hard links.
sdk/​storage/​azure-storage-files-shares/​test/​ut/​share_directory_client_test.cpp Tests NFS entry types and properties.
sdk/​storage/​azure-storage-files-shares/​test/​ut/​share_client_test.cpp Tests addressing restrictions and change feed.
sdk/​storage/​azure-storage-files-shares/​src/​share_options.cpp Adds file-ID parsing and operation guards.
sdk/​storage/​azure-storage-files-shares/​src/​share_lease_client.cpp Guards unsupported file-ID lease operations.
sdk/​storage/​azure-storage-files-shares/​src/​share_directory_client.cpp Maps NFS entries and supports ID-addressed properties.
sdk/​storage/​azure-storage-files-shares/​src/​share_client.cpp Adds ID-based factories and change feed options.
sdk/​storage/​azure-storage-files-shares/​inc/​azure/​storage/​files/​shares/​share_responses.hpp Exposes NFS entries and hard-link results.
sdk/​storage/​azure-storage-files-shares/​inc/​azure/​storage/​files/​shares/​share_options.hpp Adds change feed and hard-link options.
sdk/​storage/​azure-storage-files-shares/​inc/​azure/​storage/​files/​shares/​share_file_client.hpp Declares file-ID and hard-link APIs.
sdk/​storage/​azure-storage-files-shares/​inc/​azure/​storage/​files/​shares/​share_directory_client.hpp Adds directory file-ID state and accessor.
sdk/​storage/​azure-storage-files-shares/​inc/​azure/​storage/​files/​shares/​share_constants.hpp Defines the file-ID query parameter.
sdk/​storage/​azure-storage-files-shares/​inc/​azure/​storage/​files/​shares/​share_client.hpp Declares ID-addressed client factories.
sdk/​storage/​azure-storage-files-shares/​inc/​azure/​storage/​files/​shares/​rest_client.hpp Updates service version and protocol models.
sdk/​storage/​azure-storage-files-shares/​CHANGELOG.md Records new Files Shares capabilities.
sdk/​storage/​azure-storage-files-datalake/​test/​ut/​session_authentication_test.cpp Tests session authentication and pipeline retention.
sdk/​storage/​azure-storage-files-datalake/​test/​ut/​datalake_file_client_test.cpp Checks transfer defaults and explicit overrides.
sdk/​storage/​azure-storage-files-datalake/​test/​ut/​data_locality_test.cpp Tests layouts and routed downloads.
sdk/​storage/​azure-storage-files-datalake/​test/​ut/​CMakeLists.txt Registers locality and session tests.
sdk/​storage/​azure-storage-files-datalake/​src/​private/​datalake_utilities.hpp Declares shared property conversion.
sdk/​storage/​azure-storage-files-datalake/​src/​datalake_utilities.cpp Maps Blob properties and session options.
sdk/​storage/​azure-storage-files-datalake/​src/​datalake_responses.cpp Implements layout pagination.
sdk/​storage/​azure-storage-files-datalake/​src/​datalake_path_client.cpp Reuses shared property conversion.
sdk/​storage/​azure-storage-files-datalake/​src/​datalake_file_system_client.cpp Preserves Blob configuration after renames.
sdk/​storage/​azure-storage-files-datalake/​src/​datalake_file_client.cpp Implements layouts and forwards download hints.
sdk/​storage/​azure-storage-files-datalake/​src/​datalake_directory_client.cpp Preserves Blob pipelines after renames.
sdk/​storage/​azure-storage-files-datalake/​README.md Documents locality APIs and routing.
sdk/​storage/​azure-storage-files-datalake/​inc/​azure/​storage/​files/​datalake/​datalake_responses.hpp Adds layout responses and download hints.
sdk/​storage/​azure-storage-files-datalake/​inc/​azure/​storage/​files/​datalake/​datalake_options.hpp Adds session/locality options and transfer defaults.
sdk/​storage/​azure-storage-files-datalake/​inc/​azure/​storage/​files/​datalake/​datalake_file_system_client.hpp Documents deletion timing.
sdk/​storage/​azure-storage-files-datalake/​inc/​azure/​storage/​files/​datalake/​datalake_file_client.hpp Declares GetLayout.
sdk/​storage/​azure-storage-files-datalake/​CHANGELOG.md Records features and changed defaults.
sdk/​storage/​azure-storage-common/​test/​ut/​test_base.hpp Declares shared request inspection and sanitizers.
sdk/​storage/​azure-storage-common/​test/​ut/​test_base.cpp Sanitizes recorded session credentials.
sdk/​storage/​azure-storage-common/​test/​ut/​storage_url_test.cpp Tests Storage endpoint parsing.
sdk/​storage/​azure-storage-common/​test/​ut/​CMakeLists.txt Registers URL parsing tests.
sdk/​storage/​azure-storage-common/​src/​storage_url.cpp Parses service, account, and container URLs.
sdk/​storage/​azure-storage-common/​src/​storage_pipeline.cpp Installs optional locality routing.
sdk/​storage/​azure-storage-common/​src/​storage_data_locality_policy.cpp Routes requests while preserving Host.
sdk/​storage/​azure-storage-common/​src/​storage_bearer_token_authentication_policy.cpp Separates authorization from sending.
sdk/​storage/​azure-storage-common/​src/​shared_key_policy.cpp Generalizes request signing inputs.
sdk/​storage/​azure-storage-common/​inc/​azure/​storage/​common/​internal/​storage_url.hpp Declares Storage URL parsing.
sdk/​storage/​azure-storage-common/​inc/​azure/​storage/​common/​internal/​storage_pipeline.hpp Adds locality policy configuration.
sdk/​storage/​azure-storage-common/​inc/​azure/​storage/​common/​internal/​storage_data_locality_policy.hpp Declares routing policy and context helpers.
sdk/​storage/​azure-storage-common/​inc/​azure/​storage/​common/​internal/​storage_bearer_token_auth.hpp Enables session-policy specialization.
sdk/​storage/​azure-storage-common/​inc/​azure/​storage/​common/​internal/​shared_key_policy.hpp Exposes reusable signature generation.
sdk/​storage/​azure-storage-common/​CMakeLists.txt Registers shared routing and URL sources.
sdk/​storage/​azure-storage-blobs/​test/​ut/​storage_timeout_test.cpp Uses the shared request inspection helper.
sdk/​storage/​azure-storage-blobs/​test/​ut/​storage_retry_policy_test.cpp Disables locality in an existing retry test.
sdk/​storage/​azure-storage-blobs/​test/​ut/​CMakeLists.txt Registers locality and session tests.
sdk/​storage/​azure-storage-blobs/​test/​ut/​block_blob_client_test.cpp Checks transfer defaults.
sdk/​storage/​azure-storage-blobs/​test/​ut/​blob_container_client_test.cpp Checks default Arrow and explicit XML responses.
sdk/​storage/​azure-storage-blobs/​swagger/​README.md Updates generation input and layout customizations.
sdk/​storage/​azure-storage-blobs/​src/​private/​token_credential_session_provider.hpp Declares session caching and refresh state.
sdk/​storage/​azure-storage-blobs/​src/​private/​token_credential_session_provider.cpp Implements session acquisition and caching.
sdk/​storage/​azure-storage-blobs/​src/​private/​session_authentication_policy.hpp Declares authentication policy construction.
sdk/​storage/​azure-storage-blobs/​src/​private/​session_authentication_policy.cpp Implements session signing and Bearer fallback.
sdk/​storage/​azure-storage-blobs/​src/​private/​data_locality.hpp Declares layout routing state.
sdk/​storage/​azure-storage-blobs/​src/​private/​data_locality.cpp Selects endpoints and refreshes layouts.
sdk/​storage/​azure-storage-blobs/​src/​blob_service_client.cpp Integrates session and locality policies.
sdk/​storage/​azure-storage-blobs/​src/​blob_responses.cpp Implements layout pagination.
sdk/​storage/​azure-storage-blobs/​src/​blob_options.cpp Constructs shared session providers.
sdk/​storage/​azure-storage-blobs/​src/​blob_container_client.cpp Integrates policies and defaults listings to Arrow.
sdk/​storage/​azure-storage-blobs/​inc/​azure/​storage/​blobs/​rest_client.hpp Adds layout protocol types and download hints.
sdk/​storage/​azure-storage-blobs/​inc/​azure/​storage/​blobs/​blob_service_client.hpp Documents container deletion timing.
sdk/​storage/​azure-storage-blobs/​inc/​azure/​storage/​blobs/​blob_responses.hpp Exposes layout models and paged responses.
sdk/​storage/​azure-storage-blobs/​inc/​azure/​storage/​blobs/​blob_options.hpp Adds session/locality options and new defaults.
sdk/​storage/​azure-storage-blobs/​inc/​azure/​storage/​blobs/​blob_container_client.hpp Documents container deletion timing.
sdk/​storage/​azure-storage-blobs/​inc/​azure/​storage/​blobs/​blob_client.hpp Declares GetLayout.
sdk/​storage/​azure-storage-blobs/​CMakeLists.txt Registers session and locality implementations.
sdk/​storage/​azure-storage-blobs/​CHANGELOG.md Records features and default-behavior changes.
sdk/​storage/​assets.json Pins updated test recordings.

Comment thread sdk/storage/azure-storage-blobs/src/blob_container_client.cpp
Comment thread sdk/storage/azure-storage-common/src/storage_url.cpp Outdated
Comment thread sdk/storage/azure-storage-files-shares/src/share_directory_client.cpp Outdated
Comment thread sdk/storage/azure-storage-files-shares/src/share_directory_client.cpp Outdated
@Jinming-Hu

Copy link
Copy Markdown
Member Author

/azp run cpp - storage

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 1 pipeline(s).

@Jinming-Hu

Copy link
Copy Markdown
Member Author

/azp run cpp - storage

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 1 pipeline(s).

@Jinming-Hu
JinmingHu (Jinming-Hu) force-pushed the stg105-all-features branch 3 times, most recently from e7b57c0 to 28da08e Compare October 7, 2026 04:00
@Jinming-Hu

Copy link
Copy Markdown
Member Author

/azp run cpp - storage

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 1 pipeline(s).

Preserve the requested Prefix in Arrow flat-list responses.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Normalize hostname casing for service/account inference without changing URL casing.

Use CMake automatic DLL exports for session providers without exporting STL members.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Reduce default initial transfer sizes to 4 MiB and overlap remaining downloads
with consumption of the initial response for Blob and Files transfers.

Add Blob and DataLake layout APIs, download hints, and locality routing.
Keep managed locality routing disabled by default while supporting explicit
Auto and Enabled selection. Include both features' changelogs and layout
member documentation.

Expose the layout ranges directly as vectors in BlobLayoutInfo and
FileLayoutInfo, without redundant range-container wrapper types.

Preserve the explicit false legal-hold initializer through the generation
customization and regenerated BlobProperties declaration.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Collect standalone deletion remarks, existing API descriptions, and generated-model documentation without changing executable behavior.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Recognize the sovereign-cloud endpoint suffixes and service-defined xfiles header.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@Jinming-Hu

Copy link
Copy Markdown
Member Author

/azp run cpp - storage

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 1 pipeline(s).

@Jinming-Hu

Copy link
Copy Markdown
Member Author

/azp run cpp - storage

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 1 pipeline(s).

Collect feature tests, fixture migrations, regression assertions, shared test helpers,
test build definitions, and the published recording pin. Include default-disabled
locality coverage and playback-only Files cases pending production enablement.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Initialize the nullable policy before assigning either Arrow immutability column without clearing a value parsed from the other column.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@Jinming-Hu

Copy link
Copy Markdown
Member Author

/azp run cpp - storage

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 1 pipeline(s).

Move the default XML-to-Arrow listing response format note out of Breaking Changes because the public blob listing behavior is unchanged.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@Jinming-Hu

Copy link
Copy Markdown
Member Author

/azp run cpp - storage

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 1 pipeline(s).

@Jinming-Hu
JinmingHu (Jinming-Hu) merged commit 92ed3da into Azure:main Oct 16, 2026
137 checks passed
@Jinming-Hu
JinmingHu (Jinming-Hu) deleted the stg105-all-features branch October 16, 2026 22:03
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.

4 participants