Skip to content

Commit 6b69970

Browse files
authored
fix: avoid infinite loop in agent derp-map (#8848)
1 parent 805eaca commit 6b69970

File tree

2 files changed

+20
-8
lines changed

2 files changed

+20
-8
lines changed

codersdk/agentsdk/agentsdk.go

+15-7
Original file line numberDiff line numberDiff line change
@@ -211,18 +211,26 @@ func (c *Client) DERPMapUpdates(ctx context.Context) (<-chan DERPMapUpdate, io.C
211211
if err != nil {
212212
update.Err = err
213213
update.DERPMap = nil
214-
return
215214
}
216-
err = c.rewriteDerpMap(update.DERPMap)
217-
if err != nil {
218-
update.Err = err
219-
update.DERPMap = nil
220-
return
215+
if update.DERPMap != nil {
216+
err = c.rewriteDerpMap(update.DERPMap)
217+
if err != nil {
218+
update.Err = err
219+
update.DERPMap = nil
220+
}
221221
}
222222

223223
select {
224224
case updates <- update:
225225
case <-ctx.Done():
226+
// Unblock the caller if they're waiting for an update.
227+
select {
228+
case updates <- DERPMapUpdate{Err: ctx.Err()}:
229+
default:
230+
}
231+
return
232+
}
233+
if update.Err != nil {
226234
return
227235
}
228236
}
@@ -231,8 +239,8 @@ func (c *Client) DERPMapUpdates(ctx context.Context) (<-chan DERPMapUpdate, io.C
231239
return updates, &closer{
232240
closeFunc: func() error {
233241
cancelFunc()
234-
_ = wsNetConn.Close()
235242
<-pingClosed
243+
_ = conn.Close(websocket.StatusGoingAway, "Listen closed")
236244
<-updatesClosed
237245
return nil
238246
},

enterprise/coderd/coderd.go

+5-1
Original file line numberDiff line numberDiff line change
@@ -706,6 +706,10 @@ func derpMapper(logger slog.Logger, cfg *codersdk.DeploymentValues, proxyHealth
706706
// existing ID in the DERP map.
707707
regionID := int(startingRegionID) + int(status.Proxy.RegionID)
708708
regionCode := fmt.Sprintf("coder_%s", strings.ToLower(status.Proxy.Name))
709+
regionName := status.Proxy.DisplayName
710+
if regionName == "" {
711+
regionName = status.Proxy.Name
712+
}
709713
for _, r := range derpMap.Regions {
710714
if r.RegionID == regionID || r.RegionCode == regionCode {
711715
// 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
768772
EmbeddedRelay: false,
769773
RegionID: regionID,
770774
RegionCode: regionCode,
771-
RegionName: status.Proxy.Name,
775+
RegionName: regionName,
772776
Nodes: nodes,
773777
}
774778
}

0 commit comments

Comments
 (0)