summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMathias Stearn <mathias@10gen.com>2017-08-11 10:22:09 -0400
committerMathias Stearn <mathias@10gen.com>2017-08-16 16:28:02 -0400
commitdee1c5c4bf9d15d8ee7138130ad097a4ee7e523b (patch)
tree7eed7d003e33709a4bfa7199d96e49433c11c5cd
parent347935f7a5d0452146b1a73ad7ef9e249eaf1fb5 (diff)
downloadmongo-dee1c5c4bf9d15d8ee7138130ad097a4ee7e523b.tar.gz
SERVER-30580 StringData-ify error handling functions
-rw-r--r--src/mongo/base/status.cpp1
-rw-r--r--src/mongo/base/status.h1
-rw-r--r--src/mongo/base/status_with.h2
-rw-r--r--src/mongo/logger/redaction.cpp8
-rw-r--r--src/mongo/logger/redaction.h12
-rw-r--r--src/mongo/util/assert_util.cpp34
-rw-r--r--src/mongo/util/assert_util.h23
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);