From: kwolekr Date: Fri, 15 Feb 2013 01:36:58 +0000 (-0500) Subject: Add emerge queue limit configuration X-Git-Url: http://81.2.79.47:8989/gitweb/?a=commitdiff_plain;h=76217939e05bdd8d06fa7113902a74b02deeb915;p=zefram%2Fminetest%2Fminetest_engine.git Add emerge queue limit configuration --- diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp index 610dd65a..f18e9b1e 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 e2b9e5a6..b785c868 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 5f73dcd8..b4461ae6 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;