gastownhall/beads · warning
uow: close init db: %w
Error message
uow: close init db: %w
What it means
After successfully initializing the schema, openAndInitSchema closes the temporary bootstrap connection that had no default database. If sql.DB.Close returns an error, it is wrapped as 'uow: close init db'. This is rare — Close on a healthy *sql.DB seldom errors — and usually indicates driver-level connection teardown trouble.
Source
Thrown at internal/storage/uow/dolt_sql_provider.go:413
return nil, err
}
initProvider := &doltSQLProvider{
defaultBranch: defaultBranch,
db: initDB,
serverEndpoint: "tcp:" + ep.Address(),
teamServer: teamServer,
expectedProjectID: expectedProjectID,
preview: opts.preview,
}
if err := initProvider.initSchema(ctx, database); err != nil {
_ = initDB.Close()
return nil, fmt.Errorf("uow: init schema: %w", err)
}
if err := initDB.Close(); err != nil {
return nil, fmt.Errorf("uow: close init db: %w", err)
}
dbConn, err := openDB(ctx, buildDSN(ep, database, rootUser, rootPassword, tlsConfigName))
if err != nil {
return nil, err
}
return &doltSQLProvider{
defaultBranch: defaultBranch,
db: dbConn,
serverEndpoint: "tcp:" + ep.Address(),
teamServer: teamServer,
expectedProjectID: expectedProjectID,
preview: opts.preview,
}, nil
}
View on GitHub (pinned to 71377f2769)
Solutions
- Retry the provider construction — transient teardown failures usually do not persist
- Check server logs for a crash or connection reset right after schema init
- Confirm network stability / no aggressive idle-connection killing between client and server
- If reproducible, report with the wrapped driver error since Close failing consistently signals a driver/server bug
Example fix
// before
prov, err := NewDoltServerUOWProvider(...)
if err != nil && strings.Contains(err.Error(), "close init db") { panic(err) }
// after
prov, err := NewDoltServerUOWProvider(...)
if err != nil {
if strings.Contains(err.Error(), "uow: close init db") {
prov, err = NewDoltServerUOWProvider(...) // retry once; teardown is transient
}
if err != nil { return err }
} Defensive patterns
Strategy: retry
Validate before calling
// No pre-call validation is practical; ensure the server is healthy first
if err := pingEndpoint(ctx, ep); err != nil { return err } Type guard
func isCloseInitDBError(err error) bool {
return err != nil && strings.Contains(err.Error(), "uow: close init db:")
} Try / catch
prov, err := NewDoltServerUOWProvider(...)
if isCloseInitDBError(err) {
// transient teardown failure; safe to retry once
prov, err = NewDoltServerUOWProvider(...)
}
if err != nil { return err } Prevention
- Keep network between client and server stable; avoid aggressive idle-connection killers
- Check server logs for crashes immediately after schema init
- Treat this as transient and retry construction once before alerting
When it happens
Trigger: NewDoltServerUOWProvider / NewExternalDoltServerUOWProvider completing schema init but failing to close the initial no-database connection: driver returning errors from pooled-connection close, or the connection being already broken/timed out at teardown.
Common situations: Dolt server dropped the connection between initSchema and Close (idle kill, crash); network interruption during teardown; MySQL driver edge cases when the server closes the socket first.
Related errors
- dolt server connection failed: %w
- failed to reach the workspace identity: %v
- begin tx: %w
- begin read tx: %w
- begin write tx: %w
AI-assisted analysis of gastownhall/beads@71377f2769 (2026-08-30).
Data as JSON: /api/errors/f27cae689bb0b727.
Report an issue: GitHub.