Skip to content

RecoveryServicesBackup: add 2026-10-01 API version with Instant Access snapshot policy props - #46044

Merged
iwrinshow merged 52 commits into
Azure:mainfrom
Neelav-0211:users/nebhatiya/rsvbackup-2026-10-01-ia-snapshot
Oct 8, 2026
Merged

iwrinshow merged 52 commits into
Azure:mainfrom
Neelav-0211:users/nebhatiya/rsvbackup-2026-10-01-ia-snapshot

Conversation

@Neelav-0211

@Neelav-0211 Neelav Bhatiya (Neelav-0211) commented Sep 2, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Adds a new stable API version 2026-10-01 for recoveryservicesbackup (Microsoft.RecoveryServices/RecoveryServicesBackup), which is a superset of the existing 2026-08-01 stable 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: added instantAccessSnapshotEnabled (bool) and instantAccessDurationMinutes (int32, bounded 60–300, defaults to 300 when instantAccessSnapshotEnabled is true and the duration is omitted; ignored when instantAccessSnapshotEnabled is false/omitted) to enable and configure retention for Instant Access snapshots. Both are gated to 2026-10-01.
  • RecoveryPointTierType: added a new tier value IASnapshotRP for recovery points retained under the policy's instantAccessDurationMinutes.
    • RecoveryPointTierType remains a closed enum (modelAsString: false) for every API version before 2026-10-01, byte-identical to their originally shipped contract. Only the 2026-10-01 projection is open/string-extensible (modelAsString: true), via @added(Versions.v2026_10_01) on the IASnapshotRP and string-catch-all union variants — scoped this way per team decision so no existing shipped API version's contract changes. The service will not return IASnapshotRP to clients calling API versions prior to 2026-10-01.

New recovery point "extended info" operations (IaaS VM)

  • New backupFabrics/{fabricName}/getRPExtendedInfo (POST) and
    getRPExtendedInfoOperationResult/{operationId} (GET) operations to trigger and
    retrieve additional recovery-point details (e.g., OS/data disk info) not returned
    by the existing recovery point GET API.
  • New supporting models: RPExtendedInfo (+ IaasVMRPExtendedInfo subtype),
    RPExtendedInfoResource(List), GetRPExtendedInfoRequest(Resource).
  • DiskInformation: added diskSizeInGb and storageType.
  • recoveryPointIds constrained 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

  • New backupFabrics/{fabricName}/operationsStatus/{operationId} (GET),
    ProtectionContainerRefreshOperationStatuses_Get, returning OperationStatus.
  • Both operations above return this path in their Azure-AsyncOperation header

Existing Basic VM protection handling

  • AzureIaaSVMProtectedItemProperties: added existingBasicVMProtection (ExistingBasicVMProtection union) to control how pre-existing Basic-tier VM protection is handled when configuring protection (e.g., DisableWithDeleteRPsNow).

SQL instance snapshot / workload restore changes

  • Re-added (carried forward into 2026-10-01) several SQL-instance-snapshot properties that were previously scoped to 2026-05-31-preview only: ProtectionLevel, InstanceProtectionReadiness, RestorePointQueryType (Snapshot, FullDifferentialAndSnapshot), AzureVmWorkloadSQLInstanceProtectedItem, AzureVmWorkloadSQLDatabaseProtectedItem.parentProtectedItem/protectionLevel, DatabaseInRP, BmsrpQueryObject (baseSnapshotRPId, baseRPDatasourceId, getLatestRPOnly).
  • SnapshotRestoreParameters: added disksToDetachOnClash (disk ARM IDs to detach on filesystem clash).
  • AzureWorkloadSQLRecoveryPointExtendedInfo: added snapshotRecoveryPointInfo with new supporting models SnapshotRecoveryPointInfo, FilesystemInfo, StorageSpaceInfo, DiskInfo describing per-volume filesystem/Storage Spaces/disk metadata captured on the VM for snapshot restore points.
  • Added ValidateAzureWorkloadRestoreOperationRequest as a distinct discriminated subtype for Azure Workload (SQL/HANA/SAP ASE/AnyDatabase) restore validation.

Container discovery

  • BMSRefreshContainersQueryObject: added containerSubscriptionId to support cross-subscription container discovery.

Neelav Bhatiya and others added 2 commits August 31, 2026 14:53
…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>
@microsoft-github-policy-service microsoft-github-policy-service Bot added the customer-reported Issues that are reported by GitHub users external to the Azure organization. label Sep 2, 2026
@microsoft-github-policy-service

Copy link
Copy Markdown
Contributor

Thank you for your contribution Neelav Bhatiya (@Neelav-0211)! We will review the pull request and get back to you soon.

@azure-pipelines

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

@github-actions

github-actions Bot commented Sep 2, 2026 •

Copy link
Copy Markdown

Next Steps to Merge

