MCPcopy Index your code
hub / github.com/coder/coder / SetAddresses

Method SetAddresses

enterprise/derpmesh/derpmesh.go:48–86  ·  view source on GitHub ↗

SetAddresses performs a diff of the incoming addresses and adds or removes DERP clients from the mesh. Connect is only used for testing to ensure DERPs are meshed before exchanging messages. nolint:revive

(addresses []string, connect bool)

Source from the content-addressed store, hash-verified

46// exchanging messages.
47// nolint:revive
48func (m *Mesh) SetAddresses(addresses []string, connect bool) {
49 total := make(map[string]struct{}, 0)
50 for _, address := range addresses {
51 addressURL, err := url.Parse(address)
52 if err != nil {
53 m.logger.Error(m.ctx, "unable to parse DERP address", slog.F("address", address), slog.Error(err))
54 continue
55 }
56 derpURL, err := addressURL.Parse("/derp")
57 if err != nil {
58 m.logger.Error(m.ctx, "unable to parse DERP address with /derp", slog.F("address", addressURL.String()), slog.Error(err))
59 continue
60 }
61 address = derpURL.String()
62
63 total[address] = struct{}{}
64 added, err := m.addAddress(address, connect)
65 if err != nil {
66 m.logger.Error(m.ctx, "failed to add address", slog.F("address", address), slog.Error(err))
67 continue
68 }
69 if added {
70 m.logger.Debug(m.ctx, "added mesh address", slog.F("address", address))
71 }
72 }
73
74 m.mutex.Lock()
75 for address := range m.active {
76 _, found := total[address]
77 if found {
78 continue
79 }
80 removed := m.removeAddress(address)
81 if removed {
82 m.logger.Debug(m.ctx, "removed mesh address", slog.F("address", address))
83 }
84 }
85 m.mutex.Unlock()
86}
87
88// addAddress begins meshing with a new address. It returns false if the address is already being meshed with.
89// It's expected that this is a full HTTP address with a path.

Callers 3

updateEntitlementsMethod · 0.45
handleRegisterMethod · 0.45
TestDERPMeshFunction · 0.45

Calls 7

addAddressMethod · 0.95
removeAddressMethod · 0.95
ParseMethod · 0.65
ErrorMethod · 0.45
StringMethod · 0.45
LockMethod · 0.45
UnlockMethod · 0.45

Tested by 1

TestDERPMeshFunction · 0.36