Repository navigation
RecoveryServicesBackup: add 2026-10-01 API version with Instant Access snapshot policy props - #46044
Conversation
…s snapshot policy props New stable 2026-09-30 (superset of 2026-08-01) adds instantAccessSnapshotEnabled and instantAccessDurationMinutes to AzureIaaSVMProtectionPolicy, gated via @added(Versions.v2026_09_30). Regenerated bms.json + examples; new readme tag. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…10-01 Finalized new API version 2026-10-01. Renamed stable/2026-09-30 and examples/2026-09-30 to 2026-10-01 and updated all version references (TypeSpec enum v2026_10_01, models @added, readme tag, service.yaml, bms.json, and all example api-version / \ paths). Regenerated via tsp compile; only the IaaS VM Instant Access snapshot properties (instantAccessSnapshotEnabled, instantAccessDurationMinutes) differ from the prior stable version. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
Thank you for your contribution Neelav Bhatiya (@Neelav-0211)! We will review the pull request and get back to you soon. |
|
Azure Pipelines: Successfully started running 10 pipeline(s). 2 pipeline(s) were filtered out due to trigger conditions. There may be pipelines that require an authorized user to comment /azp run to run. |
Next Steps to MergeImportant checks have failed. As of today they are not blocking this PR, but in near future they may.Addressing the following failures is highly recommended:
Comment generated by summarize-checks workflow run. |
API Change CheckAPIView identified API level changes in this PR and created the following API reviews
Comment generated by After APIView workflow run. |
Adds the primary-region getRPExtendedInfo APIs to the
RecoveryServicesBackup spec, mirroring the service implementation:
- RecoveryPoints_GetRPExtendedInfo (POST, long-running)
- RecoveryPoints_GetRPExtendedInfoOperationResult (GET)
Both 202 responses carry Location, Azure-AsyncOperation and Retry-After.
Per BMS convention Azure-AsyncOperation targets the shared
.../operationsStatus/{operationId} endpoint while Location targets the
operation-result endpoint, so final-state-via remains "location".
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: c58056c6-6882-48a3-bc36-04b13e2305cc
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 2cfde69b-516a-45c8-9f8c-fe89489ad334
Gary Li (gary-x-li)
left a comment
There was a problem hiding this comment.
ARM API Review
Posting findings from the ARM API Reviewer agent (critic-verified, 3 iterations, converged) against commit 9689aba. See inline comments for findings 1-2.
Approval labels observed: none.
Adding SQL instance snapshot changes
Replaces "backup copy"/"backup copies" with "recovery point"/"recovery points" in the descriptions of the models introduced by this change. Scoped to the new models only. The ~48 remaining occurrences sit on pre-existing shared models whose descriptions are emitted into every published API version, so changing them would regenerate all 56 spec files and is better handled as a separate terminology cleanup. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: c58056c6-6882-48a3-bc36-04b13e2305cc
…-info-2026-10-01 [recoveryservicesbackup] Add getRPExtendedInfo APIs (2026-10-01)
…-10-01-existing-basic-vm-protection [recoveryservicesbackup] Add existing basic VM protection contract
- readme.md: move the stamp-specific conditional tag blocks under a new 'Stamp Overrides' heading so only the global block remains under Basic Information (resolves Avocado MULTIPLE_DEFAULT_TAGS). - models.tsp: constrain instantAccessDurationMinutes with @minValue(60) and @MaxValue(300) to match the service business logic (InstantAccessSnapshotConstants Min=60 / Max=300); regenerated bms.json. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…01-csharp-model-suffix-fix Fix C# name for Azure workload restore validation model
…ckup-2026-10-01-ia-snapshot
|
typespec suppression - The Instant Access snapshot feature introduces a new recovery point tier, IASnapshotRP . To add it without altering any previously released API version, we converted RecoveryPointTierType from a closed enum to a union , with the new variant and the open string catch-all both gated behind added(Versions.v2026_10_01) . Versions prior to 2026-10-01 therefore remain closed enums with an unchanged value set. That conversion is what surfaces the rule. In the previous enum form, members were not required to carry documentation; as union variants they are. The four variants in question are pre-existing, long-standing BMS wire constants that we are carrying forward unchanged — we are not introducing them. Why we cannot simply fix the underlying issue We implemented and tested the recommended fix: adding doc comments to the four variants. It compiles cleanly and removes the rule violation, but it changes the emitted Swagger of 11 already-released API versions. Adding descriptions causes the autorest emitter to emit an x-ms-enum.values[] array where none previously existed: "x-ms-enum": {
|
|
Please follow the Next Steps to Merge comment on this PR and the review and merge process. See allowed approversOnly alzimmermsft, ArcturusZhang, ArthurMa1978, heaths, jeremymeng, jhendrixMSFT, JonathanGiles, JoshLove-msft, kashifkhan, kazrael2119, LarryOsterman, m-nash, maorleger, msyyc, nasc17, qiaozha, samvaity, tadelesh, tjprescott, v-jiaodi, v-xuto, weidongxu-microsoft, xirzec, lmazuel, praveenkuttappan, catalinaperalta, timotheeguerin can apply this label. |
1 similar comment
|
Please follow the Next Steps to Merge comment on this PR and the review and merge process. See allowed approversOnly alzimmermsft, ArcturusZhang, ArthurMa1978, heaths, jeremymeng, jhendrixMSFT, JonathanGiles, JoshLove-msft, kashifkhan, kazrael2119, LarryOsterman, m-nash, maorleger, msyyc, nasc17, qiaozha, samvaity, tadelesh, tjprescott, v-jiaodi, v-xuto, weidongxu-microsoft, xirzec, lmazuel, praveenkuttappan, catalinaperalta, timotheeguerin can apply this label. |
✅ Release Plan Created
|
|
|
||
| #suppress "@azure-tools/typespec-azure-resource-manager/arm-resource-interface-requires-decorator" "Legacy BMS route-based operation group; it is not an ARM resource operation group." | ||
| @added(Versions.v2026_10_01) | ||
| interface RecoveryPointsExtendedInfo { | ||
| /** | ||
| * Triggers fetching the additional details of a recovery point, which are not returned by the recovery point GET | ||
| * API. This is an asynchronous operation. Returns tracking headers which can be tracked using the | ||
| * GetRPExtendedInfoOperationResult API. | ||
| */ | ||
| #suppress "@azure-tools/typespec-azure-core/casing-style" "RP is an established acronym in the BMS contract; the operation name matches the service operation id." | ||
| @route("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.RecoveryServices/vaults/{vaultName}/backupFabrics/{fabricName}/getRPExtendedInfo") | ||
| @post | ||
| @tag("RecoveryPoints") | ||
| getRPExtendedInfo( | ||
| ...ApiVersionParameter, | ||
| ...SubscriptionIdParameter, | ||
| ...ResourceGroupParameter, | ||
|
|
||
| /** | ||
| * The name of the recovery services vault. | ||
| */ | ||
| @path | ||
| vaultName: string, | ||
|
|
||
| /** | ||
| * Fabric name associated with the backed up items. | ||
| */ | ||
| @path | ||
| fabricName: string, | ||
|
|
||
| /** | ||
| * Request payload containing the ARM id of the recovery point whose additional details are to be fetched. | ||
| */ | ||
| @bodyRoot | ||
| parameters: GetRPExtendedInfoRequestResource, | ||
| ): | ||
| | ArmResponse<RPExtendedInfoResourceList> | ||
| | ArmAcceptedResponse< | ||
| "Accepted", | ||
| ArmLroLocationHeader & | ||
| Azure.Core.Foundations.RetryAfterHeader & { | ||
| /** | ||
| * A link to the shared fabric level operation status endpoint, which reports the status of this long | ||
| * running operation. The result itself is retrieved from the URL in the Location header. | ||
| */ | ||
| @header("Azure-AsyncOperation") | ||
| azureAsyncOperation?: string; | ||
| } | ||
| > | ||
| | ErrorResponse; | ||
|
|
||
| /** | ||
| * Returns the additional details of the recovery points fetched by a prior getRPExtendedInfo operation. Returns | ||
| * 202 Accepted while the operation is still running. | ||
| */ | ||
| #suppress "@azure-tools/typespec-azure-core/casing-style" "RP is an established acronym in the BMS contract; the operation name matches the service operation id." | ||
| @route("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.RecoveryServices/vaults/{vaultName}/backupFabrics/{fabricName}/getRPExtendedInfoOperationResult/{operationId}") | ||
| @get | ||
| @tag("RecoveryPoints") | ||
| getRPExtendedInfoOperationResult( | ||
| ...ApiVersionParameter, | ||
| ...SubscriptionIdParameter, | ||
| ...ResourceGroupParameter, | ||
|
|
||
| /** | ||
| * The name of the recovery services vault. | ||
| */ | ||
| @path | ||
| vaultName: string, | ||
|
|
||
| /** | ||
| * Fabric name associated with the backed up items. | ||
| */ | ||
| @path | ||
| fabricName: string, | ||
|
|
||
| /** | ||
| * OperationID which represents the prior getRPExtendedInfo operation whose result needs to be fetched. | ||
| */ | ||
| @path | ||
| operationId: string, | ||
| ): | ||
| | ArmResponse<RPExtendedInfoResourceList> | ||
| | ArmAcceptedResponse< | ||
| "Accepted", | ||
| ArmLroLocationHeader & | ||
| Azure.Core.Foundations.RetryAfterHeader & { | ||
| /** | ||
| * A link to the shared fabric level operation status endpoint, which reports the status of the long | ||
| * running operation whose result this endpoint returns. | ||
| */ | ||
| @header("Azure-AsyncOperation") | ||
| azureAsyncOperation?: string; | ||
| } | ||
| > | ||
| | ErrorResponse; | ||
| } | ||
|
|
||
| #suppress "@azure-tools/typespec-azure-resource-manager/arm-resource-interface-requires-decorator" "Legacy BMS route-based operation group; it is not an ARM resource operation group." | ||
| @added(Versions.v2026_10_01) | ||
| interface ProtectionContainerRefreshOperationStatuses { | ||
| /** | ||
| * Fetches the status of the fabric level asynchronous operation identified by the given operation id. The status | ||
| * can be in progress, completed or failed. You can refer to the OperationStatus enum for all the possible states of | ||
| * an operation. This is the endpoint reported in the Azure-AsyncOperation header of the fabric level operations | ||
| * that start one, such as RefreshContainers and GetRPExtendedInfo. | ||
| */ | ||
| @route("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.RecoveryServices/vaults/{vaultName}/backupFabrics/{fabricName}/operationsStatus/{operationId}") | ||
| @get | ||
| @tag("ProtectionContainerRefreshOperationStatuses") | ||
| get( | ||
| ...ApiVersionParameter, | ||
| ...SubscriptionIdParameter, | ||
| ...ResourceGroupParameter, | ||
|
|
||
| /** | ||
| * The name of the recovery services vault. | ||
| */ | ||
| @path | ||
| vaultName: string, | ||
|
|
||
| /** | ||
| * Fabric name associated with the operation. | ||
| */ | ||
| @path | ||
| fabricName: string, | ||
|
|
||
| /** | ||
| * OperationID which represents the operation whose status needs to be fetched. | ||
| */ | ||
| @path | ||
| operationId: string, | ||
| ): ArmResponse<OperationStatus> | ErrorResponse; | ||
| } |
There was a problem hiding this comment.
Prabhkirat Singh (@Prabhkiratnitp) could you help confirm if all these three LROs should return void as the final result?
the LRO header template did not declare the FinalResult type, so the generated response struct from client side does not expose the resource field (this means this operation will return void in client side).
if this operation would return a resource, you should:
Locate the operation and add the FinalResult parameter to the appropriate LRO header (ArmLroLocationHeader, ArmAsyncOperationHeader, or ArmCombinedLroHeaders) with the correct type:
@armResourceOperations
interface RedisCacheAccessPolicies {
createUpdate is ArmResourceCreateOrReplaceAsync<
RedisCacheAccessPolicy,
LroHeaders = ArmLroLocationHeader<FinalResult = CacheAccessPolicyAssignment> & Azure.Core.Foundations.RetryAfterHeader
>;
}
thanks
There was a problem hiding this comment.
this PR #47153 has the changes to update the LRO response's FinalResult to RPExtendedInfoResourceList
Brings in RecoveryServicesBackup 2026-10-01 (Azure#46044). Backup 2026-11-01 now carries forward 2026-10-01: conflicts resolved by keeping the 2026-10-01 version boundaries, adding v2026_11_01 after v2026_10_01, and regenerating stable/2026-11-01/bms.json. Adds the six 2026-10-01 examples for operations inherited by 2026-11-01 and the masked BackupSecurityPin_Get example. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Summary
Adds a new stable API version
2026-10-01forrecoveryservicesbackup(Microsoft.RecoveryServices/RecoveryServicesBackup), which is a superset of the existing2026-08-01stable version. This version introduces Instant Access snapshot policy support, additional recovery point diagnostic details, workload-snapshot filesystem metadata, and a few smaller additive fixes to existing workload-backup contracts.What's new in 2026-10-01
Instant Access (IA) snapshot policy support
AzureIaaSVMProtectionPolicy: addedinstantAccessSnapshotEnabled(bool) andinstantAccessDurationMinutes(int32, bounded 60–300, defaults to 300 wheninstantAccessSnapshotEnabledistrueand the duration is omitted; ignored wheninstantAccessSnapshotEnabledisfalse/omitted) to enable and configure retention for Instant Access snapshots. Both are gated to2026-10-01.RecoveryPointTierType: added a new tier valueIASnapshotRPfor recovery points retained under the policy'sinstantAccessDurationMinutes.RecoveryPointTierTyperemains a closed enum (modelAsString: false) for every API version before2026-10-01, byte-identical to their originally shipped contract. Only the2026-10-01projection is open/string-extensible (modelAsString: true), via@added(Versions.v2026_10_01)on theIASnapshotRPandstring-catch-all union variants — scoped this way per team decision so no existing shipped API version's contract changes. The service will not returnIASnapshotRPto clients calling API versions prior to2026-10-01.New recovery point "extended info" operations (IaaS VM)
backupFabrics/{fabricName}/getRPExtendedInfo(POST) andgetRPExtendedInfoOperationResult/{operationId}(GET) operations to trigger andretrieve additional recovery-point details (e.g., OS/data disk info) not returned
by the existing recovery point GET API.
RPExtendedInfo(+IaasVMRPExtendedInfosubtype),RPExtendedInfoResource(List),GetRPExtendedInfoRequest(Resource).DiskInformation: addeddiskSizeInGbandstorageType.recoveryPointIdsconstrained to exactly one id (minItems/maxItems= 1),matching what the service accepts today. The list shape is retained so the limit
can be raised in a future api-version without a breaking change.
Fabric-level operation status endpoint
backupFabrics/{fabricName}/operationsStatus/{operationId}(GET),ProtectionContainerRefreshOperationStatuses_Get, returningOperationStatus.Azure-AsyncOperationheaderExisting Basic VM protection handling
AzureIaaSVMProtectedItemProperties: addedexistingBasicVMProtection(ExistingBasicVMProtectionunion) to control how pre-existing Basic-tier VM protection is handled when configuring protection (e.g.,DisableWithDeleteRPsNow).SQL instance snapshot / workload restore changes
2026-05-31-previewonly:ProtectionLevel,InstanceProtectionReadiness,RestorePointQueryType(Snapshot,FullDifferentialAndSnapshot),AzureVmWorkloadSQLInstanceProtectedItem,AzureVmWorkloadSQLDatabaseProtectedItem.parentProtectedItem/protectionLevel,DatabaseInRP,BmsrpQueryObject(baseSnapshotRPId,baseRPDatasourceId,getLatestRPOnly).SnapshotRestoreParameters: addeddisksToDetachOnClash(disk ARM IDs to detach on filesystem clash).AzureWorkloadSQLRecoveryPointExtendedInfo: addedsnapshotRecoveryPointInfowith new supporting modelsSnapshotRecoveryPointInfo,FilesystemInfo,StorageSpaceInfo,DiskInfodescribing per-volume filesystem/Storage Spaces/disk metadata captured on the VM for snapshot restore points.ValidateAzureWorkloadRestoreOperationRequestas a distinct discriminated subtype for Azure Workload (SQL/HANA/SAP ASE/AnyDatabase) restore validation.Container discovery
BMSRefreshContainersQueryObject: addedcontainerSubscriptionIdto support cross-subscription container discovery.