Skip to content

Commit 34467c6

Browse files
lululilliancodingLillian LiuYeming Liu
authored
Edit Get & Set ShortTermRetentionPolicy For Adding New Parameter: DiffBackupIntervalInHours (#12562)
* Draft ShortTermRetentionPolicy Get and Set cmdlets to include new parameter DiffBackupIntervalInHours PR (except record test session). * set RetentionDays nullable and remove parameters' position requirement. * scenario test passed. * Removed .Value to allowe either retentionDays or diffBackupInterval can be set individually. Added its related scenario tests and re-record; Added one related example; * Add Position back to avoid breaking change; Add retentionDays nullable changes exception; Re-upload records. * undid position of DiffBackupIntervalInHours Co-authored-by: Lillian Liu <[email protected]> Co-authored-by: Yeming Liu <[email protected]>
1 parent 2ca1b06 commit 34467c6

File tree

14 files changed

+1533
-940
lines changed

14 files changed

+1533
-940
lines changed

src/Sql/Sql.Test/ScenarioTests/DatabaseBackupTests.ps1

Lines changed: 47 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -443,55 +443,84 @@ function Test-RemoveDatabaseRestorePoint
443443
function Test-ShortTermRetentionPolicy
444444
{
445445
# Setup
446-
$location = Get-Location "Microsoft.Sql" "servers" "West US 2"
447-
$rg = Create-ResourceGroupForTest $location
448-
$server = Create-ServerForTest $rg $location
446+
$location = "southeast asia"
447+
$rg = "PowershellStageResourceGroup"
448+
$server = "pssqlserverfortest"
449449

450450
try
451451
{
452452
# Create db with default values
453453
$databaseName = Get-DatabaseName
454-
$db = New-AzureRmSqlDatabase -ResourceGroupName $rg.ResourceGroupName -ServerName $server.ServerName -DatabaseName $databaseName
454+
$db = New-AzSqlDatabase -ResourceGroupName $rg -ServerName $server -DatabaseName $databaseName -Force:$true
455455

456-
# Test default parameter set
457-
$retention = 28
458-
$policy = Set-AzureRmSqlDatabaseBackupShortTermRetentionPolicy -ResourceGroupName $rg.ResourceGroupName -ServerName $server.ServerName -DatabaseName $databaseName -RetentionDays $retention
456+
# Test GET default values.
457+
$defaultRetention = 7
458+
# After we configure Backup Service's default DiffBackupIntervalInHours to 24 hours for new created databases, $defaultDiffbackupinterval should be changed to 24.
459+
$defaultDiffbackupinterval = 12
460+
$policy = Get-AzSqlDatabaseBackupShortTermRetentionPolicy -ResourceGroupName $rg -ServerName $server -DatabaseName $databaseName
459461
Assert-AreEqual $policy.Count 1
460-
Assert-AreEqual $retention $policy[0].RetentionDays
461-
$policy = Get-AzureRmSqlDatabaseBackupShortTermRetentionPolicy -ResourceGroupName $rg.ResourceGroupName -ServerName $server.ServerName -DatabaseName $databaseName
462+
Assert-AreEqual $defaultRetention $policy[0].RetentionDays
463+
Assert-AreEqual $defaultDiffbackupinterval $policy[0].DiffBackupIntervalInHours
464+
465+
# Test SET
466+
$retention = 6
467+
$diffbackupinterval = 24
468+
$policy = Set-AzSqlDatabaseBackupShortTermRetentionPolicy -ResourceGroupName $rg -ServerName $server -DatabaseName $databaseName -RetentionDays $retention -DiffBackupIntervalInHours $diffbackupinterval
462469
Assert-AreEqual $policy.Count 1
463470
Assert-AreEqual $retention $policy[0].RetentionDays
471+
Assert-AreEqual $diffbackupinterval $policy[0].DiffBackupIntervalInHours
472+
473+
$retentionOnly = 5
474+
$policy = Set-AzSqlDatabaseBackupShortTermRetentionPolicy -ResourceGroupName $rg -ServerName $server -DatabaseName $databaseName -RetentionDays $retentionOnly
475+
Assert-AreEqual $policy.Count 1
476+
Assert-AreEqual $retentionOnly $policy[0].RetentionDays
477+
Assert-AreEqual $diffbackupinterval $policy[0].DiffBackupIntervalInHours
478+
479+
$diffbackupintervalOnly = 12
480+
$policy = Set-AzSqlDatabaseBackupShortTermRetentionPolicy -ResourceGroupName $rg -ServerName $server -DatabaseName $databaseName -DiffBackupIntervalInHours $diffbackupintervalOnly
481+
Assert-AreEqual $policy.Count 1
482+
Assert-AreEqual $retentionOnly $policy[0].RetentionDays
483+
Assert-AreEqual $diffbackupintervalOnly $policy[0].DiffBackupIntervalInHours
464484

465485
# Test InputObject
466-
$retention = 21
467-
$policy = Set-AzureRmSqlDatabaseBackupShortTermRetentionPolicy -AzureSqlDatabase $db -RetentionDays $retention
486+
$retention = 7
487+
$diffbackupinterval = 24
488+
$policy = Set-AzSqlDatabaseBackupShortTermRetentionPolicy -AzureSqlDatabase $db -RetentionDays $retention -DiffBackupIntervalInHours $diffbackupinterval
468489
Assert-AreEqual 1 $policy.Count
469490
Assert-AreEqual $retention $policy[0].RetentionDays
470-
$policy = Get-AzureRmSqlDatabaseBackupShortTermRetentionPolicy -AzureSqlDatabase $db
491+
Assert-AreEqual $diffbackupinterval $policy[0].DiffBackupIntervalInHours
492+
$policy = Get-AzSqlDatabaseBackupShortTermRetentionPolicy -AzureSqlDatabase $db
471493
Assert-AreEqual 1 $policy.Count
472494
Assert-AreEqual $retention $policy[0].RetentionDays
495+
Assert-AreEqual $diffbackupinterval $policy[0].DiffBackupIntervalInHours
473496

474497
# Test ResourceId
475-
$retention = 14
498+
$retention = 6
499+
$diffbackupinterval = 12
476500
$resourceId = $db.ResourceId + "/backupShortTermRetentionPolicies/default"
477-
$policy = Set-AzureRmSqlDatabaseBackupShortTermRetentionPolicy -ResourceId $resourceId -RetentionDays $retention
501+
$policy = Set-AzSqlDatabaseBackupShortTermRetentionPolicy -ResourceId $resourceId -RetentionDays $retention -DiffBackupIntervalInHours $diffbackupinterval
478502
Assert-AreEqual 1 $policy.Count
479503
Assert-AreEqual $retention $policy[0].RetentionDays
480-
$policy = Get-AzureRmSqlDatabaseBackupShortTermRetentionPolicy -ResourceId $resourceId
504+
Assert-AreEqual $diffbackupinterval $policy[0].DiffBackupIntervalInHours
505+
$policy = Get-AzSqlDatabaseBackupShortTermRetentionPolicy -ResourceId $resourceId
481506
Assert-AreEqual 1 $policy.Count
482507
Assert-AreEqual $retention $policy[0].RetentionDays
508+
Assert-AreEqual $diffbackupinterval $policy[0].DiffBackupIntervalInHours
483509

484510
# Test Piping
485511
$retention = 7
486-
$policy = $db | Set-AzureRmSqlDatabaseBackupShortTermRetentionPolicy -RetentionDays $retention
512+
$diffbackupinterval = 24
513+
$policy = $db | Set-AzSqlDatabaseBackupShortTermRetentionPolicy -RetentionDays $retention -DiffBackupIntervalInHours $diffbackupinterval
487514
Assert-AreEqual 1 $policy.Count
488515
Assert-AreEqual $retention $policy[0].RetentionDays
489-
$policy = $db | Get-AzureRmSqlDatabaseBackupShortTermRetentionPolicy
516+
Assert-AreEqual $diffbackupinterval $policy[0].DiffBackupIntervalInHours
517+
$policy = $db | Get-AzSqlDatabaseBackupShortTermRetentionPolicy
490518
Assert-AreEqual 1 $policy.Count
491519
Assert-AreEqual $retention $policy[0].RetentionDays
520+
Assert-AreEqual $diffbackupinterval $policy[0].DiffBackupIntervalInHours
492521
}
493522
finally
494523
{
495-
Remove-ResourceGroupForTest $rg
524+
Remove-AzSqlDatabase -ResourceGroupName $rg -ServerName $server -DatabaseName $databaseName
496525
}
497526
}

src/Sql/Sql.Test/SessionRecords/Microsoft.Azure.Commands.Sql.Test.ScenarioTests.DatabaseBackupTests/TestShortTermRetentionPolicy.json

Lines changed: 1384 additions & 849 deletions
Large diffs are not rendered by default.

src/Sql/Sql.Test/Sql.Test.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
<PackageReference Include="Microsoft.Azure.KeyVault.WebKey" Version="3.0.1" />
2020
<PackageReference Include="Microsoft.Azure.Management.KeyVault" Version="3.0.0" />
2121
<PackageReference Include="Microsoft.Azure.Management.OperationalInsights" Version="0.21.0-preview" />
22-
<PackageReference Include="Microsoft.Azure.Management.Sql" Version="1.44.2-preview" />
22+
<PackageReference Include="Microsoft.Azure.Management.Sql" Version="1.45.0-preview" />
2323
</ItemGroup>
2424

2525
<ItemGroup>

src/Sql/Sql/ChangeLog.md

Lines changed: 1 addition & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -18,41 +18,7 @@
1818
- Additional information about change #1
1919
-->
2020
## Upcoming Release
21-
* Update Azure Paired Regions URL in Backup Storage Redundancy Warnings
22-
23-
## Version 2.11.0
24-
* Added BackupStorageRedundancy to the following:
25-
- `Restore-AzureRmSqlDatabase`
26-
- `New-AzSqlDatabaseCopy`
27-
- `New-AzSqlDatabaseSecondary`
28-
* Removed case sensitivity for BackupStorageRedundancy parameter for all SQL DB references
29-
* Updated BackupStorageRedundancy warning message names
30-
* Added support for Managed HSM Uris for SQL DB and Managed Instance
31-
32-
## Version 2.10.1
33-
* Added warning for BackupStorageRedundancy configuration in select regions in `New-AzSqlDatabase` (Ignore Case for BackupStorageRedundancy configuration input)
34-
* Fixed for bug in `New-AzSqlDatabaseExport`
35-
* Removed case sensitivity for BackupStorageRedundancy parameter for `New-AzSqlInstance`
36-
37-
## Version 2.10.0
38-
* Added BackupStorageRedundancy to `New-AzSqlInstance` and `Get-AzSqlInstance`
39-
* Added cmdlet `Get-AzSqlServerActiveDirectoryOnlyAuthentication`
40-
* Added cmdlet `Enable-AzSqlServerActiveDirectoryOnlyAuthentication`
41-
* Added Force parameter to `New-AzSqlInstance`
42-
* Added cmdlets for Managed Database Log Replay service
43-
- `Start-AzSqlInstanceDatabaseLogReplay`
44-
- `Get-AzSqlInstanceDatabaseLogReplay`
45-
- `Complete-AzSqlInstanceDatabaseLogReplay`
46-
- `Stop-AzSqlInstanceDatabaseLogReplay`
47-
* Added cmdlet `Get-AzSqlInstanceActiveDirectoryOnlyAuthentication`
48-
* Added cmdlet `Enable-AzSqlInstanceActiveDirectoryOnlyAuthentication`
49-
* Added cmdlet `Disable-AzSqlInstanceActiveDirectoryOnlyAuthentication`
50-
* Updated cmdlets `New-AzSqlDatabaseImport` and `New-AzSqlDatabaseExport` to support network isolation functionality
51-
* Added cmdlet `New-AzSqlDatabaseImportExisting`
52-
* Updated Databases cmdlets to support backup storage type specification
53-
* Added Force parameter to `New-AzSqlDatabase`
54-
* Updated ActiveDirectoryOnlyAuthentication cmdlets for server and instance to include ResourceId and InputObject
55-
* Added support for Managed HSM Uris for SQL DB and Managed Instance
21+
* Added DiffBackupIntervalInHours to `Set-AzSqlDatabaseBackupShortTermRetentionPolicy`
5622

5723
## Version 2.9.1
5824
* Fixed potential server name case insensitive error in `New-AzSqlServer` and `Set-AzSqlServer`
Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
using System.Linq;
1717
using System.Management.Automation;
1818
using Microsoft.Azure.Commands.Sql.Backup.Model;
19+
using Microsoft.WindowsAzure.Commands.Utilities.Common;
1920

2021
namespace Microsoft.Azure.Commands.Sql.Backup.Cmdlet
2122
{
@@ -28,12 +29,18 @@ public class SetAzureRmSqlDatabaseBackupShortTermRetentionPolicy : AzureSqlDatab
2829
/// <summary>
2930
/// Gets or sets backup retention days.
3031
/// </summary>
31-
[Parameter(Mandatory = true,
32+
[Parameter(Mandatory = false,
3233
Position = 3,
3334
HelpMessage = "The backup retention setting, in days.")]
34-
[ValidateNotNullOrEmpty]
35-
public int RetentionDays{ get; set; }
35+
public int RetentionDays { get; set; }
3636

37+
/// <summary>
38+
/// Gets or sets differential backup interval hours.
39+
/// </summary>
40+
[Parameter(Mandatory = false,
41+
HelpMessage = "The differential backup interval, in hours.")]
42+
public int DiffBackupIntervalInHours { get; set; }
43+
3744
/// <summary>
3845
/// Get the entities from the service
3946
/// </summary>
@@ -64,7 +71,10 @@ protected override IEnumerable<AzureSqlDatabaseBackupShortTermRetentionPolicyMod
6471
ResourceGroupName,
6572
ServerName,
6673
DatabaseName,
67-
new Management.Sql.Models.BackupShortTermRetentionPolicy(retentionDays: RetentionDays))
74+
new Management.Sql.Models.BackupShortTermRetentionPolicy(
75+
retentionDays: this.IsParameterBound(c => c.RetentionDays) ? RetentionDays : null as int?,
76+
diffBackupIntervalInHours: this.IsParameterBound(c => c.DiffBackupIntervalInHours) ? DiffBackupIntervalInHours : null as int?)
77+
)
6878
};
6979
}
7080

