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

Method storeMappingLocked

tailnet/peer.go:87–122  ·  view source on GitHub ↗
(
	id uuid.UUID, n *proto.Node, k proto.CoordinateResponse_PeerUpdate_Kind, reason string,
)

Source from the content-addressed store, hash-verified

85var errNoResp = xerrors.New("no response needed")
86
87func (p *peer) storeMappingLocked(
88 id uuid.UUID, n *proto.Node, k proto.CoordinateResponse_PeerUpdate_Kind, reason string,
89) (
90 *proto.CoordinateResponse_PeerUpdate, error,
91) {
92 p.logger.Debug(context.Background(), "got updated mapping",
93 slog.F("from_id", id), slog.F("kind", k), slog.F("reason", reason))
94 sn, ok := p.sent[id]
95 switch {
96 case !ok && (k == proto.CoordinateResponse_PeerUpdate_LOST || k == proto.CoordinateResponse_PeerUpdate_DISCONNECTED):
97 // we don't need to send a lost/disconnect update if we've never sent an update about this peer
98 return nil, errNoResp
99 case !ok && k == proto.CoordinateResponse_PeerUpdate_NODE:
100 p.sent[id] = n
101 case ok && k == proto.CoordinateResponse_PeerUpdate_LOST:
102 delete(p.sent, id)
103 case ok && k == proto.CoordinateResponse_PeerUpdate_DISCONNECTED:
104 delete(p.sent, id)
105 case ok && k == proto.CoordinateResponse_PeerUpdate_NODE:
106 eq, err := sn.Equal(n)
107 if err != nil {
108 p.logger.Critical(context.Background(), "failed to compare nodes", slog.F("old", sn), slog.F("new", n))
109 return nil, xerrors.Errorf("failed to compare nodes: %s", sn.String())
110 }
111 if eq {
112 return nil, errNoResp
113 }
114 p.sent[id] = n
115 }
116 return &proto.CoordinateResponse_PeerUpdate{
117 Id: id[:],
118 Kind: k,
119 Node: n,
120 Reason: reason,
121 }, nil
122}
123
124func (p *peer) reqLoop(ctx context.Context, logger slog.Logger, handler func(context.Context, *peer, *proto.CoordinateRequest) error) error {
125 for {

Callers 2

updateMappingLockedMethod · 0.95

Calls 3

EqualMethod · 0.45
ErrorfMethod · 0.45
StringMethod · 0.45

Tested by

no test coverage detected