Skip to content

Commit 69ec355

Browse files
authored
Add retry logic when fetching storage account details in AzureFileCopyV6 (#20635)
* add retry logic when fetching storage account details * retry logic for azurefilecopy * build the code
1 parent e2dc979 commit 69ec355

12 files changed

+181
-106
lines changed

Diff for: Tasks/AzureFileCopyV6/AzureUtilityAz1.0.ps1

+37-12
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,47 @@
22

33
. "$PSScriptRoot/AzureUtilityRest.ps1"
44

5-
function Get-AzureStorageAccountResourceGroupName
6-
{
5+
function Get-AzureStorageAccountResourceGroupName {
76
param([string]$storageAccountName)
87

9-
$ARMStorageAccountResourceType = "Microsoft.Storage/storageAccounts"
10-
if (-not [string]::IsNullOrEmpty($storageAccountName))
11-
{
12-
Write-Verbose "[Azure Call]Getting resource details for azure storage account resource: $storageAccountName with resource type: $ARMStorageAccountResourceType"
13-
$azureStorageAccountResourceDetails = Az.Storage\Get-AzStorageAccount -ErrorAction Stop | Where-Object { $_.StorageAccountName -eq $storageAccountName }
14-
15-
Write-Verbose "[Azure Call]Retrieved resource details successfully for azure storage account resource: $storageAccountName with resource type: $ARMStorageAccountResourceType"
8+
$ARMStorageAccountResourceType = "Microsoft.Storage/storageAccounts"
9+
10+
if (-not [string]::IsNullOrEmpty($storageAccountName)) {
11+
Write-Verbose "[Azure Call] Getting resource details for Azure storage account resource: $storageAccountName with resource type: $ARMStorageAccountResourceType"
1612

13+
$maxRetries = 3
14+
$retryDelay = 30
15+
16+
for ($retryCnt = 0; $retryCnt -le $maxRetries; $retryCnt++) {
17+
try {
18+
# Attempt to get the Azure Storage Account details
19+
$azureStorageAccountResourceDetails = Az.Storage\Get-AzStorageAccount -ErrorAction Stop |
20+
Where-Object { $_.StorageAccountName -eq $storageAccountName }
21+
Write-Verbose "[Azure Call] Retrieved resource details successfully for Azure storage account resource: $storageAccountName with resource type: $ARMStorageAccountResourceType"
22+
# If successful, exit the loop
23+
break
24+
}
25+
catch {
26+
$errorMessage = $_.Exception.Message
27+
# Retry logic for HTTP 429 (Too Many Requests)
28+
if ($_.Exception.Response.StatusCode -eq 429) {
29+
Write-Verbose "Exception Message: $($_.Exception.Response.Message)"
30+
Write-Verbose "Exception Response StatusCode: $($_.Exception.Response.StatusCode)"
31+
# Wait before retrying
32+
Start-Sleep -Seconds $retryDelay
33+
continue
34+
}
35+
else {
36+
# For other errors, display the message and exit the loop
37+
Write-Verbose "[Error]: $errorMessage"
38+
break
39+
}
40+
}
41+
}
42+
1743
$azureResourceGroupName = $azureStorageAccountResourceDetails.ResourceGroupName
18-
if ([string]::IsNullOrEmpty($azureResourceGroupName))
19-
{
20-
Write-Verbose "(ARM)Storage account: $storageAccountName not found"
44+
if ([string]::IsNullOrEmpty($azureResourceGroupName)) {
45+
Write-Verbose "(ARM) Storage account: $storageAccountName not found"
2146
Write-Telemetry "Task_InternalError" "RMStorageAccountNotFound"
2247
Throw (Get-VstsLocString -Key "AFC_StorageAccountNotFound" -ArgumentList $storageAccountName)
2348
}

Diff for: Tasks/AzureFileCopyV6/package-lock.json

+27-27
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: Tasks/AzureFileCopyV6/task.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
"version": {
1515
"Major": 6,
1616
"Minor": 248,
17-
"Patch": 0
17+
"Patch": 2
1818
},
1919
"demands": [
2020
"azureps"

Diff for: Tasks/AzureFileCopyV6/task.loc.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
"version": {
1515
"Major": 6,
1616
"Minor": 248,
17-
"Patch": 0
17+
"Patch": 2
1818
},
1919
"demands": [
2020
"azureps"

Diff for: _generated/AzureFileCopyV6.versionmap.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
Default|6.248.0
2-
Node20_229_2|6.248.1
1+
Default|6.248.2
2+
Node20_229_2|6.248.3

Diff for: _generated/AzureFileCopyV6/AzureUtilityAz1.0.ps1

+37-12
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,47 @@
22

33
. "$PSScriptRoot/AzureUtilityRest.ps1"
44

5-
function Get-AzureStorageAccountResourceGroupName
6-
{
5+
function Get-AzureStorageAccountResourceGroupName {
76
param([string]$storageAccountName)
87

9-
$ARMStorageAccountResourceType = "Microsoft.Storage/storageAccounts"
10-
if (-not [string]::IsNullOrEmpty($storageAccountName))
11-
{
12-
Write-Verbose "[Azure Call]Getting resource details for azure storage account resource: $storageAccountName with resource type: $ARMStorageAccountResourceType"
13-
$azureStorageAccountResourceDetails = Az.Storage\Get-AzStorageAccount -ErrorAction Stop | Where-Object { $_.StorageAccountName -eq $storageAccountName }
14-
15-
Write-Verbose "[Azure Call]Retrieved resource details successfully for azure storage account resource: $storageAccountName with resource type: $ARMStorageAccountResourceType"
8+
$ARMStorageAccountResourceType = "Microsoft.Storage/storageAccounts"
9+
10+
if (-not [string]::IsNullOrEmpty($storageAccountName)) {
11+
Write-Verbose "[Azure Call] Getting resource details for Azure storage account resource: $storageAccountName with resource type: $ARMStorageAccountResourceType"
1612

13+
$maxRetries = 3
14+
$retryDelay = 30
15+
16+
for ($retryCnt = 0; $retryCnt -le $maxRetries; $retryCnt++) {
17+
try {
18+
# Attempt to get the Azure Storage Account details
19+
$azureStorageAccountResourceDetails = Az.Storage\Get-AzStorageAccount -ErrorAction Stop |
20+
Where-Object { $_.StorageAccountName -eq $storageAccountName }
21+
Write-Verbose "[Azure Call] Retrieved resource details successfully for Azure storage account resource: $storageAccountName with resource type: $ARMStorageAccountResourceType"
22+
# If successful, exit the loop
23+
break
24+
}
25+
catch {
26+
$errorMessage = $_.Exception.Message
27+
# Retry logic for HTTP 429 (Too Many Requests)
28+
if ($_.Exception.Response.StatusCode -eq 429) {
29+
Write-Verbose "Exception Message: $($_.Exception.Response.Message)"
30+
Write-Verbose "Exception Response StatusCode: $($_.Exception.Response.StatusCode)"
31+
# Wait before retrying
32+
Start-Sleep -Seconds $retryDelay
33+
continue
34+
}
35+
else {
36+
# For other errors, display the message and exit the loop
37+
Write-Verbose "[Error]: $errorMessage"
38+
break
39+
}
40+
}
41+
}
42+
1743
$azureResourceGroupName = $azureStorageAccountResourceDetails.ResourceGroupName
18-
if ([string]::IsNullOrEmpty($azureResourceGroupName))
19-
{
20-
Write-Verbose "(ARM)Storage account: $storageAccountName not found"
44+
if ([string]::IsNullOrEmpty($azureResourceGroupName)) {
45+
Write-Verbose "(ARM) Storage account: $storageAccountName not found"
2146
Write-Telemetry "Task_InternalError" "RMStorageAccountNotFound"
2247
Throw (Get-VstsLocString -Key "AFC_StorageAccountNotFound" -ArgumentList $storageAccountName)
2348
}

Diff for: _generated/AzureFileCopyV6/package-lock.json

+27-27
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: _generated/AzureFileCopyV6/task.json

+3-3
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
"version": {
1515
"Major": 6,
1616
"Minor": 248,
17-
"Patch": 0
17+
"Patch": 2
1818
},
1919
"demands": [
2020
"azureps"
@@ -288,7 +288,7 @@
288288
"AzModuleNotFound": "Could not find the modules: 'Az.Accounts'. If the module was recently installed, retry after restarting the Azure Pipelines task agent."
289289
},
290290
"_buildConfigMapping": {
291-
"Default": "6.248.0",
292-
"Node20_229_2": "6.248.1"
291+
"Default": "6.248.2",
292+
"Node20_229_2": "6.248.3"
293293
}
294294
}

Diff for: _generated/AzureFileCopyV6/task.loc.json

+3-3
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
"version": {
1515
"Major": 6,
1616
"Minor": 248,
17-
"Patch": 0
17+
"Patch": 2
1818
},
1919
"demands": [
2020
"azureps"
@@ -288,7 +288,7 @@
288288
"AzModuleNotFound": "ms-resource:loc.messages.AzModuleNotFound"
289289
},
290290
"_buildConfigMapping": {
291-
"Default": "6.248.0",
292-
"Node20_229_2": "6.248.1"
291+
"Default": "6.248.2",
292+
"Node20_229_2": "6.248.3"
293293
}
294294
}

Diff for: _generated/AzureFileCopyV6_Node20/AzureUtilityAz1.0.ps1

+37-12
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,47 @@
22

33
. "$PSScriptRoot/AzureUtilityRest.ps1"
44

5-
function Get-AzureStorageAccountResourceGroupName
6-
{
5+
function Get-AzureStorageAccountResourceGroupName {
76
param([string]$storageAccountName)
87

9-
$ARMStorageAccountResourceType = "Microsoft.Storage/storageAccounts"
10-
if (-not [string]::IsNullOrEmpty($storageAccountName))
11-
{
12-
Write-Verbose "[Azure Call]Getting resource details for azure storage account resource: $storageAccountName with resource type: $ARMStorageAccountResourceType"
13-
$azureStorageAccountResourceDetails = Az.Storage\Get-AzStorageAccount -ErrorAction Stop | Where-Object { $_.StorageAccountName -eq $storageAccountName }
14-
15-
Write-Verbose "[Azure Call]Retrieved resource details successfully for azure storage account resource: $storageAccountName with resource type: $ARMStorageAccountResourceType"
8+
$ARMStorageAccountResourceType = "Microsoft.Storage/storageAccounts"
9+
10+
if (-not [string]::IsNullOrEmpty($storageAccountName)) {
11+
Write-Verbose "[Azure Call] Getting resource details for Azure storage account resource: $storageAccountName with resource type: $ARMStorageAccountResourceType"
1612

13+
$maxRetries = 3
14+
$retryDelay = 30
15+
16+
for ($retryCnt = 0; $retryCnt -le $maxRetries; $retryCnt++) {
17+
try {
18+
# Attempt to get the Azure Storage Account details
19+
$azureStorageAccountResourceDetails = Az.Storage\Get-AzStorageAccount -ErrorAction Stop |
20+
Where-Object { $_.StorageAccountName -eq $storageAccountName }
21+
Write-Verbose "[Azure Call] Retrieved resource details successfully for Azure storage account resource: $storageAccountName with resource type: $ARMStorageAccountResourceType"
22+
# If successful, exit the loop
23+
break
24+
}
25+
catch {
26+
$errorMessage = $_.Exception.Message
27+
# Retry logic for HTTP 429 (Too Many Requests)
28+
if ($_.Exception.Response.StatusCode -eq 429) {
29+
Write-Verbose "Exception Message: $($_.Exception.Response.Message)"
30+
Write-Verbose "Exception Response StatusCode: $($_.Exception.Response.StatusCode)"
31+
# Wait before retrying
32+
Start-Sleep -Seconds $retryDelay
33+
continue
34+
}
35+
else {
36+
# For other errors, display the message and exit the loop
37+
Write-Verbose "[Error]: $errorMessage"
38+
break
39+
}
40+
}
41+
}
42+
1743
$azureResourceGroupName = $azureStorageAccountResourceDetails.ResourceGroupName
18-
if ([string]::IsNullOrEmpty($azureResourceGroupName))
19-
{
20-
Write-Verbose "(ARM)Storage account: $storageAccountName not found"
44+
if ([string]::IsNullOrEmpty($azureResourceGroupName)) {
45+
Write-Verbose "(ARM) Storage account: $storageAccountName not found"
2146
Write-Telemetry "Task_InternalError" "RMStorageAccountNotFound"
2247
Throw (Get-VstsLocString -Key "AFC_StorageAccountNotFound" -ArgumentList $storageAccountName)
2348
}

Diff for: _generated/AzureFileCopyV6_Node20/task.json

+3-3
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
"version": {
1515
"Major": 6,
1616
"Minor": 248,
17-
"Patch": 1
17+
"Patch": 3
1818
},
1919
"demands": [
2020
"azureps"
@@ -292,7 +292,7 @@
292292
"AzModuleNotFound": "Could not find the modules: 'Az.Accounts'. If the module was recently installed, retry after restarting the Azure Pipelines task agent."
293293
},
294294
"_buildConfigMapping": {
295-
"Default": "6.248.0",
296-
"Node20_229_2": "6.248.1"
295+
"Default": "6.248.2",
296+
"Node20_229_2": "6.248.3"
297297
}
298298
}

0 commit comments

Comments
 (0)