Add emerge queue limit configuration
authorkwolekr <mirrorisim@gmail.com>
Fri, 15 Feb 2013 01:36:58 +0000 (20:36 -0500)
committerkwolekr <mirrorisim@gmail.com>
Tue, 26 Feb 2013 03:59:17 +0000 (22:59 -0500)
src/defaultsettings.cpp
src/emerge.cpp
src/emerge.h

index 610dd65a48bb706ed40164f2c08d9cd60391dd5f..f18e9b1e0524e08951dc4c6d1f05bae7bd67f1fa 100644 (file)
@@ -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");
index e2b9e5a6c0d1f57699ab48f6ed007dc5f280bfee..b785c8688cf1d9645fe67db43ce4f1cd37c34396 100644 (file)
@@ -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);
index 5f73dcd861ec62e3627c3f013f34ab78d65cba63..b4461ae6140d04cea452e2e6ef29bf6a559b8fe7 100644 (file)
@@ -45,15 +45,20 @@ struct BlockEmergeData {
 class EmergeManager {
 public:
        std::map<std::string, MapgenFactory *> 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<v3s16, BlockEmergeData *> blocks_enqueued;
        std::map<u16, u16> peer_queue_count;
-       Mapgen *mapgen;
-       EmergeThread *emergethread;
 
        //biome manager
        BiomeDefManager *biomedef;