{"record":{"id":"ca2dcb6b83bff604","repo":"gastownhall/beads","slug":"uow-get-proxy-endpoint-w","errorCode":null,"errorMessage":"uow: get proxy endpoint: %w","messagePattern":"uow: get proxy endpoint: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/storage/uow/doltserver_provider.go","lineNumber":71,"sourceCode":"\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"uow: resolving dolt bin exec: %w\", err)\n\t}\n\n\tif err := os.MkdirAll(absServerRootDir, config.BeadsDirPerm); err != nil {\n\t\treturn nil, fmt.Errorf(\"uow: creating server root directory: %w\", err)\n\t}\n\n\tep, err := proxy.GetCreateDatabaseProxyServerEndpoint(absServerRootDir, proxy.OpenOpts{\n\t\tBackend:        backend,\n\t\tConfigFilePath: serverConfigFilePath,\n\t\tLogFilePath:    serverLogFilePath,\n\t\tDoltBinPath:    absDoltBinExec,\n\t\tDatabase:       database,\n\t\tIdleTimeout:    idleTimeout,\n\t\tPort:           proxyPort,\n\t})\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"uow: get proxy endpoint: %w\", err)\n\t}\n\n\treturn openAndInitSchema(ctx, ep, database, rootUser, rootPassword, \"\", teamServer, expectedProjectID, applyProviderOptions(opts))\n}\n","sourceCodeStart":53,"sourceCodeEnd":76,"githubUrl":"https://github.com/gastownhall/beads/blob/71377f276968b452ee607177637970a4ff888584/internal/storage/uow/doltserver_provider.go#L53-L76","documentation":"proxy.GetCreateDatabaseProxyServerEndpoint failed while resolving or starting the Dolt database proxy server endpoint (it may launch/supervise a dolt server and pick host/port). Any failure inside — server spawn failure, bad config file, port conflicts, startup timeout — is wrapped here. At this point arguments have passed validation and the root directory exists.","triggerScenarios":"NewDoltServerUOWProvider called when the dolt server fails to start (bad dolt binary, invalid serverConfigFilePath), the requested proxyPort is already in use, the log/config file paths are unwritable, or endpoint discovery times out.","commonSituations":"Port 3306/5xx already bound by another MySQL/dolt instance; stale dolt server from a previous run holding the socket; corrupted server config YAML; dolt binary version incompatible with the data dir; container lacking process-spawn permissions.","solutions":["Read the wrapped cause after 'uow: get proxy endpoint:' for the concrete failure","Check the server log file (serverLogFilePath) for dolt server startup errors","Free the requested proxyPort or pass 0 to let the proxy choose one","Kill stale dolt server processes bound to the data dir (check for stale pid/socket files in serverRootDir)","Validate serverConfigFilePath contents and ensure doltBinExec is a compatible dolt version"],"exampleFix":"// before\nprov, err := NewDoltServerUOWProvider(..., 3306, ...) // port in use\n// after\nprov, err := NewDoltServerUOWProvider(..., 0, ...) // ephemeral port\nif err != nil {\n    log.Fatalf(\"proxy endpoint: %v — see %s for server logs\", err, serverLogFilePath)\n}","handlingStrategy":"retry","validationCode":"// Pre-flight: port availability and writable log/config paths\nif ln, err := net.Listen(\"tcp\", fmt.Sprintf(\"127.0.0.1:%d\", proxyPort)); err != nil {\n    return fmt.Errorf(\"proxy port %d in use\", proxyPort)\n} else { ln.Close() }\nfor _, p := range []string{serverLogFilePath, serverConfigFilePath} {\n    if dir := filepath.Dir(p); dir != \"\" {\n        if err := os.MkdirAll(dir, 0o755); err != nil { return err }\n    }\n}","typeGuard":"func isProxyEndpointError(err error) bool {\n    return err != nil && strings.Contains(err.Error(), \"uow: get proxy endpoint:\")\n}","tryCatchPattern":"prov, err := NewDoltServerUOWProvider(...)\nif isProxyEndpointError(err) {\n    // inspect server log, then retry with an ephemeral port\n    log.Printf(\"proxy endpoint failed: %v; see %s\", err, serverLogFilePath)\n    prov, err = NewDoltServerUOWProvider(... /* proxyPort = 0 */ ...)\n}\nif err != nil { return err }","preventionTips":["Use proxyPort 0 (ephemeral) unless a fixed port is required","Tail serverLogFilePath after startup failures for dolt's own error output","Clean stale dolt server pid/socket files in serverRootDir before restart","Validate the server config file with the proxy package's tooling before launch"],"tags":["network","port","dolt","server-startup"],"backgroundTag":"server-startup-failed","analyzedSha":"71377f276968b452ee607177637970a4ff888584","analyzedAt":"2026-08-30T18:55:39.744Z","schemaVersion":2},"datasetVersion":"2026-08-30T23:17:21.991Z"}