"discovery: mDNS/DNS-SD peer discovery; dynamic upstream management"
Allows ncro instances to discover each other dynamically without static configuration and enables a peer-to-peer style (hello funny cube) mesh where nodes share cached builds locally instead of all hitting upstream caches. Signed-off-by: NotAShelf <raf@notashelf.dev> Change-Id: I7d723876c6816cb6aaaf3fe14cb24a426a6a6964
This commit is contained in:
parent
7aee098f1c
commit
5fc3b2883b
6 changed files with 336 additions and 3 deletions
|
|
@ -232,3 +232,24 @@ func (p *Prober) getOrCreate(url string) *UpstreamHealth {
|
|||
}
|
||||
return h
|
||||
}
|
||||
|
||||
// Adds a new upstream dynamically (e.g., discovered via mDNS).
|
||||
// Thread-safe. Logs the addition and begins probing.
|
||||
func (p *Prober) AddUpstream(url string, priority int) {
|
||||
p.mu.Lock()
|
||||
defer p.mu.Unlock()
|
||||
if _, exists := p.table[url]; exists {
|
||||
return
|
||||
}
|
||||
p.table[url] = &UpstreamHealth{URL: url, Priority: priority, Status: StatusActive}
|
||||
// Trigger an immediate probe in background
|
||||
go p.ProbeUpstream(url)
|
||||
}
|
||||
|
||||
// Removes an upstream from tracking (e.g., when a peer leaves the network).
|
||||
// Thread-safe. No-op if upstream was not known.
|
||||
func (p *Prober) RemoveUpstream(url string) {
|
||||
p.mu.Lock()
|
||||
defer p.mu.Unlock()
|
||||
delete(p.table, url)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue