doctor: surface state store open failure as failing check

Previously store.Open errors were silently swallowed, so `banger
doctor` could report green while the default-image check (and any
other store-dependent diagnostic) was silently skipped because
d.store was nil.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Thales Maciel 2026-04-19 17:35:27 -03:00
parent 3f6ecb4376
commit d38f580e00
No known key found for this signature in database
GPG key ID: 33112E6833C34679

View file

@ -27,17 +27,27 @@ func Doctor(ctx context.Context) (system.Report, error) {
config: cfg,
runner: system.NewRunner(),
}
db, err := store.Open(layout.DBPath)
if err == nil {
db, storeErr := store.Open(layout.DBPath)
if storeErr == nil {
defer db.Close()
d.store = db
}
return d.doctorReport(ctx), nil
return d.doctorReport(ctx, storeErr), nil
}
func (d *Daemon) doctorReport(ctx context.Context) system.Report {
func (d *Daemon) doctorReport(ctx context.Context, storeErr error) system.Report {
report := system.Report{}
if storeErr != nil {
report.AddFail(
"state store",
fmt.Sprintf("open %s: %v", d.layout.DBPath, storeErr),
"remove or restore the file if corrupt; otherwise check its permissions",
)
} else {
report.AddPass("state store", "readable at "+d.layout.DBPath)
}
report.AddPreflight("host runtime", d.runtimeChecks(), runtimeStatus(d.config))
report.AddPreflight("core vm lifecycle", d.coreVMLifecycleChecks(), "required host tools available")
report.AddPreflight("vsock guest agent", d.vsockChecks(), "vsock guest agent prerequisites available")