Skip to content

Commit fc2946c

Browse files
committed
driver-sync: trace instrument with OpenCensus
driver-{core, sync}/com.mongodb.client.internal: ScopedSpans Use ScopedSpans to enable proper context propagation instead of starting and ending spans manually. Use `com.mongodb.client.internal.<ClassName>` as the prefix for the trace. all: more scopedSpan instrumentation with OpenCensus driver-sync/*/gridfs: Instrument GridFSBucketImpl Statically initialized tracer per class that uses it
1 parent 53c4379 commit fc2946c

File tree

20 files changed

+2320
-752
lines changed

20 files changed

+2320
-752
lines changed

.gitignore

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,4 +40,7 @@ docs/landing/public
4040
docs/hugo*
4141

4242
# jenv
43-
.java-version
43+
.java-version
44+
45+
# data directory
46+
data/

build.gradle

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,11 @@ configure(subprojects.findAll { it.name != 'util' }) {
6767
compile 'org.slf4j:slf4j-api:1.7.6', optional
6868

6969
testCompile 'com.google.code.findbugs:jsr305:1.3.9'
70+
71+
compile 'io.opencensus:opencensus-api:0.14.0'
72+
runtime 'io.opencensus:opencensus-impl:0.14.0'
73+
compile 'io.opencensus:opencensus-exporter-trace-stackdriver:0.14.0'
74+
runtime 'io.opencensus:opencensus-exporter-trace-stackdriver:0.14.0'
7075
}
7176

7277
/* Compiling */

driver-core/src/main/com/mongodb/binding/ClusterBinding.java

Lines changed: 62 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@
3030

3131
import static com.mongodb.assertions.Assertions.notNull;
3232

