Skip to content

Commit 2778509

Browse files
committed
Continue wiring up distributed tracing for the new Grid
The traces being generated don't quite match up properly when viewed in Jaeger's UI, so I suspect that there's more work to be done, but the groundwork is now all in place.
1 parent 00a7ba7 commit 2778509

File tree

13 files changed

+60
-26
lines changed

13 files changed

+60
-26
lines changed

java/client/src/org/openqa/selenium/remote/tracing/DistributedTracer.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
public class DistributedTracer {
3434

3535
private static volatile DistributedTracer INSTANCE = DistributedTracer.builder()
36-
.registerDetectedTracers()
36+
// .registerDetectedTracers()
3737
.build();
3838
private static final ThreadLocal<LinkedList<Span>> ACTIVE_SPANS =
3939
ThreadLocal.withInitial(LinkedList::new);
@@ -129,11 +129,14 @@ private Builder() {
129129
}
130130

131131
public Builder registerDetectedTracers() {
132-
io.opentracing.Tracer tracer = TracerResolver.resolveTracer();
133-
if (tracer != null) {
134-
register(tracer);
132+
try {
133+
io.opentracing.Tracer tracer = TracerResolver.resolveTracer();
134+
if (tracer != null) {
135+
register(tracer);
136+
}
137+
} catch (Exception e) {
138+
// Carry on. This is fine.
135139
}
136-
137140
return this;
138141
}
139142

java/client/src/org/openqa/selenium/remote/tracing/OpenTracingSpan.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,9 @@ void inject(HttpRequest request) {
104104
@Override
105105
void extract(HttpRequest request) {
106106
SpanContext context = tracer.extract(Format.Builtin.HTTP_HEADERS, new HttpRequestInjector(request));
107+
if (context == null) {
108+
return;
109+
}
107110
for (Map.Entry<String, String> item : context.baggageItems()) {
108111
addTraceTag(item.getKey(), item.getValue());
109112
}

java/server/src/org/openqa/selenium/grid/commands/Hub.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,12 +88,14 @@ public Executable configure(String... args) {
8888
new EnvConfig(),
8989
new ConcatenatingConfig("selenium", '.', System.getProperties()));
9090

91+
DistributedTracer tracer = DistributedTracer.getInstance();
92+
9193
SessionMap sessions = new LocalSessionMap();
92-
Distributor distributor = new LocalDistributor();
94+
Distributor distributor = new LocalDistributor(tracer);
9395
Router router = new Router(sessions, distributor);
9496

9597
Server<?> server = new BaseServer<>(
96-
DistributedTracer.getInstance(),
98+
tracer,
9799
new BaseServerOptions(config));
98100
server.addRoute(Routes.matching(router).using(router).decorateWith(W3CCommandHandler.class));
99101
server.start();

java/server/src/org/openqa/selenium/grid/commands/Standalone.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,10 @@ public Executable configure(String... args) {
9494
new EnvConfig(),
9595
new ConcatenatingConfig("selenium", '.', System.getProperties()));
9696

97+
DistributedTracer tracer = DistributedTracer.getInstance();
98+
9799
SessionMap sessions = new LocalSessionMap();
98-
Distributor distributor = new LocalDistributor();
100+
Distributor distributor = new LocalDistributor(tracer);
99101
Router router = new Router(sessions, distributor);
100102

101103
String hostName;
@@ -114,8 +116,6 @@ public Executable configure(String... args) {
114116
throw new RuntimeException(e);
115117
}
116118

117-
DistributedTracer tracer = DistributedTracer.getInstance();
118-
119119
LocalNode.Builder node = LocalNode.builder(tracer, localhost, sessions)
120120
.maximumConcurrentSessions(Runtime.getRuntime().availableProcessors() * 3);
121121
nodeFlags.configure(node);

java/server/src/org/openqa/selenium/grid/distributor/Distributor.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,10 @@
3333
import org.openqa.selenium.remote.http.HttpClient;
3434
import org.openqa.selenium.remote.http.HttpRequest;
3535
import org.openqa.selenium.remote.http.HttpResponse;
36+
import org.openqa.selenium.remote.tracing.DistributedTracer;
3637

3738
import java.io.IOException;
39+
import java.util.Objects;
3840
import java.util.Optional;
3941
import java.util.UUID;
4042
import java.util.function.Predicate;
@@ -75,9 +77,11 @@ public abstract class Distributor implements Predicate<HttpRequest>, CommandHand
7577
private final Routes routes;
7678
private final Injector injector;
7779

78-
protected Distributor() {
80+
protected Distributor(DistributedTracer tracer) {
81+
Objects.requireNonNull(tracer);
7982
injector = Injector.builder()
8083
.register(this)
84+
.register(tracer)
8185
.register(new Json())
8286
.register(HttpClient.Factory.createDefault())
8387
.build();

java/server/src/org/openqa/selenium/grid/distributor/httpd/DistributorServer.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import org.openqa.selenium.grid.web.Routes;
4040
import org.openqa.selenium.remote.tracing.DistributedTracer;
4141

42+
4243
@AutoService(CliCommand.class)
4344
public class DistributorServer implements CliCommand {
4445

@@ -83,11 +84,15 @@ public Executable configure(String... args) {
8384
new EnvConfig(),
8485
new ConcatenatingConfig("distributor", '.', System.getProperties()));
8586

86-
Distributor distributor = new LocalDistributor();
87+
DistributedTracer tracer = DistributedTracer.builder()
88+
.registerDetectedTracers()
89+
.build();
90+
91+
Distributor distributor = new LocalDistributor(tracer);
8792

8893
BaseServerOptions serverOptions = new BaseServerOptions(config);
8994

90-
Server<?> server = new BaseServer<>(DistributedTracer.getInstance(), serverOptions);
95+
Server<?> server = new BaseServer<>(tracer, serverOptions);
9196
server.addRoute(
9297
Routes.matching(distributor)
9398
.using(distributor)

java/server/src/org/openqa/selenium/grid/distributor/local/LocalDistributor.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import org.openqa.selenium.grid.node.Node;
3030
import org.openqa.selenium.grid.node.NodeStatus;
3131
import org.openqa.selenium.remote.NewSessionPayload;
32+
import org.openqa.selenium.remote.tracing.DistributedTracer;
3233

3334
import java.util.HashSet;
3435
import java.util.Optional;
@@ -39,7 +40,8 @@ public class LocalDistributor extends Distributor {
3940

4041
private final Set<Node> nodes = new HashSet<>();
4142

42-
public LocalDistributor() {
43+
public LocalDistributor(DistributedTracer tracer) {
44+
super(tracer);
4345
}
4446

4547
@Override

java/server/src/org/openqa/selenium/grid/distributor/remote/RemoteDistributor.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import org.openqa.selenium.remote.http.HttpClient;
3434
import org.openqa.selenium.remote.http.HttpRequest;
3535
import org.openqa.selenium.remote.http.HttpResponse;
36+
import org.openqa.selenium.remote.tracing.DistributedTracer;
3637

3738
import java.io.IOException;
3839
import java.io.UncheckedIOException;
@@ -45,7 +46,9 @@ public class RemoteDistributor extends Distributor {
4546
public static final Json JSON = new Json();
4647
private final Function<HttpRequest, HttpResponse> client;
4748

48-
public RemoteDistributor(HttpClient client) {
49+
public RemoteDistributor(DistributedTracer tracer, HttpClient client) {
50+
super(tracer);
51+
4952
Objects.requireNonNull(client);
5053
this.client = req -> {
5154
try {

java/server/src/org/openqa/selenium/grid/node/httpd/NodeServer.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,8 +108,12 @@ public Executable configure(String... args) {
108108

109109
BaseServerOptions serverOptions = new BaseServerOptions(config);
110110

111+
DistributedTracer tracer = DistributedTracer.builder()
112+
.registerDetectedTracers()
113+
.build();
114+
111115
LocalNode.Builder builder = LocalNode.builder(
112-
DistributedTracer.getInstance(),
116+
tracer,
113117
serverOptions.getExternalUri(),
114118
sessions);
115119
nodeFlags.configure(builder);
@@ -118,9 +122,10 @@ public Executable configure(String... args) {
118122
DistributorOptions distributorOptions = new DistributorOptions(config);
119123
URL distributorUrl = distributorOptions.getDistributorUri().toURL();
120124
Distributor distributor = new RemoteDistributor(
125+
tracer,
121126
HttpClient.Factory.createDefault().createClient(distributorUrl));
122127

123-
Server<?> server = new BaseServer<>(DistributedTracer.getInstance(), serverOptions);
128+
Server<?> server = new BaseServer<>(tracer, serverOptions);
124129
server.addRoute(Routes.matching(node).using(node).decorateWith(W3CCommandHandler.class));
125130
server.start();
126131

java/server/src/org/openqa/selenium/grid/router/httpd/RouterServer.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,10 @@ public Executable configure(String... args) {
9595
new EnvConfig(),
9696
new ConcatenatingConfig("router", '.', System.getProperties()));
9797

98+
DistributedTracer tracer = DistributedTracer.builder()
99+
.registerDetectedTracers()
100+
.build();
101+
98102
SessionMapOptions sessionsOptions = new SessionMapOptions(config);
99103
URL sessionMapUrl = sessionsOptions.getSessionMapUri().toURL();
100104
SessionMap sessions = new RemoteSessionMap(
@@ -105,11 +109,12 @@ public Executable configure(String... args) {
105109
DistributorOptions distributorOptions = new DistributorOptions(config);
106110
URL distributorUrl = distributorOptions.getDistributorUri().toURL();
107111
Distributor distributor = new RemoteDistributor(
112+
tracer,
108113
HttpClient.Factory.createDefault().createClient(distributorUrl));
109114

110115
Router router = new Router(sessions, distributor);
111116

112-
Server<?> server = new BaseServer<>(DistributedTracer.getInstance(), serverOptions);
117+
Server<?> server = new BaseServer<>(tracer, serverOptions);
113118
server.addRoute(Routes.matching(router).using(router).decorateWith(W3CCommandHandler.class));
114119
server.start();
115120
};

0 commit comments

Comments
 (0)