From dcd218c57700ec115d3c976d7b553ae83d513242 Mon Sep 17 00:00:00 2001 From: jsteemann Date: Fri, 10 Feb 2017 10:53:13 +0100 Subject: [PATCH 1/7] fix typo --- js/server/tests/shell/shell-database-noncluster.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/server/tests/shell/shell-database-noncluster.js b/js/server/tests/shell/shell-database-noncluster.js index 3cda0367db..98c8607f3a 100644 --- a/js/server/tests/shell/shell-database-noncluster.js +++ b/js/server/tests/shell/shell-database-noncluster.js @@ -201,7 +201,7 @@ function DatabaseSuite () { } } if (tries > 15) { - require("internal").printf("[WARNING] waited " + tries * 2 +" seconds for " + path + " do disappear"); + require("internal").printf("[WARNING] waited " + tries * 2 + " seconds for " + path + " to disappear"); } // yes, we know this test fails in windows now and then. assertFalse(fs.exists(path)); From 6ab65166a5e58e39c4a337e570deb9bb2b647538 Mon Sep 17 00:00:00 2001 From: jsteemann Date: Fri, 10 Feb 2017 11:02:29 +0100 Subject: [PATCH 2/7] fix global loglevel adjustment --- lib/Logger/Logger.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/Logger/Logger.cpp b/lib/Logger/Logger.cpp index 6ff198d519..49f3de0783 100644 --- a/lib/Logger/Logger.cpp +++ b/lib/Logger/Logger.cpp @@ -111,6 +111,7 @@ void Logger::setLogLevel(std::string const& levelName) { if (isGeneral) { Logger::setLogLevel(level); + LogTopic::setLogLevel(std::string("fixme"), level); } else { LogTopic::setLogLevel(v[0], level); } From 389ebe3e4ad6c88c47673bc151f189b7dd282043 Mon Sep 17 00:00:00 2001 From: jsteemann Date: Fri, 10 Feb 2017 11:12:24 +0100 Subject: [PATCH 3/7] fix issue caused by wrong merge --- arangod/RestServer/DatabaseFeature.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/arangod/RestServer/DatabaseFeature.cpp b/arangod/RestServer/DatabaseFeature.cpp index eb437db3d2..3b73e06054 100644 --- a/arangod/RestServer/DatabaseFeature.cpp +++ b/arangod/RestServer/DatabaseFeature.cpp @@ -137,18 +137,15 @@ void DatabaseManagerThread::run() { // regular database // --------------------------- - LOG_TOPIC(TRACE, arangodb::Logger::FIXME) << "physically removing database directory '" << engine->databasePath(database) << "' of database '" << database->name() << "'"; - std::string path; - // remove apps directory for database auto appPath = dealer->appPath(); if (database->isOwnAppsDirectory() && !appPath.empty()) { - path = arangodb::basics::FileUtils::buildFilename( + std::string path = arangodb::basics::FileUtils::buildFilename( arangodb::basics::FileUtils::buildFilename(appPath, "_db"), database->name()); @@ -159,6 +156,8 @@ void DatabaseManagerThread::run() { TRI_RemoveDirectory(path.c_str()); } } + + engine->dropDatabase(database); } delete database; From 29d73b2e9c71009f542dabb5453e33c4774aaeb7 Mon Sep 17 00:00:00 2001 From: Kaveh Vahedipour Date: Fri, 10 Feb 2017 11:25:55 +0100 Subject: [PATCH 4/7] sendAppendEntries does resonable estimation of follower time needs leading to less frequent spamming of followers --- arangod/Agency/AgencyFeature.cpp | 4 +- arangod/Agency/Agent.cpp | 103 ++++++++++++++++++++----------- arangod/Agency/Agent.h | 6 +- arangod/Agency/AgentCallback.cpp | 7 ++- arangod/Agency/AgentCallback.h | 3 +- arangod/Agency/State.cpp | 42 ++++++++----- scripts/startLocalCluster.sh | 4 +- scripts/startStandAloneAgency.sh | 8 +-- 8 files changed, 112 insertions(+), 65 deletions(-) diff --git a/arangod/Agency/AgencyFeature.cpp b/arangod/Agency/AgencyFeature.cpp index 74edfd92e6..972c1ac49c 100644 --- a/arangod/Agency/AgencyFeature.cpp +++ b/arangod/Agency/AgencyFeature.cpp @@ -45,7 +45,7 @@ AgencyFeature::AgencyFeature(application_features::ApplicationServer* server) _supervision(false), _waitForSync(true), _supervisionFrequency(5.0), - _compactionStepSize(2000), + _compactionStepSize(200000), _compactionKeepSize(500), _supervisionGracePeriod(15.0), _cmdLineTimings(false) @@ -232,7 +232,7 @@ void AgencyFeature::start() { _agent.reset(new consensus::Agent(consensus::config_t( _size, _poolSize, _minElectionTimeout, _maxElectionTimeout, endpoint, - _agencyEndpoints, _supervision, false, _supervisionFrequency, + _agencyEndpoints, _supervision, _waitForSync, _supervisionFrequency, _compactionStepSize, _compactionKeepSize, _supervisionGracePeriod, _cmdLineTimings))); diff --git a/arangod/Agency/Agent.cpp b/arangod/Agency/Agent.cpp index 4b81cc935a..17082a00ae 100644 --- a/arangod/Agency/Agent.cpp +++ b/arangod/Agency/Agent.cpp @@ -205,17 +205,20 @@ Agent::raft_commit_t Agent::waitFor(index_t index, double timeout) { } // AgentCallback reports id of follower and its highest processed index -void Agent::reportIn(std::string const& peerId, index_t index) { +void Agent::reportIn(std::string const& peerId, index_t index, size_t toLog) { { // Enforce _lastCommitIndex, _readDB and compaction to progress atomically - MUTEX_LOCKER(mutexLocker, _ioLock); + MUTEX_LOCKER(ioLocker, _ioLock); // Update last acknowledged answer _lastAcked[peerId] = system_clock::now(); if (index > _confirmed[peerId]) { // progress this follower? _confirmed[peerId] = index; + if (toLog > 0) { // We want to reset the wait time only if a package callback + _earliestPackage[peerId] = system_clock::now(); + } } if (index > _lastCommitIndex) { // progress last commit? @@ -238,9 +241,10 @@ void Agent::reportIn(std::string const& peerId, index_t index) { _lastCommitIndex + 1, index), _lastCommitIndex, _constituent.term()); _lastCommitIndex = index; - _leaderCommitIndex = index; _lastAppliedIndex = index; + MUTEX_LOCKER(liLocker, _liLock); + _leaderCommitIndex = index; if (_leaderCommitIndex >= _nextCompationAfter) { _compactor.wakeUp(); } @@ -279,7 +283,7 @@ bool Agent::recvAppendEntriesRPC( } { - MUTEX_LOCKER(mutexLocker, _ioLock); + MUTEX_LOCKER(ioLocker, _liLock); _leaderCommitIndex = leaderCommitIndex; } @@ -288,7 +292,7 @@ bool Agent::recvAppendEntriesRPC( // State machine, _lastCommitIndex to advance atomically if (nqs > 0) { - MUTEX_LOCKER(mutexLocker, _ioLock); + MUTEX_LOCKER(ioLocker, _ioLock); size_t ndups = _state.removeConflicts(queries); @@ -318,6 +322,9 @@ bool Agent::recvAppendEntriesRPC( /// Leader's append entries void Agent::sendAppendEntriesRPC() { + + std::chrono::duration> const dt ( + (_config.waitForSync() ? 10000 : 500)); auto cc = ClusterComm::instance(); if (cc == nullptr) { // nullptr only happens during controlled shutdown @@ -335,7 +342,7 @@ void Agent::sendAppendEntriesRPC() { index_t last_confirmed, lastCommitIndex; { - MUTEX_LOCKER(mutexLocker, _ioLock); + MUTEX_LOCKER(ioLocker, _ioLock); t = this->term(); last_confirmed = _confirmed[followerId]; lastCommitIndex = _lastCommitIndex; @@ -366,21 +373,25 @@ void Agent::sendAppendEntriesRPC() { << "&prevLogTerm=" << unconfirmed.front().term << "&leaderCommit=" << lastCommitIndex; + size_t toLog = 0; // Body Builder builder; builder.add(VPackValue(VPackValueType::Array)); - for (size_t i = 1; i < unconfirmed.size(); ++i) { - auto const& entry = unconfirmed.at(i); - builder.add(VPackValue(VPackValueType::Object)); - builder.add("index", VPackValue(entry.index)); - builder.add("term", VPackValue(entry.term)); - builder.add("query", VPackSlice(entry.entry->data())); - builder.add("clientId", VPackValue(entry.clientId)); - builder.close(); - highest = entry.index; + if ((system_clock::now() - _earliestPackage[followerId]).count() > 0) { + for (size_t i = 1; i < unconfirmed.size(); ++i) { + auto const& entry = unconfirmed.at(i); + builder.add(VPackValue(VPackValueType::Object)); + builder.add("index", VPackValue(entry.index)); + builder.add("term", VPackValue(entry.term)); + builder.add("query", VPackSlice(entry.entry->data())); + builder.add("clientId", VPackValue(entry.clientId)); + builder.close(); + highest = entry.index; + ++toLog; + } } builder.close(); - + // Verbose output if (unconfirmed.size() > 1) { LOG_TOPIC(TRACE, Logger::AGENCY) @@ -401,13 +412,28 @@ void Agent::sendAppendEntriesRPC() { "1", 1, _config.poolAt(followerId), arangodb::rest::RequestType::POST, path.str(), std::make_shared(builder.toJson()), headerFields, - std::make_shared(this, followerId, highest), - 0.7 * _config.minPing(), true); + std::make_shared(this, followerId, highest, toLog), + 5.0 * _config.maxPing(), true); // _lastSent, _lastHighest: local and single threaded access - _lastSent[followerId] = system_clock::now(); - _lastHighest[followerId] = highest; + _lastSent[followerId] = system_clock::now(); + _lastHighest[followerId] = highest; + if (toLog > 0) { + _earliestPackage[followerId] = system_clock::now() + toLog * dt; + LOG_TOPIC(TRACE, Logger::AGENCY) + << "Appending " << unconfirmed.size() - 1 << " entries up to index " + << highest << " to follower " << followerId << ". Message: " + << builder.toJson() + << ". Next real log contact to " << followerId<< " in: " + << std::chrono::duration( + _earliestPackage[followerId]-system_clock::now()).count() << "ms"; + } else { + LOG_TOPIC(TRACE, Logger::AGENCY) + << "Just keeping follower " << followerId + << " devout with " << builder.toJson(); + } + } } } @@ -445,7 +471,7 @@ query_t Agent::activate(query_t const& everything) { } { - MUTEX_LOCKER(mutexLocker, _ioLock); // Atomicity + MUTEX_LOCKER(ioLocker, _ioLock); // Atomicity if (!compact.isEmptyArray()) { _readDB = compact.get("readDB"); } @@ -579,7 +605,7 @@ query_t Agent::lastAckedAgo() const { std::map lastAcked; { - MUTEX_LOCKER(mutexLocker, _ioLock); + MUTEX_LOCKER(ioLocker, _ioLock); lastAcked = _lastAcked; } @@ -615,7 +641,7 @@ trans_ret_t Agent::transact(query_t const& queries) { ret->openArray(); { - MUTEX_LOCKER(mutexLocker, _ioLock); + MUTEX_LOCKER(ioLocker, _ioLock); // Only leader else redirect if (challengeLeadership()) { @@ -675,7 +701,7 @@ trans_ret_t Agent::transient(query_t const& queries) { { VPackArrayBuilder b(ret.get()); - MUTEX_LOCKER(mutexLocker, _ioLock); + MUTEX_LOCKER(ioLocker, _ioLock); // Only leader else redirect if (challengeLeadership()) { @@ -707,7 +733,7 @@ inquire_ret_t Agent::inquire(query_t const& query) { return inquire_ret_t(false, leader); } - MUTEX_LOCKER(mutexLocker, _ioLock); + MUTEX_LOCKER(ioLocker, _ioLock); auto si = _state.inquire(query); @@ -744,7 +770,7 @@ write_ret_t Agent::write(query_t const& query) { // Apply to spearhead and get indices for log entries { - MUTEX_LOCKER(mutexLocker, _ioLock); + MUTEX_LOCKER(ioLocker, _ioLock); // Only leader else redirect if (multihost && challengeLeadership()) { @@ -777,7 +803,7 @@ read_ret_t Agent::read(query_t const& query) { return read_ret_t(false, leader); } - MUTEX_LOCKER(mutexLocker, _ioLock); + MUTEX_LOCKER(ioLocker, _ioLock); // Only leader else redirect if (challengeLeadership()) { @@ -836,7 +862,7 @@ void Agent::reportActivated( if (state->slice().get("success").getBoolean()) { { - MUTEX_LOCKER(mutexLocker, _ioLock); + MUTEX_LOCKER(ioLocker, _ioLock); _confirmed.erase(failed); auto commitIndex = state->slice().get("commitId").getNumericValue(); _confirmed[replacement] = commitIndex; @@ -854,7 +880,7 @@ void Agent::reportActivated( } } else { - MUTEX_LOCKER(mutexLocker, _ioLock); + MUTEX_LOCKER(ioLocker, _ioLock); myterm = _constituent.term(); } @@ -903,7 +929,7 @@ void Agent::detectActiveAgentFailures() { std::map lastAcked; { - MUTEX_LOCKER(mutexLocker, _ioLock); + MUTEX_LOCKER(ioLocker, _ioLock); lastAcked = _lastAcked; } @@ -978,7 +1004,7 @@ void Agent::prepareLead() { // Reset last acknowledged { - MUTEX_LOCKER(mutexLocker, _ioLock); + MUTEX_LOCKER(ioLocker, _ioLock); for (auto const& i : _config.active()) { _lastAcked[i] = system_clock::now(); } @@ -999,7 +1025,7 @@ void Agent::lead() { // Agency configuration term_t myterm; { - MUTEX_LOCKER(mutexLocker, _ioLock); + MUTEX_LOCKER(ioLocker, _ioLock); myterm = _constituent.term(); } @@ -1137,7 +1163,8 @@ void Agent::notify(query_t const& message) { // Rebuild key value stores arangodb::consensus::index_t Agent::rebuildDBs() { - MUTEX_LOCKER(mutexLocker, _ioLock); + MUTEX_LOCKER(ioLocker, _ioLock); + MUTEX_LOCKER(liLocker, _liLock); // Apply logs from last applied index to leader's commit index LOG_TOPIC(DEBUG, Logger::AGENCY) @@ -1168,14 +1195,15 @@ void Agent::compact() { /// Last commit index arangodb::consensus::index_t Agent::lastCommitted() const { - MUTEX_LOCKER(mutexLocker, _ioLock); + MUTEX_LOCKER(ioLocker, _ioLock); return _lastCommitIndex; } /// Last commit index void Agent::lastCommitted(arangodb::consensus::index_t lastCommitIndex) { - MUTEX_LOCKER(mutexLocker, _ioLock); + MUTEX_LOCKER(ioLocker, _ioLock); _lastCommitIndex = lastCommitIndex; + MUTEX_LOCKER(liLocker, _liLock); _leaderCommitIndex = lastCommitIndex; } @@ -1190,7 +1218,7 @@ Store const& Agent::readDB() const { return _readDB; } /// Get readdb arangodb::consensus::index_t Agent::readDB(Node& node) const { - MUTEX_LOCKER(mutexLocker, _ioLock); + MUTEX_LOCKER(ioLocker, _ioLock); node = _readDB.get(); return _lastCommitIndex; } @@ -1201,13 +1229,14 @@ Store const& Agent::transient() const { return _transient; } /// Rebuild from persisted state Agent& Agent::operator=(VPackSlice const& compaction) { // Catch up with compacted state - MUTEX_LOCKER(mutexLocker, _ioLock); + MUTEX_LOCKER(ioLocker, _ioLock); _spearhead = compaction.get("readDB"); _readDB = compaction.get("readDB"); // Catch up with commit try { _lastCommitIndex = std::stoul(compaction.get("_key").copyString()); + MUTEX_LOCKER(liLocker, _liLock); _leaderCommitIndex = _lastCommitIndex; } catch (std::exception const& e) { LOG_TOPIC(ERR, Logger::AGENCY) << e.what() << " " << __FILE__ << __LINE__; diff --git a/arangod/Agency/Agent.h b/arangod/Agency/Agent.h index 4ab1663f8d..1d2ab55936 100644 --- a/arangod/Agency/Agent.h +++ b/arangod/Agency/Agent.h @@ -145,7 +145,7 @@ class Agent : public arangodb::Thread { void beginShutdown() override final; /// @brief Report appended entries from AgentCallback - void reportIn(std::string const& id, index_t idx); + void reportIn(std::string const&, index_t, size_t = 0); /// @brief Wait for slaves to confirm appended entries raft_commit_t waitFor(index_t last_entry, double timeout = 2.0); @@ -294,6 +294,7 @@ class Agent : public arangodb::Thread { std::map _lastAcked; std::map _lastSent; + std::map _earliestPackage; /**< @brief RAFT consistency lock: _spearhead @@ -305,6 +306,9 @@ class Agent : public arangodb::Thread { */ mutable arangodb::Mutex _ioLock; + // lock for _leaderCommitIndex + mutable arangodb::Mutex _liLock; + // @brief guard _activator mutable arangodb::Mutex _activatorLock; diff --git a/arangod/Agency/AgentCallback.cpp b/arangod/Agency/AgentCallback.cpp index 1216656577..2032c15b6a 100644 --- a/arangod/Agency/AgentCallback.cpp +++ b/arangod/Agency/AgentCallback.cpp @@ -28,10 +28,11 @@ using namespace arangodb::consensus; using namespace arangodb::velocypack; -AgentCallback::AgentCallback() : _agent(0), _last(0), _startTime(0.0) {} +AgentCallback::AgentCallback() : + _agent(0), _last(0), _startTime(0.0), _toLog(0) {} AgentCallback::AgentCallback(Agent* agent, std::string const& slaveID, - index_t last) + index_t last, index_t toLog) : _agent(agent), _last(last), _slaveID(slaveID), _startTime(TRI_microtime()) {} @@ -40,7 +41,7 @@ void AgentCallback::shutdown() { _agent = 0; } bool AgentCallback::operator()(arangodb::ClusterCommResult* res) { if (res->status == CL_COMM_SENT) { if (_agent) { - _agent->reportIn(_slaveID, _last); + _agent->reportIn(_slaveID, _last, _toLog); } LOG_TOPIC(DEBUG, Logger::AGENCY) << "Got good callback from AppendEntriesRPC: " diff --git a/arangod/Agency/AgentCallback.h b/arangod/Agency/AgentCallback.h index 2a67c401c0..4e8d1e03af 100644 --- a/arangod/Agency/AgentCallback.h +++ b/arangod/Agency/AgentCallback.h @@ -36,7 +36,7 @@ class AgentCallback : public arangodb::ClusterCommCallback { public: AgentCallback(); - AgentCallback(Agent*, std::string const&, index_t); + AgentCallback(Agent*, std::string const&, index_t, size_t); virtual bool operator()(arangodb::ClusterCommResult*) override final; @@ -47,6 +47,7 @@ class AgentCallback : public arangodb::ClusterCommCallback { index_t _last; std::string _slaveID; double _startTime; + size_t _toLog; }; } } // namespace diff --git a/arangod/Agency/State.cpp b/arangod/Agency/State.cpp index f01170475f..67b66f4cc4 100644 --- a/arangod/Agency/State.cpp +++ b/arangod/Agency/State.cpp @@ -109,36 +109,46 @@ bool State::persist(arangodb::consensus::index_t index, term_t term, return (res == TRI_ERROR_NO_ERROR); } + /// Log transaction (leader) std::vector State::log( - query_t const& transaction, std::vector const& appl, term_t term) { - std::vector idx(appl.size()); - std::vector good = appl; + query_t const& transactions, std::vector const& applicable, term_t term) { + + std::vector idx(applicable.size()); + size_t j = 0; - auto const& slice = transaction->slice(); + + auto const& slice = transactions->slice(); if (!slice.isArray()) { - THROW_ARANGO_EXCEPTION_MESSAGE(30000, - "Agency request syntax is [[]]"); + THROW_ARANGO_EXCEPTION_MESSAGE( + 30000, "Agency syntax requires array of transactions [[]]"); } - if (slice.length() != good.size()) { - THROW_ARANGO_EXCEPTION_MESSAGE(30000, - "Agency request syntax is [[]]"); - } - - MUTEX_LOCKER(mutexLocker, _logLock); // log entries must stay in order + TRI_ASSERT(slice.length() == applicable.size()); + + MUTEX_LOCKER(mutexLocker, _logLock); + for (auto const& i : VPackArrayIterator(slice)) { - TRI_ASSERT(i.isArray()); - std::string clientId; - if (good[j]) { + + if (!i.isArray()) { + THROW_ARANGO_EXCEPTION_MESSAGE( + 30000, + "Transaction syntax is [{}, {}, \"clientId\"]" + ); + } + + if (applicable[j]) { + std::shared_ptr> buf = std::make_shared>(); buf->append((char const*)i[0].begin(), i[0].byteSize()); + std::string clientId; if (i.length()==3) { clientId = i[2].copyString(); } + TRI_ASSERT(!_log.empty()); // log must not ever be empty idx[j] = _log.back().index + 1; _log.push_back(log_t(idx[j], term, buf, clientId)); // log to RAM @@ -146,10 +156,12 @@ std::vector State::log( std::pair(clientId, idx[j])); persist(idx[j], term, i[0], clientId); // log to disk } + ++j; } return idx; + } /// Log transaction (leader) diff --git a/scripts/startLocalCluster.sh b/scripts/startLocalCluster.sh index 1010df6c82..1529ac500e 100755 --- a/scripts/startLocalCluster.sh +++ b/scripts/startLocalCluster.sh @@ -155,8 +155,8 @@ if [ ! -z "$INTERACTIVE_MODE" ] ; then fi SFRE=5.0 -COMP=1000 -KEEP=100 +COMP=200000 +KEEP=500 MINT=0.2 MAXT=1.0 AG_BASE=$(( $PORT_OFFSET + 4001 )) diff --git a/scripts/startStandAloneAgency.sh b/scripts/startStandAloneAgency.sh index 275fdac4a0..ab91636825 100755 --- a/scripts/startStandAloneAgency.sh +++ b/scripts/startStandAloneAgency.sh @@ -148,11 +148,11 @@ if [[ $(( $NRAGENTS % 2 )) == 0 ]]; then exit 1 fi -MINP=0.2 -MAXP=1.0 +MINP=0.5 +MAXP=2.5 SFRE=2.5 -COMP=100 -KEEP=10 +COMP=200000 +KEEP=500 BASE=5000 if [ "$GOSSIP_MODE" = "0" ]; then From 0417ed5a824a1d0ba242090ed7342f13f70c599b Mon Sep 17 00:00:00 2001 From: jsteemann Date: Fri, 10 Feb 2017 11:34:36 +0100 Subject: [PATCH 5/7] fix segfault --- lib/V8/v8-utils.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/V8/v8-utils.cpp b/lib/V8/v8-utils.cpp index c9ff80e034..7dd0f5e789 100644 --- a/lib/V8/v8-utils.cpp +++ b/lib/V8/v8-utils.cpp @@ -1769,9 +1769,13 @@ static void JS_Log(v8::FunctionCallbackInfo const& args) { msg = ls + "!" + msg; } - LogTopic* topic = ts.empty() ? &Logger::FIXME : LogTopic::lookup(ts); + LogTopic* topic = ts.empty() ? nullptr : LogTopic::lookup(ts); - LOG_TOPIC_RAW(ll, *topic) << msg; + if (topic == nullptr) { + LOG_TOPIC_RAW(ll, Logger::FIXME) << msg; + } else { + LOG_TOPIC_RAW(ll, *topic) << msg; + } TRI_V8_RETURN_UNDEFINED(); TRI_V8_TRY_CATCH_END From 9708f7c4f177648ff105e507867cb8596de159fc Mon Sep 17 00:00:00 2001 From: jsteemann Date: Fri, 10 Feb 2017 11:34:44 +0100 Subject: [PATCH 6/7] fix some log topics --- lib/Logger/LogTopic.cpp | 2 ++ lib/Logger/Logger.cpp | 2 ++ lib/Logger/Logger.h | 1 + 3 files changed, 5 insertions(+) diff --git a/lib/Logger/LogTopic.cpp b/lib/Logger/LogTopic.cpp index 7bca9d44e3..c4f2e7a7f0 100644 --- a/lib/Logger/LogTopic.cpp +++ b/lib/Logger/LogTopic.cpp @@ -58,6 +58,8 @@ LogTopic Logger::QUERIES("queries", LogLevel::INFO); LogTopic Logger::REPLICATION("replication", LogLevel::INFO); LogTopic Logger::REQUESTS("requests", LogLevel::FATAL); // suppress LogTopic Logger::STARTUP("startup", LogLevel::INFO); +LogTopic Logger::SUPERVISION("supervision", LogLevel::INFO); +LogTopic Logger::SYSCALL("syscall", LogLevel::WARN); LogTopic Logger::THREADS("threads", LogLevel::WARN); LogTopic Logger::V8("v8", LogLevel::WARN); diff --git a/lib/Logger/Logger.cpp b/lib/Logger/Logger.cpp index 49f3de0783..8dc63aba52 100644 --- a/lib/Logger/Logger.cpp +++ b/lib/Logger/Logger.cpp @@ -111,6 +111,8 @@ void Logger::setLogLevel(std::string const& levelName) { if (isGeneral) { Logger::setLogLevel(level); + // setting the log level for topic "fixme" is required here, too, + // as "fixme" is the previous general log topic... LogTopic::setLogLevel(std::string("fixme"), level); } else { LogTopic::setLogLevel(v[0], level); diff --git a/lib/Logger/Logger.h b/lib/Logger/Logger.h index 299ccd6a09..b257d588f5 100644 --- a/lib/Logger/Logger.h +++ b/lib/Logger/Logger.h @@ -145,6 +145,7 @@ class Logger { static LogTopic REQUESTS; static LogTopic STARTUP; static LogTopic SUPERVISION; + static LogTopic SYSCALL; static LogTopic THREADS; static LogTopic V8; From 8dd1b9fa1c22d4bd7ae61e4f47984e6477bb4be4 Mon Sep 17 00:00:00 2001 From: jsteemann Date: Fri, 10 Feb 2017 11:49:38 +0100 Subject: [PATCH 7/7] attempt to fix some compile warnings caused by Boost header files --- 3rdParty/boost/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/3rdParty/boost/CMakeLists.txt b/3rdParty/boost/CMakeLists.txt index c7300382df..39eeecf982 100644 --- a/3rdParty/boost/CMakeLists.txt +++ b/3rdParty/boost/CMakeLists.txt @@ -9,14 +9,14 @@ set(boost_src "${CMAKE_CURRENT_SOURCE_DIR}/${boost_version}") option(USE_BOOST_UNITTESTS "use boost unit-tests" ON) if(false) #for now we do not use the system's boost but our own instead! add_library(boost_boost INTERFACE) - target_include_directories(boost_boost PUBLIC SYSTEM ${Boost_INCLUDE_DIRS}) + target_include_directories(boost_boost SYSTEM PUBLIC ${Boost_INCLUDE_DIRS}) # we are good # create imported targets?! else() #create interface target for boost header only libraries message(STATUS "using 3rdParty BOOST") add_library(boost_boost INTERFACE) - target_include_directories(boost_boost INTERFACE SYSTEM "${boost_src}") + target_include_directories(boost_boost SYSTEM INTERFACE "${boost_src}") #build boost_system - there seems to be just one cpp file:) add_library(boost_system STATIC