[Storage] Migrate azure-storage-queue to TypeSpec - #49822
Closed
gunjansingh-msft wants to merge 14 commits into
Closed
[Storage] Migrate azure-storage-queue to TypeSpec#49822gunjansingh-msft wants to merge 14 commits into
gunjansingh-msft wants to merge 14 commits into
Conversation
added 2 commits
July 8, 2026 15:39
|
Azure Pipelines: Successfully started running 1 pipeline(s). 35 pipeline(s) were filtered out due to trigger conditions. There may be pipelines that require an authorized user to comment /azp run to run. |
gunjansingh-msft
marked this pull request as ready for review
July 15, 2026 12:44
gunjansingh-msft
requested review from
a team,
Alan Zimmer (alzimmermsft),
browndav-msft,
Isabelle (ibrandes),
Kyle Knapp (kyleknap) and
Sean McCullough (seanmcc-msft)
as code owners
July 15, 2026 12:44
|
Azure Pipelines: Successfully started running 1 pipeline(s). 35 pipeline(s) were filtered out due to trigger conditions. There may be pipelines that require an authorized user to comment /azp run to run. |
Contributor
There was a problem hiding this comment.
Pull request overview
Migrates azure-storage-queue from the legacy AutoRest/Swagger implementation to TypeSpec-based generation, while keeping the existing hand-written public client surface and adapting it to call into the generated protocol layer.
Changes:
- Introduces TypeSpec input wiring (
tsp-location.yaml) and TypeSpec metadata/property files for the module. - Refactors hand-written clients/builders to use
RequestOptions+ XMLBinaryDatabodies/responses against the generated protocol operations. - Adds a customization module to suppress generated public clients and to restore desired model/client behavior parity (fluent models, exception mapping, etc.).
Reviewed changes
Copilot reviewed 42 out of 45 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
| sdk/storage/azure-storage-queue/tsp-location.yaml | Adds TypeSpec spec source location (currently fork-pinned). |
| sdk/storage/azure-storage-queue/src/test/java/com/azure/storage/queue/QueueTestBase.java | Normalizes URL/headers for playback matching with new protocol layer behavior. |
| sdk/storage/azure-storage-queue/src/main/resources/META-INF/azure-storage-queue-tsp_metadata.json | Adds TypeSpec cross-language API mapping metadata for generated protocol types. |
| sdk/storage/azure-storage-queue/src/main/resources/META-INF/azure-storage-queue_metadata.json | Adds updated cross-language metadata for the hand-written convenience surface. |
| sdk/storage/azure-storage-queue/src/main/resources/azure-storage-queue-tsp.properties | Adds TypeSpec-specific properties for metadata/versioning. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/QueueServiceClientBuilder.java | Updates builder to construct TypeSpec-backed protocol impl. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/QueueServiceClient.java | Refactors service client methods to use RequestOptions + XML BinaryData handling. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/QueueServiceAsyncClient.java | Refactors async service client to new protocol layer patterns. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/QueueClientBuilder.java | Updates queue builder to use queue-scoped base URL for protocol operations. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/QueueClient.java | Refactors queue client methods to new RequestOptions + XML serialization/deserialization. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/QueueAsyncClient.java | Refactors async queue client methods to new protocol layer patterns. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/package-info.java | Updates package documentation/header to TypeSpec generation. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/models/UserDelegationKey.java | Regenerates XML model parsing/shape for TypeSpec output. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/models/SendMessageResult.java | Regenerates XML model parsing/shape for TypeSpec output. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/models/QueueSignedIdentifier.java | Regenerates XML model parsing/shape for TypeSpec output. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/models/QueueServiceStatistics.java | Regenerates XML model parsing/shape for TypeSpec output. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/models/QueueServiceProperties.java | Regenerates XML model parsing/shape for TypeSpec output. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/models/QueueRetentionPolicy.java | Regenerates XML model parsing/shape for TypeSpec output. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/models/QueueMetrics.java | Regenerates XML model parsing/shape for TypeSpec output. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/models/QueueItem.java | Regenerates XML model parsing/shape for TypeSpec output. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/models/QueueCorsRule.java | Regenerates XML model parsing/shape for TypeSpec output. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/models/QueueAnalyticsLogging.java | Regenerates XML model parsing/shape for TypeSpec output. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/models/QueueAccessPolicy.java | Regenerates XML model parsing/shape for TypeSpec output. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/models/package-info.java | Updates models package documentation/header to TypeSpec generation. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/models/GeoReplicationStatus.java | Regenerates enum docs/header to TypeSpec generation. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/models/GeoReplication.java | Regenerates XML model parsing/shape for TypeSpec output. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/implementation/util/ModelHelper.java | Adds helpers for RequestOptions, metadata headers, XML (de)serialization, and paging conversion. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/implementation/package-info.java | Updates implementation package documentation/header to TypeSpec generation. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/implementation/models/SignedIdentifiers.java | Adds generated internal XML wrapper model for ACL responses. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/implementation/models/ReceivedMessages.java | Adds generated internal XML wrapper model for receive-messages responses. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/implementation/models/QueueMessageItemInternal.java | Regenerates internal received-message model to TypeSpec output (immutability/constructors). |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/implementation/models/QueueMessage.java | Regenerates internal message body model to TypeSpec output (immutability/constructors). |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/implementation/models/PeekedMessages.java | Adds generated internal XML wrapper model for peek-messages responses. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/implementation/models/PeekedMessageItemInternal.java | Regenerates internal peeked-message model to TypeSpec output (immutability/constructors). |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/implementation/models/package-info.java | Updates implementation models package documentation/header. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/implementation/models/ListQueuesIncludeType.java | Adds generated internal enum for list-queues include values. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/implementation/models/ListOfSentMessage.java | Adds generated internal XML wrapper model for send-message responses. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/implementation/models/KeyInfo.java | Regenerates key info XML model (now OffsetDateTime-based) for TypeSpec. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/implementation/AzureQueueStorageImpl.java | Updates protocol client holder to TypeSpec generation and new service-version type. |
| sdk/storage/azure-storage-queue/customization/src/main/java/QueueStorageCustomizations.java | Adds TypeSpec customization to suppress generated public clients and patch generated shapes/behavior. |
| sdk/storage/azure-storage-queue/customization/pom.xml | Adds Maven module for running codegen customizations. |
Isabelle (ibrandes)
left a comment
Member
There was a problem hiding this comment.
didn't get to a ton of files, but here's what i've found so far!
- Remove the unused generated getXmlNextLink helpers from ServicesImpl. exposeRawListQueuesResponse replaces the emitter's paginated path, so the private getXmlNextLink helpers are never called, tripping SpotBugs UPM_UNCALLED_PRIVATE_METHOD. Add removeUnusedXmlNextLinkHelpers to the customization so the removal is reproduced on regeneration. - ModelHelper.transformQueueProperties: default approximate-messages-count to 0L (was null) to avoid a null unboxed into the primitive QueueProperties field (SpotBugs null-dereference). SpotBugs: BugInstance size is 0. All 323 playback tests pass. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019uaMNtk1vxEK8FSsfCUTwQ
Member
|
new PR here: #50082 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Migrates
azure-storage-queuefrom AutoRest/Swagger to TypeSpec codegen. The hand-written public clients (QueueClient/QueueServiceClientand async) are adapted to consume the generated protocol impl, and the generated impl reproduces AutoRest's 4-class topology (ServicesImpl/QueuesImpl/MessagesImpl/MessageIdsImpl).Key points
duplicate-client-nameerror that blocked the@@clientLocationsplit for Java was traced to the rust/goQueueClient extends Queueclient copying every Queue op; pinning those copies out of the java scope resolves it spec-only (see spec PR below). No public API change.QueueStorageExceptionInternaldefault in the customization so XML error deserialization keeps working.Validation (stock, unpatched TCGC 0.69 + typespec-java 0.45.4)
QueueErrorDeserializationTests)tsp-location.yamlpins a personal fork (gunjansingh-msft/azure-rest-api-specs). Must be re-pointed to the mergedAzure/azure-rest-api-specscommit once the spec PR lands: Storage Queue (data-plane): Java client customizations for TypeSpec migration azure-rest-api-specs#44686.Related
🤖 Generated with Claude Code