summaryrefslogtreecommitdiffstats
path: root/messagebus
diff options
context:
space:
mode:
Diffstat (limited to 'messagebus')
-rw-r--r--messagebus/src/tests/simpleprotocol/simpleprotocol.cpp18
-rw-r--r--messagebus/src/tests/trace-roundtrip/trace-roundtrip.cpp2
-rw-r--r--messagebus/src/vespa/messagebus/network/rpcsend.cpp2
-rw-r--r--messagebus/src/vespa/messagebus/network/rpcsend.h4
-rw-r--r--messagebus/src/vespa/messagebus/network/rpcsendv1.cpp8
-rw-r--r--messagebus/src/vespa/messagebus/network/rpcsendv1.h2
-rw-r--r--messagebus/src/vespa/messagebus/network/rpcsendv2.cpp4
-rw-r--r--messagebus/src/vespa/messagebus/network/rpcsendv2.h2
-rw-r--r--messagebus/src/vespa/messagebus/routable.h9
-rw-r--r--messagebus/src/vespa/messagebus/routing/routingnode.cpp13
-rw-r--r--messagebus/src/vespa/messagebus/sendproxy.cpp7
11 files changed, 35 insertions, 36 deletions
diff --git a/messagebus/src/tests/simpleprotocol/simpleprotocol.cpp b/messagebus/src/tests/simpleprotocol/simpleprotocol.cpp
index 715ef597767..bc4fc80abad 100644
--- a/messagebus/src/tests/simpleprotocol/simpleprotocol.cpp
+++ b/messagebus/src/tests/simpleprotocol/simpleprotocol.cpp
@@ -6,9 +6,7 @@
#include <vespa/messagebus/testlib/simplereply.h>
#include <vespa/messagebus/testlib/slobrok.h>
#include <vespa/messagebus/testlib/testserver.h>
-#include <vespa/messagebus/errorcode.h>
#include <vespa/messagebus/ireplyhandler.h>
-#include <vespa/messagebus/network/identity.h>
#include <vespa/messagebus/routing/routingcontext.h>
#include <vespa/vespalib/testkit/testapp.h>
#include <vespa/vespalib/component/vtag.h>
@@ -29,12 +27,15 @@ Test::Main()
{
// test protocol
IRoutingPolicy::UP bogus = protocol.createPolicy("bogus", "");
- EXPECT_TRUE(bogus.get() == 0);
+ EXPECT_FALSE(bogus);
}
TEST_FLUSH();
{
// test SimpleMessage
- Message::UP msg(new SimpleMessage("test"));
+ EXPECT_EQUAL(56u, sizeof(Routable));
+ EXPECT_EQUAL(104u, sizeof(Message));
+ EXPECT_EQUAL(184u, sizeof(SimpleMessage));
+ auto msg = std::make_unique<SimpleMessage>("test");
EXPECT_TRUE(!msg->isReply());
EXPECT_TRUE(msg->getProtocol() == SimpleProtocol::NAME);
EXPECT_TRUE(msg->getType() == SimpleProtocol::MESSAGE);
@@ -42,7 +43,7 @@ Test::Main()
Blob b = protocol.encode(version, *msg);
EXPECT_TRUE(b.size() > 0);
Routable::UP tmp = protocol.decode(version, BlobRef(b));
- ASSERT_TRUE(tmp.get() != 0);
+ ASSERT_TRUE(tmp);
EXPECT_TRUE(!tmp->isReply());
EXPECT_TRUE(tmp->getProtocol() == SimpleProtocol::NAME);
EXPECT_TRUE(tmp->getType() == SimpleProtocol::MESSAGE);
@@ -51,7 +52,10 @@ Test::Main()
TEST_FLUSH();
{
// test SimpleReply
- Reply::UP reply(new SimpleReply("reply"));
+ EXPECT_EQUAL(56u, sizeof(Routable));
+ EXPECT_EQUAL(96u, sizeof(Reply));
+ EXPECT_EQUAL(160u, sizeof(SimpleReply));
+ auto reply = std::make_unique<SimpleReply>("reply");
EXPECT_TRUE(reply->isReply());
EXPECT_TRUE(reply->getProtocol() == SimpleProtocol::NAME);
EXPECT_TRUE(reply->getType() == SimpleProtocol::REPLY);
@@ -59,7 +63,7 @@ Test::Main()
Blob b = protocol.encode(version, *reply);
EXPECT_TRUE(b.size() > 0);
Routable::UP tmp = protocol.decode(version, BlobRef(b));
- ASSERT_TRUE(tmp.get() != 0);
+ ASSERT_TRUE(tmp);
EXPECT_TRUE(tmp->isReply());
EXPECT_TRUE(tmp->getProtocol() == SimpleProtocol::NAME);
EXPECT_TRUE(tmp->getType() == SimpleProtocol::REPLY);
diff --git a/messagebus/src/tests/trace-roundtrip/trace-roundtrip.cpp b/messagebus/src/tests/trace-roundtrip/trace-roundtrip.cpp
index 344d38c8263..f97fc6a0010 100644
--- a/messagebus/src/tests/trace-roundtrip/trace-roundtrip.cpp
+++ b/messagebus/src/tests/trace-roundtrip/trace-roundtrip.cpp
@@ -120,6 +120,6 @@ Test::Main()
.addChild("Server reply")
.addChild("Proxy reply")
.addChild("Client reply");
- EXPECT_TRUE(reply->getTrace().getRoot().encode() == t.encode());
+ EXPECT_TRUE(reply->getTrace().encode() == t.encode());
TEST_DONE();
}
diff --git a/messagebus/src/vespa/messagebus/network/rpcsend.cpp b/messagebus/src/vespa/messagebus/network/rpcsend.cpp
index dca7f0c997f..86c9b139f1a 100644
--- a/messagebus/src/vespa/messagebus/network/rpcsend.cpp
+++ b/messagebus/src/vespa/messagebus/network/rpcsend.cpp
@@ -178,7 +178,7 @@ RPCSend::doRequestDone(FRT_RPCRequest *req) {
}
} else {
FRT_Values &ret = *req->GetReturn();
- reply = createReply(ret, serviceName, error, trace.getRoot());
+ reply = createReply(ret, serviceName, error, trace);
}
if (trace.shouldTrace(TraceLevel::SEND_RECEIVE)) {
trace.trace(TraceLevel::SEND_RECEIVE,
diff --git a/messagebus/src/vespa/messagebus/network/rpcsend.h b/messagebus/src/vespa/messagebus/network/rpcsend.h
index f3a9177d236..1ccdea6fbc5 100644
--- a/messagebus/src/vespa/messagebus/network/rpcsend.h
+++ b/messagebus/src/vespa/messagebus/network/rpcsend.h
@@ -12,7 +12,7 @@ class FRT_ReflectionBuilder;
namespace vespalib::slime { struct Cursor; }
namespace vespalib { struct Memory; }
-namespace vespalib { class TraceNode; }
+namespace vespalib { class Trace; }
namespace mbus {
class Error;
@@ -56,7 +56,7 @@ protected:
virtual void build(FRT_ReflectionBuilder & builder) = 0;
virtual std::unique_ptr<Reply> createReply(const FRT_Values & response, const string & serviceName,
- Error & error, vespalib::TraceNode & rootTrace) const = 0;
+ Error & error, vespalib::Trace & trace) const = 0;
virtual void encodeRequest(FRT_RPCRequest &req, const vespalib::Version &version, const Route & route,
const RPCServiceAddress & address, const Message & msg, uint32_t traceLevel,
const PayLoadFiller &filler, duration timeRemaining) const = 0;
diff --git a/messagebus/src/vespa/messagebus/network/rpcsendv1.cpp b/messagebus/src/vespa/messagebus/network/rpcsendv1.cpp
index 388ab3309c4..a8f7b47f3e3 100644
--- a/messagebus/src/vespa/messagebus/network/rpcsendv1.cpp
+++ b/messagebus/src/vespa/messagebus/network/rpcsendv1.cpp
@@ -115,7 +115,7 @@ RPCSendV1::toParams(const FRT_Values &args) const
std::unique_ptr<Reply>
-RPCSendV1::createReply(const FRT_Values & ret, const string & serviceName, Error & error, vespalib::TraceNode & rootTrace) const
+RPCSendV1::createReply(const FRT_Values & ret, const string & serviceName, Error & error, vespalib::Trace & trace) const
{
vespalib::Version version = vespalib::Version(ret[0]._string._str);
double retryDelay = ret[1]._double;
@@ -127,7 +127,7 @@ RPCSendV1::createReply(const FRT_Values & ret, const string & serviceName, Error
uint32_t errorServicesLen = ret[4]._string_array._len;
const char *protocolName = ret[5]._string._str;
BlobRef payload(ret[6]._data._buf, ret[6]._data._len);
- const char *trace = ret[7]._string._str;
+ const char *traceStr = ret[7]._string._str;
Reply::UP reply;
if (payload.size() > 0) {
@@ -141,7 +141,7 @@ RPCSendV1::createReply(const FRT_Values & ret, const string & serviceName, Error
reply->addError(Error(errorCodes[i], errorMessages[i]._str,
errorServices[i]._len > 0 ? errorServices[i]._str : serviceName.c_str()));
}
- rootTrace.addChild(TraceNode::decode(trace));
+ trace.addChild(TraceNode::decode(traceStr));
return reply;
}
@@ -163,7 +163,7 @@ RPCSendV1::createResponse(FRT_Values & ret, const string & version, Reply & repl
ret.AddString(reply.getProtocol().c_str());
ret.AddData(std::move(payload.payload()), payload.size());
if (reply.getTrace().getLevel() > 0) {
- ret.AddString(reply.getTrace().getRoot().encode().c_str());
+ ret.AddString(reply.getTrace().encode().c_str());
} else {
ret.AddString("");
}
diff --git a/messagebus/src/vespa/messagebus/network/rpcsendv1.h b/messagebus/src/vespa/messagebus/network/rpcsendv1.h
index 249acc50e0c..f9b4b0bdfe8 100644
--- a/messagebus/src/vespa/messagebus/network/rpcsendv1.h
+++ b/messagebus/src/vespa/messagebus/network/rpcsendv1.h
@@ -17,7 +17,7 @@ private:
const PayLoadFiller &filler, duration timeRemaining) const override;
std::unique_ptr<Reply> createReply(const FRT_Values & response, const string & serviceName,
- Error & error, vespalib::TraceNode & rootTrace) const override;
+ Error & error, vespalib::Trace & trace) const override;
void createResponse(FRT_Values & ret, const string & version, Reply & reply, Blob payload) const override;
};
diff --git a/messagebus/src/vespa/messagebus/network/rpcsendv2.cpp b/messagebus/src/vespa/messagebus/network/rpcsendv2.cpp
index f7303ece20f..16175fea1c2 100644
--- a/messagebus/src/vespa/messagebus/network/rpcsendv2.cpp
+++ b/messagebus/src/vespa/messagebus/network/rpcsendv2.cpp
@@ -188,7 +188,7 @@ RPCSendV2::toParams(const FRT_Values &args) const
std::unique_ptr<Reply>
RPCSendV2::createReply(const FRT_Values & ret, const string & serviceName,
- Error & error, vespalib::TraceNode & rootTrace) const
+ Error & error, vespalib::Trace & rootTrace) const
{
uint8_t encoding = ret[3]._intval8;
uint32_t uncompressedSize = ret[4]._intval32;
@@ -240,7 +240,7 @@ RPCSendV2::createResponse(FRT_Values & ret, const string & version, Reply & repl
root.setString(PROTOCOL_F, reply.getProtocol());
root.setData(BLOB_F, vespalib::Memory(payload.data(), payload.size()));
if (reply.getTrace().getLevel() > 0) {
- root.setString(TRACE_F, reply.getTrace().getRoot().encode());
+ root.setString(TRACE_F, reply.getTrace().encode());
}
if (reply.getNumErrors() > 0) {
diff --git a/messagebus/src/vespa/messagebus/network/rpcsendv2.h b/messagebus/src/vespa/messagebus/network/rpcsendv2.h
index c48aa90a9fb..da4154e70a8 100644
--- a/messagebus/src/vespa/messagebus/network/rpcsendv2.h
+++ b/messagebus/src/vespa/messagebus/network/rpcsendv2.h
@@ -17,7 +17,7 @@ private:
const PayLoadFiller &filler, duration timeRemaining) const override;
std::unique_ptr<Reply> createReply(const FRT_Values & response, const string & serviceName,
- Error & error, vespalib::TraceNode & rootTrace) const override;
+ Error & error, vespalib::Trace & trace) const override;
void createResponse(FRT_Values & ret, const string & version, Reply & reply, Blob payload) const override;
};
diff --git a/messagebus/src/vespa/messagebus/routable.h b/messagebus/src/vespa/messagebus/routable.h
index 50cb4e090ce..2c83daded1e 100644
--- a/messagebus/src/vespa/messagebus/routable.h
+++ b/messagebus/src/vespa/messagebus/routable.h
@@ -24,9 +24,9 @@ namespace mbus {
*/
class Routable {
private:
- Context _context;
- CallStack _stack;
- Trace _trace;
+ Context _context;
+ CallStack _stack;
+ Trace _trace;
public:
/**
@@ -90,6 +90,7 @@ public:
* @return Trace object
*/
Trace &getTrace() { return _trace; }
+ Trace && steal_trace() { return std::move(_trace); }
/**
* Access the Trace object for this Routable. The Trace is part of the
@@ -106,7 +107,7 @@ public:
*
* @param trace The trace to set.
*/
- void setTrace(const Trace &trace) { _trace = trace; }
+ void setTrace(Trace &&trace) { _trace = std::move(trace); }
/**
* Swaps the state that makes this routable unique to another routable. The
diff --git a/messagebus/src/vespa/messagebus/routing/routingnode.cpp b/messagebus/src/vespa/messagebus/routing/routingnode.cpp
index f24afbc07ca..5a70f510dcc 100644
--- a/messagebus/src/vespa/messagebus/routing/routingnode.cpp
+++ b/messagebus/src/vespa/messagebus/routing/routingnode.cpp
@@ -184,10 +184,7 @@ RoutingNode::setReply(Reply::UP reply)
{
if (reply) {
_shouldRetry = _resender != nullptr && _resender->shouldRetry(*reply);
- if ( ! reply->getTrace().getRoot().isEmpty()) {
- _trace.getRoot().addChild(std::move(reply->getTrace().getRoot()));
- reply->getTrace().clear();
- }
+ _trace.addChild(reply->steal_trace());
}
_reply = std::move(reply);
}
@@ -268,14 +265,12 @@ RoutingNode::notifyMerge()
// Merges the trace information from all children into this. This method takes care not to spend cycles
// manipulating the trace in case tracing is disabled.
if (_trace.getLevel() > 0) {
- TraceNode tail;
+ Trace tail;
for (auto * child : _children) {
- TraceNode &root = child->_trace.getRoot();
- tail.addChild(root);
- root.clear();
+ tail.addChild(std::move(child->_trace));
}
tail.setStrict(false);
- _trace.getRoot().addChild(tail);
+ _trace.addChild(std::move(tail));
}
// Execute the {@link RoutingPolicy#merge(RoutingContext)} method of the current routing policy. If a
diff --git a/messagebus/src/vespa/messagebus/sendproxy.cpp b/messagebus/src/vespa/messagebus/sendproxy.cpp
index c884932664b..ff514f788cd 100644
--- a/messagebus/src/vespa/messagebus/sendproxy.cpp
+++ b/messagebus/src/vespa/messagebus/sendproxy.cpp
@@ -53,11 +53,10 @@ SendProxy::handleReply(Reply::UP reply)
} else if (logger.wants(ns_log::Logger::spam)) {
LOG(spam, "Trace for reply:\n%s", reply->getTrace().toString().c_str());
}
- Trace empty;
- trace.swap(empty);
+ trace.clear();
} else if (trace.getLevel() > 0) {
- trace.getRoot().addChild(reply->getTrace().getRoot());
- trace.getRoot().normalize();
+ trace.addChild(reply->steal_trace());
+ trace.normalize();
}
reply->swapState(*_msg);
reply->setMessage(std::move(_msg));