Bug Report
The GMT time normalization for headers introduced in PR #20495 uses non-canonical MIME headers for the headers in the storage/azblob SDK:
x-ms-source-if-modified-since (canonically X-Ms-Source-If-Modified-Since)
x-ms-source-if-unmodified-since (canonically X-Ms-Source-If-Unmodified-Since)
x-ms-immutability-policy-until-date (canonically X-Ms-Immutability-Policy-Until-Date)
net/http.Header.Get canonicalizes the header if it's not already in the canonical format. This results in 3 unnecessary allocations per query, which under systems with high concurrent load can add up.
Since this PR was merged the same autorest rules were applied to the storage/azdatalake SDK as well in PR #21387.
-
What did you expect or want to happen?
Use header keys which are already canonical to avoid unnecessary allocations.
-
How can we reproduce it?
Run a large azblob or azdatalake workload with profiling.
-
Anything we should know about your environment.
go version go1.25.6 darwin/arm64, however issue is version and architecture agnostic
Bug Report
The GMT time normalization for headers introduced in PR #20495 uses non-canonical MIME headers for the headers in the
storage/azblobSDK:x-ms-source-if-modified-since(canonicallyX-Ms-Source-If-Modified-Since)x-ms-source-if-unmodified-since(canonicallyX-Ms-Source-If-Unmodified-Since)x-ms-immutability-policy-until-date(canonicallyX-Ms-Immutability-Policy-Until-Date)net/http.Header.Getcanonicalizes the header if it's not already in the canonical format. This results in 3 unnecessary allocations per query, which under systems with high concurrent load can add up.Since this PR was merged the same autorest rules were applied to the
storage/azdatalakeSDK as well in PR #21387.What did you expect or want to happen?
Use header keys which are already canonical to avoid unnecessary allocations.
How can we reproduce it?
Run a large azblob or azdatalake workload with profiling.
Anything we should know about your environment.
go version go1.25.6 darwin/arm64, however issue is version and architecture agnostic