dotnet / aspire

Tools, templates, and packages to accelerate building observable, production-ready apps
https://learn.microsoft.com/dotnet/aspire
MIT License
3.84k stars 461 forks source link

Database Waiting on Server hangs #5810

Closed afscrome closed 1 month ago

afscrome commented 1 month ago

Is there an existing issue for this?

Describe the bug

Running the following causes the sql server resource to hang on startup indefinitely.

var sql = builder.AddSqlServer("sql");
var db = sql.AddDatabase("mydb");
db.WaitFor(sql);

Console logs don't show anything, nor is any container showing up with docker ps so it seems something is failing before even trying to start the container.

Expected Behavior

The SQL Server resource should start.

Or if for some reason the WaitFor here is not supported, I'd expect to see it throw an exception rather than just hang.

Steps To Reproduce

Both of the following will repro. Commenting out the db.WaitFor(sql/postgres) line will stop the hang. SQL:

var sql = builder.AddSqlServer("sql");
var db = sql.AddDatabase("mydb");
db.WaitFor(sql);

Or Postgres:

var postgres = builder.AddPostgres("pg");
var db = postgres.AddDatabase("whatever");
db.WaitFor(postgres);

Exceptions (if any)

No response

.NET Version info

    <PackageReference Include="Aspire.Hosting.AppHost" Version="9.0.0-preview.4.24470.1" />
    <PackageReference Include="Aspire.Hosting.PostgreSQL" Version="9.0.0-preview.4.24470.1" />
    <PackageReference Include="Aspire.Hosting.Redis" Version="9.0.0-preview.4.24470.1" />
    <PackageReference Include="Aspire.Hosting.SqlServer" Version="9.0.0-preview.4.24470.1" />
.NET SDK:
 Version:           9.0.100-rc.1.24452.12
 Commit:            81a714c6d3
 Workload version:  9.0.100-manifests.c7c7028a
 MSBuild version:   17.12.0-preview-24422-09+d17ec720d

Runtime Environment:
 OS Name:     Windows
 OS Version:  10.0.22631
 OS Platform: Windows
 RID:         win-x64
 Base Path:   C:\Program Files\dotnet\sdk\9.0.100-rc.1.24452.12\

.NET workloads installed:
Configured to use loose manifests when installing new manifests.
 [aspire]
   Installation Source: VS 17.11.35312.102
   Manifest Version:    9.0.0-preview.4.24454.4/8.0.100
   Manifest Path:       C:\Program Files\dotnet\sdk-manifests\8.0.100\microsoft.net.sdk.aspire\9.0.0-preview.4.24454.4\WorkloadManifest.json
   Install Type:        FileBased

Host:
  Version:      9.0.0-rc.1.24431.7
  Architecture: x64
  Commit:       static

.NET SDKs installed:
  8.0.400 [C:\Program Files\dotnet\sdk]
  8.0.401 [C:\Program Files\dotnet\sdk]
  9.0.100-rc.1.24452.12 [C:\Program Files\dotnet\sdk]

.NET runtimes installed:
  Microsoft.AspNetCore.App 8.0.8 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 9.0.0-rc.1.24452.1 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 8.0.8 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 9.0.0-rc.1.24431.7 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.WindowsDesktop.App 8.0.8 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
  Microsoft.WindowsDesktop.App 9.0.0-rc.1.24452.1 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]

Other architectures found:
  x86   [C:\Program Files (x86)\dotnet]
    registered at [HKLM\SOFTWARE\dotnet\Setup\InstalledVersions\x86\InstallLocation]

Environment variables:
  Not set

global.json file:
  Not found

Learn more:
  https://aka.ms/dotnet/info

Download .NET:
  https://aka.ms/dotnet/download

Anything else?

No response

afscrome commented 1 month ago

You can also see this hang if you indirectly wait on the server. Here the database is waiting on the migrator, which is in turn waiting on the sql server.

var sql = builder.AddSqlServer("sql")
    .WithLifetime(ContainerLifetime.Persistent);

var migrator = builder.AddExecutable("migrator", "pwsh", ".",
    "-NoProfile",
    "-NoLogo",
    "-NonInteractive",
    "-Command",
    "Write-Host 'Starting Migration'; Start-Sleep -Seconds 10; Write-Host 'Done'")
    .WaitFor(sql);

var db = sql.AddDatabase("mydb")
    .WaitFor(migrator);