mirror of
https://github.com/zerotier/ZeroTierOne.git
synced 2024-12-19 04:57:53 +00:00
Add a central database schema version check to central controller startup
This commit is contained in:
parent
bdc2ec1f5e
commit
2ab2f68725
@ -39,6 +39,8 @@
|
||||
using json = nlohmann::json;
|
||||
namespace {
|
||||
|
||||
static const int DB_MINIMUM_VERSION = 5;
|
||||
|
||||
static const char *_timestr()
|
||||
{
|
||||
time_t t = time(0);
|
||||
@ -86,6 +88,36 @@ PostgreSQL::PostgreSQL(EmbeddedNetworkController *const nc, const Identity &myId
|
||||
{
|
||||
_connString = std::string(path) + " application_name=controller_" +_myAddressStr;
|
||||
|
||||
// Database Schema Version Check
|
||||
PGconn *conn = getPgConn();
|
||||
if (PQstatus(conn) != CONNECTION_OK) {
|
||||
fprintf(stderr, "Bad Database Connection: %s", PQerrorMessage(conn));
|
||||
exit(1);
|
||||
}
|
||||
|
||||
PGresult *res = PQexec(conn, "SELECT version FROM ztc_database");
|
||||
if (PQresultStatus(res) != PGRES_TUPLES_OK) {
|
||||
fprintf(stderr, "Error determining database version");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (PQntuples(res) != 1) {
|
||||
fprintf(stderr, "Invalid number of db version tuples returned.");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
int dbVersion = std::stoi(PQgetvalue(res, 0, 0));
|
||||
|
||||
if (dbVersion < DB_MINIMUM_VERSION) {
|
||||
fprintf(stderr, "Central database schema version too low. This controller version requires a minimum schema version of %d. Please upgrade your Central instance", DB_MINIMUM_VERSION);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
PQclear(res);
|
||||
res = NULL;
|
||||
PQfinish(conn);
|
||||
conn = NULL;
|
||||
|
||||
_readyLock.lock();
|
||||
_heartbeatThread = std::thread(&PostgreSQL::heartbeat, this);
|
||||
_membersDbWatcher = std::thread(&PostgreSQL::membersDbWatcher, this);
|
||||
|
Loading…
Reference in New Issue
Block a user