src/Sql/Sql/Database Backup/Model/AzureSqlDatabaseBackupShortTermRetentionPolicyModel.cs

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
// limitations under the License.
1313
// ----------------------------------------------------------------------------------
1414

15+
using System;
16+
1517
namespace Microsoft.Azure.Commands.Sql.Backup.Model
1618
{
1719
public class AzureSqlDatabaseBackupShortTermRetentionPolicyModel
@@ -34,7 +36,12 @@ public class AzureSqlDatabaseBackupShortTermRetentionPolicyModel
3436
/// <summary>
3537
/// Gets or sets the retention days of this policy.
3638
/// </summary>
37-
public int RetentionDays { get; set; }
39+
public int? RetentionDays { get; set; }
40+
41+
/// <summary>
42+
/// Gets or sets the differential backup interval of this policy.
43+
/// </summary>
44+
public int? DiffBackupIntervalInHours { get; set; }
3845

3946
/// <summary>
4047
/// Construct AzureSqlDatabaseBackupShortTermRetentionPolicyModel from Management.Sql.BackupShortTermRetentionPolicy object
@@ -44,10 +51,16 @@ public class AzureSqlDatabaseBackupShortTermRetentionPolicyModel
4451
/// <param name="policy"></param>
4552
public AzureSqlDatabaseBackupShortTermRetentionPolicyModel(string resourceGroup, string serverName, string databaseName, Management.Sql.Models.BackupShortTermRetentionPolicy policy)
4653
{
54+
if (policy.RetentionDays == null && policy.DiffBackupIntervalInHours == null)
55+
{
56+
throw new ArgumentException(string.Format(Microsoft.Azure.Commands.Sql.Properties.Resources.SetAzSqlDatabaseBackupShortTermRetentionInvalidParameters, "RetentionDays", "DiffBackupIntervalInHours"));
57+
}
58+
4759
ResourceGroupName = resourceGroup;
4860
ServerName = serverName;
4961
DatabaseName = databaseName;
50-
RetentionDays = policy.RetentionDays.Value;
62+
RetentionDays = policy.RetentionDays;
63+
DiffBackupIntervalInHours = policy.DiffBackupIntervalInHours;
5164
}
5265
}
5366
}

