Skip to content

Commit 813111d

Browse files
committed
Add SQL Server readiness checks to Windows pipeline setup (#4172)
1 parent 72dc6fc commit 813111d

1 file changed

Lines changed: 46 additions & 3 deletions

File tree

eng/pipelines/common/templates/steps/configure-sql-server-win-step.yml

Lines changed: 46 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -162,10 +162,28 @@ steps:
162162
#Change the access level for FileStream for SQLServer
163163
Set-ExecutionPolicy Unrestricted
164164
Import-Module "sqlps"
165-
Invoke-Sqlcmd -ServerInstance "$machineName" @"
166-
EXEC sp_configure filestream_access_level, 2;
167-
RECONFIGURE;
165+
166+
# Retry loop: SQL Server may be temporarily unavailable after enabling FileStream via WMI.
167+
# Worst-case budget: 10 attempts x (5s connection timeout + 5s sleep) = ~100s
168+
$tries = 0
169+
while ($true) {
170+
$tries++
171+
try {
172+
Invoke-Sqlcmd -ServerInstance "$machineName" -ConnectionTimeout 5 @"
173+
EXEC sp_configure filestream_access_level, 2;
174+
RECONFIGURE;
168175
"@
176+
Write-Host "FileStream access level configured successfully."
177+
break
178+
} catch {
179+
if ($tries -ge 10) {
180+
Write-Host "##[error]Failed to configure FileStream access level after $tries tries."
181+
throw
182+
}
183+
Write-Host "Failed to connect to SQL Server (attempt $tries/10). Retrying in 5 seconds..."
184+
Start-Sleep -Seconds 5
185+
}
186+
}
169187
displayName: 'Enable FileStream [Win]'
170188
env:
171189
SQL_USER: ${{parameters.user }}
@@ -250,6 +268,31 @@ steps:
250268
Restart-Service -Name "$serviceName" -Force
251269
Restart-Service -Name MSSQLSERVER* -Force
252270
271+
# Wait for SQL Server to be ready to accept connections after restart.
272+
# Worst-case budget: 20 attempts x (5s connection timeout + 3s sleep) = ~160s
273+
$machineName = $env:COMPUTERNAME
274+
if ("${{parameters.instanceName }}" -ne "MSSQLSERVER") {
275+
$machineName += "\${{parameters.instanceName }}"
276+
}
277+
278+
Import-Module "sqlps"
279+
$tries = 0
280+
while ($true) {
281+
$tries++
282+
try {
283+
Invoke-Sqlcmd -ServerInstance "$machineName" -Query "SELECT @@VERSION" -ConnectionTimeout 5
284+
Write-Host "SQL Server is ready after restart (attempt $tries)."
285+
break
286+
} catch {
287+
if ($tries -ge 20) {
288+
Write-Host "##[error]SQL Server did not become ready after $tries attempts."
289+
throw
290+
}
291+
Write-Host "Waiting for SQL Server to start (attempt $tries/20)..."
292+
Start-Sleep -Seconds 3
293+
}
294+
}
295+
253296
displayName: 'Restart SQL Server [Win]'
254297
255298
- powershell: |

0 commit comments

Comments
 (0)