aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2023-11-16 18:47:04 +0100
committerGitHub <[email protected]>2023-11-16 18:47:04 +0100
commit58cf8407214177bd9b2accd98f0b9284f044e14b (patch)
tree07eb03483a1dc99f403cf4fd34eb7ba6f27e4109
parentfurther posix event improvements (#549) (diff)
downloadzen-58cf8407214177bd9b2accd98f0b9284f044e14b.tar.xz
zen-58cf8407214177bd9b2accd98f0b9284f044e14b.zip
add wipe prevention via file in data root dir (#548)
* if a file named root_manifest.ignore_schema_mismatch exists in the root data dir, ignore schema mismatch
-rw-r--r--CHANGELOG.md3
-rw-r--r--src/zenserver/zenserver.cpp21
2 files changed, 21 insertions, 3 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index ef6d2aa4c..66e7d1d07 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,7 @@
##
+- Feature: Adding a file named `root_manifest.ignore_schema_mismatch` in the root of zenserver data dir prevents wipe of data when schema mismatches
+
+## 0.2.34
- Bumped zenserver data schema (to '5') to wipe corrupted state caused by version 0.2.31/0.2.32
- Bugfix: Fix hang on ZenServerInstance shutdown on Mac/Linux
- Improvement: Event implementation now uses `std::atomic_bool` instead of `volatile bool` for correctness
diff --git a/src/zenserver/zenserver.cpp b/src/zenserver/zenserver.cpp
index b87679b7d..8359f5088 100644
--- a/src/zenserver/zenserver.cpp
+++ b/src/zenserver/zenserver.cpp
@@ -363,9 +363,24 @@ ZenServer::InitializeState(const ZenServerOptions& ServerOptions)
if (ManifestVersion != ZEN_CFG_SCHEMA_VERSION)
{
- WipeState = true;
- WipeReason =
- fmt::format("Manifest schema version: {}, differs from required: {}", ManifestVersion, ZEN_CFG_SCHEMA_VERSION);
+ std::filesystem::path ManifestSkipSchemaChangePath = m_DataRoot / "root_manifest.ignore_schema_mismatch";
+ if (ManifestVersion != 0 && std::filesystem::is_regular_file(ManifestSkipSchemaChangePath))
+ {
+ ZEN_INFO(
+ "Schema version {} found in '{}' does not match {}, ignoring mismatch due to existance of '{}' and updating "
+ "schema version",
+ ManifestVersion,
+ ManifestPath,
+ ZEN_CFG_SCHEMA_VERSION,
+ ManifestSkipSchemaChangePath);
+ UpdateManifest = true;
+ }
+ else
+ {
+ WipeState = true;
+ WipeReason =
+ fmt::format("Manifest schema version: {}, differs from required: {}", ManifestVersion, ZEN_CFG_SCHEMA_VERSION);
+ }
}
}
}