From de4c2e4250d3071a8de7841a1cb3a63af67c63f3 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Lo=C3=AFc=20Blot?= Date: Sat, 19 Aug 2017 11:29:46 +0200 Subject: [PATCH] ServerMap saving: cleanups (#6274) * remove sector meta loading/saving from files which targets dead code (differs_from_disk is always empty) * this remove empty ServerMapSector and ClientMapSector, remove MapSector childs --- src/clientmap.cpp | 14 +-- src/map.cpp | 312 +++------------------------------------------- src/map.h | 14 +-- src/mapsector.cpp | 103 --------------- src/mapsector.h | 50 -------- 5 files changed, 23 insertions(+), 470 deletions(-) diff --git a/src/clientmap.cpp b/src/clientmap.cpp index 9c4d70f7d..3c9a6c7f4 100644 --- a/src/clientmap.cpp +++ b/src/clientmap.cpp @@ -64,20 +64,14 @@ MapSector * ClientMap::emergeSector(v2s16 p2d) { DSTACK(FUNCTION_NAME); // Check that it doesn't exist already - try{ + try { return getSectorNoGenerate(p2d); - } - catch(InvalidPositionException &e) - { + } catch(InvalidPositionException &e) { } // Create a sector - ClientMapSector *sector = new ClientMapSector(this, p2d, m_gamedef); - - { - //MutexAutoLock lock(m_sector_mutex); // Bulk comment-out - m_sectors[p2d] = sector; - } + MapSector *sector = new MapSector(this, p2d, m_gamedef); + m_sectors[p2d] = sector; return sector; } diff --git a/src/map.cpp b/src/map.cpp index 88c32bbd8..a12bbe54c 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -1211,14 +1211,6 @@ ServerMap::ServerMap(const std::string &savedir, IGameDef *gamedef, infostream<<"Please remove the map or fix it."<getId() == MAPSECTOR_SERVER); - } - catch(InvalidPositionException &e) - { + sector = createSector(p2d); + } catch (InvalidPositionException &e) { infostream<<"createBlock: createSector() failed"<getBlockNoCreateNoEx(block_y); - if(block) - { + if (block) { if(block->isDummy()) block->unDummify(); return block; @@ -1697,39 +1650,12 @@ MapBlock * ServerMap::emergeBlock(v3s16 p, bool create_blank) } if (create_blank) { - ServerMapSector *sector = createSector(v2s16(p.X, p.Z)); + MapSector *sector = createSector(v2s16(p.X, p.Z)); MapBlock *block = sector->createBlankBlock(p.Y); return block; } -#if 0 - if(allow_generate) - { - std::map modified_blocks; - MapBlock *block = generateBlock(p, modified_blocks); - if(block) - { - MapEditEvent event; - event.type = MEET_OTHER; - event.p = p; - - // Copy modified_blocks to event - for(std::map::iterator - i = modified_blocks.begin(); - i != modified_blocks.end(); ++i) - { - event.modified_blocks.insert(i->first); - } - - // Queue event - dispatchEvent(&event); - - return block; - } - } -#endif - return NULL; } @@ -1918,7 +1844,6 @@ void ServerMap::save(ModifiedState save_level) // Profile modified reasons Profiler modprofiler; - u32 sector_meta_count = 0; u32 block_count = 0; u32 block_count_all = 0; // Number of blocks in memory @@ -1926,13 +1851,7 @@ void ServerMap::save(ModifiedState save_level) bool save_started = false; for (auto §or_it : m_sectors) { - ServerMapSector *sector = (ServerMapSector*) sector_it.second; - assert(sector->getId() == MAPSECTOR_SERVER); - - if(sector->differs_from_disk || save_level == MOD_STATE_CLEAN) { - saveSectorMeta(sector); - sector_meta_count++; - } + MapSector *sector = sector_it.second; MapBlockVect blocks; sector->getBlocks(blocks); @@ -1951,12 +1870,6 @@ void ServerMap::save(ModifiedState save_level) saveBlock(block); block_count++; - - /*infostream<<"ServerMap: Written block (" - <getPos().X<<"," - <getPos().Y<<"," - <getPos().Z<<")" - < &dst) } } -void ServerMap::saveSectorMeta(ServerMapSector *sector) -{ - DSTACK(FUNCTION_NAME); - // Format used for writing - u8 version = SER_FMT_VER_HIGHEST_WRITE; - // Get destination - v2s16 pos = sector->getPos(); - std::string dir = getSectorDir(pos); - createDirs(dir); - - std::string fullpath = dir + DIR_DELIM + "meta"; - std::ostringstream ss(std::ios_base::binary); - - sector->serialize(ss, version); - - if(!fs::safeWriteToFile(fullpath, ss.str())) - throw FileNotGoodException("Cannot write sector metafile"); - - sector->differs_from_disk = false; -} - -MapSector* ServerMap::loadSectorMeta(std::string sectordir, bool save_after_load) -{ - DSTACK(FUNCTION_NAME); - // Get destination - v2s16 p2d = getSectorPos(sectordir); - - ServerMapSector *sector = NULL; - - std::string fullpath = sectordir + DIR_DELIM + "meta"; - std::ifstream is(fullpath.c_str(), std::ios_base::binary); - if (!is.good()) { - // If the directory exists anyway, it probably is in some old - // format. Just go ahead and create the sector. - if(fs::PathExists(sectordir)) - { - /*infostream<<"ServerMap::loadSectorMeta(): Sector metafile " - <differs_from_disk = false; - - return sector; -} - -bool ServerMap::loadSectorMeta(v2s16 p2d) -{ - DSTACK(FUNCTION_NAME); - - // The directory layout we're going to load from. - // 1 - original sectors/xxxxzzzz/ - // 2 - new sectors2/xxx/zzz/ - // If we load from anything but the latest structure, we will - // immediately save to the new one, and remove the old. - int loadlayout = 1; - std::string sectordir1 = getSectorDir(p2d, 1); - std::string sectordir; - if(fs::PathExists(sectordir1)) - { - sectordir = sectordir1; - } - else - { - loadlayout = 2; - sectordir = getSectorDir(p2d, 2); - } - - try{ - loadSectorMeta(sectordir, loadlayout != 2); - } - catch(InvalidFilenameException &e) - { - return false; - } - catch(FileNotGoodException &e) - { - return false; - } - catch(std::exception &e) - { - return false; - } - - return true; -} - -#if 0 -bool ServerMap::loadSectorFull(v2s16 p2d) -{ - DSTACK(FUNCTION_NAME); - - MapSector *sector = NULL; - - // The directory layout we're going to load from. - // 1 - original sectors/xxxxzzzz/ - // 2 - new sectors2/xxx/zzz/ - // If we load from anything but the latest structure, we will - // immediately save to the new one, and remove the old. - int loadlayout = 1; - std::string sectordir1 = getSectorDir(p2d, 1); - std::string sectordir; - if(fs::PathExists(sectordir1)) - { - sectordir = sectordir1; - } - else - { - loadlayout = 2; - sectordir = getSectorDir(p2d, 2); - } - - try{ - sector = loadSectorMeta(sectordir, loadlayout != 2); - } - catch(InvalidFilenameException &e) - { - return false; - } - catch(FileNotGoodException &e) - { - return false; - } - catch(std::exception &e) - { - return false; - } - - /* - Load blocks - */ - std::vector list2 = fs::GetDirListing - (sectordir); - std::vector::iterator i2; - for(i2=list2.begin(); i2!=list2.end(); i2++) - { - // We want files - if(i2->dir) - continue; - try{ - loadBlock(sectordir, i2->name, sector, loadlayout != 2); - } - catch(InvalidFilenameException &e) - { - // This catches unknown crap in directory - } - } - - if(loadlayout != 2) - { - infostream<<"Sector converted to new layout - deleting "<< - sectordir1<serialize(o, version, true); - std::string data = o.str(); - bool ret = db->saveBlock(p3d, data); + bool ret = db->saveBlock(p3d, o.str()); if (ret) { // We just wrote it to the disk so clear modified flag block->resetModified(); @@ -2414,13 +2151,11 @@ MapBlock* ServerMap::loadBlock(v3s16 blockpos) // 2 - new sectors2/xxx/zzz/ // If we load from anything but the latest structure, we will // immediately save to the new one, and remove the old. - int loadlayout = 1; std::string sectordir1 = getSectorDir(p2d, 1); std::string sectordir; if (fs::PathExists(sectordir1)) { sectordir = sectordir1; } else { - loadlayout = 2; sectordir = getSectorDir(p2d, 2); } @@ -2429,18 +2164,6 @@ MapBlock* ServerMap::loadBlock(v3s16 blockpos) */ MapSector *sector = getSectorNoGenerateNoEx(p2d); - if (sector == NULL) { - try { - sector = loadSectorMeta(sectordir, loadlayout != 2); - } catch(InvalidFilenameException &e) { - return NULL; - } catch(FileNotGoodException &e) { - return NULL; - } catch(std::exception &e) { - return NULL; - } - } - /* Make sure file exists @@ -2455,6 +2178,7 @@ MapBlock* ServerMap::loadBlock(v3s16 blockpos) */ loadBlock(sectordir, blockfilename, sector, true); } + MapBlock *block = getBlockNoCreateNoEx(blockpos); if (created_new && (block != NULL)) { std::map modified_blocks; diff --git a/src/map.h b/src/map.h index 50fffa577..cd85e1827 100644 --- a/src/map.h +++ b/src/map.h @@ -349,7 +349,7 @@ public: - Check disk (doesn't load blocks) - Create blank one */ - ServerMapSector *createSector(v2s16 p); + MapSector *createSector(v2s16 p); bool saoPositionOverLimit(const v3f &p); @@ -418,18 +418,6 @@ public: MapgenParams *getMapgenParams(); - /*void saveChunkMeta(); - void loadChunkMeta();*/ - - // The sector mutex should be locked when calling most of these - - // This only saves sector-specific data such as the heightmap - // (no MapBlocks) - // DEPRECATED? Sectors have no metadata anymore. - void saveSectorMeta(ServerMapSector *sector); - MapSector* loadSectorMeta(std::string dirname, bool save_after_load); - bool loadSectorMeta(v2s16 p2d); - bool saveBlock(MapBlock *block); static bool saveBlock(MapBlock *block, MapDatabase *db); // This will generate a sector with getSector if not found. diff --git a/src/mapsector.cpp b/src/mapsector.cpp index c6832a012..3eefa5410 100644 --- a/src/mapsector.cpp +++ b/src/mapsector.cpp @@ -128,106 +128,3 @@ void MapSector::getBlocks(MapBlockVect &dest) dest.push_back(block.second); } } - -/* - ServerMapSector -*/ - -ServerMapSector::ServerMapSector(Map *parent, v2s16 pos, IGameDef *gamedef): - MapSector(parent, pos, gamedef) -{ -} - -void ServerMapSector::serialize(std::ostream &os, u8 version) -{ - if(!ser_ver_supported(version)) - throw VersionMismatchException("ERROR: MapSector format not supported"); - - /* - [0] u8 serialization version - + heightmap data - */ - - // Server has both of these, no need to support not having them. - //assert(m_objects != NULL); - - // Write version - os.write((char*)&version, 1); - - /* - Add stuff here, if needed - */ - -} - -ServerMapSector* ServerMapSector::deSerialize( - std::istream &is, - Map *parent, - v2s16 p2d, - std::map & sectors, - IGameDef *gamedef - ) -{ - /* - [0] u8 serialization version - + heightmap data - */ - - /* - Read stuff - */ - - // Read version - u8 version = SER_FMT_VER_INVALID; - is.read((char*)&version, 1); - - if(!ser_ver_supported(version)) - throw VersionMismatchException("ERROR: MapSector format not supported"); - - /* - Add necessary reading stuff here - */ - - /* - Get or create sector - */ - - ServerMapSector *sector = NULL; - - std::map::iterator n = sectors.find(p2d); - - if(n != sectors.end()) - { - warningstream<<"deSerializing existent sectors not supported " - "at the moment, because code hasn't been tested." - <second; - assert(sector->getId() == MAPSECTOR_SERVER); - return (ServerMapSector*)sector; - } - - sector = new ServerMapSector(parent, p2d, gamedef); - sectors[p2d] = sector; - - /* - Set stuff in sector - */ - - // Nothing here - - return sector; -} - -#ifndef SERVER -/* - ClientMapSector -*/ - -ClientMapSector::ClientMapSector(Map *parent, v2s16 pos, IGameDef *gamedef): - MapSector(parent, pos, gamedef) -{ -} -#endif // !SERVER - -//END diff --git a/src/mapsector.h b/src/mapsector.h index b0ed9c88c..dede364f6 100644 --- a/src/mapsector.h +++ b/src/mapsector.h @@ -43,8 +43,6 @@ public: MapSector(Map *parent, v2s16 pos, IGameDef *gamedef); virtual ~MapSector(); - virtual u32 getId() const = 0; - void deleteBlocks(); v2s16 getPos() @@ -64,9 +62,6 @@ public: bool empty() const { return m_blocks.empty(); } - // Always false at the moment, because sector contains no metadata. - bool differs_from_disk = false; - protected: // The pile of MapBlocks @@ -89,48 +84,3 @@ protected: MapBlock *getBlockBuffered(s16 y); }; - -class ServerMapSector : public MapSector -{ -public: - ServerMapSector(Map *parent, v2s16 pos, IGameDef *gamedef); - ~ServerMapSector() = default; - - u32 getId() const - { - return MAPSECTOR_SERVER; - } - - /* - These functions handle metadata. - They do not handle blocks. - */ - - void serialize(std::ostream &os, u8 version); - - static ServerMapSector* deSerialize( - std::istream &is, - Map *parent, - v2s16 p2d, - std::map & sectors, - IGameDef *gamedef - ); - -private: -}; - -#ifndef SERVER -class ClientMapSector : public MapSector -{ -public: - ClientMapSector(Map *parent, v2s16 pos, IGameDef *gamedef); - ~ClientMapSector() = default; - - u32 getId() const - { - return MAPSECTOR_CLIENT; - } - -private: -}; -#endif -- 2.25.1