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");
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);
}
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);
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;