diff --git a/codersdk/agentsdk/agentsdk.go b/codersdk/agentsdk/agentsdk.go index f4b114438c010..7f66c01bc864b 100644 --- a/codersdk/agentsdk/agentsdk.go +++ b/codersdk/agentsdk/agentsdk.go @@ -211,18 +211,26 @@ func (c *Client) DERPMapUpdates(ctx context.Context) (<-chan DERPMapUpdate, io.C if err != nil { update.Err = err update.DERPMap = nil - return } - err = c.rewriteDerpMap(update.DERPMap) - if err != nil { - update.Err = err - update.DERPMap = nil - return + if update.DERPMap != nil { + err = c.rewriteDerpMap(update.DERPMap) + if err != nil { + update.Err = err + update.DERPMap = nil + } } select { case updates <- update: case <-ctx.Done(): + // Unblock the caller if they're waiting for an update. + select { + case updates <- DERPMapUpdate{Err: ctx.Err()}: + default: + } + return + } + if update.Err != nil { return } } @@ -231,8 +239,8 @@ func (c *Client) DERPMapUpdates(ctx context.Context) (<-chan DERPMapUpdate, io.C return updates, &closer{ closeFunc: func() error { cancelFunc() - _ = wsNetConn.Close() <-pingClosed + _ = conn.Close(websocket.StatusGoingAway, "Listen closed") <-updatesClosed return nil }, diff --git a/enterprise/coderd/coderd.go b/enterprise/coderd/coderd.go index fcd9b5a6550d2..c3cc5e0be5ccd 100644 --- a/enterprise/coderd/coderd.go +++ b/enterprise/coderd/coderd.go @@ -706,6 +706,10 @@ func derpMapper(logger slog.Logger, cfg *codersdk.DeploymentValues, proxyHealth // existing ID in the DERP map. regionID := int(startingRegionID) + int(status.Proxy.RegionID) regionCode := fmt.Sprintf("coder_%s", strings.ToLower(status.Proxy.Name)) + regionName := status.Proxy.DisplayName + if regionName == "" { + regionName = status.Proxy.Name + } for _, r := range derpMap.Regions { if r.RegionID == regionID || r.RegionCode == regionCode { // Log a warning if we haven't logged one in the last @@ -768,7 +772,7 @@ func derpMapper(logger slog.Logger, cfg *codersdk.DeploymentValues, proxyHealth EmbeddedRelay: false, RegionID: regionID, RegionCode: regionCode, - RegionName: status.Proxy.Name, + RegionName: regionName, Nodes: nodes, } }