@@ -14,9 +14,9 @@ use std::{
1414 task:: { Poll , Waker } ,
1515} ;
1616
17+ use hashlink:: LruCache ;
1718use libp2p_core:: { Multiaddr , PeerId } ;
1819use libp2p_swarm:: { behaviour:: ConnectionEstablished , DialError , FromSwarm } ;
19- use lru:: LruCache ;
2020
2121use super :: Store ;
2222
@@ -317,15 +317,15 @@ pub struct PeerRecord<T> {
317317impl < T > PeerRecord < T > {
318318 pub ( crate ) fn new ( cap : NonZeroUsize ) -> Self {
319319 Self {
320- addresses : LruCache :: new ( cap) ,
320+ addresses : LruCache :: new ( cap. get ( ) ) ,
321321 custom_data : None ,
322322 }
323323 }
324324
325325 /// Iterate over all addresses. More recently-used address comes first.
326326 /// Does not change the order.
327327 pub fn addresses ( & self ) -> impl Iterator < Item = & Multiaddr > {
328- self . addresses . iter ( ) . map ( |( addr, _) | addr)
328+ self . addresses . iter ( ) . rev ( ) . map ( |( addr, _) | addr)
329329 }
330330
331331 /// Update the address in the LRU cache, promote it to the front if it exists,
@@ -335,14 +335,13 @@ impl<T> PeerRecord<T> {
335335 pub fn add_address ( & mut self , address : & Multiaddr , is_permanent : bool ) -> bool {
336336 if let Some ( was_permanent) = self . addresses . get ( address) {
337337 if !* was_permanent && is_permanent {
338- self . addresses
339- . get_or_insert ( address. clone ( ) , || is_permanent) ;
338+ self . addresses . insert ( address. clone ( ) , is_permanent) ;
340339 }
341- return false ;
340+ false
341+ } else {
342+ self . addresses . insert ( address. clone ( ) , is_permanent) ;
343+ true
342344 }
343- self . addresses
344- . get_or_insert ( address. clone ( ) , || is_permanent) ;
345- true
346345 }
347346
348347 /// Remove the address in the LRU cache regardless of its position.
@@ -353,7 +352,7 @@ impl<T> PeerRecord<T> {
353352 if !force && self . addresses . peek ( address) == Some ( & true ) {
354353 return false ;
355354 }
356- self . addresses . pop ( address) . is_some ( )
355+ self . addresses . remove ( address) . is_some ( )
357356 }
358357
359358 pub fn get_custom_data ( & self ) -> Option < & T > {
@@ -399,14 +398,14 @@ mod test {
399398 store. add_address ( & peer, & addr1) ;
400399 store. add_address ( & peer, & addr2) ;
401400 store. add_address ( & peer, & addr3) ;
402- assert ! (
401+ assert_eq ! (
403402 store
404403 . records
405404 . get( & peer)
406405 . expect( "peer to be in the store" )
407406 . addresses( )
408- . collect:: <Vec <_>>( )
409- == vec![ & addr3, & addr2, & addr1]
407+ . collect:: <Vec <_>>( ) ,
408+ vec![ & addr3, & addr2, & addr1]
410409 ) ;
411410 store. add_address ( & peer, & addr1) ;
412411 assert ! (
0 commit comments