@ -14,9 +14,6 @@ static const std::string RC_FILE_EXT = ".signed";
namespace llarp
{
NodeDB : : Entry : : Entry ( RemoteRC value ) : rc ( std : : move ( value ) ) , insertedAt ( llarp : : time_now_ms ( ) )
{ }
static void
EnsureSkiplist ( fs : : path nodedbDir )
{
@ -72,8 +69,8 @@ namespace llarp
// make copy of all rcs
std : : vector < RemoteRC > copy ;
for ( const auto & item : entrie s)
copy . push_back ( item . second .rc );
for ( const auto & item : known_rc s)
copy . push_back ( item . second );
// flush them to disk in one big job
// TODO: split this up? idk maybe some day...
@ -212,10 +209,10 @@ namespace llarp
return true ;
}
// validate signature and purge entrie s with invalid signatures
// validate signature and purge known_rc s with invalid signatures
// load ones with valid signatures
if ( rc . verify ( ) )
entrie s. emplace ( rc . router_id ( ) , rc ) ;
known_rc s. emplace ( rc . router_id ( ) , rc ) ;
else
purge . emplace ( f ) ;
@ -240,33 +237,33 @@ namespace llarp
return ;
router . loop ( ) - > call ( [ this ] ( ) {
for ( const auto & item : entrie s)
item . second . rc. write( get_path_by_pubkey ( item . first ) ) ;
for ( const auto & item : known_rc s)
item . second . write( get_path_by_pubkey ( item . first ) ) ;
} ) ;
}
bool
NodeDB : : has_router ( RouterID pk ) const
{
return entrie s. count ( pk ) ;
return known_rc s. count ( pk ) ;
}
std : : optional < RemoteRC >
NodeDB : : get_rc ( RouterID pk ) const
{
const auto itr = entrie s. find ( pk ) ;
const auto itr = known_rc s. find ( pk ) ;
if ( itr = = entrie s. end ( ) )
if ( itr = = known_rc s. end ( ) )
return std : : nullopt ;
return itr - > second .rc ;
return itr - > second ;
}
void
NodeDB : : remove_router ( RouterID pk )
{
router . loop ( ) - > call ( [ this , pk ] ( ) {
entrie s. erase ( pk ) ;
known_rc s. erase ( pk ) ;
remove_many_from_disk_async ( { pk } ) ;
} ) ;
}
@ -274,22 +271,9 @@ namespace llarp
void
NodeDB : : remove_stale_rcs ( std : : unordered_set < RouterID > keep , llarp_time_t cutoff )
{
router . loop ( ) - > call ( [ this , keep , cutoff ] ( ) {
std : : unordered_set < RouterID > removed ;
auto itr = entries . begin ( ) ;
while ( itr ! = entries . end ( ) )
{
if ( itr - > second . insertedAt < cutoff and keep . count ( itr - > second . rc . router_id ( ) ) = = 0 )
{
removed . insert ( itr - > second . rc . router_id ( ) ) ;
itr = entries . erase ( itr ) ;
}
else
+ + itr ;
}
if ( not removed . empty ( ) )
remove_many_from_disk_async ( std : : move ( removed ) ) ;
} ) ;
( void ) keep ;
( void ) cutoff ;
// TODO: handling of "stale" is pending change, removing here for now.
}
bool
@ -298,22 +282,22 @@ namespace llarp
const auto & rid = rc . router_id ( ) ;
if ( not want_rc ( rid ) )
return false ;
entrie s. erase ( rid ) ;
entrie s. emplace ( rid , rc) ;
known_rc s. erase ( rid ) ;
known_rc s. emplace ( rid , std: : move ( rc) ) ;
return true ;
}
size_t
NodeDB : : num_loaded ( ) const
{
return router . loop ( ) - > call_get ( [ this ] ( ) { return entrie s. size ( ) ; } ) ;
return router . loop ( ) - > call_get ( [ this ] ( ) { return known_rc s. size ( ) ; } ) ;
}
bool
NodeDB : : put_rc_if_newer ( RemoteRC rc )
{
auto itr = entrie s. find ( rc . router_id ( ) ) ;
if ( itr = = entrie s. end ( ) or itr - > second . rc . other_is_newer ( rc ) )
auto itr = known_rc s. find ( rc . router_id ( ) ) ;
if ( itr = = known_rc s. end ( ) or itr - > second . other_is_newer ( rc ) )
{
return put_rc ( std : : move ( rc ) ) ;
}
@ -364,10 +348,10 @@ namespace llarp
return router . loop ( ) - > call_get ( [ this , location , numRouters ] ( ) - > std : : vector < RemoteRC > {
std : : vector < const RemoteRC * > all ;
all . reserve ( entrie s. size ( ) ) ;
for ( auto & entry : entrie s)
all . reserve ( known_rc s. size ( ) ) ;
for ( auto & entry : known_rc s)
{
all . push_back ( & entry . second .rc );
all . push_back ( & entry . second );
}
auto it_mid = numRouters < all . size ( ) ? all . begin ( ) + numRouters : all . end ( ) ;