mirror of https://github.com/coder/coder.git
fix: Tidy up closes for nicer output (#4605)
* fix: Tidy up closes for nicer output There was a context canceled message that would appear because of traces, and this was using the wrong close. I don't think it was causing any specific problems, but it could make a replica warning appear on restart. * Fix migration and experimental
This commit is contained in:
parent
e0a14f68fa
commit
c5afaffa7e
|
@ -609,7 +609,8 @@ func (h *headerTransport) RoundTrip(req *http.Request) (*http.Response, error) {
|
||||||
|
|
||||||
// ExperimentalEnabled returns if the experimental feature flag is enabled.
|
// ExperimentalEnabled returns if the experimental feature flag is enabled.
|
||||||
func ExperimentalEnabled(cmd *cobra.Command) bool {
|
func ExperimentalEnabled(cmd *cobra.Command) bool {
|
||||||
return cliflag.IsSetBool(cmd, varExperimental)
|
enabled, _ := cmd.Flags().GetBool(varExperimental)
|
||||||
|
return enabled
|
||||||
}
|
}
|
||||||
|
|
||||||
// EnsureExperimental will ensure that the experimental feature flag is set if the given flag is set.
|
// EnsureExperimental will ensure that the experimental feature flag is set if the given flag is set.
|
||||||
|
|
|
@ -476,14 +476,13 @@ func Server(dflags *codersdk.DeploymentFlags, newAPI func(context.Context, *code
|
||||||
), dflags.PromAddress.Value, "prometheus")()
|
), dflags.PromAddress.Value, "prometheus")()
|
||||||
}
|
}
|
||||||
|
|
||||||
// We use a separate closer so the Enterprise API
|
// We use a separate coderAPICloser so the Enterprise API
|
||||||
// can have it's own close functions. This is cleaner
|
// can have it's own close functions. This is cleaner
|
||||||
// than abstracting the Coder API itself.
|
// than abstracting the Coder API itself.
|
||||||
coderAPI, closer, err := newAPI(ctx, options)
|
coderAPI, coderAPICloser, err := newAPI(ctx, options)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
defer closer.Close()
|
|
||||||
|
|
||||||
client := codersdk.New(localURL)
|
client := codersdk.New(localURL)
|
||||||
if dflags.TLSEnable.Value {
|
if dflags.TLSEnable.Value {
|
||||||
|
@ -663,7 +662,7 @@ func Server(dflags *codersdk.DeploymentFlags, newAPI func(context.Context, *code
|
||||||
wg.Wait()
|
wg.Wait()
|
||||||
|
|
||||||
cmd.Println("Waiting for WebSocket connections to close...")
|
cmd.Println("Waiting for WebSocket connections to close...")
|
||||||
_ = coderAPI.Close()
|
_ = coderAPICloser.Close()
|
||||||
cmd.Println("Done waiting for WebSocket connections")
|
cmd.Println("Done waiting for WebSocket connections")
|
||||||
|
|
||||||
// Close tunnel after we no longer have in-flight connections.
|
// Close tunnel after we no longer have in-flight connections.
|
||||||
|
|
|
@ -1,9 +1,5 @@
|
||||||
-- Code generated by 'make coderd/database/generate'. DO NOT EDIT.
|
-- Code generated by 'make coderd/database/generate'. DO NOT EDIT.
|
||||||
|
|
||||||
CREATE EXTENSION IF NOT EXISTS pgcrypto WITH SCHEMA public;
|
|
||||||
|
|
||||||
COMMENT ON EXTENSION pgcrypto IS 'cryptographic functions';
|
|
||||||
|
|
||||||
CREATE TYPE api_key_scope AS ENUM (
|
CREATE TYPE api_key_scope AS ENUM (
|
||||||
'all',
|
'all',
|
||||||
'application_connect'
|
'application_connect'
|
||||||
|
|
|
@ -14,9 +14,6 @@ BEGIN;
|
||||||
-- Drop the primary key on hash.
|
-- Drop the primary key on hash.
|
||||||
ALTER TABLE files DROP CONSTRAINT files_pkey;
|
ALTER TABLE files DROP CONSTRAINT files_pkey;
|
||||||
|
|
||||||
-- This extension is required by gen_random_uuid
|
|
||||||
CREATE EXTENSION IF NOT EXISTS pgcrypto;
|
|
||||||
|
|
||||||
-- Add an 'id' column and designate it the primary key.
|
-- Add an 'id' column and designate it the primary key.
|
||||||
ALTER TABLE files ADD COLUMN
|
ALTER TABLE files ADD COLUMN
|
||||||
id uuid NOT NULL PRIMARY KEY DEFAULT gen_random_uuid ();
|
id uuid NOT NULL PRIMARY KEY DEFAULT gen_random_uuid ();
|
||||||
|
|
|
@ -3,6 +3,7 @@ package tracing
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
|
"github.com/go-logr/logr"
|
||||||
"go.opentelemetry.io/otel"
|
"go.opentelemetry.io/otel"
|
||||||
"go.opentelemetry.io/otel/exporters/otlp/otlptrace"
|
"go.opentelemetry.io/otel/exporters/otlp/otlptrace"
|
||||||
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
|
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
|
||||||
|
@ -59,12 +60,15 @@ func TracerProvider(ctx context.Context, service string, opts TracerOpts) (*sdkt
|
||||||
|
|
||||||
tracerProvider := sdktrace.NewTracerProvider(tracerOpts...)
|
tracerProvider := sdktrace.NewTracerProvider(tracerOpts...)
|
||||||
otel.SetTracerProvider(tracerProvider)
|
otel.SetTracerProvider(tracerProvider)
|
||||||
|
// Ignore otel errors!
|
||||||
|
otel.SetErrorHandler(otel.ErrorHandlerFunc(func(err error) {}))
|
||||||
otel.SetTextMapPropagator(
|
otel.SetTextMapPropagator(
|
||||||
propagation.NewCompositeTextMapPropagator(
|
propagation.NewCompositeTextMapPropagator(
|
||||||
propagation.TraceContext{},
|
propagation.TraceContext{},
|
||||||
propagation.Baggage{},
|
propagation.Baggage{},
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
otel.SetLogger(logr.Discard())
|
||||||
|
|
||||||
return tracerProvider, func(ctx context.Context) error {
|
return tracerProvider, func(ctx context.Context) error {
|
||||||
for _, close := range closers {
|
for _, close := range closers {
|
||||||
|
|
|
@ -215,7 +215,7 @@ func (c *haCoordinator) ServeAgent(conn net.Conn, id uuid.UUID) error {
|
||||||
for {
|
for {
|
||||||
node, err := c.handleAgentUpdate(id, decoder)
|
node, err := c.handleAgentUpdate(id, decoder)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if errors.Is(err, io.EOF) || errors.Is(err, io.ErrClosedPipe) {
|
if errors.Is(err, io.EOF) || errors.Is(err, io.ErrClosedPipe) || errors.Is(err, context.Canceled) {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return xerrors.Errorf("handle next agent message: %w", err)
|
return xerrors.Errorf("handle next agent message: %w", err)
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package tailnet
|
package tailnet
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
"io"
|
"io"
|
||||||
|
@ -289,7 +290,7 @@ func (c *coordinator) ServeAgent(conn net.Conn, id uuid.UUID) error {
|
||||||
for {
|
for {
|
||||||
err := c.handleNextAgentMessage(id, decoder)
|
err := c.handleNextAgentMessage(id, decoder)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if errors.Is(err, io.EOF) {
|
if errors.Is(err, io.EOF) || errors.Is(err, context.Canceled) {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return xerrors.Errorf("handle next agent message: %w", err)
|
return xerrors.Errorf("handle next agent message: %w", err)
|
||||||
|
|
Loading…
Reference in New Issue