From b767e5625e330532e880d9c0ba76d7c82a6c9d5c Mon Sep 17 00:00:00 2001 From: Andrey Abramov Date: Thu, 5 Jul 2018 16:58:44 +0300 Subject: [PATCH] Bug fix/internal issue #417 (#5775) * ensure correctness of log level mapping * fix bug * code cleanup --- .../iresearch/core/formats/formats_10.cpp | 2 +- arangod/IResearch/IResearchFeature.cpp | 36 +++++++++++++++---- 2 files changed, 30 insertions(+), 8 deletions(-) diff --git a/3rdParty/iresearch/core/formats/formats_10.cpp b/3rdParty/iresearch/core/formats/formats_10.cpp index 6081f65be5..27983406b2 100644 --- a/3rdParty/iresearch/core/formats/formats_10.cpp +++ b/3rdParty/iresearch/core/formats/formats_10.cpp @@ -1947,7 +1947,7 @@ class writer final : public iresearch::columnstore_writer { // flush block if we've overcome INDEX_BLOCK_SIZE size (before push_back) if (INDEX_BLOCK_SIZE <= block_index_.size()) { flush_block(); - min_ = key; + min_ = pending_key_; offset = block_buf_.size(); // reset offset to position in the current block } diff --git a/arangod/IResearch/IResearchFeature.cpp b/arangod/IResearch/IResearchFeature.cpp index 1e0cce9b72..a8cca3d848 100644 --- a/arangod/IResearch/IResearchFeature.cpp +++ b/arangod/IResearch/IResearchFeature.cpp @@ -76,9 +76,9 @@ NS_LOCAL class IResearchLogTopic final : public arangodb::LogTopic { public: - IResearchLogTopic(std::string const& name, arangodb::LogLevel level) - : arangodb::LogTopic(name, level) { - setIResearchLogLevel(level); + IResearchLogTopic(std::string const& name) + : arangodb::LogTopic(name, DEFAULT_LEVEL) { + setIResearchLogLevel(DEFAULT_LEVEL); } virtual void setLogLevel(arangodb::LogLevel level) override { @@ -87,12 +87,34 @@ class IResearchLogTopic final : public arangodb::LogTopic { } private: + static arangodb::LogLevel const DEFAULT_LEVEL= arangodb::LogLevel::INFO; + + typedef std::underlying_type::type irsLogLevelType; + typedef std::underlying_type::type arangoLogLevelType; + + static_assert( + static_cast(irs::logger::IRL_FATAL) == static_cast(arangodb::LogLevel::FATAL) - 1 + && static_cast(irs::logger::IRL_ERROR) == static_cast(arangodb::LogLevel::ERR) - 1 + && static_cast(irs::logger::IRL_WARN) == static_cast(arangodb::LogLevel::WARN) - 1 + && static_cast(irs::logger::IRL_INFO) == static_cast(arangodb::LogLevel::INFO) - 1 + && static_cast(irs::logger::IRL_DEBUG) == static_cast(arangodb::LogLevel::DEBUG) - 1 + && static_cast(irs::logger::IRL_TRACE) == static_cast(arangodb::LogLevel::TRACE) - 1, + "inconsistent log level mapping" + ); + static void setIResearchLogLevel(arangodb::LogLevel level) { - auto irsLevel = static_cast(level); + if (level == arangodb::LogLevel::DEFAULT) { + level = DEFAULT_LEVEL; + } + + auto irsLevel = static_cast( + static_cast(level) - 1 + ); // -1 for DEFAULT + irsLevel = std::max(irsLevel, irs::logger::IRL_FATAL); irsLevel = std::min(irsLevel, irs::logger::IRL_TRACE); - irs::logger::enabled(irsLevel); + irs::logger::output_le(irsLevel, stderr); } }; // IResearchLogTopic @@ -347,7 +369,7 @@ void registerTransactionDataSourceRegistrationCallback() { } std::string const FEATURE_NAME("ArangoSearch"); -IResearchLogTopic LIBIRESEARCH("libiresearch", arangodb::LogLevel::INFO); +IResearchLogTopic LIBIRESEARCH("libiresearch"); NS_END @@ -707,4 +729,4 @@ NS_END // arangodb // ----------------------------------------------------------------------------- // --SECTION-- END-OF-FILE -// ----------------------------------------------------------------------------- \ No newline at end of file +// -----------------------------------------------------------------------------