mirror of https://gitee.com/bigwinds/arangodb
Merge branch 'devel' of https://github.com/arangodb/arangodb into devel
This commit is contained in:
commit
5bfd12a0ce
2
README
2
README
|
@ -25,7 +25,7 @@ Here is an AQL query that makes use of all those features:
|
|||
AQL Query Example AQL Query Example
|
||||
Joins and transactions are key features for flexible, secure data designs,
|
||||
widely used in relational databases but lacking in many NoSQL products.
|
||||
However, there is no need to forget them in ArangoDB. You decide how and when
|
||||
However, there is no need to forego them in ArangoDB. You decide how and when
|
||||
to use joins and strong consistency guarantees, without sacrificing performance
|
||||
and scalability.
|
||||
Furthermore, ArangoDB offers a JavaScript framework called Foxx that is
|
||||
|
|
|
@ -2296,7 +2296,8 @@ static int WarmupEnvironment(v8::Isolate* isolate,
|
|||
"no 'javascript.startup-directory' has been supplied, giving up");
|
||||
}
|
||||
|
||||
LOG(DEBUG) << "using JavaScript startup files at '" << StartupPath.c_str() << "'";
|
||||
LOG(DEBUG) << "using JavaScript startup files at '" << StartupPath << "'";
|
||||
|
||||
StartupLoader.setDirectory(StartupPath);
|
||||
|
||||
// load all init files
|
||||
|
@ -2329,7 +2330,7 @@ static int WarmupEnvironment(v8::Isolate* isolate,
|
|||
for (size_t i = 0; i < files.size(); ++i) {
|
||||
switch (StartupLoader.loadScript(isolate, context, files[i])) {
|
||||
case JSLoader::eSuccess:
|
||||
LOG(TRACE) << "loaded JavaScript file '" << files[i].c_str() << "'";
|
||||
LOG(TRACE) << "loaded JavaScript file '" << files[i] << "'";
|
||||
break;
|
||||
case JSLoader::eFailLoad:
|
||||
LOG_FATAL_AND_EXIT("cannot load JavaScript file '%s'",
|
||||
|
|
|
@ -30,7 +30,7 @@ namespace {
|
|||
std::atomic_int_fast16_t NEXT_TOPIC_ID(0);
|
||||
}
|
||||
|
||||
LogLevel Logger::_level = LogLevel::INFO;
|
||||
std::atomic<LogLevel> Logger::_level(LogLevel::INFO);
|
||||
|
||||
LogTopic::LogTopic(std::string const& name)
|
||||
: LogTopic(name, LogLevel::DEFAULT) {}
|
||||
|
@ -49,7 +49,7 @@ LogTopic LogTopic::operator|(LogTopic const& that) {
|
|||
result._topics |= that._topics;
|
||||
|
||||
if (result._level < that._level) {
|
||||
result._level = that._level;
|
||||
result._level.store(that._level, std::memory_order_relaxed);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -60,3 +60,7 @@ LogTopic Logger::COLLECTOR("collector");
|
|||
LogTopic Logger::COMPACTOR("compactor");
|
||||
LogTopic Logger::PERFORMANCE("performance");
|
||||
LogTopic Logger::REQUESTS("request");
|
||||
|
||||
void Logger::setLevel(LogLevel level) {
|
||||
_level = level;
|
||||
}
|
||||
|
|
|
@ -95,16 +95,18 @@ class LogTopic {
|
|||
LogTopic(std::string const& name, LogLevel level);
|
||||
|
||||
LogTopic(LogTopic const& that) noexcept : _topicId(that._topicId),
|
||||
_topics(that._topics),
|
||||
_level(that._level) {}
|
||||
_topics(that._topics) {
|
||||
_level.store(that._level, std::memory_order_relaxed);
|
||||
}
|
||||
|
||||
LogTopic(LogTopic&& that) noexcept : _topicId(that._topicId),
|
||||
_topics(std::move(that._topics)),
|
||||
_level(that._level) {}
|
||||
_topics(std::move(that._topics)) {
|
||||
_level.store(that._level, std::memory_order_relaxed);
|
||||
}
|
||||
|
||||
public:
|
||||
LogLevel level() const { return _level; }
|
||||
void setLevel(LogLevel level) { _level = level; }
|
||||
LogLevel level() const { return _level.load(std::memory_order_relaxed); }
|
||||
void setLevel(LogLevel level) { _level.store(level, std::memory_order_relaxed); }
|
||||
std::bitset<MAX_LOG_TOPICS> const& bits() const { return _topics; }
|
||||
|
||||
LogTopic operator|(LogTopic const&);
|
||||
|
@ -112,7 +114,7 @@ class LogTopic {
|
|||
private:
|
||||
size_t _topicId;
|
||||
std::bitset<MAX_LOG_TOPICS> _topics;
|
||||
LogLevel _level;
|
||||
std::atomic<LogLevel> _level;
|
||||
};
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -187,11 +189,19 @@ class Logger {
|
|||
};
|
||||
|
||||
public:
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief sets the log level
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
static void setLevel(LogLevel);
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief checks if logging is enabled for log level
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
static bool isEnabled(LogLevel level) { return (int)level <= (int)_level; }
|
||||
static bool isEnabled(LogLevel level) {
|
||||
return (int)level <= (int)_level.load(std::memory_order_relaxed);
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief checks if logging is enabled for log topic
|
||||
|
@ -199,7 +209,8 @@ class Logger {
|
|||
|
||||
static bool isEnabled(LogLevel level, LogTopic const& topic) {
|
||||
return (int)level <=
|
||||
(int)((topic.level() == LogLevel::DEFAULT) ? _level : topic.level());
|
||||
(int)((topic.level() == LogLevel::DEFAULT) ? _level.load(std::memory_order_relaxed)
|
||||
: topic.level());
|
||||
}
|
||||
|
||||
private:
|
||||
|
@ -207,7 +218,7 @@ class Logger {
|
|||
/// @brief current log level
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
static LogLevel _level;
|
||||
static std::atomic<LogLevel> _level;
|
||||
};
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
|
|
@ -46,6 +46,7 @@
|
|||
#include "Basics/tri-strings.h"
|
||||
#include "Basics/vector.h"
|
||||
|
||||
using namespace arangodb;
|
||||
using namespace arangodb::basics;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -945,27 +946,34 @@ void TRI_SetLogLevelLogging(char const* level) {
|
|||
IsTrace = 0;
|
||||
|
||||
if (TRI_CaseEqualString(level, "fatal")) {
|
||||
Logger::setLevel(LogLevel::FATAL);
|
||||
} else if (TRI_CaseEqualString(level, "error")) {
|
||||
Logger::setLevel(LogLevel::ERROR);
|
||||
IsError = 1;
|
||||
} else if (TRI_CaseEqualString(level, "warning")) {
|
||||
Logger::setLevel(LogLevel::WARNING);
|
||||
IsError = 1;
|
||||
IsWarning = 1;
|
||||
} else if (TRI_CaseEqualString(level, "info")) {
|
||||
Logger::setLevel(LogLevel::INFO);
|
||||
IsError = 1;
|
||||
IsWarning = 1;
|
||||
IsInfo = 1;
|
||||
} else if (TRI_CaseEqualString(level, "debug")) {
|
||||
Logger::setLevel(LogLevel::DEBUG);
|
||||
IsError = 1;
|
||||
IsWarning = 1;
|
||||
IsInfo = 1;
|
||||
IsDebug = 1;
|
||||
} else if (TRI_CaseEqualString(level, "trace")) {
|
||||
Logger::setLevel(LogLevel::TRACE);
|
||||
IsError = 1;
|
||||
IsWarning = 1;
|
||||
IsInfo = 1;
|
||||
IsDebug = 1;
|
||||
IsTrace = 1;
|
||||
} else {
|
||||
Logger::setLevel(LogLevel::INFO);
|
||||
IsError = 1;
|
||||
IsWarning = 1;
|
||||
IsInfo = 1;
|
||||
|
|
|
@ -1,14 +1,6 @@
|
|||
#!/bin/bash
|
||||
export PID=$$
|
||||
|
||||
self=$0
|
||||
if test -f "${self}.js"; then
|
||||
export SCRIPT=${self}.js
|
||||
else
|
||||
export SCRIPT=$1
|
||||
shift
|
||||
fi
|
||||
|
||||
if test -n "$ORIGINAL_PATH"; then
|
||||
# running in cygwin...
|
||||
PS='\'
|
||||
|
|
Loading…
Reference in New Issue