[Storage] Migrate azure-storage-queue to TypeSpec#49822
[Storage] Migrate azure-storage-queue to TypeSpec#49822gunjansingh-msft wants to merge 4 commits into
Conversation
|
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. |
|
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. |
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. |
| additionalDirectories: | ||
|
|
| commit: e594f9e6853ec4044c9642948466d697c2fd8544 | ||
| repo: gunjansingh-msft/azure-rest-api-specs |
| import com.azure.core.http.rest.PagedFlux; | ||
| import com.azure.core.http.rest.PagedResponse; | ||
| import com.azure.core.http.rest.RequestOptions; | ||
| import com.azure.core.http.rest.Response; | ||
| import com.azure.core.http.rest.SimpleResponse; |
| RequestOptions requestOptions = requestOptions(context); | ||
| addOptionalQueryParam(requestOptions, "prefix", prefix); | ||
| addOptionalQueryParam(requestOptions, "marker", marker); | ||
| addOptionalQueryParam(requestOptions, "maxresults", maxResults); | ||
| requestOptions.addQueryParam("include", | ||
| (include == null || include.isEmpty()) ? "" : String.join(",", include)); | ||
| return requestOptions; |
ibrandes
left a comment
There was a problem hiding this comment.
didn't get to a ton of files, but here's what i've found so far!
| private static void restoreAccessPolicyDateTimeType(Editor editor, Logger logger) { | ||
| String path = "src/main/java/com/azure/storage/queue/models/QueueAccessPolicy.java"; | ||
| String content = editor.getContents().get(path); |
There was a problem hiding this comment.
is there a client.tsp customization we can use instead of this? maybe
@@alternateType(AccessPolicy.start, offsetDateTime, "java");
@@alternateType(AccessPolicy.expiry, offsetDateTime, "java");
| private static void preserveHandwrittenModuleInfo(Editor editor, Logger logger) { | ||
| String path = "src/main/java/module-info.java"; | ||
| if (editor.getContents().containsKey(path)) { | ||
| editor.removeFile(path); | ||
| logger.info("Removed generated module-info.java to preserve the hand-written module descriptor."); | ||
| } else { | ||
| logger.info("Generated module-info.java not present; nothing to remove."); | ||
| } | ||
| } |
There was a problem hiding this comment.
can you add this to FILES_TO_REMOVE?
| */ | ||
| @Generated | ||
| private String start; | ||
| private OffsetDateTime start; |
There was a problem hiding this comment.
i know this model is internal so its not a breaking change - but do we still need to keep this as a string? does it being OffsetDateTime cause issues further down the stack? same question for the other internal models that have types changed
| public static QueueAccessPolicy fromXml(XmlReader xmlReader, String rootElementName) throws XMLStreamException { | ||
| String finalRootElementName | ||
| = rootElementName == null || rootElementName.isEmpty() ? "QueueAccessPolicy" : rootElementName; | ||
| = rootElementName == null || rootElementName.isEmpty() ? "AccessPolicy" : rootElementName; |
There was a problem hiding this comment.
should this be QueueAccessPolicy? my same question applies to all the other classes that have the name of the xml root element changed
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