@@ -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
0 commit comments