From 0073a862281feceb0fc992a60a5c43acd651b517 Mon Sep 17 00:00:00 2001 From: Jan Steemann Date: Fri, 15 Apr 2016 10:45:50 +0200 Subject: [PATCH 01/11] fix potential agency initialization race --- arangod/Cluster/AgencyComm.cpp | 44 +++++++++++++++++++++------------- arangod/Cluster/AgencyComm.h | 4 ++-- 2 files changed, 30 insertions(+), 18 deletions(-) diff --git a/arangod/Cluster/AgencyComm.cpp b/arangod/Cluster/AgencyComm.cpp index 3d07bdfbee..22587087dc 100644 --- a/arangod/Cluster/AgencyComm.cpp +++ b/arangod/Cluster/AgencyComm.cpp @@ -680,9 +680,10 @@ bool AgencyComm::tryInitializeStructure() { AgencyCommResult result; AgencyOperation initOperation("", AgencyValueOperationType::SET, builder.slice()); + AgencyTransaction initTransaction; initTransaction.operations.push_back(initOperation); - + sendTransactionWithFailover(result, initTransaction); return result.successful(); @@ -696,36 +697,47 @@ bool AgencyComm::tryInitializeStructure() { } ////////////////////////////////////////////////////////////////////////////// -/// @brief checks if the agency is initialized +/// @brief checks if we are responsible for initializing the agency ////////////////////////////////////////////////////////////////////////////// -bool AgencyComm::hasInitializedStructure() { - AgencyCommResult result = getValues("InitDone", false); - if (!result.successful()) { +bool AgencyComm::shouldInitializeStructure() { + VPackBuilder builder; + builder.add(VPackValue(false)); + + double timeout = _globalConnectionOptions._requestTimeout; + // "InitDone" key should not previously exist + AgencyCommResult result = casValue("InitDone", builder.slice(), false, 60.0, timeout); + + if (!result.successful() && + result.httpCode() == + (int)arangodb::GeneralResponse::ResponseCode::PRECONDITION_FAILED) { + // somebody else has or is initializing the agency return false; } - // mop: hmmm ... don't check value...we only save true there right now... - // should be sufficient to check for key presence + return true; } //////////////////////////////////////////////////////////////////////////////// /// @brief will initialize agency if it is freshly started //////////////////////////////////////////////////////////////////////////////// + bool AgencyComm::ensureStructureInitialized() { - LOG(TRACE) << ("Checking if agency is initialized"); - while (!hasInitializedStructure()) { - LOG(TRACE) << ("Agency is fresh. Needs initial structure."); + LOG(TRACE) << "Checking if agency is initialized"; + + while (shouldInitializeStructure()) { + LOG(TRACE) << "Agency is fresh. Needs initial structure."; // mop: we initialized it .. great success if (tryInitializeStructure()) { - LOG(TRACE) << ("Done initializing"); + LOG(TRACE) << "Done initializing agency"; return true; - } else { - LOG(TRACE) << ("Somebody else is already initializing"); - // mop: somebody else is initializing it right now...wait a bit and retry - sleep(1); - } + } + + LOG(WARN) << "Initializing agency failed. We'll try again soon"; + // mop: somebody else is initializing it right now...wait a bit and retry + sleep(1); } + return true; } diff --git a/arangod/Cluster/AgencyComm.h b/arangod/Cluster/AgencyComm.h index f2b7e72fbf..d97581abbe 100644 --- a/arangod/Cluster/AgencyComm.h +++ b/arangod/Cluster/AgencyComm.h @@ -679,10 +679,10 @@ class AgencyComm { bool initFromVPackSlice(std::string key, arangodb::velocypack::Slice s); ////////////////////////////////////////////////////////////////////////////// - /// @brief checks if the agency is initialized + /// @brief checks if we are responsible for initializing the agency ////////////////////////////////////////////////////////////////////////////// - bool hasInitializedStructure(); + bool shouldInitializeStructure(); private: ////////////////////////////////////////////////////////////////////////////// From a071a2ffe249d27c733080dc2457d093c6947161 Mon Sep 17 00:00:00 2001 From: Jan Steemann Date: Fri, 15 Apr 2016 12:01:14 +0200 Subject: [PATCH 02/11] fixed startup race --- arangod/Cluster/AgencyComm.cpp | 56 ++++++++++++++++++++++++---------- 1 file changed, 40 insertions(+), 16 deletions(-) diff --git a/arangod/Cluster/AgencyComm.cpp b/arangod/Cluster/AgencyComm.cpp index 22587087dc..f5afae5548 100644 --- a/arangod/Cluster/AgencyComm.cpp +++ b/arangod/Cluster/AgencyComm.cpp @@ -358,7 +358,7 @@ bool AgencyCommResult::parseVelocyPackNode(VPackSlice const& node, entry._isDir = false; _values.emplace(prefix, entry); - } else if (value.isNumber()) { + } else if (value.isNumber() || value.isBoolean()) { AgencyCommResultEntry entry; // get "modifiedIndex" @@ -668,15 +668,15 @@ bool AgencyComm::tryInitializeStructure() { } addEmptyVPackObject("DBServers", builder); builder.add("Lock", VPackValue("\"UNLOCKED\"")); - builder.add("InitDone", VPackValue(true)); } + builder.add("InitDone", VPackValue(true)); } catch (...) { LOG(WARN) << "Couldn't create initializing structure"; return false; } try { - LOG(DEBUG) << "Initializing agency with " << builder.toJson(); + LOG(TRACE) << "Initializing agency with " << builder.toJson(); AgencyCommResult result; AgencyOperation initOperation("", AgencyValueOperationType::SET, builder.slice()); @@ -712,6 +712,7 @@ bool AgencyComm::shouldInitializeStructure() { result.httpCode() == (int)arangodb::GeneralResponse::ResponseCode::PRECONDITION_FAILED) { // somebody else has or is initializing the agency + LOG(TRACE) << "someone else is initializing the agency"; return false; } @@ -725,20 +726,43 @@ bool AgencyComm::shouldInitializeStructure() { bool AgencyComm::ensureStructureInitialized() { LOG(TRACE) << "Checking if agency is initialized"; - while (shouldInitializeStructure()) { - LOG(TRACE) << "Agency is fresh. Needs initial structure."; - // mop: we initialized it .. great success - if (tryInitializeStructure()) { - LOG(TRACE) << "Done initializing agency"; - return true; - } + while (true) { + while (shouldInitializeStructure()) { + LOG(TRACE) << "Agency is fresh. Needs initial structure."; + // mop: we initialized it .. great success + if (tryInitializeStructure()) { + LOG(TRACE) << "Done initializing agency"; + break; + } + + LOG(WARN) << "Initializing agency failed. We'll try again soon"; + // mop: somebody else is initializing it right now...wait a bit and retry + sleep(1); + } + + AgencyCommResult result = getValues("InitDone", false); + + if (result.successful()) { + result.parse("", false); + + std::map::iterator it = + result._values.begin(); + if (it != result._values.end()) { + auto value = (*it).second._vpack; + + if (value->slice().isBoolean() && value->slice().getBoolean()) { + // expecting a value of "true" + LOG(TRACE) << "Found an initialized agency"; + return true; + } + // fallthrough to sleeping + } + } + + LOG(TRACE) << "Waiting for agency to get initialized"; - LOG(WARN) << "Initializing agency failed. We'll try again soon"; - // mop: somebody else is initializing it right now...wait a bit and retry sleep(1); - } - - return true; + } // next attempt } //////////////////////////////////////////////////////////////////////////////// @@ -1172,7 +1196,7 @@ AgencyCommResult AgencyComm::getValues(std::string const& key, bool recursive) { try { std::shared_ptr parsedBody; std::string const body = result.body(); - + parsedBody = VPackParser::fromJson(body.c_str()); VPackSlice agencyResult = parsedBody->slice(); From 0918516e34ef68d659c88047855a1cc8bfefe6fd Mon Sep 17 00:00:00 2001 From: Max Neunhoeffer Date: Fri, 15 Apr 2016 12:27:35 +0200 Subject: [PATCH 03/11] Minor changes. --- arangod/Agency/Agent.cpp | 9 ++++----- arangod/Agency/Agent.h | 2 -- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/arangod/Agency/Agent.cpp b/arangod/Agency/Agent.cpp index ea59449342..770f1f7b92 100644 --- a/arangod/Agency/Agent.cpp +++ b/arangod/Agency/Agent.cpp @@ -138,7 +138,6 @@ bool Agent::waitFor (index_t index, double timeout) { // Wait until woken up through AgentCallback while (true) { - std::cout << _last_commit_index << std::endl; /// success? if (_last_commit_index >= index) { return true; @@ -337,11 +336,11 @@ write_ret_t Agent::write (query_t const& query) { MUTEX_LOCKER(mutexLocker, _ioLock); applied = _spearhead.apply(query); // Apply to spearhead indices = _state.log (query, applied, term(), id()); // Log w/ indicies - if (!indices.empty()) { - maxind = *std::max_element(indices.begin(), indices.end()); - } - _cv.signal(); // Wake up run } + if (!indices.empty()) { + maxind = *std::max_element(indices.begin(), indices.end()); + } + _cv.signal(); // Wake up run reportIn(id(),maxind); diff --git a/arangod/Agency/Agent.h b/arangod/Agency/Agent.h index 0e14afdd3f..3731f9f9c4 100644 --- a/arangod/Agency/Agent.h +++ b/arangod/Agency/Agent.h @@ -159,8 +159,6 @@ public: std::atomic _last_commit_index; /**< @brief Last commit index */ - arangodb::Mutex _uncommitedLock; /**< @brief */ - Store _spearhead; /**< @brief Spearhead key value store */ Store _read_db; /**< @brief Read key value store */ From 65e6aed49fe0393a6a66fc9d6c3f2bc89343766c Mon Sep 17 00:00:00 2001 From: Jan Steemann Date: Fri, 15 Apr 2016 12:40:14 +0200 Subject: [PATCH 04/11] jslint --- js/server/tests/shell/shell-cluster-agency.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/server/tests/shell/shell-cluster-agency.js b/js/server/tests/shell/shell-cluster-agency.js index 15749d98b1..a2f4bceb33 100644 --- a/js/server/tests/shell/shell-cluster-agency.js +++ b/js/server/tests/shell/shell-cluster-agency.js @@ -1,5 +1,5 @@ /*jshint globalstrict:false, strict:false */ -/*global fail, assertFalse, assertTrue, assertEqual, assertNotEqual, ArangoAgency */ +/*global fail, assertFalse, assertTrue, assertEqual, ArangoAgency */ //////////////////////////////////////////////////////////////////////////////// /// @brief test the agency communication layer From d6d741a27a121a44e02c97d72f2bb6e43a8bc151 Mon Sep 17 00:00:00 2001 From: hkernbach Date: Fri, 15 Apr 2016 13:48:16 +0200 Subject: [PATCH 05/11] images, html --- .../compressed-img/arangodb_logo_big.png | Bin 0 -> 15571 bytes .../compressed-img/arangodb_logo_small.png | Bin 10695 -> 5093 bytes .../aardvark/APP/frontend/html/body.html.part | 3 ++- .../aardvark/APP/frontend/img/DEVLOGO.png | Bin 10782 -> 0 bytes .../APP/frontend/img/arangodb_logo_big.png | Bin 0 -> 32461 bytes .../APP/frontend/img/arangodb_logo_small.png | Bin 10842 -> 11614 bytes .../js/templates/collectionsItemView.ejs | 3 ++- .../APP/frontend/js/views/collectionsView.js | 3 ++- .../aardvark/APP/frontend/scss/_navbar.scss | 4 ++++ .../APP/frontend/scss/_screenSizes.scss | 13 +++++++++++++ 10 files changed, 23 insertions(+), 3 deletions(-) create mode 100644 js/apps/system/_admin/aardvark/APP/frontend/compressed-img/arangodb_logo_big.png delete mode 100644 js/apps/system/_admin/aardvark/APP/frontend/img/DEVLOGO.png create mode 100644 js/apps/system/_admin/aardvark/APP/frontend/img/arangodb_logo_big.png diff --git a/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/arangodb_logo_big.png b/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/arangodb_logo_big.png new file mode 100644 index 0000000000000000000000000000000000000000..8c64dc459ee37a24417dc9d9a93da8b07704f237 GIT binary patch literal 15571 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 literal 0 HcmV?d00001 diff --git a/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/arangodb_logo_small.png b/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/arangodb_logo_small.png index 50c615ab1dde368dcbbbc292c54ae0aeb440540f..4851a1bd06f2439729cac09b371a00ae6430a6b7 100644 GIT binary patch literal 5093 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 Hu0mjfKtsUF literal 10695 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 diff --git a/js/apps/system/_admin/aardvark/APP/frontend/html/body.html.part b/js/apps/system/_admin/aardvark/APP/frontend/html/body.html.part index 6bc3fca657..b5388886b2 100644 --- a/js/apps/system/_admin/aardvark/APP/frontend/html/body.html.part +++ b/js/apps/system/_admin/aardvark/APP/frontend/html/body.html.part @@ -3,7 +3,8 @@