{"record":{"id":"783145fe24c33cd9","repo":"jaegertracing/jaeger","slug":"failed-to-create-admin-server-w","errorCode":null,"errorMessage":"failed to create admin server: %w","messagePattern":"failed to create admin server: %w","errorType":"error_code","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cmd/internal/flags/admin.go","lineNumber":122,"sourceCode":"\t}\n\n\treturn s.serveWithListener(l)\n}\n\nfunc (s *AdminServer) serveWithListener(l net.Listener) (err error) {\n\ts.logger.Info(\"Mounting health check on admin server\", zap.String(\"route\", \"/\"))\n\ts.mux.Handle(\"/\", s.hc.Handler())\n\tversion.RegisterHandler(s.mux, s.logger)\n\ts.registerPprofHandlers()\n\trecoveryHandler := recoveryhandler.NewRecoveryHandler(s.logger, true)\n\ts.server, err = s.serverCfg.ToServer(\n\t\tcontext.Background(),\n\t\tnil, // host\n\t\ttelemetry.NoopSettings().ToOtelComponent(),\n\t\trecoveryHandler(s.mux),\n\t)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to create admin server: %w\", err)\n\t}\n\terrorLog, _ := zap.NewStdLogAt(s.logger, zapcore.ErrorLevel)\n\ts.server.ErrorLog = errorLog\n\n\ts.logger.Info(\"Starting admin HTTP server\")\n\tstarted := make(chan struct{})\n\ts.stopped.Go(func() {\n\t\tclose(started)\n\t\terr := s.server.Serve(l)\n\t\tif err != nil && !errors.Is(err, http.ErrServerClosed) {\n\t\t\ts.logger.Error(\"failed to serve\", zap.Error(err))\n\t\t\ts.hc.SetUnavailable()\n\t\t}\n\t})\n\t<-started // wait for the server to start listening\n\ts.logger.Info(\"Admin server started\", zap.String(\"http.host-port\", l.Addr().String()))\n\treturn nil\n}","sourceCodeStart":104,"sourceCodeEnd":140,"githubUrl":"https://github.com/jaegertracing/jaeger/blob/806f4447841ecdb60519f408b004a599d515f437/cmd/internal/flags/admin.go#L104-L140","documentation":"During serveWithListener (invoked from Serve), the admin HTTP server is constructed via the httpserver package (with a recovery handler and no-op telemetry). If that constructor returns an error, it is wrapped as \"failed to create admin server\". This means the server object itself could not be built, before any listener bind attempt.","triggerScenarios":"The httpserver.New call inside serveWithListener returns non-nil err — e.g. invalid internal server configuration produced from flags (bad TLS settings already applied to serverCfg, invalid options) — causing server creation to abort.","commonSituations":"Malformed admin TLS config flowing into the server constructor; corrupted or incompatible configuration assembled in initFromViper; library version mismatch after upgrade changing constructor requirements.","solutions":["Read the wrapped cause from the log for the constructor's exact complaint.","Re-check all --admin.http.* flags for invalid values (endpoint, TLS).","Reset admin flags to defaults to isolate which flag breaks creation.","Upgrade/align jaeger and its httpserver dependency versions."],"exampleFix":"// before\n--admin.http.host-port=:::99999  # invalid endpoint\n// after\n--admin.http.host-port=:14269","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"if err := adminFlags.Serve(); err != nil {\n    if strings.Contains(err.Error(), \"failed to create admin server\") {\n        // log wrapped cause and bail before retrying\n    }\n    log.Fatalf(\"admin server startup failed: %v\", err)\n}","preventionTips":["Keep --admin.http.* flags at tested defaults unless customization is needed.","Validate admin TLS flags first (error 134 often precedes this).","Upgrade jaeger components together to avoid constructor mismatches."],"tags":["admin-server","http-server","startup"],"backgroundTag":"server-creation-failed","analyzedSha":"806f4447841ecdb60519f408b004a599d515f437","analyzedAt":"2026-09-01T02:39:22.140Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T05:18:18.240Z"}