From e1305601af22f9be32b9741fca41417d8b595b66 Mon Sep 17 00:00:00 2001 From: Calvin Kim Date: Wed, 17 Jul 2024 14:40:55 +0900 Subject: [PATCH] blockchain: increase periodic flush interval The periodic flush intervals were set to 5 minutes previously which on average means that the node will flush every block when the node is caught up to the tip. This put an overhead on the node after the node is caught up beyond the last checkpointed block as it'll start calling the periodic flush function. So while the node is still performing ibd, it'll be flushing every 5 minutes, hurting performance. Changing this value to 48 hours doesn't hurt the node too much as the average worst case would be 288 blocks to reindex which is quick. For a decent computer, 48 hours should be enough time to sync all the blocks beyond the last checkpointed block as well. If not, 1-2 flushes don't hurt as much as flushing every 5 minutes. --- blockchain/utxocache.go | 6 +++++- blockchain/utxocache_test.go | 4 ++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/blockchain/utxocache.go b/blockchain/utxocache.go index 550d8c56..074a2783 100644 --- a/blockchain/utxocache.go +++ b/blockchain/utxocache.go @@ -183,7 +183,11 @@ const ( // when the flush mode FlushPeriodic is used. This is used when the initial // block download is complete and it's useful to flush periodically in case // of unforeseen shutdowns. - utxoFlushPeriodicInterval = time.Minute * 5 + // + // We'll be flushing every 2 days. Re-indexing 288 blocks is pretty + // quick and it won't put too much overhead on the flushes while the + // node is caught up. + utxoFlushPeriodicInterval = time.Hour * 48 ) // FlushMode is used to indicate the different urgency types for a flush. diff --git a/blockchain/utxocache_test.go b/blockchain/utxocache_test.go index 0f410cc9..90bff084 100644 --- a/blockchain/utxocache_test.go +++ b/blockchain/utxocache_test.go @@ -586,8 +586,8 @@ func TestUtxoCacheFlush(t *testing.T) { len(outPoints1), cache.cachedEntries.length()) } - // Arbitrarily set the last flush time to 6 minutes ago. - cache.lastFlushTime = time.Now().Add(-time.Minute * 6) + // Arbitrarily set the last flush time to 49 hours ago. + cache.lastFlushTime = time.Now().Add(-time.Hour * 49) // Attempt to flush with flush periodic. Should flush now. err = chain.db.Update(func(dbTx database.Tx) error {