Skip to content

Commit 4e56e27

Browse files
committed
Add interfaces in DTTracer to serialize and deserialize span
Signed-off-by: Emelia Lei <[email protected]>
1 parent 512d195 commit 4e56e27

File tree

2 files changed

+50
-1
lines changed

2 files changed

+50
-1
lines changed

src/groups/bmq/bmqpi/bmqpi_dttracer.h

+18
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
// BDE
3333
#include <bsl_memory.h>
3434
#include <bsl_string_view.h>
35+
#include <bsl_vector.h>
3536

3637
namespace BloombergLP {
3738
namespace bmqpi {
@@ -56,6 +57,23 @@ class DTTracer {
5657
const bsl::shared_ptr<DTSpan>& parent,
5758
const bsl::string_view& operation,
5859
const DTSpan::Baggage& baggage = DTSpan::Baggage()) const = 0;
60+
61+
/// Serialize the underlying context for a specified `DTSpan` and return
62+
/// the bit stream as `out`. Return 0 on success, or a non-zero error code
63+
/// on error.
64+
virtual int serializeSpan(bsl::vector<unsigned char>* out,
65+
const bsl::shared_ptr<DTSpan>& dtSpan) const = 0;
66+
67+
/// Deserialize the specified bit stream `in` into a span context.
68+
/// Create a child span and pass into `out` based on the deserialized
69+
/// parent span context, the given `operation`, and an optional key-value
70+
/// tags `baggage`. Return 0 on success, or a non-zero error code on
71+
/// error.
72+
virtual int deserializeAndCreateChildSpan(
73+
bsl::shared_ptr<DTSpan>* out,
74+
const bsl::vector<unsigned char>& in,
75+
const bsl::string_view& operation,
76+
const DTSpan::Baggage& baggage = DTSpan::Baggage()) const = 0;
5977
};
6078

6179
} // close package namespace

src/groups/bmq/bmqpi/bmqpi_dttracer.t.cpp

+32-1
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,17 @@ struct DTTracerTestImp : public bsls::ProtocolTestImp<bmqpi::DTTracer> {
3535
const bsl::shared_ptr<bmqpi::DTSpan>& parent,
3636
const bsl::string_view& operation,
3737
const bmqpi::DTSpan::Baggage& baggage) const BSLS_KEYWORD_OVERRIDE;
38+
39+
virtual int serializeSpan(bsl::vector<unsigned char>* out,
40+
const bsl::shared_ptr<bmqpi::DTSpan>& dtSpan)
41+
const BSLS_KEYWORD_OVERRIDE;
42+
43+
virtual int deserializeAndCreateChildSpan(
44+
bsl::shared_ptr<bmqpi::DTSpan>* out,
45+
const bsl::vector<unsigned char>& in,
46+
const bsl::string_view& operation,
47+
const bmqpi::DTSpan::Baggage& baggage = bmqpi::DTSpan::Baggage()) const
48+
BSLS_KEYWORD_OVERRIDE;
3849
};
3950

4051
// Define one of DTTracerTestImp methods out-of-line, to instruct the
@@ -47,6 +58,21 @@ DTTracerTestImp::createChildSpan(const bsl::shared_ptr<bmqpi::DTSpan>&,
4758
return markDone();
4859
}
4960

61+
int DTTracerTestImp::serializeSpan(bsl::vector<unsigned char>*,
62+
const bsl::shared_ptr<bmqpi::DTSpan>&) const
63+
{
64+
return markDone();
65+
}
66+
67+
int DTTracerTestImp::deserializeAndCreateChildSpan(
68+
bsl::shared_ptr<bmqpi::DTSpan>*,
69+
const bsl::vector<unsigned char>&,
70+
const bsl::string_view&,
71+
const bmqpi::DTSpan::Baggage&) const
72+
{
73+
return markDone();
74+
}
75+
5076
// ============================================================================
5177
// TESTS
5278
// ============================================================================
@@ -100,8 +126,13 @@ static void test1_breathingTest()
100126
BMQTST_ASSERT(tracer.testVirtualDestructor());
101127

102128
PV("Verify that all methods are public and virtual");
103-
bmqpi::DTSpan::Baggage empty;
129+
bmqpi::DTSpan::Baggage empty;
130+
bsl::vector<unsigned char> emptyVec;
104131
BSLS_PROTOCOLTEST_ASSERT(tracer, createChildSpan(NULL, "", empty));
132+
BSLS_PROTOCOLTEST_ASSERT(tracer, serializeSpan(NULL, NULL));
133+
BSLS_PROTOCOLTEST_ASSERT(
134+
tracer,
135+
deserializeAndCreateChildSpan(NULL, emptyVec, "", empty));
105136
}
106137

107138
// ============================================================================

0 commit comments

Comments
 (0)