From b26ea6c3bdb8dbe14e47264454e63713f99a5e97 Mon Sep 17 00:00:00 2001 From: Michael Hackstein Date: Mon, 6 Mar 2017 10:41:21 +0100 Subject: [PATCH 1/4] Added a recovery test for duplicate-name creation. This was broken during Engine-API build. --- js/client/modules/@arangodb/testing.js | 1 + .../recovery/collection-duplicate-name.js | 84 +++++++++++++++++++ 2 files changed, 85 insertions(+) create mode 100644 js/server/tests/recovery/collection-duplicate-name.js diff --git a/js/client/modules/@arangodb/testing.js b/js/client/modules/@arangodb/testing.js index dad3328a05..33b7afa05c 100644 --- a/js/client/modules/@arangodb/testing.js +++ b/js/client/modules/@arangodb/testing.js @@ -3402,6 +3402,7 @@ const recoveryTests = [ 'disk-full-logfile-data', 'disk-full-datafile', 'collection-drop-recreate', + 'collection-duplicate-name', 'create-with-temp', 'create-with-temp-old', 'create-collection-fail', diff --git a/js/server/tests/recovery/collection-duplicate-name.js b/js/server/tests/recovery/collection-duplicate-name.js new file mode 100644 index 0000000000..b781b5f03e --- /dev/null +++ b/js/server/tests/recovery/collection-duplicate-name.js @@ -0,0 +1,84 @@ +/* jshint globalstrict:false, strict:false, unused : false */ +/* global assertEqual, assertNull, assertTrue, assertFalse */ + +// ////////////////////////////////////////////////////////////////////////////// +// / @brief tests for dump/reload +// / +// / @file +// / +// / DISCLAIMER +// / +// / Copyright 2010-2012 triagens GmbH, Cologne, Germany +// / +// / Licensed under the Apache License, Version 2.0 (the "License") +// / you may not use this file except in compliance with the License. +// / You may obtain a copy of the License at +// / +// / http://www.apache.org/licenses/LICENSE-2.0 +// / +// / Unless required by applicable law or agreed to in writing, software +// / distributed under the License is distributed on an "AS IS" BASIS, +// / WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// / See the License for the specific language governing permissions and +// / limitations under the License. +// / +// / Copyright holder is ArangoDB GmbH, Cologne, Germany +// / +// / @author Michael Hackstein +// / @author Copyright 2017, ArangoDB GmbH, Cologne, Germany +// ////////////////////////////////////////////////////////////////////////////// + + +var db = require('@arangodb').db; +var internal = require('internal'); +var jsunity = require('jsunity'); + + +function runSetup () { + require("console").log("Hund"); + + db._drop('UnitTestsRecovery'); + db._create('UnitTestsRecovery'); + + try { + db._create('UnitTestsRecovery'); + } catch (e) { + // This intentionally should fail! + if (internal.errors.ERROR_ARANGO_DUPLICATE_NAME.code == e.errorNum) { + // Only this is a valid return code from the server + return 0; + } + } + // Fail if we get here. We somehow managed to save the same collection twice without error + return 1; +}; + + +function recoverySuite () { + 'use strict'; + + return { + setUp: function () {}, + tearDown: function () {}, + + testCollectionDuplicateName: function () { + require("console").log("Kartze"); + var c = db._collection('UnitTestsRecovery'); + assertTrue(c != null && c != undefined); + } + }; +}; + +// ////////////////////////////////////////////////////////////////////////////// +// / @brief executes the test suite +// ////////////////////////////////////////////////////////////////////////////// + +function main (argv) { + 'use strict'; + if (argv[1] === 'setup') { + return runSetup(); + } else { + jsunity.run(recoverySuite); + return jsunity.done(); + } +} From 7afccbd6e9c36c2e79a016801b012ecefef8b61a Mon Sep 17 00:00:00 2001 From: Michael Hackstein Date: Mon, 6 Mar 2017 10:48:37 +0100 Subject: [PATCH 2/4] Fixed forward declarition. Struct vs. class --- arangod/Aql/Query.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arangod/Aql/Query.h b/arangod/Aql/Query.h index 0c56093964..2b7019dfe8 100644 --- a/arangod/Aql/Query.h +++ b/arangod/Aql/Query.h @@ -61,7 +61,7 @@ class ExecutionEngine; class ExecutionPlan; class Executor; class Query; -class QueryProfile; +struct QueryProfile; class QueryRegistry; /// @brief equery part From d4dd243946e044a24dc8e3e25ce263004cf7e3b3 Mon Sep 17 00:00:00 2001 From: Michael Hackstein Date: Mon, 6 Mar 2017 16:04:43 +0100 Subject: [PATCH 3/4] Alphabetically ordered includeds --- arangod/Aql/QueryList.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arangod/Aql/QueryList.cpp b/arangod/Aql/QueryList.cpp index 0ff01dcaa0..79c350f46f 100644 --- a/arangod/Aql/QueryList.cpp +++ b/arangod/Aql/QueryList.cpp @@ -23,11 +23,11 @@ #include "Aql/QueryList.h" #include "Aql/Query.h" -#include "Logger/Logger.h" #include "Basics/ReadLocker.h" #include "Basics/StringRef.h" #include "Basics/WriteLocker.h" #include "Basics/Exceptions.h" +#include "Logger/Logger.h" #include "VocBase/vocbase.h" using namespace arangodb::aql; From 42e14c59f4643f12598f573e3052924790a14d7b Mon Sep 17 00:00:00 2001 From: Michael Hackstein Date: Mon, 6 Mar 2017 16:06:23 +0100 Subject: [PATCH 4/4] A MMFiles collection now reads a path if created from a slice. --- arangod/MMFiles/MMFilesCollection.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/arangod/MMFiles/MMFilesCollection.cpp b/arangod/MMFiles/MMFilesCollection.cpp index dc75f2c160..2cec1ae101 100644 --- a/arangod/MMFiles/MMFilesCollection.cpp +++ b/arangod/MMFiles/MMFilesCollection.cpp @@ -443,6 +443,10 @@ MMFilesCollection::MMFilesCollection(LogicalCollection* collection, ".journalSize too small"); } + auto pathSlice = info.get("path"); + if (pathSlice.isString()) { + _path = pathSlice.copyString(); + } setCompactionStatus("compaction not yet started"); }