MCPcopy Create free account
hub / github.com/coder/coder / installServers

Method installServers

agent/x/agentmcp/manager.go:661–710  ·  view source on GitHub ↗

installServers builds the new server map from diff.keep and the connected list, falling back to diff.prev when a connect failed. Returns old entries replaced by successful connects (caller closes them). Acquires and releases m.mu.

(
	wanted map[string]ServerConfig,
	diff *serverDiff,
	connected []connectedServer,
	snap map[string]fileSnapshot,
)

Source from the content-addressed store, hash-verified

659// Returns old entries replaced by successful connects (caller
660// closes them). Acquires and releases m.mu.
661func (m *Manager) installServers(
662 wanted map[string]ServerConfig,
663 diff *serverDiff,
664 connected []connectedServer,
665 snap map[string]fileSnapshot,
666) ([]*serverEntry, error) {
667 m.mu.Lock()
668 defer m.mu.Unlock()
669
670 if m.closed {
671 for _, cs := range connected {
672 _ = cs.client.Close()
673 }
674 return nil, ErrManagerClosed
675 }
676
677 newConnected := make(map[string]connectedServer, len(connected))
678 for _, cs := range connected {
679 newConnected[cs.name] = cs
680 }
681
682 newServers := make(map[string]*serverEntry, len(wanted))
683 for name, entry := range diff.keep {
684 newServers[name] = entry
685 }
686
687 var replaced []*serverEntry
688 for name, wantCfg := range wanted {
689 if _, kept := diff.keep[name]; kept {
690 continue
691 }
692 if cs, ok := newConnected[wantCfg.Name]; ok {
693 newServers[wantCfg.Name] = &serverEntry{
694 config: cs.config,
695 client: cs.client,
696 }
697 if prev, existed := diff.prev[wantCfg.Name]; existed {
698 replaced = append(replaced, prev)
699 }
700 } else if prev, existed := diff.prev[wantCfg.Name]; existed {
701 // Connect failed; retain the old client.
702 newServers[wantCfg.Name] = prev
703 }
704 }
705
706 m.servers = newServers
707 m.serverGen++
708 m.snapshot = snap
709 return replaced, nil
710}
711
712// captureSnapshot stats each path and returns the current
713// snapshot map.

Callers 1

doReloadMethod · 0.95

Calls 3

CloseMethod · 0.65
LockMethod · 0.45
UnlockMethod · 0.45

Tested by

no test coverage detected