periodic nodedb flush

pull/1036/head
Jeff Becker 4 years ago
parent c7b94f32be
commit b56a3528db
No known key found for this signature in database
GPG Key ID: F357B3B42F6F9B05

@ -214,6 +214,7 @@ llarp_nodedb::Load(const fs::path &path)
if(l > 0)
loaded += l;
}
m_NextSaveToDisk = llarp::time_now_ms() + m_SaveInterval;
return loaded;
}
@ -243,10 +244,19 @@ llarp_nodedb::SaveAll()
}
}
bool
llarp_nodedb::ShouldSaveToDisk(llarp_time_t now) const
{
if(now == 0)
now = llarp::time_now_ms();
return m_NextSaveToDisk > 0 && m_NextSaveToDisk <= now;
}
void
llarp_nodedb::AsyncFlushToDisk()
{
disk->addJob(std::bind(&llarp_nodedb::SaveAll, this));
m_NextSaveToDisk = llarp::time_now_ms() + m_SaveInterval;
}
ssize_t

@ -52,6 +52,10 @@ struct llarp_nodedb
std::shared_ptr< llarp::thread::ThreadPool > disk;
mutable llarp::util::Mutex access; // protects entries
/// time for next save to disk event, 0 if never happened
llarp_time_t m_NextSaveToDisk = 0;
/// how often to save to disk
const llarp_time_t m_SaveInterval = 60 * 5 * 1000;
struct NetDBEntry
{
@ -67,6 +71,10 @@ struct llarp_nodedb
NetDBMap_t entries GUARDED_BY(access);
fs::path nodePath;
/// return true if we should save our nodedb to disk
bool
ShouldSaveToDisk(llarp_time_t now = 0) const;
bool
Remove(const llarp::RouterID &pk) LOCKS_EXCLUDED(access);

@ -727,12 +727,17 @@ namespace llarp
if(rpcCaller)
rpcCaller->Tick(now);
// save profiles async
// save profiles
if(routerProfiling().ShouldSave(now))
{
diskworker()->addJob(
[&]() { routerProfiling().Save(routerProfilesFile.c_str()); });
}
// save nodedb
if(nodedb()->ShouldSaveToDisk(now))
{
nodedb()->AsyncFlushToDisk();
}
// get connected peers
std::set< dht::Key_t > peersWeHave;

Loading…
Cancel
Save