Skip to content

[Storage] Migrate azure-storage-queue to TypeSpec - #49822

Closed
gunjansingh-msft wants to merge 14 commits into
mainfrom
feature/storage/typespec
Closed

[Storage] Migrate azure-storage-queue to TypeSpec#49822
gunjansingh-msft wants to merge 14 commits into
mainfrom
feature/storage/typespec

Conversation

@gunjansingh-msft

@gunjansingh-msft gunjansingh-msft commented Jul 15, 2026

Copy link
Copy Markdown
Member

Summary

Migrates azure-storage-queue from AutoRest/Swagger to TypeSpec codegen. The hand-written public clients (QueueClient / QueueServiceClient and 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

  • Operation-group split without a TCGC patch. The duplicate-client-name error that blocked the @@clientLocation split for Java was traced to the rust/go QueueClient extends Queue client copying every Queue op; pinning those copies out of the java scope resolves it spec-only (see spec PR below). No public API change.
  • Per-status-code exception regression fixed — collapsed to a single QueueStorageExceptionInternal default in the customization so XML error deserialization keeps working.
  • Customization class suppresses the generated public clients/builder (we ship the hand-written convenience layer).

Validation (stock, unpatched TCGC 0.69 + typespec-java 0.45.4)

  • ✅ main + test compile
  • revapi — 0 violations (public API preserved)
  • 323 playback tests, 0 failures (incl. QueueErrorDeserializationTests)

⚠️ Not mergeable yet — known TODOs

Related

🤖 Generated with Claude Code

@azure-pipelines

Copy link
Copy Markdown
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.

@github-actions github-actions Bot added the Storage Storage Service (Queues, Blobs, Files) label Jul 15, 2026
@gunjansingh-msft
gunjansingh-msft marked this pull request as ready for review July 15, 2026 12:44
Copilot AI review requested due to automatic review settings July 15, 2026 12:44
@azure-pipelines

Copy link
Copy Markdown
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.

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.

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 + XML BinaryData bodies/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.

Comment thread sdk/storage/azure-storage-queue/tsp-location.yaml Outdated
Comment thread sdk/storage/azure-storage-queue/tsp-location.yaml Outdated

@ibrandes Isabelle (ibrandes) left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

didn't get to a ton of files, but here's what i've found so far!

@vcolin7 vcolin7 added the Client This issue points to a problem in the data-plane of the library. label Aug 8, 2026
- 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
@ibrandes

Copy link
Copy Markdown
Member

new PR here: #50082

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Client This issue points to a problem in the data-plane of the library. Storage Storage Service (Queues, Blobs, Files)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants