Skip to content

Commit 03fb103

Browse files
committed
Remove hard exit()s when database and hyperion versions are not compatible
1 parent 883547f commit 03fb103

File tree

4 files changed

+41
-15
lines changed

4 files changed

+41
-15
lines changed

include/db/DBConfigManager.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ class DBConfigManager : public DBManager
2525

2626
QPair<bool, QStringList> migrateConfiguration();
2727

28+
bool isConfigVersionCompatible();
29+
2830
private:
2931
// Function to import global settings from the configuration
3032
bool importGlobalSettings(const QJsonObject& config, QStringList& errorList);

libsrc/db/DBConfigManager.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -390,3 +390,27 @@ QPair<bool, QStringList> DBConfigManager::migrateConfiguration()
390390
return qMakePair (true, QStringList{} );
391391
}
392392

393+
bool DBConfigManager::isConfigVersionCompatible()
394+
{
395+
SettingsTable settingsTableGlobal;
396+
397+
if (settingsTableGlobal.resolveConfigVersion())
398+
{
399+
semver::version BUILD_VERSION(HYPERION_VERSION);
400+
401+
if (!BUILD_VERSION.isValid())
402+
{
403+
Error(_log, "Current Hyperion version [%s] is invalid.", BUILD_VERSION.getVersion().c_str());
404+
return false;
405+
}
406+
407+
const semver::version& currentVersion = settingsTableGlobal.getConfigVersion();
408+
if (currentVersion > BUILD_VERSION)
409+
{
410+
Error(_log, "Database version [%s] is greater than current Hyperion version [%s].", currentVersion.getVersion().c_str(), BUILD_VERSION.getVersion().c_str());
411+
return false;
412+
}
413+
}
414+
return true;
415+
}
416+

libsrc/db/DBMigrationManager.cpp

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -21,21 +21,16 @@ bool DBMigrationManager::isMigrationRequired()
2121

2222
if (settingsTableGlobal.resolveConfigVersion())
2323
{
24-
semver::version BUILD_VERSION(HYPERION_VERSION);
24+
semver::version const BUILD_VERSION(HYPERION_VERSION);
2525

2626
if (!BUILD_VERSION.isValid())
2727
{
28+
// Must not happen, otherwise the version must be fixed immediatly
2829
Error(_log, "Current Hyperion version [%s] is invalid. Exiting...", BUILD_VERSION.getVersion().c_str());
29-
exit(1);
30+
assert(false);
3031
}
3132

3233
const semver::version& currentVersion = settingsTableGlobal.getConfigVersion();
33-
if (currentVersion > BUILD_VERSION)
34-
{
35-
Error(_log, "Database version [%s] is greater than current Hyperion version [%s]. Exiting...", currentVersion.getVersion().c_str(), BUILD_VERSION.getVersion().c_str());
36-
exit(1);
37-
}
38-
3934
if (currentVersion < BUILD_VERSION)
4035
{
4136
isNewRelease = true;
@@ -47,14 +42,14 @@ bool DBMigrationManager::isMigrationRequired()
4742
bool DBMigrationManager::migrateSettings(QJsonObject& config)
4843
{
4944
bool migrated = false;
50-
semver::version BUILD_VERSION(HYPERION_VERSION);
45+
semver::version const BUILD_VERSION(HYPERION_VERSION);
5146

5247
SettingsTable settingsTableGlobal;
5348
QJsonObject generalConfig = config.value("global").toObject().value("settings").toObject().value("general").toObject();
5449

5550
if (settingsTableGlobal.resolveConfigVersion(generalConfig))
5651
{
57-
semver::version currentVersion = settingsTableGlobal.getConfigVersion();
52+
semver::version const currentVersion = settingsTableGlobal.getConfigVersion();
5853

5954
if (currentVersion < BUILD_VERSION)
6055
{
@@ -124,15 +119,15 @@ bool DBMigrationManager::upgradeInstanceSettings(const semver::version& currentV
124119
semver::version migratedVersion = currentVersion;
125120

126121
//Migration step for versions < alpha 9
127-
upgradeInstanceSettings_alpha_9(migratedVersion, instance, config);
122+
migrated |= upgradeInstanceSettings_alpha_9(migratedVersion, instance, config);
128123
//Migration step for versions < 2.0.12
129-
upgradeInstanceSettings_2_0_12(migratedVersion, instance, config);
124+
migrated |= upgradeInstanceSettings_2_0_12(migratedVersion, instance, config);
130125
//Migration step for versions < 2.0.13
131-
upgradeInstanceSettings_2_0_13(migratedVersion, instance, config);
126+
migrated |= upgradeInstanceSettings_2_0_13(migratedVersion, instance, config);
132127
//Migration step for versions < 2.0.16
133-
upgradeInstanceSettings_2_0_16(migratedVersion, instance, config);
128+
migrated |= upgradeInstanceSettings_2_0_16(migratedVersion, instance, config);
134129
//Migration step for versions < 2.0.17
135-
upgradeInstanceSettings_2_1_0(migratedVersion, instance, config);
130+
migrated |= upgradeInstanceSettings_2_1_0(migratedVersion, instance, config);
136131

137132
return migrated;
138133
}

src/hyperiond/main.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -428,6 +428,11 @@ int main(int argc, char** argv)
428428
}
429429
}
430430

431+
if (!configManager.isConfigVersionCompatible())
432+
{
433+
return EXIT_FAILURE;
434+
}
435+
431436
if (!configManager.addMissingDefaults().first)
432437
{
433438
emit errorManager.errorOccurred("Updating configuration database with missing defaults failed.");

0 commit comments

Comments
 (0)