diff options
author | rubenwardy <rw@rubenwardy.com> | 2020-07-07 17:50:52 +0100 |
---|---|---|
committer | rubenwardy <rw@rubenwardy.com> | 2020-07-07 17:50:52 +0100 |
commit | 6e4d8de10442eecf71ba36ad015872a135a53338 (patch) | |
tree | 7d8ccc917c4dd86d33d6c0428e18d87e3c15d003 /src/database | |
parent | dc6318b84aa8c079330b2adc711113f7d4b55961 (diff) | |
download | minetest-6e4d8de10442eecf71ba36ad015872a135a53338.tar.gz minetest-6e4d8de10442eecf71ba36ad015872a135a53338.tar.bz2 minetest-6e4d8de10442eecf71ba36ad015872a135a53338.zip |
Revert "Verify database connection on interval (#9665)"
Fixes #10113
This reverts commit 5c588f89e79e02cba392abe3d00688772321f88b.
Diffstat (limited to 'src/database')
-rw-r--r-- | src/database/database-postgresql.cpp | 40 | ||||
-rw-r--r-- | src/database/database-postgresql.h | 8 | ||||
-rw-r--r-- | src/database/database-sqlite3.cpp | 26 | ||||
-rw-r--r-- | src/database/database-sqlite3.h | 12 | ||||
-rw-r--r-- | src/database/database.h | 4 |
5 files changed, 35 insertions, 55 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() -{ - // Verify DB connection with ping - try { - ping(); - } catch (const DatabaseException &e) { - // If ping failed, show the error and try reconnect - PQreset(m_conn); - - errorstream << e.what() << std::endl - << "Reconnecting to database " << m_connect_string << std::endl; - connectToDatabase(); - } +void Database_PostgreSQL::verifyDatabase() +{ + if (PQstatus(m_conn) == CONNECTION_OK) + return; + + 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<v3s16> &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<std::string> &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<v3s16> &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<std::string> &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<std::string> &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<std::string> &res) = 0; virtual void reload() = 0; - virtual void pingDatabase() {} }; |