src/Sql/Sql/Database Backup/Services/AzureSqlDatabaseBackupAdapter.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -585,7 +585,8 @@ internal AzureSqlDatabaseBackupShortTermRetentionPolicyModel SetDatabaseBackupSh
585585
databaseName,
586586
new Management.Sql.Models.BackupShortTermRetentionPolicy()
587587
{
588-
RetentionDays = model.RetentionDays
588+
RetentionDays = model.RetentionDays,
589+
DiffBackupIntervalInHours = model.DiffBackupIntervalInHours
589590
});
590591

591592
return new AzureSqlDatabaseBackupShortTermRetentionPolicyModel(resourceGroup, serverName, databaseName, baPolicy);

src/Sql/Sql/Properties/Resources.Designer.cs

Lines changed: 10 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Sql/Sql/Properties/Resources.resx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -652,4 +652,7 @@
652652
<data name="BackupRedundancyNotChosenTakeSourceWarning" xml:space="preserve">
653653
<value>You have not specified the value for backup storage redundancy which will default to the source's backup storage redundancy. To learn more about Azure Paired Regions visit aka.ms/azure-ragrs-regions.</value>
654654
</data>
655+
<data name="SetAzSqlDatabaseBackupShortTermRetentionInvalidParameters" xml:space="preserve">
656+
<value>Parameter '{0}' and '{1}' both being null is not allowed.</value>
657+
</data>
655658
</root>

0 commit comments

Comments
 (0)