33+
import io.opencensus.common.Scope;
34+
import io.opencensus.trace.Tracer;
35+
import io.opencensus.trace.Tracing;
36+
3337
/**
3438
* A simple ReadWriteBinding implementation that supplies write connection sources bound to a possibly different primary each time, and a
3539
* read connection source bound to a possible different server each time.
@@ -40,6 +44,7 @@ public class ClusterBinding extends AbstractReferenceCounted implements ReadWrit
4044
private final Cluster cluster;
4145
private final ReadPreference readPreference;
4246
private final ReadConcern readConcern;
47+
private static final Tracer TRACER = Tracing.getTracer();
4348

4449
/**
4550
* Creates an instance.
@@ -67,8 +72,14 @@ public ClusterBinding(final Cluster cluster, final ReadPreference readPreference
6772

6873
@Override
6974
public ReadWriteBinding retain() {
70-
super.retain();
71-
return this;
75+
Scope ss = TRACER.spanBuilder("com.mongodb.binding.ClusterBinding.retain").startScopedSpan();
76+
77+
try {
78+
super.retain();
79+
return this;
80+
} finally {
81+
ss.close();
82+
}
7283
}
7384

7485
@Override
@@ -78,7 +89,13 @@ public ReadPreference getReadPreference() {
7889

7990
@Override
8091
public ConnectionSource getReadConnectionSource() {
81-
return new ClusterBindingConnectionSource(new ReadPreferenceServerSelector(readPreference));
92+
Scope ss = TRACER.spanBuilder("com.mongodb.binding.ClusterBinding.getReadConnectionSource").startScopedSpan();
93+
94+
try {
95+
return new ClusterBindingConnectionSource(new ReadPreferenceServerSelector(readPreference));
96+
} finally {
97+
ss.close();
98+
}
8299
}
83100

84101
@Override
@@ -88,7 +105,13 @@ public SessionContext getSessionContext() {
88105

89106
@Override
90107
public ConnectionSource getWriteConnectionSource() {
91-
return new ClusterBindingConnectionSource(new WritableServerSelector());
108+
Scope ss = TRACER.spanBuilder("com.mongodb.binding.ClusterBinding.getWriteConnectionSource").startScopedSpan();
109+
110+
try {
111+
return new ClusterBindingConnectionSource(new WritableServerSelector());
112+
} finally {
113+
ss.close();
114+
}
92115
}
93116

94117
private final class ClusterBindingConnectionSource extends AbstractReferenceCounted implements ConnectionSource {
@@ -101,7 +124,14 @@ private ClusterBindingConnectionSource(final ServerSelector serverSelector) {
101124

102125
@Override
103126
public ServerDescription getServerDescription() {
104-
return server.getDescription();
127+
Scope ss = TRACER.spanBuilder("com.mongodb.binding.ClusterBinding.ClusterBindingConnection.getServerDescription")
128+
.startScopedSpan();
129+
130+
try {
131+
return server.getDescription();
132+
} finally {
133+
ss.close();
134+
}
105135
}
106136

107137
@Override
@@ -111,19 +141,40 @@ public SessionContext getSessionContext() {
111141

112142
@Override
113143
public Connection getConnection() {
114-
return server.getConnection();
144+
Scope ss = TRACER.spanBuilder("com.mongodb.binding.ClusterBinding.ClusterBindingConnectionSource.getConnection")
145+
.startScopedSpan();
146+
147+
try {
148+
return server.getConnection();
149+
} finally {
150+
ss.close();
151+
}
115152
}
116153

117154
public ConnectionSource retain() {
118-
super.retain();
119-
ClusterBinding.this.retain();
120-
return this;
155+
Scope ss = TRACER.spanBuilder("com.mongodb.binding.ClusterBinding.ClusterBindingConnectionSource.retain")
156+
.startScopedSpan();
157+
158+
try {
159+
super.retain();
160+
ClusterBinding.this.retain();
161+
return this;
162+
} finally {
163+
ss.close();
164+
}
121165
}
122166

123167
@Override
124168
public void release() {
125-
super.release();
126-
ClusterBinding.this.release();
169+
Scope ss = TRACER.spanBuilder("com.mongodb.binding.ClusterBinding.ClusterBindingConnectionSource.release")
170+
.startScopedSpan();
171+
172+
try {
173+
super.release();
174+
ClusterBinding.this.release();
175+
} finally {
176+
ss.close();
177+
}
127178
}
128179
}
129180
}

driver-core/src/main/com/mongodb/binding/SingleConnectionReadBinding.java

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@
2424

2525
import static com.mongodb.assertions.Assertions.notNull;
2626

27+
import io.opencensus.common.Scope;
28+
import io.opencensus.trace.Tracer;
29+
import io.opencensus.trace.Tracing;
30+
2731
/**
2832
* A read binding that is bound to a single connection.
2933
*
@@ -34,6 +38,7 @@ public class SingleConnectionReadBinding extends AbstractReferenceCounted implem
3438
private final ReadPreference readPreference;
3539
private final ServerDescription serverDescription;
3640
private final Connection connection;
41+
private static final Tracer TRACER = Tracing.getTracer();
3742

3843
/**
3944
* Construct an instance.
@@ -56,7 +61,13 @@ public ReadPreference getReadPreference() {
5661

5762
@Override
5863
public ConnectionSource getReadConnectionSource() {
59-
return new SingleConnectionSource();
64+
Scope ss = TRACER.spanBuilder("com.mongodb.binding.SingleConnectionReadBinding.getReadConnectionSource").startScopedSpan();
65+
66+
try {
67+
return new SingleConnectionSource();
68+
} finally {
69+
ss.close();
70+
}
6071
}
6172

6273
@Override
@@ -101,15 +112,29 @@ public Connection getConnection() {
101112

102113
@Override
103114
public ConnectionSource retain() {
104-
super.retain();
105-
return this;
115+
Scope ss = TRACER.spanBuilder("com.mongodb.binding.SingleConnectionReadBinding.SingleConnectionSource.retain")
116+
.startScopedSpan();
117+
118+
try {
119+
super.retain();
120+
return this;
121+
} finally {
122+
ss.close();
123+
}
106124
}
107125

108126
@Override
109127
public void release() {
110-
super.release();
111-
if (super.getCount() == 0) {
112-
SingleConnectionReadBinding.this.release();
128+
Scope ss = TRACER.spanBuilder("com.mongodb.binding.SingleConnectionReadBinding.SingleConnectionSource.release")
129+
.startScopedSpan();
130+
131+
try {
132+
super.release();
133+
if (super.getCount() == 0) {
134+
SingleConnectionReadBinding.this.release();
135+
}
136+
} finally {
137+
ss.close();
113138
}
114139
}
115140
}

driver-core/src/main/com/mongodb/binding/SingleServerBinding.java

Lines changed: 54 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,10 @@
2828

2929
import static com.mongodb.assertions.Assertions.notNull;
3030

31+
import io.opencensus.common.Scope;
32+
import io.opencensus.trace.Tracer;
33+
import io.opencensus.trace.Tracing;
34+
3135
/**
3236
* A simple binding where all connection sources are bound to the server specified in the constructor.
3337
*
@@ -37,6 +41,7 @@ public class SingleServerBinding extends AbstractReferenceCounted implements Rea
3741
private final Cluster cluster;
3842
private final ServerAddress serverAddress;
3943
private final ReadPreference readPreference;
44+
private static final Tracer TRACER = Tracing.getTracer();
4045

4146
/**
4247
* Creates an instance, defaulting to {@link com.mongodb.ReadPreference#primary()} for reads.
@@ -61,7 +66,13 @@ public SingleServerBinding(final Cluster cluster, final ServerAddress serverAddr
6166

6267
@Override
6368
public ConnectionSource getWriteConnectionSource() {
64-
return new SingleServerBindingConnectionSource();
69+
Scope ss = TRACER.spanBuilder("com.mongodb.binding.SingleServerBinding.getWriteConnectionSource").startScopedSpan();
70+
71+
try {
72+
return new SingleServerBindingConnectionSource();
73+
} finally {
74+
ss.close();
75+
}
6576
}
6677

6778
@Override
@@ -71,7 +82,13 @@ public ReadPreference getReadPreference() {
7182

7283
@Override
7384
public ConnectionSource getReadConnectionSource() {
74-
return new SingleServerBindingConnectionSource();
85+
Scope ss = TRACER.spanBuilder("com.mongodb.binding.SingleServerBinding.getReadConnectionSource").startScopedSpan();
86+
87+
try {
88+
return new SingleServerBindingConnectionSource();
89+
} finally {
90+
ss.close();
91+
}
7592
}
7693

7794
@Override
@@ -81,8 +98,14 @@ public SessionContext getSessionContext() {
8198

8299
@Override
83100
public SingleServerBinding retain() {
84-
super.retain();
85-
return this;
101+
Scope ss = TRACER.spanBuilder("com.mongodb.binding.SingleServerBinding.retain").startScopedSpan();
102+
103+
try {
104+
super.retain();
105+
return this;
106+
} finally {
107+
ss.close();
108+
}
86109
}
87110

88111
private final class SingleServerBindingConnectionSource extends AbstractReferenceCounted implements ConnectionSource {
@@ -105,20 +128,41 @@ public SessionContext getSessionContext() {
105128

106129
@Override
107130
public Connection getConnection() {
108-
return cluster.selectServer(new ServerAddressSelector(serverAddress)).getConnection();
131+
Scope ss = TRACER.spanBuilder("com.mongodb.binding.SingleServerBinding.SingleServerBindingConnection.getConnection")
132+
.startScopedSpan();
133+
134+
try {
135+
return cluster.selectServer(new ServerAddressSelector(serverAddress)).getConnection();
136+
} finally {
137+
ss.close();
138+
}
109139
}
110140

111141
@Override
112142
public ConnectionSource retain() {
113-
super.retain();
114-
return this;
143+
Scope ss = TRACER.spanBuilder("com.mongodb.binding.SingleServerBinding.SingleServerBindingConnection.retain")
144+
.startScopedSpan();
145+
146+
try {
147+
super.retain();
148+
return this;
149+
} finally {
150+
ss.close();
151+
}
115152
}
116153

117154
@Override
118155
public void release() {
119-
super.release();
120-
if (super.getCount() == 0) {
121-
SingleServerBinding.this.release();
156+
Scope ss = TRACER.spanBuilder("com.mongodb.binding.SingleServerBinding.SingleServerBindingConnection.release")
157+
.startScopedSpan();
158+
159+
try {
160+
super.release();
161+
if (super.getCount() == 0) {
162+
SingleServerBinding.this.release();
163+
}
164+
} finally {
165+
ss.close();
122166
}
123167
}
124168
}

0 commit comments

Comments
 (0)