Skip to content
This repository was archived by the owner on Aug 30, 2022. It is now read-only.

Commit d55f958

Browse files
author
Isaac Hier
committed
Use reference to Tracer in Span instead of weak_ptr
Signed-off-by: Isaac Hier <ihier@uber.com>
1 parent 16b5c84 commit d55f958

File tree

6 files changed

+27
-38
lines changed

6 files changed

+27
-38
lines changed

src/jaegertracing/Span.cpp

+4-22
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,7 @@ namespace jaegertracing {
2323
void Span::SetBaggageItem(opentracing::string_view restrictedKey,
2424
opentracing::string_view value) noexcept
2525
{
26-
std::lock_guard<std::mutex> lock(_mutex);
27-
std::shared_ptr<const Tracer> tracer(_tracer.lock());
28-
const auto& baggageSetter = tracer->baggageSetter();
26+
const auto& baggageSetter = _tracer.baggageSetter();
2927
auto baggage = _context.baggage();
3028
baggageSetter.setBaggage(*this,
3129
baggage,
@@ -41,41 +39,25 @@ void Span::SetBaggageItem(opentracing::string_view restrictedKey,
4139
void Span::FinishWithOptions(
4240
const opentracing::FinishSpanOptions& finishSpanOptions) noexcept
4341
{
44-
std::shared_ptr<const Tracer> tracer;
4542
{
4643
std::lock_guard<std::mutex> lock(_mutex);
4744
if (_context.isSampled()) {
4845
_duration = finishSpanOptions.finish_steady_timestamp - _startTime;
4946
}
50-
tracer = _tracer.lock();
5147
}
5248

5349
// Call `reportSpan` even for non-sampled traces.
54-
if (tracer) {
55-
tracer->reportSpan(*this);
56-
}
50+
_tracer.reportSpan(*this);
5751
}
5852

5953
const opentracing::Tracer& Span::tracer() const noexcept
6054
{
61-
std::lock_guard<std::mutex> lock(_mutex);
62-
std::shared_ptr<const opentracing::Tracer> tracer(_tracer.lock());
63-
if (tracer) {
64-
return *tracer;
65-
}
66-
tracer = opentracing::Tracer::Global();
67-
assert(tracer);
68-
return *tracer;
55+
return _tracer;
6956
}
7057

7158
std::string Span::serviceName() const noexcept
7259
{
73-
std::lock_guard<std::mutex> lock(_mutex);
74-
std::shared_ptr<const Tracer> tracer(_tracer.lock());
75-
if (!tracer) {
76-
return std::string();
77-
}
78-
return tracer->serviceName();
60+
return _tracer.serviceName();
7961
}
8062

8163
} // namespace jaegertracing

src/jaegertracing/Span.h

+4-4
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ class Span : public opentracing::Span {
3737
public:
3838
using Clock = std::chrono::steady_clock;
3939

40-
Span(const std::weak_ptr<const Tracer>& tracer,
40+
Span(const Tracer& tracer,
4141
const SpanContext& context,
4242
const std::string& operationName,
4343
const Clock::time_point& startTime,
@@ -55,6 +55,7 @@ class Span : public opentracing::Span {
5555
}
5656

5757
Span(const Span& span)
58+
: _tracer(span._tracer)
5859
{
5960
std::lock(_mutex, span._mutex);
6061
std::lock_guard<std::mutex> lock(_mutex, std::adopt_lock);
@@ -234,7 +235,6 @@ class Span : public opentracing::Span {
234235

235236
const SpanContext& context() const noexcept override
236237
{
237-
std::lock_guard<std::mutex> lock(_mutex);
238238
return _context;
239239
}
240240

@@ -243,7 +243,7 @@ class Span : public opentracing::Span {
243243
std::string serviceName() const noexcept;
244244

245245
private:
246-
bool isFinished() const { return _duration == Clock::duration(); }
246+
bool isFinished() const { return _duration != Clock::duration(); }
247247

248248
template <typename FieldIterator>
249249
void logFieldsNoLocking(FieldIterator first, FieldIterator last) noexcept
@@ -252,7 +252,7 @@ class Span : public opentracing::Span {
252252
_logs.push_back(log);
253253
}
254254

255-
std::weak_ptr<const Tracer> _tracer;
255+
const Tracer& _tracer;
256256
SpanContext _context;
257257
std::string _operationName;
258258
Clock::time_point _startTime;

src/jaegertracing/SpanTest.cpp

+3-1
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,14 @@
1717
#include <gtest/gtest.h>
1818

1919
#include "jaegertracing/Span.h"
20+
#include "jaegertracing/Tracer.h"
2021

2122
namespace jaegertracing {
2223

2324
TEST(Span, testThriftConversion)
2425
{
25-
const Span span(std::weak_ptr<Tracer>(),
26+
auto tracer = Tracer::make("test-service", Config());
27+
const Span span(static_cast<Tracer&>(*tracer),
2628
SpanContext(),
2729
"",
2830
Span::Clock::now(),

src/jaegertracing/Tracer.cpp

+1-2
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,6 @@ Tracer::startSpanInternal(const SpanContext& context,
114114
bool newTrace,
115115
const std::vector<Reference>& references) const
116116
{
117-
std::weak_ptr<const Tracer> weakPtr(shared_from_this());
118117
const auto firstInProcess = (context.parentID() == 0);
119118

120119
std::vector<Tag> spanTags;
@@ -127,7 +126,7 @@ Tracer::startSpanInternal(const SpanContext& context,
127126
spanTags.insert(
128127
std::end(spanTags), std::begin(internalTags), std::end(internalTags));
129128

130-
std::unique_ptr<Span> span(new Span(weakPtr,
129+
std::unique_ptr<Span> span(new Span(*this,
131130
context,
132131
operationName,
133132
startTime,

src/jaegertracing/TracerTest.cpp

+7
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,13 @@ TEST(Tracer, testTracer)
4444
false,
4545
baggage::RestrictionsConfig());
4646
auto tracer = Tracer::make("test-service", config);
47+
auto span = tracer->StartSpanWithOptions("test-operation", {});
48+
span->SetOperationName("test-set-operation");
49+
span->SetTag("tag-key", "tag-value");
50+
span->SetBaggageItem("test-baggage-item-key", "test-baggage-item-value");
51+
span->Log({ { "log-bool", true } });
52+
std::this_thread::sleep_for(std::chrono::milliseconds(100));
53+
span->Finish();
4754
opentracing::Tracer::InitGlobal(tracer);
4855
}
4956

src/jaegertracing/reporters/ReporterTest.cpp

+8-9
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,14 @@ class FakeTransport : public Transport {
5454
std::mutex& _mutex;
5555
};
5656

57-
const Span span(std::weak_ptr<Tracer>(),
57+
Tracer& tracer()
58+
{
59+
static const auto tracer =
60+
Tracer::make("test-service", jaegertracing::Config());
61+
return static_cast<Tracer&>(*tracer);
62+
}
63+
64+
const Span span(tracer(),
5865
SpanContext(),
5966
"",
6067
Span::Clock::now(),
@@ -78,14 +85,6 @@ TEST(Reporter, testRemoteReporter)
7885
std::unique_ptr<Transport>(new FakeTransport(spans, mutex)),
7986
*logger,
8087
*metrics);
81-
const Span span(std::weak_ptr<Tracer>(),
82-
SpanContext(),
83-
"",
84-
Span::Clock::now(),
85-
Span::Clock::duration(),
86-
{},
87-
{},
88-
false);
8988
constexpr auto kNumReports = 100;
9089
for (auto i = 0; i < kNumReports; ++i) {
9190
reporter.report(span);

0 commit comments

Comments
 (0)