Skip to content

Commit b54e641

Browse files
committed
refactor: optimize peer caching to store unique peers across all topics and improve logging
1 parent 2659090 commit b54e641

File tree

2 files changed

+25
-10
lines changed

2 files changed

+25
-10
lines changed

client.go

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,7 @@ func (c *Client) Subscribe(topic string) <-chan Message {
234234
c.logger.Infof("[CONNECTED] Topic peer %s [%s] %s", peerID.String(), name, addr)
235235

236236
// Save peer cache
237-
c.savePeerCache(t)
237+
c.savePeerCache()
238238
return
239239
}
240240
}
@@ -479,16 +479,27 @@ func (c *Client) receiveMessages(sub *pubsub.Subscription, topic *pubsub.Topic,
479479
}
480480
}
481481

482-
func (c *Client) savePeerCache(topic *pubsub.Topic) {
482+
func (c *Client) savePeerCache() {
483483
// Skip if peer caching is disabled
484484
if c.config.PeerCacheFile == "" {
485485
return
486486
}
487487

488-
topicPeers := topic.ListPeers()
488+
// Collect unique peers from all topics
489+
peerSet := make(map[peer.ID]struct{})
490+
491+
c.mu.RLock()
492+
for _, topic := range c.topics {
493+
topicPeers := topic.ListPeers()
494+
for _, p := range topicPeers {
495+
peerSet[p] = struct{}{}
496+
}
497+
}
498+
c.mu.RUnlock()
499+
489500
var cachedPeers []cachedPeer
490501

491-
for _, p := range topicPeers {
502+
for p := range peerSet {
492503
if conns := c.host.Network().ConnsToPeer(p); len(conns) > 0 {
493504
var addrs []string
494505
for _, conn := range conns {
@@ -592,11 +603,13 @@ func connectToCachedPeers(ctx context.Context, h host.Host, cachedPeers []cached
592603
Addrs: maddrs,
593604
}
594605

595-
go func(ai peer.AddrInfo) {
606+
go func(ai peer.AddrInfo, name string) {
596607
if err := h.Connect(ctx, ai); err == nil {
597-
logger.Infof("Reconnected to cached peer: %s", ai.ID.String())
608+
logger.Infof("Reconnected to cached peer: %s [%s]", name, ai.ID.String())
609+
} else {
610+
logger.Warnf("Failed to reconnect to cached peer %s [%s]: %v", name, ai.ID.String(), err)
598611
}
599-
}(addrInfo)
612+
}(addrInfo, cp.Name)
600613
}
601614
}
602615

example/main.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -161,13 +161,15 @@ func main() {
161161
case <-ticker.C:
162162
peers := client.GetPeers()
163163
if len(peers) > 0 {
164-
logger.Infof("\n=== Connected Peers: %d ===\n", len(peers))
164+
sb := strings.Builder{}
165+
sb.WriteString(fmt.Sprintf("\n=== Connected Peers: %d ===\n", len(peers)))
165166
for _, peer := range peers {
166-
logger.Infof(" - %s [%s]\n", peer.Name, peer.ID)
167+
sb.WriteString(fmt.Sprintf(" - %s [%s]\n", peer.Name, peer.ID))
167168
for _, addr := range peer.Addrs {
168-
logger.Infof(" %s\n", addr)
169+
sb.WriteString(fmt.Sprintf(" %s\n", addr))
169170
}
170171
}
172+
logger.Infof("%s", sb.String())
171173
}
172174
}
173175
}

0 commit comments

Comments
 (0)