Skip to content

Commit 09627e4

Browse files
zesluo1Dongwei Wang
andauthored
Remove-AzSynapseSqlPoolRestorePoint (#13412)
* Remove-AzSynapseSqlPoolRestorePoint * add wsname sqlpoolname * refine restorepoint and deleteoperation * refine restore point and resource id * add help and test * refine restorepointcreatationdate * refine and simpify codes * refine test * update session records for testsynapsesqlpool * Move RemoveAzureSynapseSqlPoolRestorePoint.cs and update changelog entry * Use local resource id Co-authored-by: Dongwei Wang <[email protected]>
1 parent 8c640a9 commit 09627e4

File tree

12 files changed

+2790
-1639
lines changed

12 files changed

+2790
-1639
lines changed

src/Synapse/Synapse.Test/ScenarioTests/SqlPoolTests.ps1

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,11 @@ function Test-SynapseSqlPool
9797

9898
Assert-AreEqual "DISCRETE" $restorePoint[0].RestorePointType
9999

100+
# Delete restore point
101+
$RestorePointCreationDate = Get-Date $restorePoint[-1].RestorePointCreationDate
102+
103+
Assert-True {Remove-AzSynapseSqlPoolRestorePoint -ResourceGroupName $resourceGroupName -WorkspaceName $workspaceName -SqlPoolName $restoreFromSqlPoolName -RestorePointCreationDate $RestorePointCreationDate -PassThru -Force} "Remove Restore Point failed."
104+
100105
# Restore SqlPool
101106
$sqlPoolRestored = Restore-AzSynapseSqlPool -FromRestorePoint -ResourceGroupName $resourceGroupName -WorkspaceName $workspaceName -Name $sqlPoolName -SourceWorkspaceName $workspaceName -SourceSqlPoolName $restoreFromSqlPoolName -PerformanceLevel $sqlPoolPerformanceLevel
102107

src/Synapse/Synapse.Test/SessionRecords/Microsoft.Azure.Commands.Synapse.Test.ScenarioTests.SqlPoolTests/TestSynapseSqlPool.json

Lines changed: 2273 additions & 1634 deletions
Large diffs are not rendered by default.

src/Synapse/Synapse/Az.Synapse.psd1

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ CmdletsToExport = 'Get-AzSynapseSparkJob', 'Stop-AzSynapseSparkJob',
103103
'Get-AzSynapseSqlVulnerabilityAssessmentSetting',
104104
'Update-AzSynapseSqlVulnerabilityAssessmentSetting',
105105
'Reset-AzSynapseSqlVulnerabilityAssessmentSetting',
106+
'Remove-AzSynapseSqlPoolRestorePoint',
106107
'Update-AzSynapseSqlPool', 'Test-AzSynapseWorkspace',
107108
'Test-AzSynapseSparkPool', 'Test-AzSynapseSqlPool',
108109
'New-AzSynapseFirewallRule', 'Remove-AzSynapseFirewallRule',

src/Synapse/Synapse/ChangeLog.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
## Upcoming Release
2121
* Added support for operation of Synapse SQL Pool Restore Point
2222
- Add `New-AzSynapseSqlPoolRestorePoint` cmdlet
23+
- Add `Remove-AzSynapseSqlPoolRestorePoint` cmdlet
2324
* Added support for operation of Auditing settings in Workspace-level and SqlPool-level
2425
- Add `Set-AzSynapseSqlAuditSetting` cmdlet
2526
- Add `Get-AzSynapseSqlAuditSetting` cmdlet
@@ -39,7 +40,7 @@
3940
- Add `Set-AzSynapseSqlActiveDirectoryAdministrator` cmdlet
4041
- Add `Get-AzSynapseSqlActiveDirectoryAdministrator` cmdlet
4142
- Add `Remove-AzSynapseSqlActiveDirectoryAdministrator` cmdlet
42-
* Fix Null Reference Exception when submit spark job.
43+
* Fixed Null Reference Exception when submit spark job.
4344

4445
## Version 0.4.0
4546
* Add `-Force` to all Remove cmdlets
Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
using Microsoft.Azure.Commands.ResourceManager.Common.ArgumentCompleters;
2+
using Microsoft.Azure.Commands.Synapse.Common;
3+
using Microsoft.Azure.Commands.Synapse.Models;
4+
using Microsoft.Azure.Commands.Synapse.Properties;
5+
using Microsoft.Azure.Management.Internal.Resources.Utilities.Models;
6+
using Microsoft.WindowsAzure.Commands.Utilities.Common;
7+
using System.Management.Automation;
8+
using System;
9+
10+
namespace Microsoft.Azure.Commands.Synapse.Commands
11+
{
12+
[Cmdlet(VerbsCommon.Remove, ResourceManager.Common.AzureRMConstants.AzureRMPrefix + SynapseConstants.SynapsePrefix + SynapseConstants.SqlPool+ SynapseConstants.RestorePoint, DefaultParameterSetName = DeleteByNameParameterSet, SupportsShouldProcess = true)]
13+
[OutputType(typeof(bool))]
14+
public class RemoveAzureSynapseSqlPoolRestorePoint : SynapseManagementCmdletBase
15+
{
16+
private const string DeleteByNameParameterSet = "DeleteByNameParameterSet";
17+
private const string DeleteByParentObjectParameterSet = "DeleteByParentObjectParameterSet";
18+
private const string DeleteByInputObjectParameterSet = "DeleteByInputObjectParameterSet";
19+
private const string DeleteByResourceIdParameterSet = "DeleteByResourceIdParameterSet";
20+
21+
[Parameter(Mandatory = false, ParameterSetName = DeleteByNameParameterSet, HelpMessage = HelpMessages.ResourceGroupName)]
22+
[ResourceGroupCompleter]
23+
[ValidateNotNullOrEmpty]
24+
public string ResourceGroupName { get; set; }
25+
26+
[Parameter(Mandatory = true, ParameterSetName = DeleteByNameParameterSet, HelpMessage = HelpMessages.WorkspaceName)]
27+
[ResourceNameCompleter(ResourceTypes.Workspace, nameof(ResourceGroupName))]
28+
[ValidateNotNullOrEmpty]
29+
public string WorkspaceName { get; set; }
30+
31+
[Parameter(Mandatory = true, ParameterSetName = DeleteByNameParameterSet, HelpMessage = HelpMessages.SqlPoolName)]
32+
[ResourceNameCompleter(ResourceTypes.SqlPool, nameof(WorkspaceName))]
33+
[ValidateNotNullOrEmpty]
34+
public string SqlPoolName { get; set; }
35+
36+
[Parameter(Mandatory = true, ParameterSetName = DeleteByParentObjectParameterSet, HelpMessage = HelpMessages.SqlPoolRestorePointName)]
37+
[Parameter(Mandatory = true, ParameterSetName = DeleteByNameParameterSet, HelpMessage = HelpMessages.SqlPoolRestorePointName)]
38+
[ResourceNameCompleter(
39+
ResourceTypes.SqlPoolRestorePoint,
40+
nameof(ResourceGroupName),
41+
nameof(WorkspaceName),
42+
nameof(SqlPoolName))]
43+
[ValidateNotNullOrEmpty]
44+
public DateTime RestorePointCreationDate { get; set; }
45+
46+
[Parameter(ValueFromPipeline = true, ParameterSetName = DeleteByParentObjectParameterSet,
47+
Mandatory = true, HelpMessage = HelpMessages.SqlPoolObject)]
48+
[ValidateNotNull]
49+
public PSSynapseSqlPool SqlPoolObject { get; set; }
50+
51+
[Parameter(ValueFromPipeline = true, ParameterSetName = DeleteByInputObjectParameterSet,
52+
Mandatory = true, HelpMessage = HelpMessages.SqlPoolRestorePointObject)]
53+
[ValidateNotNull]
54+
public PSRestorePoint InputObject { get; set; }
55+
56+
[Parameter(ValueFromPipelineByPropertyName = true, ParameterSetName = DeleteByResourceIdParameterSet,
57+
Mandatory = true, HelpMessage = HelpMessages.SqlPoolRestorePointResourceId)]
58+
[ValidateNotNullOrEmpty]
59+
public string ResourceId { get; set; }
60+
61+
[Parameter(Mandatory = false, HelpMessage = HelpMessages.PassThru)]
62+
public SwitchParameter PassThru { get; set; }
63+
64+
[Parameter(Mandatory = false, HelpMessage = HelpMessages.AsJob)]
65+
public SwitchParameter AsJob { get; set; }
66+
67+
[Parameter(Mandatory = false, HelpMessage = HelpMessages.Force)]
68+
public SwitchParameter Force { get; set; }
69+
70+
public override void ExecuteCmdlet()
71+
{
72+
if (this.IsParameterBound(c => c.SqlPoolObject))
73+
{
74+
var resourceIdentifier = new ResourceIdentifier(this.SqlPoolObject.Id);
75+
this.ResourceGroupName = resourceIdentifier.ResourceGroupName;
76+
this.WorkspaceName = resourceIdentifier.ParentResource;
77+
this.WorkspaceName = this.WorkspaceName.Substring(this.WorkspaceName.LastIndexOf('/') + 1);
78+
this.SqlPoolName = resourceIdentifier.ResourceName;
79+
}
80+
81+
if (this.IsParameterBound(c => c.InputObject))
82+
{
83+
var dateString = this.InputObject.Id.Substring(this.InputObject.Id.LastIndexOf('/') + 1);
84+
this.RestorePointCreationDate = DateTime.FromFileTime(Convert.ToInt64(dateString));
85+
var resourceId = this.InputObject.Id.Substring(0, this.InputObject.Id.Substring(0, this.InputObject.Id.LastIndexOf("/")).LastIndexOf("/"));
86+
var resourceIdentifier = new ResourceIdentifier(resourceId);
87+
this.ResourceGroupName = resourceIdentifier.ResourceGroupName;
88+
this.WorkspaceName = resourceIdentifier.ParentResource;
89+
this.WorkspaceName = this.WorkspaceName.Substring(this.WorkspaceName.LastIndexOf('/') + 1);
90+
this.SqlPoolName = resourceIdentifier.ResourceName;
91+
}
92+
93+
if (this.IsParameterBound(c => c.ResourceId))
94+
{
95+
var dateString = this.ResourceId.Substring(this.ResourceId.LastIndexOf('/') + 1);
96+
this.RestorePointCreationDate = DateTime.FromFileTime(Convert.ToInt64(dateString));
97+
this.ResourceId = this.ResourceId.Substring(0,this.ResourceId.Substring(0, this.ResourceId.LastIndexOf("/")).LastIndexOf("/"));
98+
var resourceIdentifier = new ResourceIdentifier(this.ResourceId);
99+
this.ResourceGroupName = resourceIdentifier.ResourceGroupName;
100+
this.WorkspaceName = resourceIdentifier.ParentResource;
101+
this.WorkspaceName = this.WorkspaceName.Substring(this.WorkspaceName.LastIndexOf('/') + 1);
102+
this.SqlPoolName = resourceIdentifier.ResourceName;
103+
}
104+
105+
if (string.IsNullOrEmpty(this.ResourceGroupName))
106+
{
107+
this.ResourceGroupName = this.SynapseAnalyticsClient.GetResourceGroupByWorkspaceName(this.WorkspaceName);
108+
}
109+
110+
ConfirmAction(
111+
Force.IsPresent,
112+
string.Format(Resources.RemoveSynapseSqlPoolRestorePoint, this.RestorePointCreationDate),
113+
string.Format(Resources.RemovingSynapseSqlPoolRestorePoint, this.RestorePointCreationDate, this.ResourceGroupName, this.WorkspaceName, this.SqlPoolName),
114+
this.RestorePointCreationDate.ToFileTimeUtc().ToString(),
115+
() =>
116+
{
117+
this.SynapseAnalyticsClient.DeleteSqlPoolRestorePoint(this.ResourceGroupName, this.WorkspaceName, this.SqlPoolName, this.RestorePointCreationDate.ToFileTimeUtc().ToString());
118+
if (this.PassThru.IsPresent)
119+
{
120+
WriteObject(true);
121+
}
122+
});
123+
}
124+
}
125+
}

src/Synapse/Synapse/Common/HelpMessages.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,14 +124,20 @@ public static class HelpMessages
124124

125125
public const string SqlPoolName = "Name of Synapse SQL pool.";
126126

127+
public const string SqlPoolRestorePointName = "Name of Synapse SQL pool restore point name.";
128+
127129
public const string SqlPoolVersion = "Version of Synapse SQL pool. For example, 2 or 3.";
128130

129131
public const string SqlPoolNewName = "The new name to rename the SQL pool to.";
130132

131133
public const string SqlPoolResourceId = "Resource identifier of Synapse SQL Pool.";
132134

135+
public const string SqlPoolRestorePointResourceId = "Resource identifier of Synapse SQL Pool Restore Point.";
136+
133137
public const string SqlPoolObject = "SQL pool input object, usually passed through the pipeline.";
134138

139+
public const string SqlPoolRestorePointObject = "SQL pool restore point input object, usually passed through the pipeline.";
140+
135141
public const string SuspendSqlPool = "Indicates to pause the SQL pool";
136142

137143
public const string ResumeSqlPool = "Indicates to resume the SQL pool";

src/Synapse/Synapse/Common/ResourceTypes.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ public static class ResourceTypes
55
public const string Workspace = "Microsoft.Synapse/workspaces";
66
public const string SparkPool = "Microsoft.Synapse/workspaces/bigDataPools";
77
public const string SqlPool = "Microsoft.Synapse/workspaces/sqlPools";
8+
public const string SqlPoolRestorePoint = "Microsoft.Synapse/workspaces/sqlPools/sqlPoolRestorePoints";
89
public const string RecoverableSqlPool = "Microsoft.Synapse/workspaces/recoverableSqlPools";
910
public const string StorageAccount = "Microsoft.Storage/storageAccounts";
1011
public const string SqlDatabase = "Microsoft.Sql/servers/databases";

src/Synapse/Synapse/Models/SqlPool Backup/PSRestorePoint.cs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
using Microsoft.Azure.Management.Synapse.Models;
22
using System;
3-
using System.Collections.Generic;
4-
using System.Text;
53

64
namespace Microsoft.Azure.Commands.Synapse.Models
75
{
8-
public class PSRestorePoint
6+
public class PSRestorePoint : PSSynapseResource
97
{
108
public PSRestorePoint(RestorePoint restorePoint)
119
{
@@ -14,6 +12,9 @@ public PSRestorePoint(RestorePoint restorePoint)
1412
this.EarliestRestoreDate = restorePoint.EarliestRestoreDate;
1513
this.RestorePointCreationDate = restorePoint.RestorePointCreationDate;
1614
this.RestorePointLabel = restorePoint.RestorePointLabel;
15+
this.Id = restorePoint.Id;
16+
this.Name = restorePoint.Name;
17+
this.Type = restorePoint.Type;
1718
}
1819

1920
public string Location { get; }
@@ -25,5 +26,11 @@ public PSRestorePoint(RestorePoint restorePoint)
2526
public DateTime? RestorePointCreationDate { get; }
2627

2728
public string RestorePointLabel { get; }
29+
30+
public new string Id { get; set; }
31+
32+
public new string Name { get; set; }
33+
34+
public new string Type { get; set; }
2835
}
2936
}

src/Synapse/Synapse/Models/SynapseAnalyticsManagementClient.cs

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1537,12 +1537,51 @@ public RestorePoint CreateSqlPoolRestorePoint(string resourceGroupName, string w
15371537

15381538
return this._synapseManagementClient.SqlPoolRestorePoints.Create(resourceGroupName, workspaceName, sqlPoolName, parameters);
15391539
}
1540-
catch (CloudException ex)
1540+
catch (ErrorContractException ex)
1541+
{
1542+
throw GetSynapseException(ex);
1543+
}
1544+
}
1545+
1546+
public void DeleteSqlPoolRestorePoint(string resourceGroupName, string workspaceName, string sqlPoolName, string sqlPoolRestorePointCreationDate)
1547+
{
1548+
try
1549+
{
1550+
if (string.IsNullOrEmpty(resourceGroupName))
1551+
{
1552+
resourceGroupName = GetResourceGroupByWorkspaceName(workspaceName);
1553+
}
1554+
1555+
if (!TestSqlPoolRestorePoint(resourceGroupName, workspaceName, sqlPoolName, sqlPoolRestorePointCreationDate))
1556+
{
1557+
throw new InvalidOperationException(string.Format(Properties.Resources.SqlPoolRestorePointDoesNotExist, sqlPoolRestorePointCreationDate));
1558+
}
1559+
1560+
this._synapseManagementClient.SqlPoolRestorePoints.Delete(resourceGroupName, workspaceName, sqlPoolName, sqlPoolRestorePointCreationDate);
1561+
}
1562+
catch (ErrorContractException ex)
15411563
{
15421564
throw GetSynapseException(ex);
15431565
}
15441566
}
15451567

1568+
public bool TestSqlPoolRestorePoint(string resourceGroupName, string workspaceName, string sqlPoolName, string sqlPoolRestorePointName)
1569+
{
1570+
try
1571+
{
1572+
RestorePoint respoint = this._synapseManagementClient.SqlPoolRestorePoints.Get(resourceGroupName,
1573+
workspaceName,
1574+
sqlPoolName,
1575+
sqlPoolRestorePointName);
1576+
1577+
return respoint != null;
1578+
}
1579+
catch (NotFoundException)
1580+
{
1581+
return false;
1582+
}
1583+
}
1584+
15461585
#endregion
15471586

15481587
#region SQL Pool V3 operations

src/Synapse/Synapse/Properties/Resources.Designer.cs

Lines changed: 27 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Synapse/Synapse/Properties/Resources.resx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -591,4 +591,13 @@ Are you sure you want to continue?</value>
591591
<data name="ComfirmToRemoveSqlActiveDirectoryAdministrator" xml:space="preserve">
592592
<value>Are you sure you want to remove the Azure Sql Server Active Directory Administrator on workspace '{0}'?</value>
593593
</data>
594+
<data name="RemovingSynapseSqlPoolRestorePoint" xml:space="preserve">
595+
<value>Deleting SQL pool Restore Point '{0}' in resource group '{1}' , workspace '{2}', under Sql Pool '{3}'.</value>
596+
</data>
597+
<data name="SqlPoolRestorePointDoesNotExist" xml:space="preserve">
598+
<value>Cannot perform the requested operation because the specified Restore Point '{0}' does not exist.</value>
599+
</data>
600+
<data name="RemoveSynapseSqlPoolRestorePoint" xml:space="preserve">
601+
<value>Are you sure you want to remove Synapse Sql Pool Restore Point '{0}'?</value>
602+
</data>
594603
</root>

0 commit comments

Comments
 (0)