From 744618fbe00f8ac74fc233128fad6260c9db031f Mon Sep 17 00:00:00 2001 From: Jan Steemann Date: Tue, 20 Nov 2012 09:31:09 +0100 Subject: [PATCH 1/3] fixed some escape routes in version check --- arangod/V8Server/ApplicationV8.cpp | 4 ++++ js/server/arango-upgrade.js | 8 ++++++-- js/server/version-check.js | 9 ++++++++- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/arangod/V8Server/ApplicationV8.cpp b/arangod/V8Server/ApplicationV8.cpp index a70d392b7f..86a5f77b97 100644 --- a/arangod/V8Server/ApplicationV8.cpp +++ b/arangod/V8Server/ApplicationV8.cpp @@ -691,6 +691,8 @@ bool ApplicationV8::prepareV8Instance (const size_t i) { if (i == 0 && _runVersionCheck) { + LOGGER_DEBUG << "running database version check"; + const string script = _startupLoader.buildScript(JS_server_version_check); // special check script to be run just once in first thread (not in all) @@ -709,6 +711,8 @@ bool ApplicationV8::prepareV8Instance (const size_t i) { return false; } + + LOGGER_DEBUG << "database version check passed"; } // load all actions diff --git a/js/server/arango-upgrade.js b/js/server/arango-upgrade.js index 7c750bf8a8..f39daad5ae 100644 --- a/js/server/arango-upgrade.js +++ b/js/server/arango-upgrade.js @@ -58,8 +58,12 @@ function main (argv) { var versionInfo = SYS_READ(versionFile); if (versionInfo != '') { var versionValues = JSON.parse(versionInfo); - lastVersion = parseFloat(versionValues.version); - lastTasks = versionValues.tasks; + if (versionValues && versionValues.version && ! isNaN(versionValues.version)) { + lastVersion = parseFloat(versionValues.version); + } + if (versionValues && versionValues.tasks && typeof(versionValues.tasks) === 'object') { + lastTasks = versionValues.tasks || { }; + } } } diff --git a/js/server/version-check.js b/js/server/version-check.js index 4a999f2e90..68ab2b1a90 100644 --- a/js/server/version-check.js +++ b/js/server/version-check.js @@ -54,7 +54,14 @@ var versionInfo = SYS_READ(versionFile); if (versionInfo != '') { var versionValues = JSON.parse(versionInfo); - lastVersion = parseFloat(versionValues.version); + if (versionValues && versionValues.version && ! isNaN(versionValues.version)) { + lastVersion = parseFloat(versionValues.version); + } + } + + if (lastVersion == null) { + console.error("No version information file found in database directory."); + return false; } var currentServerVersion = VERSION.match(/^(\d+\.\d+).*$/); From 30799b085784638ab0f3d25a9ad10b7ff608d1d6 Mon Sep 17 00:00:00 2001 From: Jan Steemann Date: Tue, 20 Nov 2012 09:33:39 +0100 Subject: [PATCH 2/3] fixed unknown log level --- js/server/version-check.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/js/server/version-check.js b/js/server/version-check.js index 68ab2b1a90..64629adb74 100644 --- a/js/server/version-check.js +++ b/js/server/version-check.js @@ -74,7 +74,8 @@ if (lastVersion != null && lastVersion > currentVersion) { // downgrade?? - console.warn("Database directory version is higher than server version. This seems like you are running arangodb on a database directory that was created with a newer version. This is not supported."); + console.error("Database directory version is higher than server version."); + console.error("It seems like you are running arangodb on a database directory that was created with a newer version. This is not supported."); // still, allow the start } From 156da907c5d1f5416175d26fea40bfbc658bdb33 Mon Sep 17 00:00:00 2001 From: Jan Steemann Date: Tue, 20 Nov 2012 09:37:08 +0100 Subject: [PATCH 3/3] updated CHANGELOG --- CHANGELOG | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index 1bbb7f118b..668207c948 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,5 +1,14 @@ v1.1.beta3 (XXXX-XX-XX) +* WARNING: + arangod now performs a database version check at startup. It will look for a file + named "VERSION" in its database directory. If the file is not present, arangod will + refuse to start and ask the user to run arango-upgrade first. If the VERSION file + is present but is from an older version of ArangoDB, arangod will also refuse to + start and ask the user to run the upgrade script first. This procedure shall ensure + that users have full control over when they perform any updates/upgrades of their + data, and do not risk running an incompatible server/database state tandem. + * fixed issue #283: AQL LENGTH() now works on documents, too * fixed issue #281: documentation for skip lists shows wrong example