From aa72dacefd9e215bf062ed33a6ef851be12ea42d Mon Sep 17 00:00:00 2001 From: Michael Hackstein Date: Tue, 3 Feb 2015 15:44:29 +0100 Subject: [PATCH] Improved upgrade procedure, it now runs smoothly, at least once --- .../org/arangodb/foxx/manager-utils.js | 16 +++--- .../modules/org/arangodb/foxx/manager.js | 23 ++++---- js/server/upgrade-database.js | 55 ++++++++----------- 3 files changed, 42 insertions(+), 52 deletions(-) diff --git a/js/common/modules/org/arangodb/foxx/manager-utils.js b/js/common/modules/org/arangodb/foxx/manager-utils.js index 1f9e91c901..3131ae95e3 100644 --- a/js/common/modules/org/arangodb/foxx/manager-utils.js +++ b/js/common/modules/org/arangodb/foxx/manager-utils.js @@ -41,12 +41,11 @@ var ArangoError = arangodb.ArangoError; var mountRegEx = /^(\/[a-zA-Z0-9_\-%]+)+$/; var mountAppRegEx = /\/APP(\/|$)/i; -// TODO Only temporary -var tmp_getStorage = function() { +var getStorage = function() { "use strict"; - var c = db._tmp_aal; + var c = db._apps; if (c === undefined) { - c = db._create("_tmp_aal", {isSystem: true}); + c = db._create("_apps", {isSystem: true}); c.ensureUniqueConstraint("mount"); } return c; @@ -282,7 +281,7 @@ function getStorage () { function listJson (showPrefix, onlyDevelopment) { 'use strict'; - var mounts = tmp_getStorage(); + var mounts = getStorage(); var cursor; if (onlyDevelopment) { cursor = mounts.byExample({isDevelopment: true}); @@ -406,7 +405,7 @@ function validateAppName (name) { //////////////////////////////////////////////////////////////////////////////// function mountedApp (mount) { "use strict"; - return tmp_getStorage().firstExample({mount: mount}); + return getStorage().firstExample({mount: mount}); } //////////////////////////////////////////////////////////////////////////////// @@ -414,7 +413,7 @@ function mountedApp (mount) { //////////////////////////////////////////////////////////////////////////////// function updateApp (mount, update) { "use strict"; - return tmp_getStorage().updateByExample({mount: mount}, update); + return getStorage().updateByExample({mount: mount}, update); } //////////////////////////////////////////////////////////////////////////////// @@ -475,8 +474,7 @@ exports.validateAppName = validateAppName; exports.validateMount = validateMount; exports.typeToRegex = typeToRegex; exports.zipDirectory = zipDirectory; - -exports.tmp_getStorage = tmp_getStorage; +exports.getStorage = getStorage; // ----------------------------------------------------------------------------- // --SECTION-- END-OF-FILE diff --git a/js/server/modules/org/arangodb/foxx/manager.js b/js/server/modules/org/arangodb/foxx/manager.js index 2e371e4c80..5aebc01c06 100644 --- a/js/server/modules/org/arangodb/foxx/manager.js +++ b/js/server/modules/org/arangodb/foxx/manager.js @@ -94,7 +94,7 @@ var refillCaches = function() { appCache = {}; - var cursor = utils.tmp_getStorage().all(); + var cursor = utils.getStorage().all(); var config, app; var routes = []; @@ -467,11 +467,14 @@ // ............................................................................. // throw away temporary app folder // ............................................................................. - try { - fs.removeDirectoryRecursive(tempFile); - } - catch (err1) { - arangodb.printf("Cannot remove temporary folder '%s'\n Stack: %s", tempFile, err1.stack || String(err1)); + if (found !== mf) { + try { + require("console").log(tempFile); + fs.removeDirectoryRecursive(tempFile); + } + catch (err1) { + arangodb.printf("Cannot remove temporary folder '%s'\n Stack: %s", tempFile, err1.stack || String(err1)); + } } }; @@ -596,7 +599,7 @@ var _scanFoxx = function(mount, options, activateDevelopment) { delete appCache[mount]; var app = createApp(mount, options, activateDevelopment); - utils.tmp_getStorage().save(app.toJSON()); + utils.getStorage().save(app.toJSON()); return app; }; @@ -629,7 +632,7 @@ [ mount ] ); var old = lookupApp(mount); - var collection = utils.tmp_getStorage(); + var collection = utils.getStorage(); db._executeTransaction({ collections: { write: collection.name() @@ -650,7 +653,7 @@ var _install = function(appInfo, mount, options, runSetup) { var targetPath = computeAppPath(mount, true); var app; - var collection = utils.tmp_getStorage(); + var collection = utils.getStorage(); if (fs.exists(targetPath)) { throw new Error("An app is already installed at this location."); } @@ -710,7 +713,7 @@ var _uninstall = function(mount) { var app = lookupApp(mount); - var collection = utils.tmp_getStorage(); + var collection = utils.getStorage(); var targetPath = computeAppPath(mount, true); if (!fs.exists(targetPath)) { throw "No foxx app found at this location."; diff --git a/js/server/upgrade-database.js b/js/server/upgrade-database.js index a414861f42..d06901e98f 100644 --- a/js/server/upgrade-database.js +++ b/js/server/upgrade-database.js @@ -1416,31 +1416,6 @@ function updateGlobals() { // --SECTION-- upgrade 2.4 - 2.5 // ----------------------------------------------------------------------------- -//////////////////////////////////////////////////////////////////////////////// -/// @brief create new application collection -/// -/// Setup the collection _apps -//////////////////////////////////////////////////////////////////////////////// - - addTask({ - name: "setupApps", - description: "setup _apps collection", - - mode: [ MODE_PRODUCTION, MODE_DEVELOPMENT ], - cluster: [ CLUSTER_NONE, CLUSTER_COORDINATOR_GLOBAL ], - database: [ DATABASE_INIT, DATABASE_UPGRADE ], - - task: function () { - var created = createSystemCollection("_apps"); - if (!created) { - return false; - } - var apps = getCollection("_apps"); - apps.ensureUniqueConstraint("mount"); - return true; - } - }); - //////////////////////////////////////////////////////////////////////////////// /// @brief move applications /// @@ -1474,7 +1449,12 @@ function updateGlobals() { while (appsToZip.hasNext()) { tmp = appsToZip.next(); path = fs.join(module.oldAppPath(), tmp.path); - mapAppZip[tmp.app] = fmUtils.zipDirectory(path); + try { + mapAppZip[tmp.app] = fmUtils.zipDirectory(path); + } catch (e) { + logger.errorLines("Tried to move app " + tmp.app + " but it was not found at app-path" + path + + " : " +(e.stack || String(e))); + } } // 2. If development mode, Zip all development APPs and create a map name => zipFile @@ -1486,8 +1466,13 @@ function updateGlobals() { appsToZip = fs.list(devPath); for (i = 0; i < appsToZip.length; ++i) { path = fs.join(devPath, appsToZip[i]); - if (fs.exists() && fs.isDirectory(path)) { - mapDevAppZip[appsToZip[i]] = fmUtils.zipDirectory(path); + if (fs.exists(path) && fs.isDirectory(path)) { + try { + mapDevAppZip[appsToZip[i]] = fmUtils.zipDirectory(path); + } catch (e) { + logger.errorLines("Tried to move app " + appsToZip[i] + " but it was not found at app-path" + path + + " : " + (e.stack || String(e))); + } } } } @@ -1503,6 +1488,7 @@ function updateGlobals() { tmp = appsToInstall.next(); if (mapAppZip.hasOwnProperty(tmp.app)) { foxxManager.install(mapAppZip[tmp.app], tmp.mount, {}, false); + logger.log("Upgraded app '" + tmp.app + "' on mount: " + tmp.mount); } } @@ -1514,10 +1500,12 @@ function updateGlobals() { name = appsToInstall[i]; foxxManager.install(mapDevAppZip[name], "/dev/" + name, {}, false); foxxManager.development("/dev/" + name); + logger.log("Upgraded dev app '" + name + "' on mount: /dev/" + name); try { fs.remove(mapDevAppZip[name]); } catch (err1) { - require("org/arangodb").printf("Cannot remove temporary file '%s'\n", mapDevAppZip[name]); + logger.errorLines("Could not remove temporary file '%s'\n%s", + mapDevAppZip[name], err1.stack || String(err1)); } } @@ -1527,12 +1515,12 @@ function updateGlobals() { try { fs.remove(mapAppZip[appsToInstall[i]]); } catch (err1) { - require("org/arangodb").printf("Cannot remove temporary file '%s'\n", mapAppZip[appsToInstall[i]]); + logger.errorLines("Could not remove temporary file '%s'\n%s", + mapDevAppZip[name], err1.stack || String(err1)); } } - - + return true; } }); @@ -1549,7 +1537,8 @@ function updateGlobals() { if (!aal) { return true; } - return aal.drop(); + aal.drop(); + return true; } });