From 76217939e05bdd8d06fa7113902a74b02deeb915 Mon Sep 17 00:00:00 2001 From: kwolekr Date: Thu, 14 Feb 2013 20:36:58 -0500 Subject: [PATCH] Add emerge queue limit configuration --- src/defaultsettings.cpp | 4 ++++ src/emerge.cpp | 17 +++++++---------- src/emerge.h | 13 +++++++++---- 3 files changed, 20 insertions(+), 14 deletions(-) diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp index 610dd65a4..f18e9b1e0 100644 --- a/src/defaultsettings.cpp +++ b/src/defaultsettings.cpp @@ -184,6 +184,10 @@ void set_default_settings(Settings *settings) settings->setDefault("congestion_control_min_rate", "10"); settings->setDefault("remote_media", ""); settings->setDefault("debug_log_level", "0"); + settings->setDefault("emergequeue_limit_total", "256"); + settings->setDefault("emergequeue_limit_diskonly", "5"); + settings->setDefault("emergequeue_limit_generate", "1"); + // physics stuff settings->setDefault("movement_acceleration_default", "3"); settings->setDefault("movement_acceleration_air", "2"); diff --git a/src/emerge.cpp b/src/emerge.cpp index e2b9e5a6c..b785c8688 100644 --- a/src/emerge.cpp +++ b/src/emerge.cpp @@ -49,6 +49,10 @@ EmergeManager::EmergeManager(IGameDef *gamedef, BiomeDefManager *bdef) { this->params = NULL; this->mapgen = NULL; + qlimit_total = g_settings->getU16("emergequeue_limit_total"); + qlimit_diskonly = g_settings->getU16("emergequeue_limit_diskonly"); + qlimit_generate = g_settings->getU16("emergequeue_limit_generate"); + queuemutex.Init(); emergethread = new EmergeThread((Server *)gamedef); } @@ -98,23 +102,16 @@ bool EmergeManager::enqueueBlockEmerge(u16 peer_id, v3s16 p, bool allow_generate if (allow_generate) flags |= BLOCK_EMERGE_ALLOWGEN; - //TODO: - // add logic to select which emergethread to add it to - // - one with the least queue contents? - // - if a queue is too full, move onto another one - // - use the peer id sometime - { JMutexAutoLock queuelock(queuemutex); count = blocks_enqueued.size(); - u16 queuelimit_total = 256; - if (count >= queuelimit_total) + if (count >= qlimit_total) return false; count = peer_queue_count[peer_id]; - u16 queuelimit_peer = allow_generate ? 1 : 5; - if (count >= queuelimit_peer) + u16 qlimit_peer = allow_generate ? qlimit_generate : qlimit_diskonly; + if (count >= qlimit_peer) return false; iter = blocks_enqueued.find(p); diff --git a/src/emerge.h b/src/emerge.h index 5f73dcd86..b4461ae61 100644 --- a/src/emerge.h +++ b/src/emerge.h @@ -45,15 +45,20 @@ struct BlockEmergeData { class EmergeManager { public: std::map mglist; - + + Mapgen *mapgen; + EmergeThread *emergethread; + //settings MapgenParams *params; - + u16 qlimit_total; + u16 qlimit_diskonly; + u16 qlimit_generate; + + //block emerge queue data structures JMutex queuemutex; std::map blocks_enqueued; std::map peer_queue_count; - Mapgen *mapgen; - EmergeThread *emergethread; //biome manager BiomeDefManager *biomedef;