Important 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:
  • ⚠️ The check named Swagger LintDiff has failed. Refer to the check in the PR's 'Checks' tab for details on how to fix it and consult the aka.ms/ci-fix guide


Comment generated by summarize-checks workflow run.

@github-actions

github-actions Bot commented Sep 2, 2026 •

Copy link
Copy Markdown

API Change Check

APIView identified API level changes in this PR and created the following API reviews

Language API Review for Package
Swagger Microsoft.RecoveryServices-RecoveryServicesBackup
Go sdk/resourcemanager/recoveryservices/armrecoveryservicesbackup
JavaScript @azure/arm-recoveryservicesbackup
Python azure-mgmt-recoveryservicesbackup
Java com.azure.resourcemanager:azure-resourcemanager-recoveryservicesbackup

Comment generated by After APIView workflow run.

Prabhkirat Singh and others added 3 commits September 2, 2026 18:21
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
@github-actions github-actions Bot added ARMReview new-api-version resource-manager TypeSpec Authored with TypeSpec WaitForARMFeedback <valid label in PR review process> add this label when ARM review is required labels Sep 3, 2026

@gary-x-li Gary Li (gary-x-li) 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.

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.

@gary-x-li Gary Li (gary-x-li) added ARMChangesRequested and removed WaitForARMFeedback <valid label in PR review process> add this label when ARM review is required labels Sep 5, 2026
Prabhkirat Singh and others added 4 commits September 8, 2026 17:58
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>
@github-actions github-actions Bot added ARMModelingAutoSignedOff WaitForARMFeedback <valid label in PR review process> add this label when ARM review is required labels Sep 9, 2026
…01-csharp-model-suffix-fix

Fix C# name for Azure workload restore validation model
@krdhruva krdhruva added the typespec-suppressions-approved Apply when new typespec suppressions have been deemed acceptable label Oct 5, 2026
@krdhruva

krdhruva commented Oct 7, 2026

Copy link
Copy Markdown

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": {
"name": "RecoveryPointTierType",

  • "modelAsString": false
  • "modelAsString": false,
  • "values": [
  •  { "name": "Invalid", "value": "Invalid", "description": "..." },
    
  •  ...
    

@azure-sdk-automation

Copy link
Copy Markdown
Contributor

⚠️ Jialin Huang (@JialinHuang803) is not authorized to apply BreakingChange-JavaScript-Sdk-Approved. Label removed.

Please follow the Next Steps to Merge comment on this PR and the review and merge process.

See allowed approvers

Only 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
@github-actions

github-actions Bot commented Oct 8, 2026

Copy link
Copy Markdown

⚠️ Jialin Huang (@JialinHuang803) is not authorized to apply BreakingChange-JavaScript-Sdk-Approved. Label removed.

Please follow the Next Steps to Merge comment on this PR and the review and merge process.

See allowed approvers

Only 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.

@iwrinshow
iwrinshow enabled auto-merge (squash) October 8, 2026 05:05
@iwrinshow
iwrinshow merged commit 3d87fd4 into Azure:main Oct 8, 2026
224 of 230 checks passed
@azure-sdk-automation

Copy link
Copy Markdown
Contributor

✅ Release Plan Created

Field Value
Release Plan View Release Plan
API Version 2026-10-01
TypeSpec Project specification/recoveryservicesbackup/resource-manager/Microsoft.RecoveryServices/RecoveryServicesBackup

Note: The SDK will be generated based on API version 2026-10-01. This is the final API version detected from the changes in this pull request.

Comment on lines +762 to +895

#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;
}

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.

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

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.

this PR #47153 has the changes to update the LRO response's FinalResult to RPExtendedInfoResourceList

sisunkar added a commit to sisunkar/azure-rest-api-specs that referenced this pull request Oct 9, 2026
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Approved-Avocado ARMAutoSignedOff-Test ARMModelingAutoSignedOff ARMReview ARMSignedOff <valid label in PR review process>add this label when ARM approve updates after review AzCoreIDC BreakingChange-Approved-BranchPolicyException Changes violate the branch policy but exception has been granted. aka.ms/azsdk/pr-brch-deep BreakingChange-Approved-UserImpact Changes are not backward compatible and may cause customer disruption. BreakingChange-JavaScript-Sdk BreakingChange-JavaScript-Sdk-Approved BreakingChangeReviewRequired <valid label in PR review process>add this label when breaking change review is required customer-reported Issues that are reported by GitHub users external to the Azure organization. new-api-version PublishToCustomers Acknowledgement the changes will be published to Azure customers. Recovery Services Backup resource-manager TypeSpec Authored with TypeSpec typespec-suppressions-approved Apply when new typespec suppressions have been deemed acceptable typespec-suppressions-review-required PR reviewer must review all reported typespec suppressions

Projects

None yet

Development

Successfully merging this pull request may close these issues.