{"record":{"id":"f27cae689bb0b727","repo":"gastownhall/beads","slug":"uow-close-init-db-w","errorCode":null,"errorMessage":"uow: close init db: %w","messagePattern":"uow: close init db: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"internal/storage/uow/dolt_sql_provider.go","lineNumber":413,"sourceCode":"\t\treturn nil, err\n\t}\n\n\tinitProvider := &doltSQLProvider{\n\t\tdefaultBranch:     defaultBranch,\n\t\tdb:                initDB,\n\t\tserverEndpoint:    \"tcp:\" + ep.Address(),\n\t\tteamServer:        teamServer,\n\t\texpectedProjectID: expectedProjectID,\n\t\tpreview:           opts.preview,\n\t}\n\n\tif err := initProvider.initSchema(ctx, database); err != nil {\n\t\t_ = initDB.Close()\n\t\treturn nil, fmt.Errorf(\"uow: init schema: %w\", err)\n\t}\n\n\tif err := initDB.Close(); err != nil {\n\t\treturn nil, fmt.Errorf(\"uow: close init db: %w\", err)\n\t}\n\n\tdbConn, err := openDB(ctx, buildDSN(ep, database, rootUser, rootPassword, tlsConfigName))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &doltSQLProvider{\n\t\tdefaultBranch:     defaultBranch,\n\t\tdb:                dbConn,\n\t\tserverEndpoint:    \"tcp:\" + ep.Address(),\n\t\tteamServer:        teamServer,\n\t\texpectedProjectID: expectedProjectID,\n\t\tpreview:           opts.preview,\n\t}, nil\n}\n","sourceCodeStart":395,"sourceCodeEnd":430,"githubUrl":"https://github.com/gastownhall/beads/blob/71377f276968b452ee607177637970a4ff888584/internal/storage/uow/dolt_sql_provider.go#L395-L430","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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"],"exampleFix":"// before\nprov, err := NewDoltServerUOWProvider(...)\nif err != nil && strings.Contains(err.Error(), \"close init db\") { panic(err) }\n// after\nprov, err := NewDoltServerUOWProvider(...)\nif err != nil {\n    if strings.Contains(err.Error(), \"uow: close init db\") {\n        prov, err = NewDoltServerUOWProvider(...) // retry once; teardown is transient\n    }\n    if err != nil { return err }\n}","handlingStrategy":"retry","validationCode":"// No pre-call validation is practical; ensure the server is healthy first\nif err := pingEndpoint(ctx, ep); err != nil { return err }","typeGuard":"func isCloseInitDBError(err error) bool {\n    return err != nil && strings.Contains(err.Error(), \"uow: close init db:\")\n}","tryCatchPattern":"prov, err := NewDoltServerUOWProvider(...)\nif isCloseInitDBError(err) {\n    // transient teardown failure; safe to retry once\n    prov, err = NewDoltServerUOWProvider(...)\n}\nif err != nil { return err }","preventionTips":["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"],"tags":["database","connection","cleanup","dolt"],"backgroundTag":"connection-close-failed","analyzedSha":"71377f276968b452ee607177637970a4ff888584","analyzedAt":"2026-08-30T18:55:39.744Z","schemaVersion":2},"datasetVersion":"2026-08-30T23:17:21.991Z"}