From 6e4d8de10442eecf71ba36ad015872a135a53338 Mon Sep 17 00:00:00 2001 From: rubenwardy Date: Tue, 7 Jul 2020 17:50:52 +0100 Subject: [PATCH] Revert "Verify database connection on interval (#9665)" Fixes #10113 This reverts commit 5c588f89e79e02cba392abe3d00688772321f88b. --- src/database/database-postgresql.cpp | 36 ++++++++++++---------------- src/database/database-postgresql.h | 8 ++----- src/database/database-sqlite3.cpp | 26 ++++++++++---------- src/database/database-sqlite3.h | 12 +++------- src/database/database.h | 4 ---- src/map.cpp | 5 ---- src/map.h | 1 - src/serverenvironment.cpp | 5 ---- src/serverenvironment.h | 1 - 9 files changed, 33 insertions(+), 65 deletions(-) diff --git a/src/database/database-postgresql.cpp b/src/database/database-postgresql.cpp index ca750b466..6acfb5937 100644 --- a/src/database/database-postgresql.cpp +++ b/src/database/database-postgresql.cpp @@ -90,19 +90,13 @@ void Database_PostgreSQL::connectToDatabase() initStatements(); } -void Database_PostgreSQL::pingDatabase() +void Database_PostgreSQL::verifyDatabase() { - // Verify DB connection with ping - try { - ping(); - } catch (const DatabaseException &e) { - // If ping failed, show the error and try reconnect - PQreset(m_conn); + if (PQstatus(m_conn) == CONNECTION_OK) + return; - errorstream << e.what() << std::endl - << "Reconnecting to database " << m_connect_string << std::endl; - connectToDatabase(); - } + PQreset(m_conn); + ping(); } void Database_PostgreSQL::ping() @@ -157,7 +151,7 @@ void Database_PostgreSQL::createTableIfNotExists(const std::string &table_name, void Database_PostgreSQL::beginSave() { - pingDatabase(); + verifyDatabase(); checkResults(PQexec(m_conn, "BEGIN;")); } @@ -238,7 +232,7 @@ bool MapDatabasePostgreSQL::saveBlock(const v3s16 &pos, const std::string &data) return false; } - pingDatabase(); + verifyDatabase(); s32 x, y, z; x = htonl(pos.X); @@ -262,7 +256,7 @@ bool MapDatabasePostgreSQL::saveBlock(const v3s16 &pos, const std::string &data) void MapDatabasePostgreSQL::loadBlock(const v3s16 &pos, std::string *block) { - pingDatabase(); + verifyDatabase(); s32 x, y, z; x = htonl(pos.X); @@ -286,7 +280,7 @@ void MapDatabasePostgreSQL::loadBlock(const v3s16 &pos, std::string *block) bool MapDatabasePostgreSQL::deleteBlock(const v3s16 &pos) { - pingDatabase(); + verifyDatabase(); s32 x, y, z; x = htonl(pos.X); @@ -304,7 +298,7 @@ bool MapDatabasePostgreSQL::deleteBlock(const v3s16 &pos) void MapDatabasePostgreSQL::listAllLoadableBlocks(std::vector &dst) { - pingDatabase(); + verifyDatabase(); PGresult *results = execPrepared("list_all_loadable_blocks", 0, NULL, NULL, NULL, false, false); @@ -446,7 +440,7 @@ void PlayerDatabasePostgreSQL::initStatements() bool PlayerDatabasePostgreSQL::playerDataExists(const std::string &playername) { - pingDatabase(); + verifyDatabase(); const char *values[] = { playername.c_str() }; PGresult *results = execPrepared("load_player", 1, values, false); @@ -462,7 +456,7 @@ void PlayerDatabasePostgreSQL::savePlayer(RemotePlayer *player) if (!sao) return; - pingDatabase(); + verifyDatabase(); v3f pos = sao->getBasePosition(); std::string pitch = ftos(sao->getLookPitch()); @@ -546,7 +540,7 @@ void PlayerDatabasePostgreSQL::savePlayer(RemotePlayer *player) bool PlayerDatabasePostgreSQL::loadPlayer(RemotePlayer *player, PlayerSAO *sao) { sanity_check(sao); - pingDatabase(); + verifyDatabase(); const char *values[] = { player->getName() }; PGresult *results = execPrepared("load_player", 1, values, false, false); @@ -621,7 +615,7 @@ bool PlayerDatabasePostgreSQL::removePlayer(const std::string &name) if (!playerDataExists(name)) return false; - pingDatabase(); + verifyDatabase(); const char *values[] = { name.c_str() }; execPrepared("remove_player", 1, values); @@ -631,7 +625,7 @@ bool PlayerDatabasePostgreSQL::removePlayer(const std::string &name) void PlayerDatabasePostgreSQL::listPlayers(std::vector &res) { - pingDatabase(); + verifyDatabase(); PGresult *results = execPrepared("load_player_list", 0, NULL, false); diff --git a/src/database/database-postgresql.h b/src/database/database-postgresql.h index 340f0a7b8..409e62fe0 100644 --- a/src/database/database-postgresql.h +++ b/src/database/database-postgresql.h @@ -32,14 +32,13 @@ public: Database_PostgreSQL(const std::string &connect_string); ~Database_PostgreSQL(); - virtual void pingDatabase(); - void beginSave(); void endSave(); void rollback(); bool initialized() const; + protected: // Conversion helpers inline int pg_to_int(PGresult *res, int row, int col) @@ -84,6 +83,7 @@ protected: } void createTableIfNotExists(const std::string &table_name, const std::string &definition); + void verifyDatabase(); // Database initialization void connectToDatabase(); @@ -114,8 +114,6 @@ public: MapDatabasePostgreSQL(const std::string &connect_string); virtual ~MapDatabasePostgreSQL() = default; - virtual void pingDatabase() { Database_PostgreSQL::pingDatabase(); } - bool saveBlock(const v3s16 &pos, const std::string &data); void loadBlock(const v3s16 &pos, std::string *block); bool deleteBlock(const v3s16 &pos); @@ -135,8 +133,6 @@ public: PlayerDatabasePostgreSQL(const std::string &connect_string); virtual ~PlayerDatabasePostgreSQL() = default; - virtual void pingDatabase() { Database_PostgreSQL::pingDatabase(); } - void savePlayer(RemotePlayer *player); bool loadPlayer(RemotePlayer *player, PlayerSAO *sao); bool removePlayer(const std::string &name); diff --git a/src/database/database-sqlite3.cpp b/src/database/database-sqlite3.cpp index 116096f68..4560743b9 100644 --- a/src/database/database-sqlite3.cpp +++ b/src/database/database-sqlite3.cpp @@ -121,7 +121,7 @@ Database_SQLite3::Database_SQLite3(const std::string &savedir, const std::string void Database_SQLite3::beginSave() { - pingDatabase(); + verifyDatabase(); SQLRES(sqlite3_step(m_stmt_begin), SQLITE_DONE, "Failed to start SQLite3 transaction"); sqlite3_reset(m_stmt_begin); @@ -129,7 +129,7 @@ void Database_SQLite3::beginSave() void Database_SQLite3::endSave() { - pingDatabase(); + verifyDatabase(); SQLRES(sqlite3_step(m_stmt_end), SQLITE_DONE, "Failed to commit SQLite3 transaction"); sqlite3_reset(m_stmt_end); @@ -171,7 +171,7 @@ void Database_SQLite3::openDatabase() "Failed to enable sqlite3 foreign key support"); } -void Database_SQLite3::pingDatabase() +void Database_SQLite3::verifyDatabase() { if (m_initialized) return; @@ -247,7 +247,7 @@ inline void MapDatabaseSQLite3::bindPos(sqlite3_stmt *stmt, const v3s16 &pos, in bool MapDatabaseSQLite3::deleteBlock(const v3s16 &pos) { - pingDatabase(); + verifyDatabase(); bindPos(m_stmt_delete, pos); @@ -263,7 +263,7 @@ bool MapDatabaseSQLite3::deleteBlock(const v3s16 &pos) bool MapDatabaseSQLite3::saveBlock(const v3s16 &pos, const std::string &data) { - pingDatabase(); + verifyDatabase(); #ifdef __ANDROID__ /** @@ -290,7 +290,7 @@ bool MapDatabaseSQLite3::saveBlock(const v3s16 &pos, const std::string &data) void MapDatabaseSQLite3::loadBlock(const v3s16 &pos, std::string *block) { - pingDatabase(); + verifyDatabase(); bindPos(m_stmt_read, pos); @@ -311,7 +311,7 @@ void MapDatabaseSQLite3::loadBlock(const v3s16 &pos, std::string *block) void MapDatabaseSQLite3::listAllLoadableBlocks(std::vector &dst) { - pingDatabase(); + verifyDatabase(); while (sqlite3_step(m_stmt_list) == SQLITE_ROW) dst.push_back(getIntegerAsBlock(sqlite3_column_int64(m_stmt_list, 0))); @@ -439,7 +439,7 @@ void PlayerDatabaseSQLite3::initStatements() bool PlayerDatabaseSQLite3::playerDataExists(const std::string &name) { - pingDatabase(); + verifyDatabase(); str_to_sqlite(m_stmt_player_load, 1, name); bool res = (sqlite3_step(m_stmt_player_load) == SQLITE_ROW); sqlite3_reset(m_stmt_player_load); @@ -536,7 +536,7 @@ void PlayerDatabaseSQLite3::savePlayer(RemotePlayer *player) bool PlayerDatabaseSQLite3::loadPlayer(RemotePlayer *player, PlayerSAO *sao) { - pingDatabase(); + verifyDatabase(); str_to_sqlite(m_stmt_player_load, 1, player->getName()); if (sqlite3_step(m_stmt_player_load) != SQLITE_ROW) { @@ -600,7 +600,7 @@ bool PlayerDatabaseSQLite3::removePlayer(const std::string &name) void PlayerDatabaseSQLite3::listPlayers(std::vector &res) { - pingDatabase(); + verifyDatabase(); while (sqlite3_step(m_stmt_player_list) == SQLITE_ROW) res.push_back(sqlite_to_string(m_stmt_player_list, 0)); @@ -673,7 +673,7 @@ void AuthDatabaseSQLite3::initStatements() bool AuthDatabaseSQLite3::getAuth(const std::string &name, AuthEntry &res) { - pingDatabase(); + verifyDatabase(); str_to_sqlite(m_stmt_read, 1, name); if (sqlite3_step(m_stmt_read) != SQLITE_ROW) { sqlite3_reset(m_stmt_read); @@ -735,7 +735,7 @@ bool AuthDatabaseSQLite3::createAuth(AuthEntry &authEntry) bool AuthDatabaseSQLite3::deleteAuth(const std::string &name) { - pingDatabase(); + verifyDatabase(); str_to_sqlite(m_stmt_delete, 1, name); sqlite3_vrfy(sqlite3_step(m_stmt_delete), SQLITE_DONE); @@ -749,7 +749,7 @@ bool AuthDatabaseSQLite3::deleteAuth(const std::string &name) void AuthDatabaseSQLite3::listNames(std::vector &res) { - pingDatabase(); + verifyDatabase(); while (sqlite3_step(m_stmt_list_names) == SQLITE_ROW) { res.push_back(sqlite_to_string(m_stmt_list_names, 0)); diff --git a/src/database/database-sqlite3.h b/src/database/database-sqlite3.h index 647eddf7a..d7202a918 100644 --- a/src/database/database-sqlite3.h +++ b/src/database/database-sqlite3.h @@ -36,13 +36,13 @@ public: void beginSave(); void endSave(); - // Open and initialize the database if needed - virtual void pingDatabase(); - bool initialized() const { return m_initialized; } protected: Database_SQLite3(const std::string &savedir, const std::string &dbname); + // Open and initialize the database if needed + void verifyDatabase(); + // Convertors inline void str_to_sqlite(sqlite3_stmt *s, int iCol, const std::string &str) const { @@ -146,8 +146,6 @@ public: MapDatabaseSQLite3(const std::string &savedir); virtual ~MapDatabaseSQLite3(); - virtual void pingDatabase() { Database_SQLite3::pingDatabase(); } - bool saveBlock(const v3s16 &pos, const std::string &data); void loadBlock(const v3s16 &pos, std::string *block); bool deleteBlock(const v3s16 &pos); @@ -175,8 +173,6 @@ public: PlayerDatabaseSQLite3(const std::string &savedir); virtual ~PlayerDatabaseSQLite3(); - virtual void pingDatabase() { Database_SQLite3::pingDatabase(); } - void savePlayer(RemotePlayer *player); bool loadPlayer(RemotePlayer *player, PlayerSAO *sao); bool removePlayer(const std::string &name); @@ -212,8 +208,6 @@ public: AuthDatabaseSQLite3(const std::string &savedir); virtual ~AuthDatabaseSQLite3(); - virtual void pingDatabase() { Database_SQLite3::pingDatabase(); } - virtual bool getAuth(const std::string &name, AuthEntry &res); virtual bool saveAuth(const AuthEntry &authEntry); virtual bool createAuth(AuthEntry &authEntry); diff --git a/src/database/database.h b/src/database/database.h index 47605a07e..b7d551935 100644 --- a/src/database/database.h +++ b/src/database/database.h @@ -32,7 +32,6 @@ public: virtual void beginSave() = 0; virtual void endSave() = 0; virtual bool initialized() const { return true; } - virtual void pingDatabase() {} }; class MapDatabase : public Database @@ -58,8 +57,6 @@ class PlayerDatabase public: virtual ~PlayerDatabase() = default; - virtual void pingDatabase() {} - virtual void savePlayer(RemotePlayer *player) = 0; virtual bool loadPlayer(RemotePlayer *player, PlayerSAO *sao) = 0; virtual bool removePlayer(const std::string &name) = 0; @@ -86,5 +83,4 @@ public: virtual bool deleteAuth(const std::string &name) = 0; virtual void listNames(std::vector &res) = 0; virtual void reload() = 0; - virtual void pingDatabase() {} }; diff --git a/src/map.cpp b/src/map.cpp index 7c776b070..b9ab7c066 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -1907,11 +1907,6 @@ MapDatabase *ServerMap::createDatabase( throw BaseException(std::string("Database backend ") + name + " not supported."); } -void ServerMap::pingDatabase() -{ - dbase->pingDatabase(); -} - void ServerMap::beginSave() { dbase->beginSave(); diff --git a/src/map.h b/src/map.h index 77ee4da9e..4d9847063 100644 --- a/src/map.h +++ b/src/map.h @@ -387,7 +387,6 @@ public: Database functions */ static MapDatabase *createDatabase(const std::string &name, const std::string &savedir, Settings &conf); - void pingDatabase(); // Call these before and after saving of blocks void beginSave(); diff --git a/src/serverenvironment.cpp b/src/serverenvironment.cpp index 2c6a39ee3..ad2ffc9a4 100644 --- a/src/serverenvironment.cpp +++ b/src/serverenvironment.cpp @@ -1228,11 +1228,6 @@ void ServerEnvironment::step(float dtime) } } - if (m_database_check_interval.step(dtime, 10.0f)) { - m_auth_database->pingDatabase(); - m_player_database->pingDatabase(); - m_map->pingDatabase(); - } /* Manage active block list */ diff --git a/src/serverenvironment.h b/src/serverenvironment.h index 4b453d39a..af742e290 100644 --- a/src/serverenvironment.h +++ b/src/serverenvironment.h @@ -436,7 +436,6 @@ private: IntervalLimiter m_object_management_interval; // List of active blocks ActiveBlockList m_active_blocks; - IntervalLimiter m_database_check_interval; IntervalLimiter m_active_blocks_management_interval; IntervalLimiter m_active_block_modifier_interval; IntervalLimiter m_active_blocks_nodemetadata_interval;