From 488e4be48598d5bc03c6163c94b4953f02f5c02b Mon Sep 17 00:00:00 2001 From: jsteemann Date: Tue, 9 May 2017 12:42:25 +0200 Subject: [PATCH] preparation for RocksDB logger --- arangod/GeneralServer/GeneralCommTask.cpp | 4 +--- arangod/RocksDBEngine/RocksDBEngine.cpp | 6 ++++-- arangod/RocksDBEngine/RocksDBTransactionState.cpp | 6 ++++++ arangod/Utils/WorkMonitorArangod.cpp | 1 - lib/Basics/RocksDBLogger.cpp | 13 +++++++++++-- lib/Basics/RocksDBLogger.h | 1 + 6 files changed, 23 insertions(+), 8 deletions(-) diff --git a/arangod/GeneralServer/GeneralCommTask.cpp b/arangod/GeneralServer/GeneralCommTask.cpp index 92bef6fe1e..6b5c005f91 100644 --- a/arangod/GeneralServer/GeneralCommTask.cpp +++ b/arangod/GeneralServer/GeneralCommTask.cpp @@ -61,15 +61,13 @@ GeneralCommTask::GeneralCommTask(EventLoop loop, GeneralServer* server, _server(server) {} GeneralCommTask::~GeneralCommTask() { - for (auto&& statistics : _statisticsMap) { + for (auto& statistics : _statisticsMap) { auto stat = statistics.second; if (stat != nullptr) { stat->release(); } } - - _statisticsMap.clear(); } // ----------------------------------------------------------------------------- diff --git a/arangod/RocksDBEngine/RocksDBEngine.cpp b/arangod/RocksDBEngine/RocksDBEngine.cpp index f22fddf586..6cb0a96010 100644 --- a/arangod/RocksDBEngine/RocksDBEngine.cpp +++ b/arangod/RocksDBEngine/RocksDBEngine.cpp @@ -222,8 +222,10 @@ void RocksDBEngine::start() { _options.info_log_level = rocksdb::InfoLogLevel::ERROR_LEVEL; // intentionally do not start the logger (yet) // as it will produce a lot of log spam - // _options.info_log = - // std::make_shared(rocksdb::InfoLogLevel::ERROR_LEVEL); + // _options.info_log = std::make_shared(_options.info_log_level); + + // _options.statistics = rocksdb::CreateDBStatistics(); + // _options.stats_dump_period_sec = 1; rocksdb::BlockBasedTableOptions table_options; if (opts->_blockCacheSize > 0) { diff --git a/arangod/RocksDBEngine/RocksDBTransactionState.cpp b/arangod/RocksDBEngine/RocksDBTransactionState.cpp index 935a888c17..774ab15d3b 100644 --- a/arangod/RocksDBEngine/RocksDBTransactionState.cpp +++ b/arangod/RocksDBEngine/RocksDBTransactionState.cpp @@ -203,7 +203,13 @@ Result RocksDBTransactionState::commitTransaction( // TODO wait for response on github issue to see how we can use the // sequence number + double t1 = TRI_microtime(); result = rocksutils::convertStatus(_rocksTransaction->Commit()); + + double t2 = TRI_microtime(); + if (t2 - t1 > 0.25) { + LOG_TOPIC(ERR, Logger::FIXME) << "COMMIT TOOK: " << (t2 - t1) << " S. NUMINSERTS: " << _numInserts << ", NUMUPDATES: " << _numUpdates << ", NUMREMOVES: " << _numRemoves << ", TRANSACTIONSIZE: " << _transactionSize; + } rocksdb::SequenceNumber latestSeq = rocksutils::globalRocksDB()->GetLatestSequenceNumber(); if (!result.ok()) { diff --git a/arangod/Utils/WorkMonitorArangod.cpp b/arangod/Utils/WorkMonitorArangod.cpp index 40d0d28e38..5666b05adf 100644 --- a/arangod/Utils/WorkMonitorArangod.cpp +++ b/arangod/Utils/WorkMonitorArangod.cpp @@ -34,7 +34,6 @@ #include "Rest/HttpRequest.h" #include "Scheduler/Scheduler.h" #include "Scheduler/SchedulerFeature.h" -#include "Statistics/RequestStatistics.h" #include "VocBase/vocbase.h" using namespace arangodb; diff --git a/lib/Basics/RocksDBLogger.cpp b/lib/Basics/RocksDBLogger.cpp index 1d185d0f52..0aa4773528 100644 --- a/lib/Basics/RocksDBLogger.cpp +++ b/lib/Basics/RocksDBLogger.cpp @@ -30,7 +30,11 @@ using namespace arangodb; RocksDBLogger::RocksDBLogger(rocksdb::InfoLogLevel level) : rocksdb::Logger(level) {} RocksDBLogger::~RocksDBLogger() {} -void RocksDBLogger::Logv(char const* format, va_list ap) { +void RocksDBLogger::Logv(const rocksdb::InfoLogLevel logLevel, char const* format, va_list ap) { + if (logLevel < GetInfoLogLevel()) { + return; + } + static constexpr size_t prefixSize = 9; // strlen("rocksdb: "); char buffer[2048]; memcpy(&buffer[0], "rocksdb: \0", prefixSize); // add trailing \0 byte already for safety @@ -57,7 +61,7 @@ void RocksDBLogger::Logv(char const* format, va_list ap) { --l; } - switch (GetInfoLogLevel()) { + switch (logLevel) { case rocksdb::InfoLogLevel::DEBUG_LEVEL: LOG_TOPIC(DEBUG, arangodb::Logger::FIXME) << StringRef(buffer, l); break; @@ -76,3 +80,8 @@ void RocksDBLogger::Logv(char const* format, va_list ap) { } } } + +void RocksDBLogger::Logv(char const* format, va_list ap) { + // forward to the level-aware method + Logv(rocksdb::InfoLogLevel::INFO_LEVEL, format, ap); +} diff --git a/lib/Basics/RocksDBLogger.h b/lib/Basics/RocksDBLogger.h index 2965dddb86..dae4445f70 100644 --- a/lib/Basics/RocksDBLogger.h +++ b/lib/Basics/RocksDBLogger.h @@ -40,6 +40,7 @@ class RocksDBLogger final : public rocksdb::Logger { void LogHeader(const char* format, va_list ap) override {} void Logv(char const* format, va_list ap) override; + void Logv(const rocksdb::InfoLogLevel, char const* format, va_list ap) override; // nothing to do here, as ArangoDB logger infrastructure takes care of flushing itself void Flush() override {}