summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWaley Chen <waleycz@gmail.com>2016-03-14 15:49:50 -0400
committerWaley Chen <waleycz@gmail.com>2016-03-17 16:31:26 -0400
commit13435ba4e4ae6df60bc6999ccadd973fe34a5d14 (patch)
tree2020fa0d7fe5101ee380b8f9a5805518a687c34c
parentd67ed5781d07b0c40be53f18878d7f6061672b3c (diff)
downloadmongo-13435ba4e4ae6df60bc6999ccadd973fe34a5d14.tar.gz
SERVER-22874 network asio operation embeds literal tabs and newlines into strings
-rw-r--r--src/mongo/executor/network_interface_asio.cpp3
-rw-r--r--src/mongo/executor/network_interface_asio.h2
-rw-r--r--src/mongo/executor/network_interface_asio_operation.cpp24
3 files changed, 22 insertions, 7 deletions
diff --git a/src/mongo/executor/network_interface_asio.cpp b/src/mongo/executor/network_interface_asio.cpp
index 7da182d2073..b1ac4514e52 100644
--- a/src/mongo/executor/network_interface_asio.cpp
+++ b/src/mongo/executor/network_interface_asio.cpp
@@ -104,9 +104,8 @@ std::string NetworkInterfaceASIO::_getDiagnosticString_inlock(AsyncOp* currentOp
output << "\t Operations _inProgress: " << _inProgress.size() << "\n";
if (_inProgress.size() > 0) {
- // Set up labels, first is placeholder for asterisk
std::vector<TableRow> rows;
- rows.push_back({"", "ID", "STATES", "START_TIME", "REQUEST"});
+ rows.push_back(AsyncOp::kFieldLabels);
// Push AsyncOps
for (auto&& kv : _inProgress) {
diff --git a/src/mongo/executor/network_interface_asio.h b/src/mongo/executor/network_interface_asio.h
index b4d1d05021d..5e7f653d8fd 100644
--- a/src/mongo/executor/network_interface_asio.h
+++ b/src/mongo/executor/network_interface_asio.h
@@ -351,6 +351,8 @@ private:
// Type to represent the internal id of this request.
using AsyncOpId = uint64_t;
+ static const TableRow kFieldLabels;
+
// Return string representation of a given state.
std::string _stateToString(State state) const;
diff --git a/src/mongo/executor/network_interface_asio_operation.cpp b/src/mongo/executor/network_interface_asio_operation.cpp
index 963d80dbbdd..7c0e66c6eda 100644
--- a/src/mongo/executor/network_interface_asio_operation.cpp
+++ b/src/mongo/executor/network_interface_asio_operation.cpp
@@ -100,6 +100,9 @@ StatusWith<Message> messageFromRequest(const RemoteCommandRequest& request,
} // namespace
+const NetworkInterfaceASIO::TableRow NetworkInterfaceASIO::AsyncOp::kFieldLabels = {
+ "", "id", "states", "start_time", "request"};
+
NetworkInterfaceASIO::AsyncOp::AsyncOp(NetworkInterfaceASIO* const owner,
const TaskExecutor::CallbackHandle& cbHandle,
const RemoteCommandRequest& request,
@@ -300,7 +303,7 @@ void NetworkInterfaceASIO::AsyncOp::setOnFinish(RemoteCommandCompletionFn&& onFi
std::string NetworkInterfaceASIO::AsyncOp::_stateToString(AsyncOp::State state) const {
switch (state) {
case State::kUninitialized:
- return "UNITIALIZED";
+ return "UNINITIALIZED";
case State::kInProgress:
return "IN_PROGRESS";
case State::kTimedOut:
@@ -344,10 +347,21 @@ NetworkInterfaceASIO::TableRow NetworkInterfaceASIO::AsyncOp::getStringFields()
std::string NetworkInterfaceASIO::AsyncOp::toString() const {
str::stream s;
+ int fieldIdx = 1;
+ bool first = true;
+
for (auto field : getStringFields()) {
- s << field << "\t\t";
+ if (field != "") {
+ if (first) {
+ first = false;
+ } else {
+ s << ", ";
+ }
+
+ s << kFieldLabels[fieldIdx] << ": " << field;
+ fieldIdx++;
+ }
}
- s << "\n";
return s;
}
@@ -431,8 +445,8 @@ void NetworkInterfaceASIO::AsyncOp::_failWithInfo(const char* file,
int line,
std::string error) const {
std::stringstream ss;
- ss << "Invariant failure at " << file << ":" << line << ": " << error;
- ss << "\n\t Operation: " << toString();
+ ss << "Invariant failure at " << file << ":" << line << ": " << error
+ << ", Operation: " << toString();
Status status{ErrorCodes::InternalError, ss.str()};
fassertFailedWithStatus(34430, status);
}