Default to saving stuff more often to minimize lag caused by a single save
authorPerttu Ahola <celeron55@gmail.com>
Mon, 21 Nov 2011 12:13:28 +0000 (14:13 +0200)
committerPerttu Ahola <celeron55@gmail.com>
Tue, 29 Nov 2011 17:13:50 +0000 (19:13 +0200)
src/defaultsettings.cpp
src/map.cpp
src/server.cpp

index 2cb69b11620d128b23a6a2513231f41cc50e0e1e..20a6dc0a8a71dcc689c2d8e7307a0f276d74b02c 100644 (file)
@@ -106,8 +106,8 @@ void set_default_settings(Settings *settings)
        settings->setDefault("max_block_generate_distance", "5");
        settings->setDefault("time_send_interval", "20");
        settings->setDefault("time_speed", "96");
-       settings->setDefault("server_unload_unused_data_timeout", "60");
-       settings->setDefault("server_map_save_interval", "10");
+       settings->setDefault("server_unload_unused_data_timeout", "19");
+       settings->setDefault("server_map_save_interval", "1.238");
        settings->setDefault("full_block_send_enable_min_time_from_building", "2.0");
        settings->setDefault("enable_experimental", "false");
 }
index 13f2a0e984d0ab13e951fa07255de4b8b2738ab2..7d5bd700d7855d437cd373597833ffc0d004b4f3 100644 (file)
@@ -2836,7 +2836,9 @@ void ServerMap::save(bool only_changed)
        u32 block_count = 0;
        u32 block_count_all = 0; // Number of blocks in memory
        
-       beginSave();
+       // Don't do anything with sqlite unless something is really saved
+       bool save_started = false;
+
        core::map<v2s16, MapSector*>::Iterator i = m_sectors.getIterator();
        for(; i.atEnd() == false; i++)
        {
@@ -2852,7 +2854,6 @@ void ServerMap::save(bool only_changed)
                sector->getBlocks(blocks);
                core::list<MapBlock*>::Iterator j;
                
-               //sqlite3_exec(m_database, "BEGIN;", NULL, NULL, NULL);
                for(j=blocks.begin(); j!=blocks.end(); j++)
                {
                        MapBlock *block = *j;
@@ -2862,7 +2863,14 @@ void ServerMap::save(bool only_changed)
                        if(block->getModified() >= MOD_STATE_WRITE_NEEDED 
                                        || only_changed == false)
                        {
+                               // Lazy beginSave()
+                               if(!save_started){
+                                       beginSave();
+                                       save_started = true;
+                               }
+
                                modprofiler.add(block->getModifiedReason(), 1);
+
                                saveBlock(block);
                                block_count++;
 
@@ -2872,10 +2880,10 @@ void ServerMap::save(bool only_changed)
                                                <<block->getPos().Z<<")"
                                                <<std::endl;*/
                        }
-               //sqlite3_exec(m_database, "COMMIT;", NULL, NULL, NULL);
                }
        }
-       endSave();
+       if(save_started)
+               endSave();
 
        /*
                Only print if something happened or saved whole map
index 207f35dcb8300678e554839c45fb8fe9b26af07c..dd4a93c78fb6c2c09e86213235f94dcbef6159a5 100644 (file)
@@ -1300,7 +1300,7 @@ void Server::AsyncRunStep()
                m_env->step(dtime);
        }
                
-       const float map_timer_and_unload_dtime = 5.15;
+       const float map_timer_and_unload_dtime = 2.92;
        if(m_map_timer_and_unload_interval.step(dtime, map_timer_and_unload_dtime))
        {
                JMutexAutoLock lock(m_env_mutex);