mirror of
https://github.com/minetest/minetest.git
synced 2024-11-23 16:13:46 +01:00
Allow an optional readonly base database (#7544)
* Allow an optional readonly base database * Added basic documentation
This commit is contained in:
parent
9537cfd3f8
commit
7454deb1bf
@ -98,8 +98,15 @@ See Player File Format below.
|
|||||||
world.mt
|
world.mt
|
||||||
---------
|
---------
|
||||||
World metadata.
|
World metadata.
|
||||||
Example content (added indentation):
|
Example content (added indentation and - explanations):
|
||||||
gameid = mesetint
|
gameid = mesetint - name of the game
|
||||||
|
enable_damage = true - whether damage is enabled or not
|
||||||
|
creative_mode = false - whether creative mode is enabled or not
|
||||||
|
backend = sqlite3 - which DB backend to use for blocks (sqlite3, dummy, leveldb, redis, postgresql)
|
||||||
|
player_backend = sqlite3 - which DB backend to use for player data
|
||||||
|
readonly_backend = sqlite3 - optionally readonly seed DB (DB file _must_ be located in "readonly" subfolder)
|
||||||
|
server_announce = false - whether the server is publicly announced or not
|
||||||
|
load_mod_<mod> = false - whether <mod> is to be loaded in this world
|
||||||
|
|
||||||
Player File Format
|
Player File Format
|
||||||
===================
|
===================
|
||||||
|
14
src/map.cpp
14
src/map.cpp
@ -1159,7 +1159,10 @@ ServerMap::ServerMap(const std::string &savedir, IGameDef *gamedef,
|
|||||||
}
|
}
|
||||||
std::string backend = conf.get("backend");
|
std::string backend = conf.get("backend");
|
||||||
dbase = createDatabase(backend, savedir, conf);
|
dbase = createDatabase(backend, savedir, conf);
|
||||||
|
if (conf.exists("readonly_backend")) {
|
||||||
|
std::string readonly_dir = savedir + DIR_DELIM + "readonly";
|
||||||
|
dbase_ro = createDatabase(conf.get("readonly_backend"), readonly_dir, conf);
|
||||||
|
}
|
||||||
if (!conf.updateConfigFile(conf_path.c_str()))
|
if (!conf.updateConfigFile(conf_path.c_str()))
|
||||||
errorstream << "ServerMap::ServerMap(): Failed to update world.mt!" << std::endl;
|
errorstream << "ServerMap::ServerMap(): Failed to update world.mt!" << std::endl;
|
||||||
|
|
||||||
@ -1230,6 +1233,8 @@ ServerMap::~ServerMap()
|
|||||||
Close database if it was opened
|
Close database if it was opened
|
||||||
*/
|
*/
|
||||||
delete dbase;
|
delete dbase;
|
||||||
|
if (dbase_ro)
|
||||||
|
delete dbase_ro;
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
/*
|
/*
|
||||||
@ -1869,6 +1874,8 @@ void ServerMap::listAllLoadableBlocks(std::vector<v3s16> &dst)
|
|||||||
<< "all blocks that are stored in flat files." << std::endl;
|
<< "all blocks that are stored in flat files." << std::endl;
|
||||||
}
|
}
|
||||||
dbase->listAllLoadableBlocks(dst);
|
dbase->listAllLoadableBlocks(dst);
|
||||||
|
if (dbase_ro)
|
||||||
|
dbase_ro->listAllLoadableBlocks(dst);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ServerMap::listAllLoadedBlocks(std::vector<v3s16> &dst)
|
void ServerMap::listAllLoadedBlocks(std::vector<v3s16> &dst)
|
||||||
@ -2107,6 +2114,11 @@ MapBlock* ServerMap::loadBlock(v3s16 blockpos)
|
|||||||
dbase->loadBlock(blockpos, &ret);
|
dbase->loadBlock(blockpos, &ret);
|
||||||
if (!ret.empty()) {
|
if (!ret.empty()) {
|
||||||
loadBlock(&ret, blockpos, createSector(p2d), false);
|
loadBlock(&ret, blockpos, createSector(p2d), false);
|
||||||
|
} else if (dbase_ro) {
|
||||||
|
dbase_ro->loadBlock(blockpos, &ret);
|
||||||
|
if (!ret.empty()) {
|
||||||
|
loadBlock(&ret, blockpos, createSector(p2d), false);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// Not found in database, try the files
|
// Not found in database, try the files
|
||||||
|
|
||||||
|
@ -469,6 +469,7 @@ private:
|
|||||||
*/
|
*/
|
||||||
bool m_map_metadata_changed = true;
|
bool m_map_metadata_changed = true;
|
||||||
MapDatabase *dbase = nullptr;
|
MapDatabase *dbase = nullptr;
|
||||||
|
MapDatabase *dbase_ro = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user