From 182e1a2fbe7a8496c2d9cde9a96cee5c01465ca8 Mon Sep 17 00:00:00 2001 From: Kaveh Vahedipour Date: Tue, 17 May 2016 17:47:21 +0200 Subject: [PATCH] supervising on --- arangod/Agency/Agent.cpp | 5 +++++ arangod/Agency/Agent.h | 4 +++- arangod/Agency/State.cpp | 23 +++++++++-------------- arangod/Agency/Store.cpp | 5 +++++ arangod/Agency/Store.h | 2 ++ 5 files changed, 24 insertions(+), 15 deletions(-) diff --git a/arangod/Agency/Agent.cpp b/arangod/Agency/Agent.cpp index 452fa7490d..2285e2ac9e 100644 --- a/arangod/Agency/Agent.cpp +++ b/arangod/Agency/Agent.cpp @@ -450,4 +450,9 @@ Store const& Agent::readDB () const { return _readDB; } +Agent& Agent::operator= (VPackSlice const& slice) { + _spearhead = slice; + return *this; +} + }} diff --git a/arangod/Agency/Agent.h b/arangod/Agency/Agent.h index 81d0a9365b..6035596174 100644 --- a/arangod/Agency/Agent.h +++ b/arangod/Agency/Agent.h @@ -130,7 +130,9 @@ public: Store const& readDB() const; /// @brief Get spearhead store - Store const& spearhead() const; + Store const& spearhead() const; + + Agent& operator= (VPackSlice const&); private: diff --git a/arangod/Agency/State.cpp b/arangod/Agency/State.cpp index 6ede261f4f..035095b389 100644 --- a/arangod/Agency/State.cpp +++ b/arangod/Agency/State.cpp @@ -44,6 +44,9 @@ #include "VocBase/collection.h" #include "VocBase/vocbase.h" +#warning iostream +#include + using namespace arangodb; using namespace arangodb::application_features; using namespace arangodb::consensus; @@ -264,7 +267,6 @@ bool State::loadCollections(TRI_vocbase_t* vocbase, bool waitForSync) { return loadPersisted (); } -#include bool State::loadPersisted() { TRI_ASSERT(_vocbase != nullptr); @@ -280,13 +282,13 @@ bool State::loadPersisted() { } bool State::loadCompacted () { - auto bindVars = std::make_shared(); bindVars->openObject(); bindVars->close(); std::string const aql( std::string("FOR c IN compact SORT c._key DESC LIMIT 1 RETURN c")); + arangodb::aql::Query query( false, _vocbase, aql.c_str(), aql.size(), bindVars, nullptr, arangodb::aql::PART_MAIN); @@ -297,22 +299,14 @@ bool State::loadCompacted () { THROW_ARANGO_EXCEPTION_MESSAGE(queryResult.code, queryResult.details); } - auto result = queryResult.result->slice(); + VPackSlice result = queryResult.result->slice(); - LOG(WARN) << result.toJson(); - if (result.isArray()) { for (auto const& i : VPackArrayIterator(result)) { buffer_t tmp = std::make_shared>(); - auto req = i.get("request"); - tmp->append(req.startAs(), req.byteSize()); - _log.push_back( - log_t( - std::stoi(i.get(StaticStrings::KeyString).copyString()), - static_cast(i.get("term").getUInt()), - static_cast(i.get("leader").getUInt()), - tmp)); + (*_agent) = i.get("readDB"); + _cur = std::stoul(i.get("_key").copyString()); } } @@ -340,6 +334,7 @@ bool State::loadRemaining () { auto result = queryResult.result->slice(); if (result.isArray()) { + _log.clear(); for (auto const& i : VPackArrayIterator(result)) { buffer_t tmp = std::make_shared>(); @@ -353,7 +348,7 @@ bool State::loadRemaining () { tmp)); } } - + return true; } diff --git a/arangod/Agency/Store.cpp b/arangod/Agency/Store.cpp index dc00c67efe..396feb943a 100644 --- a/arangod/Agency/Store.cpp +++ b/arangod/Agency/Store.cpp @@ -474,6 +474,11 @@ bool Store::applies (arangodb::velocypack::Slice const& slice) { return _node.applies(slice); } +Store& Store::operator= (VPackSlice const& slice) { + MUTEX_LOCKER(storeLocker, _storeLock); + _node.applies(slice[0]); + return *this; +} void Store::toBuilder (Builder& b) const { _node.toBuilder(b); diff --git a/arangod/Agency/Store.h b/arangod/Agency/Store.h index 3a02c72b69..f24ce0ca33 100644 --- a/arangod/Agency/Store.h +++ b/arangod/Agency/Store.h @@ -82,6 +82,8 @@ public: /// @brief Get node specified by path string Node const operator ()(std::string const& path) const; + Store& operator= (VPackSlice const& slice); + /// @brief Apply single slice bool applies (arangodb::velocypack::Slice const&);