Skip to content

Commit 6e4d8de

Browse files
committedJul 7, 2020
Revert "Verify database connection on interval (#9665)"
Fixes #10113 This reverts commit 5c588f8.
1 parent dc6318b commit 6e4d8de

9 files changed

+35
-67
lines changed
 

Diff for: ‎src/database/database-postgresql.cpp

+17-23
Original file line numberDiff line numberDiff line change
@@ -90,19 +90,13 @@ void Database_PostgreSQL::connectToDatabase()
9090
initStatements();
9191
}
9292

93-
void Database_PostgreSQL::pingDatabase()
94-
{
95-
// Verify DB connection with ping
96-
try {
97-
ping();
98-
} catch (const DatabaseException &e) {
99-
// If ping failed, show the error and try reconnect
100-
PQreset(m_conn);
101-
102-
errorstream << e.what() << std::endl
103-
<< "Reconnecting to database " << m_connect_string << std::endl;
104-
connectToDatabase();
105-
}
93+
void Database_PostgreSQL::verifyDatabase()
94+
{
95+
if (PQstatus(m_conn) == CONNECTION_OK)
96+
return;
97+
98+
PQreset(m_conn);
99+
ping();
106100
}
107101

108102
void Database_PostgreSQL::ping()
@@ -157,7 +151,7 @@ void Database_PostgreSQL::createTableIfNotExists(const std::string &table_name,
157151

158152
void Database_PostgreSQL::beginSave()
159153
{
160-
pingDatabase();
154+
verifyDatabase();
161155
checkResults(PQexec(m_conn, "BEGIN;"));
162156
}
163157

@@ -238,7 +232,7 @@ bool MapDatabasePostgreSQL::saveBlock(const v3s16 &pos, const std::string &data)
238232
return false;
239233
}
240234

241-
pingDatabase();
235+
verifyDatabase();
242236

243237
s32 x, y, z;
244238
x = htonl(pos.X);
@@ -262,7 +256,7 @@ bool MapDatabasePostgreSQL::saveBlock(const v3s16 &pos, const std::string &data)
262256

263257
void MapDatabasePostgreSQL::loadBlock(const v3s16 &pos, std::string *block)
264258
{
265-
pingDatabase();
259+
verifyDatabase();
266260

267261
s32 x, y, z;
268262
x = htonl(pos.X);
@@ -286,7 +280,7 @@ void MapDatabasePostgreSQL::loadBlock(const v3s16 &pos, std::string *block)
286280

287281
bool MapDatabasePostgreSQL::deleteBlock(const v3s16 &pos)
288282
{
289-
pingDatabase();
283+
verifyDatabase();
290284

291285
s32 x, y, z;
292286
x = htonl(pos.X);
@@ -304,7 +298,7 @@ bool MapDatabasePostgreSQL::deleteBlock(const v3s16 &pos)
304298

305299
void MapDatabasePostgreSQL::listAllLoadableBlocks(std::vector<v3s16> &dst)
306300
{
307-
pingDatabase();
301+
verifyDatabase();
308302

309303
PGresult *results = execPrepared("list_all_loadable_blocks", 0,
310304
NULL, NULL, NULL, false, false);
@@ -446,7 +440,7 @@ void PlayerDatabasePostgreSQL::initStatements()
446440

447441
bool PlayerDatabasePostgreSQL::playerDataExists(const std::string &playername)
448442
{
449-
pingDatabase();
443+
verifyDatabase();
450444

451445
const char *values[] = { playername.c_str() };
452446
PGresult *results = execPrepared("load_player", 1, values, false);
@@ -462,7 +456,7 @@ void PlayerDatabasePostgreSQL::savePlayer(RemotePlayer *player)
462456
if (!sao)
463457
return;
464458

465-
pingDatabase();
459+
verifyDatabase();
466460

467461
v3f pos = sao->getBasePosition();
468462
std::string pitch = ftos(sao->getLookPitch());
@@ -546,7 +540,7 @@ void PlayerDatabasePostgreSQL::savePlayer(RemotePlayer *player)
546540
bool PlayerDatabasePostgreSQL::loadPlayer(RemotePlayer *player, PlayerSAO *sao)
547541
{
548542
sanity_check(sao);
549-
pingDatabase();
543+
verifyDatabase();
550544

551545
const char *values[] = { player->getName() };
552546
PGresult *results = execPrepared("load_player", 1, values, false, false);
@@ -621,7 +615,7 @@ bool PlayerDatabasePostgreSQL::removePlayer(const std::string &name)
621615
if (!playerDataExists(name))
622616
return false;
623617

624-
pingDatabase();
618+
verifyDatabase();
625619

626620
const char *values[] = { name.c_str() };
627621
execPrepared("remove_player", 1, values);
@@ -631,7 +625,7 @@ bool PlayerDatabasePostgreSQL::removePlayer(const std::string &name)
631625

632626
void PlayerDatabasePostgreSQL::listPlayers(std::vector<std::string> &res)
633627
{
634-
pingDatabase();
628+
verifyDatabase();
635629

636630
PGresult *results = execPrepared("load_player_list", 0, NULL, false);
637631

Diff for: ‎src/database/database-postgresql.h

+2-6
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,13 @@ class Database_PostgreSQL: public Database
3232
Database_PostgreSQL(const std::string &connect_string);
3333
~Database_PostgreSQL();
3434

35-
virtual void pingDatabase();
36-
3735
void beginSave();
3836
void endSave();
3937
void rollback();
4038

4139
bool initialized() const;
4240

41+
4342
protected:
4443
// Conversion helpers
4544
inline int pg_to_int(PGresult *res, int row, int col)
@@ -84,6 +83,7 @@ class Database_PostgreSQL: public Database
8483
}
8584

8685
void createTableIfNotExists(const std::string &table_name, const std::string &definition);
86+
void verifyDatabase();
8787

8888
// Database initialization
8989
void connectToDatabase();
@@ -114,8 +114,6 @@ class MapDatabasePostgreSQL : private Database_PostgreSQL, public MapDatabase
114114
MapDatabasePostgreSQL(const std::string &connect_string);
115115
virtual ~MapDatabasePostgreSQL() = default;
116116

117-
virtual void pingDatabase() { Database_PostgreSQL::pingDatabase(); }
118-
119117
bool saveBlock(const v3s16 &pos, const std::string &data);
120118
void loadBlock(const v3s16 &pos, std::string *block);
121119
bool deleteBlock(const v3s16 &pos);
@@ -135,8 +133,6 @@ class PlayerDatabasePostgreSQL : private Database_PostgreSQL, public PlayerDatab
135133
PlayerDatabasePostgreSQL(const std::string &connect_string);
136134
virtual ~PlayerDatabasePostgreSQL() = default;
137135

138-
virtual void pingDatabase() { Database_PostgreSQL::pingDatabase(); }
139-
140136
void savePlayer(RemotePlayer *player);
141137
bool loadPlayer(RemotePlayer *player, PlayerSAO *sao);
142138
bool removePlayer(const std::string &name);

Diff for: ‎src/database/database-sqlite3.cpp

+13-13
Original file line numberDiff line numberDiff line change
@@ -121,15 +121,15 @@ Database_SQLite3::Database_SQLite3(const std::string &savedir, const std::string
121121

122122
void Database_SQLite3::beginSave()
123123
{
124-
pingDatabase();
124+
verifyDatabase();
125125
SQLRES(sqlite3_step(m_stmt_begin), SQLITE_DONE,
126126
"Failed to start SQLite3 transaction");
127127
sqlite3_reset(m_stmt_begin);
128128
}
129129

130130
void Database_SQLite3::endSave()
131131
{
132-
pingDatabase();
132+
verifyDatabase();
133133
SQLRES(sqlite3_step(m_stmt_end), SQLITE_DONE,
134134
"Failed to commit SQLite3 transaction");
135135
sqlite3_reset(m_stmt_end);
@@ -171,7 +171,7 @@ void Database_SQLite3::openDatabase()
171171
"Failed to enable sqlite3 foreign key support");
172172
}
173173

174-
void Database_SQLite3::pingDatabase()
174+
void Database_SQLite3::verifyDatabase()
175175
{
176176
if (m_initialized) return;
177177

@@ -247,7 +247,7 @@ inline void MapDatabaseSQLite3::bindPos(sqlite3_stmt *stmt, const v3s16 &pos, in
247247

248248
bool MapDatabaseSQLite3::deleteBlock(const v3s16 &pos)
249249
{
250-
pingDatabase();
250+
verifyDatabase();
251251

252252
bindPos(m_stmt_delete, pos);
253253

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

264264
bool MapDatabaseSQLite3::saveBlock(const v3s16 &pos, const std::string &data)
265265
{
266-
pingDatabase();
266+
verifyDatabase();
267267

268268
#ifdef __ANDROID__
269269
/**
@@ -290,7 +290,7 @@ bool MapDatabaseSQLite3::saveBlock(const v3s16 &pos, const std::string &data)
290290

291291
void MapDatabaseSQLite3::loadBlock(const v3s16 &pos, std::string *block)
292292
{
293-
pingDatabase();
293+
verifyDatabase();
294294

295295
bindPos(m_stmt_read, pos);
296296

@@ -311,7 +311,7 @@ void MapDatabaseSQLite3::loadBlock(const v3s16 &pos, std::string *block)
311311

312312
void MapDatabaseSQLite3::listAllLoadableBlocks(std::vector<v3s16> &dst)
313313
{
314-
pingDatabase();
314+
verifyDatabase();
315315

316316
while (sqlite3_step(m_stmt_list) == SQLITE_ROW)
317317
dst.push_back(getIntegerAsBlock(sqlite3_column_int64(m_stmt_list, 0)));
@@ -439,7 +439,7 @@ void PlayerDatabaseSQLite3::initStatements()
439439

440440
bool PlayerDatabaseSQLite3::playerDataExists(const std::string &name)
441441
{
442-
pingDatabase();
442+
verifyDatabase();
443443
str_to_sqlite(m_stmt_player_load, 1, name);
444444
bool res = (sqlite3_step(m_stmt_player_load) == SQLITE_ROW);
445445
sqlite3_reset(m_stmt_player_load);
@@ -536,7 +536,7 @@ void PlayerDatabaseSQLite3::savePlayer(RemotePlayer *player)
536536

537537
bool PlayerDatabaseSQLite3::loadPlayer(RemotePlayer *player, PlayerSAO *sao)
538538
{
539-
pingDatabase();
539+
verifyDatabase();
540540

541541
str_to_sqlite(m_stmt_player_load, 1, player->getName());
542542
if (sqlite3_step(m_stmt_player_load) != SQLITE_ROW) {
@@ -600,7 +600,7 @@ bool PlayerDatabaseSQLite3::removePlayer(const std::string &name)
600600

601601
void PlayerDatabaseSQLite3::listPlayers(std::vector<std::string> &res)
602602
{
603-
pingDatabase();
603+
verifyDatabase();
604604

605605
while (sqlite3_step(m_stmt_player_list) == SQLITE_ROW)
606606
res.push_back(sqlite_to_string(m_stmt_player_list, 0));
@@ -673,7 +673,7 @@ void AuthDatabaseSQLite3::initStatements()
673673

674674
bool AuthDatabaseSQLite3::getAuth(const std::string &name, AuthEntry &res)
675675
{
676-
pingDatabase();
676+
verifyDatabase();
677677
str_to_sqlite(m_stmt_read, 1, name);
678678
if (sqlite3_step(m_stmt_read) != SQLITE_ROW) {
679679
sqlite3_reset(m_stmt_read);
@@ -735,7 +735,7 @@ bool AuthDatabaseSQLite3::createAuth(AuthEntry &authEntry)
735735

736736
bool AuthDatabaseSQLite3::deleteAuth(const std::string &name)
737737
{
738-
pingDatabase();
738+
verifyDatabase();
739739

740740
str_to_sqlite(m_stmt_delete, 1, name);
741741
sqlite3_vrfy(sqlite3_step(m_stmt_delete), SQLITE_DONE);
@@ -749,7 +749,7 @@ bool AuthDatabaseSQLite3::deleteAuth(const std::string &name)
749749

750750
void AuthDatabaseSQLite3::listNames(std::vector<std::string> &res)
751751
{
752-
pingDatabase();
752+
verifyDatabase();
753753

754754
while (sqlite3_step(m_stmt_list_names) == SQLITE_ROW) {
755755
res.push_back(sqlite_to_string(m_stmt_list_names, 0));

Diff for: ‎src/database/database-sqlite3.h

+3-9
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,13 @@ class Database_SQLite3 : public Database
3636
void beginSave();
3737
void endSave();
3838

39-
// Open and initialize the database if needed
40-
virtual void pingDatabase();
41-
4239
bool initialized() const { return m_initialized; }
4340
protected:
4441
Database_SQLite3(const std::string &savedir, const std::string &dbname);
4542

43+
// Open and initialize the database if needed
44+
void verifyDatabase();
45+
4646
// Convertors
4747
inline void str_to_sqlite(sqlite3_stmt *s, int iCol, const std::string &str) const
4848
{
@@ -146,8 +146,6 @@ class MapDatabaseSQLite3 : private Database_SQLite3, public MapDatabase
146146
MapDatabaseSQLite3(const std::string &savedir);
147147
virtual ~MapDatabaseSQLite3();
148148

149-
virtual void pingDatabase() { Database_SQLite3::pingDatabase(); }
150-
151149
bool saveBlock(const v3s16 &pos, const std::string &data);
152150
void loadBlock(const v3s16 &pos, std::string *block);
153151
bool deleteBlock(const v3s16 &pos);
@@ -175,8 +173,6 @@ class PlayerDatabaseSQLite3 : private Database_SQLite3, public PlayerDatabase
175173
PlayerDatabaseSQLite3(const std::string &savedir);
176174
virtual ~PlayerDatabaseSQLite3();
177175

178-
virtual void pingDatabase() { Database_SQLite3::pingDatabase(); }
179-
180176
void savePlayer(RemotePlayer *player);
181177
bool loadPlayer(RemotePlayer *player, PlayerSAO *sao);
182178
bool removePlayer(const std::string &name);
@@ -212,8 +208,6 @@ class AuthDatabaseSQLite3 : private Database_SQLite3, public AuthDatabase
212208
AuthDatabaseSQLite3(const std::string &savedir);
213209
virtual ~AuthDatabaseSQLite3();
214210

215-
virtual void pingDatabase() { Database_SQLite3::pingDatabase(); }
216-
217211
virtual bool getAuth(const std::string &name, AuthEntry &res);
218212
virtual bool saveAuth(const AuthEntry &authEntry);
219213
virtual bool createAuth(AuthEntry &authEntry);

Diff for: ‎src/database/database.h

-4
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ class Database
3232
virtual void beginSave() = 0;
3333
virtual void endSave() = 0;
3434
virtual bool initialized() const { return true; }
35-
virtual void pingDatabase() {}
3635
};
3736

3837
class MapDatabase : public Database
@@ -58,8 +57,6 @@ class PlayerDatabase
5857
public:
5958
virtual ~PlayerDatabase() = default;
6059

61-
virtual void pingDatabase() {}
62-
6360
virtual void savePlayer(RemotePlayer *player) = 0;
6461
virtual bool loadPlayer(RemotePlayer *player, PlayerSAO *sao) = 0;
6562
virtual bool removePlayer(const std::string &name) = 0;
@@ -86,5 +83,4 @@ class AuthDatabase
8683
virtual bool deleteAuth(const std::string &name) = 0;
8784
virtual void listNames(std::vector<std::string> &res) = 0;
8885
virtual void reload() = 0;
89-
virtual void pingDatabase() {}
9086
};

Diff for: ‎src/map.cpp

-5
Original file line numberDiff line numberDiff line change
@@ -1907,11 +1907,6 @@ MapDatabase *ServerMap::createDatabase(
19071907
throw BaseException(std::string("Database backend ") + name + " not supported.");
19081908
}
19091909

1910-
void ServerMap::pingDatabase()
1911-
{
1912-
dbase->pingDatabase();
1913-
}
1914-
19151910
void ServerMap::beginSave()
19161911
{
19171912
dbase->beginSave();

Diff for: ‎src/map.h

-1
Original file line numberDiff line numberDiff line change
@@ -387,7 +387,6 @@ class ServerMap : public Map
387387
Database functions
388388
*/
389389
static MapDatabase *createDatabase(const std::string &name, const std::string &savedir, Settings &conf);
390-
void pingDatabase();
391390

392391
// Call these before and after saving of blocks
393392
void beginSave();

Diff for: ‎src/serverenvironment.cpp

-5
Original file line numberDiff line numberDiff line change
@@ -1228,11 +1228,6 @@ void ServerEnvironment::step(float dtime)
12281228
}
12291229
}
12301230

1231-
if (m_database_check_interval.step(dtime, 10.0f)) {
1232-
m_auth_database->pingDatabase();
1233-
m_player_database->pingDatabase();
1234-
m_map->pingDatabase();
1235-
}
12361231
/*
12371232
Manage active block list
12381233
*/

Diff for: ‎src/serverenvironment.h

-1
Original file line numberDiff line numberDiff line change
@@ -436,7 +436,6 @@ class ServerEnvironment : public Environment
436436
IntervalLimiter m_object_management_interval;
437437
// List of active blocks
438438
ActiveBlockList m_active_blocks;
439-
IntervalLimiter m_database_check_interval;
440439
IntervalLimiter m_active_blocks_management_interval;
441440
IntervalLimiter m_active_block_modifier_interval;
442441
IntervalLimiter m_active_blocks_nodemetadata_interval;

0 commit comments

Comments
 (0)
Please sign in to comment.