diff options
author | Mathias Stearn <mathias@10gen.com> | 2017-08-11 10:22:09 -0400 |
---|---|---|
committer | Mathias Stearn <mathias@10gen.com> | 2017-08-16 16:28:02 -0400 |
commit | dee1c5c4bf9d15d8ee7138130ad097a4ee7e523b (patch) | |
tree | 7eed7d003e33709a4bfa7199d96e49433c11c5cd | |
parent | 347935f7a5d0452146b1a73ad7ef9e249eaf1fb5 (diff) | |
download | mongo-dee1c5c4bf9d15d8ee7138130ad097a4ee7e523b.tar.gz |
SERVER-30580 StringData-ify error handling functions
-rw-r--r-- | src/mongo/base/status.cpp | 1 | ||||
-rw-r--r-- | src/mongo/base/status.h | 1 | ||||
-rw-r--r-- | src/mongo/base/status_with.h | 2 | ||||
-rw-r--r-- | src/mongo/logger/redaction.cpp | 8 | ||||
-rw-r--r-- | src/mongo/logger/redaction.h | 12 | ||||
-rw-r--r-- | src/mongo/util/assert_util.cpp | 34 | ||||
-rw-r--r-- | src/mongo/util/assert_util.h | 23 |
7 files changed, 40 insertions, 41 deletions
diff --git a/src/mongo/base/status.cpp b/src/mongo/base/status.cpp index 57aedd11749..90bdec72457 100644 --- a/src/mongo/base/status.cpp +++ b/src/mongo/base/status.cpp @@ -48,6 +48,7 @@ Status::Status(ErrorCodes::Error code, std::string reason) } Status::Status(ErrorCodes::Error code, const char* reason) : Status(code, std::string(reason)) {} +Status::Status(ErrorCodes::Error code, StringData reason) : Status(code, reason.toString()) {} Status::Status(ErrorCodes::Error code, const mongoutils::str::stream& reason) : Status(code, std::string(reason)) {} diff --git a/src/mongo/base/status.h b/src/mongo/base/status.h index 6688dbe41bb..da98ad72c58 100644 --- a/src/mongo/base/status.h +++ b/src/mongo/base/status.h @@ -74,6 +74,7 @@ public: */ MONGO_COMPILER_COLD_FUNCTION Status(ErrorCodes::Error code, std::string reason); MONGO_COMPILER_COLD_FUNCTION Status(ErrorCodes::Error code, const char* reason); + MONGO_COMPILER_COLD_FUNCTION Status(ErrorCodes::Error code, StringData reason); MONGO_COMPILER_COLD_FUNCTION Status(ErrorCodes::Error code, const mongoutils::str::stream& reason); diff --git a/src/mongo/base/status_with.h b/src/mongo/base/status_with.h index 05b5731a78a..1928fa72e40 100644 --- a/src/mongo/base/status_with.h +++ b/src/mongo/base/status_with.h @@ -69,6 +69,8 @@ public: /** * for the error case */ + MONGO_COMPILER_COLD_FUNCTION StatusWith(ErrorCodes::Error code, StringData reason) + : _status(code, reason) {} MONGO_COMPILER_COLD_FUNCTION StatusWith(ErrorCodes::Error code, std::string reason) : _status(code, std::move(reason)) {} MONGO_COMPILER_COLD_FUNCTION StatusWith(ErrorCodes::Error code, const char* reason) diff --git a/src/mongo/logger/redaction.cpp b/src/mongo/logger/redaction.cpp index 3c27cf70529..f5788f11e70 100644 --- a/src/mongo/logger/redaction.cpp +++ b/src/mongo/logger/redaction.cpp @@ -38,6 +38,12 @@ namespace mongo { +namespace { + +constexpr auto kRedactionDefaultMask = "###"_sd; + +} // namespace + std::string redact(const BSONObj& objectToRedact) { if (!logger::globalLogDomain()->shouldRedactLogs()) { return objectToRedact.toString(false); @@ -46,7 +52,7 @@ std::string redact(const BSONObj& objectToRedact) { return objectToRedact.toString(true); } -std::string redact(const std::string& stringToRedact) { +StringData redact(StringData stringToRedact) { if (!logger::globalLogDomain()->shouldRedactLogs()) { return stringToRedact; } diff --git a/src/mongo/logger/redaction.h b/src/mongo/logger/redaction.h index b5706b2bed6..23948d274c8 100644 --- a/src/mongo/logger/redaction.h +++ b/src/mongo/logger/redaction.h @@ -29,6 +29,8 @@ #include <string> +#include "mongo/base/string_data.h" + /** * The 'redact' methods defined below should be used to redact possibly sensitive * information when operating the server in 'redact' mode. @@ -48,8 +50,6 @@ class BSONObj; class Status; class DBException; -const std::string kRedactionDefaultMask = "###"; - /** * In 'redact' mode replace all values with '###' and keep keys intact. * In normal mode return objectToRedact.toString(). @@ -60,7 +60,13 @@ std::string redact(const BSONObj& objectToRedact); * In 'redact mode return '###'. * In normal mode return stringToRedact. */ -std::string redact(const std::string& stringToRedact); +StringData redact(StringData stringToRedact); +inline StringData redact(const char* stringToRedact) { + return redact(StringData(stringToRedact)); +} +inline StringData redact(const std::string& stringToRedact) { + return redact(StringData(stringToRedact)); +} /** * In 'redact' mode keep status code and replace reason with '###'. diff --git a/src/mongo/util/assert_util.cpp b/src/mongo/util/assert_util.cpp index 52e36c27c27..34f8a379751 100644 --- a/src/mongo/util/assert_util.cpp +++ b/src/mongo/util/assert_util.cpp @@ -179,12 +179,8 @@ MONGO_COMPILER_NORETURN void fassertFailedWithStatusNoTraceWithLocation(int msgi quickExit(EXIT_ABRUPT); } -void uassertedWithLocation(int msgid, const string& msg, const char* file, unsigned line) { - uassertedWithLocation(msgid, msg.c_str(), file, line); -} - NOINLINE_DECL void uassertedWithLocation(int msgid, - const char* msg, + StringData msg, const char* file, unsigned line) { assertionCount.condrollover(++assertionCount.user); @@ -193,12 +189,8 @@ NOINLINE_DECL void uassertedWithLocation(int msgid, throw AssertionException(msgid, msg); } -void msgassertedWithLocation(int msgid, const string& msg, const char* file, unsigned line) { - msgassertedWithLocation(msgid, msg.c_str(), file, line); -} - NOINLINE_DECL void msgassertedWithLocation(int msgid, - const char* msg, + StringData msg, const char* file, unsigned line) { assertionCount.condrollover(++assertionCount.warning); @@ -209,7 +201,7 @@ NOINLINE_DECL void msgassertedWithLocation(int msgid, } NOINLINE_DECL void msgassertedNoTraceWithLocation(int msgid, - const char* msg, + StringData msg, const char* file, unsigned line) { assertionCount.condrollover(++assertionCount.warning); @@ -218,13 +210,6 @@ NOINLINE_DECL void msgassertedNoTraceWithLocation(int msgid, throw AssertionException(msgid, msg); } -void msgassertedNoTraceWithLocation(int msgid, - const std::string& msg, - const char* file, - unsigned line) { - msgassertedNoTraceWithLocation(msgid, msg.c_str(), file, line); -} - void msgassertedNoTraceWithStatusWithLocation(int msgid, const Status& status, const char* file, @@ -232,8 +217,17 @@ void msgassertedNoTraceWithStatusWithLocation(int msgid, msgassertedNoTraceWithLocation(msgid, status.toString(), file, line); } +std::string causedBy(StringData e) { + constexpr auto prefix = " :: caused by :: "_sd; + std::string out; + out.reserve(prefix.size() + e.size()); + out.append(prefix.rawData(), prefix.size()); + out.append(e.rawData(), e.size()); + return out; +} + std::string causedBy(const char* e) { - return std::string(" :: caused by :: ") + e; + return causedBy(StringData(e)); } std::string causedBy(const DBException& e) { @@ -245,7 +239,7 @@ std::string causedBy(const std::exception& e) { } std::string causedBy(const std::string& e) { - return causedBy(e.c_str()); + return causedBy(StringData(e)); } std::string causedBy(const Status& e) { diff --git a/src/mongo/util/assert_util.h b/src/mongo/util/assert_util.h index 3fd09b14faf..e03ae0446d8 100644 --- a/src/mongo/util/assert_util.h +++ b/src/mongo/util/assert_util.h @@ -69,7 +69,7 @@ public: invariant(!status.isOK()); traceIfNeeded(*this); } - DBException(int code, const std::string& msg) + DBException(int code, StringData msg) : DBException(Status(code ? ErrorCodes::fromInt(code) : ErrorCodes::UnknownError, msg)) {} virtual ~DBException() throw() {} @@ -113,7 +113,7 @@ protected: class AssertionException : public DBException { public: AssertionException(const Status& status) : DBException(status) {} - AssertionException(int code, const std::string& msg) : DBException(code, msg) {} + AssertionException(int code, StringData msg) : DBException(code, msg) {} virtual ~AssertionException() throw() {} }; @@ -158,11 +158,7 @@ MONGO_COMPILER_NORETURN void fassertFailedWithStatusNoTraceWithLocation(int msgi could cause, such as duplicate key, disk full, etc. */ MONGO_COMPILER_NORETURN void uassertedWithLocation(int msgid, - const char* msg, - const char* file, - unsigned line); -MONGO_COMPILER_NORETURN void uassertedWithLocation(int msgid, - const std::string& msg, + StringData msg, const char* file, unsigned line); @@ -174,11 +170,7 @@ MONGO_COMPILER_NORETURN void uassertedWithLocation(int msgid, #define MONGO_msgassertedNoTrace(...) \ ::mongo::msgassertedNoTraceWithLocation(__VA_ARGS__, __FILE__, __LINE__) MONGO_COMPILER_NORETURN void msgassertedNoTraceWithLocation(int msgid, - const char* msg, - const char* file, - unsigned line); -MONGO_COMPILER_NORETURN void msgassertedNoTraceWithLocation(int msgid, - const std::string& msg, + StringData msg, const char* file, unsigned line); @@ -193,15 +185,12 @@ MONGO_COMPILER_NORETURN void msgassertedNoTraceWithStatusWithLocation(int msgid, #define msgasserted MONGO_msgasserted #define MONGO_msgasserted(...) ::mongo::msgassertedWithLocation(__VA_ARGS__, __FILE__, __LINE__) MONGO_COMPILER_NORETURN void msgassertedWithLocation(int msgid, - const char* msg, - const char* file, - unsigned line); -MONGO_COMPILER_NORETURN void msgassertedWithLocation(int msgid, - const std::string& msg, + StringData msg, const char* file, unsigned line); /* convert various types of exceptions to strings */ +std::string causedBy(StringData e); std::string causedBy(const char* e); std::string causedBy(const DBException& e); std::string causedBy(const std::exception& e); |