aboutsummaryrefslogtreecommitdiff
path: root/src/database
diff options
context:
space:
mode:
authorrubenwardy <rw@rubenwardy.com>2020-07-07 17:50:52 +0100
committerrubenwardy <rw@rubenwardy.com>2020-07-07 17:50:52 +0100
commit6e4d8de10442eecf71ba36ad015872a135a53338 (patch)
tree7d8ccc917c4dd86d33d6c0428e18d87e3c15d003 /src/database
parentdc6318b84aa8c079330b2adc711113f7d4b55961 (diff)
downloadminetest-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.cpp40
-rw-r--r--src/database/database-postgresql.h8
-rw-r--r--src/database/database-sqlite3.cpp26
-rw-r--r--src/database/database-sqlite3.h12
-rw-r--r--src/database/database.h4
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() {}
};