Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Revert "Verify database connection on interval (#9665)"
Fixes #10113

This reverts commit 5c588f8.
  • Loading branch information
rubenwardy committed Jul 7, 2020
1 parent dc6318b commit 6e4d8de
Show file tree
Hide file tree
Showing 9 changed files with 35 additions and 67 deletions.
40 changes: 17 additions & 23 deletions src/database/database-postgresql.cpp
Expand Up @@ -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()
Expand Down Expand Up @@ -157,7 +151,7 @@ void Database_PostgreSQL::createTableIfNotExists(const std::string &table_name,

void Database_PostgreSQL::beginSave()
{
pingDatabase();
verifyDatabase();
checkResults(PQexec(m_conn, "BEGIN;"));
}

Expand Down Expand Up @@ -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);
Expand All @@ -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);
Expand All @@ -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);
Expand All @@ -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);
Expand Down Expand Up @@ -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);
Expand All @@ -462,7 +456,7 @@ void PlayerDatabasePostgreSQL::savePlayer(RemotePlayer *player)
if (!sao)
return;

pingDatabase();
verifyDatabase();

v3f pos = sao->getBasePosition();
std::string pitch = ftos(sao->getLookPitch());
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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);
Expand All @@ -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);

Expand Down
8 changes: 2 additions & 6 deletions src/database/database-postgresql.h
Expand Up @@ -32,14 +32,13 @@ class Database_PostgreSQL: public Database
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)
Expand Down Expand Up @@ -84,6 +83,7 @@ class Database_PostgreSQL: public Database
}

void createTableIfNotExists(const std::string &table_name, const std::string &definition);
void verifyDatabase();

// Database initialization
void connectToDatabase();
Expand Down Expand Up @@ -114,8 +114,6 @@ class MapDatabasePostgreSQL : private Database_PostgreSQL, public MapDatabase
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);
Expand All @@ -135,8 +133,6 @@ class PlayerDatabasePostgreSQL : private Database_PostgreSQL, public PlayerDatab
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);
Expand Down
26 changes: 13 additions & 13 deletions src/database/database-sqlite3.cpp
Expand Up @@ -121,15 +121,15 @@ 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);
}

void Database_SQLite3::endSave()
{
pingDatabase();
verifyDatabase();
SQLRES(sqlite3_step(m_stmt_end), SQLITE_DONE,
"Failed to commit SQLite3 transaction");
sqlite3_reset(m_stmt_end);
Expand Down Expand Up @@ -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;

Expand Down Expand Up @@ -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);

Expand All @@ -263,7 +263,7 @@ bool MapDatabaseSQLite3::deleteBlock(const v3s16 &pos)

bool MapDatabaseSQLite3::saveBlock(const v3s16 &pos, const std::string &data)
{
pingDatabase();
verifyDatabase();

#ifdef __ANDROID__
/**
Expand All @@ -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);

Expand All @@ -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)));
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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) {
Expand Down Expand Up @@ -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));
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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);
Expand All @@ -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));
Expand Down
12 changes: 3 additions & 9 deletions src/database/database-sqlite3.h
Expand Up @@ -36,13 +36,13 @@ class Database_SQLite3 : public Database
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
{
Expand Down Expand Up @@ -146,8 +146,6 @@ class MapDatabaseSQLite3 : private Database_SQLite3, public MapDatabase
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);
Expand Down Expand Up @@ -175,8 +173,6 @@ class PlayerDatabaseSQLite3 : private Database_SQLite3, public PlayerDatabase
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);
Expand Down Expand Up @@ -212,8 +208,6 @@ class AuthDatabaseSQLite3 : private Database_SQLite3, public AuthDatabase
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);
Expand Down
4 changes: 0 additions & 4 deletions src/database/database.h
Expand Up @@ -32,7 +32,6 @@ class Database
virtual void beginSave() = 0;
virtual void endSave() = 0;
virtual bool initialized() const { return true; }
virtual void pingDatabase() {}
};

class MapDatabase : public Database
Expand All @@ -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;
Expand All @@ -86,5 +83,4 @@ class AuthDatabase
virtual bool deleteAuth(const std::string &name) = 0;
virtual void listNames(std::vector<std::string> &res) = 0;
virtual void reload() = 0;
virtual void pingDatabase() {}
};
5 changes: 0 additions & 5 deletions src/map.cpp
Expand Up @@ -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();
Expand Down
1 change: 0 additions & 1 deletion src/map.h
Expand Up @@ -387,7 +387,6 @@ class ServerMap : public Map
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();
Expand Down
5 changes: 0 additions & 5 deletions src/serverenvironment.cpp
Expand Up @@ -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
*/
Expand Down
1 change: 0 additions & 1 deletion src/serverenvironment.h
Expand Up @@ -436,7 +436,6 @@ class ServerEnvironment : public Environment
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;
Expand Down

0 comments on commit 6e4d8de

Please sign in to comment.