CR fixes.
This commit is contained in:
parent
8c490a42a2
commit
fc30b4c5bb
|
@ -1,6 +1,3 @@
|
|||
import datadog.trace.agent.test.asserts.ListWriterAssert
|
||||
import groovy.transform.stc.ClosureParams
|
||||
import groovy.transform.stc.SimpleType
|
||||
import javax.ws.rs.GET
|
||||
import javax.ws.rs.Path
|
||||
import javax.ws.rs.container.AsyncResponse
|
||||
|
@ -28,6 +25,11 @@ class GrizzlyAsyncTest extends GrizzlyTest {
|
|||
GrizzlyHttpServerFactory.createHttpServer(new URI("http://localhost:$port"), rc)
|
||||
}
|
||||
|
||||
@Override
|
||||
boolean reorderControllerSpan() {
|
||||
true
|
||||
}
|
||||
|
||||
@Path("/")
|
||||
static class AsyncServiceResource {
|
||||
private ExecutorService executor = Executors.newSingleThreadExecutor()
|
||||
|
@ -76,25 +78,4 @@ class GrizzlyAsyncTest extends GrizzlyTest {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
void cleanAndAssertTraces(
|
||||
final int size,
|
||||
@ClosureParams(value = SimpleType, options = "datadog.trace.agent.test.asserts.ListWriterAssert")
|
||||
@DelegatesTo(value = ListWriterAssert, strategy = Closure.DELEGATE_FIRST)
|
||||
final Closure spec) {
|
||||
// If this is failing, make sure HttpServerTestAdvice is applied correctly.
|
||||
TEST_WRITER.waitForTraces(size * 2)
|
||||
|
||||
// AsyncResponse.resume closes the handler span before the controller returns, so we need to manually reorder it.
|
||||
TEST_WRITER.each {
|
||||
def controllerSpan = it.find {
|
||||
it.operationName == "controller"
|
||||
}
|
||||
if (controllerSpan) {
|
||||
it.remove(controllerSpan)
|
||||
it.add(controllerSpan)
|
||||
}
|
||||
}
|
||||
super.cleanAndAssertTraces(size, spec)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -62,34 +62,31 @@ public final class ContinuationInstrumentation extends Instrumenter.Default {
|
|||
}
|
||||
|
||||
@Slf4j
|
||||
public static class BlockWrapper<T> implements Block {
|
||||
public static class BlockWrapper implements Block {
|
||||
private final Block delegate;
|
||||
private final Span span;
|
||||
|
||||
private BlockWrapper(final Block delegate, final Span span) {
|
||||
assert span != null;
|
||||
this.delegate = delegate;
|
||||
this.span = span;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute() throws Exception {
|
||||
if (span != null) {
|
||||
try (final Scope scope = GlobalTracer.get().scopeManager().activate(span, false)) {
|
||||
if (scope instanceof TraceScope) {
|
||||
((TraceScope) scope).setAsyncPropagation(true);
|
||||
}
|
||||
delegate.execute();
|
||||
}
|
||||
} else {
|
||||
delegate.execute();
|
||||
}
|
||||
}
|
||||
|
||||
public static Block wrapIfNeeded(final Block delegate, final Span span) {
|
||||
if (delegate instanceof BlockWrapper || span == null) {
|
||||
if (delegate instanceof BlockWrapper) {
|
||||
return delegate;
|
||||
}
|
||||
log.debug("Wrapping action task {}", delegate);
|
||||
log.debug("Wrapping block {}", delegate);
|
||||
return new BlockWrapper(delegate, span);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -77,22 +77,19 @@ public final class DefaultExecutionInstrumentation extends Instrumenter.Default
|
|||
private final Span span;
|
||||
|
||||
private ActionWrapper(final Action<T> delegate, final Span span) {
|
||||
assert span != null;
|
||||
this.delegate = delegate;
|
||||
this.span = span;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(final T t) throws Exception {
|
||||
if (span != null) {
|
||||
try (final Scope scope = GlobalTracer.get().scopeManager().activate(span, false)) {
|
||||
if (scope instanceof TraceScope) {
|
||||
((TraceScope) scope).setAsyncPropagation(true);
|
||||
}
|
||||
delegate.execute(t);
|
||||
}
|
||||
} else {
|
||||
delegate.execute(t);
|
||||
}
|
||||
}
|
||||
|
||||
public static <T> Action<T> wrapIfNeeded(final Action<T> delegate, final Span span) {
|
||||
|
|
|
@ -1,14 +1,11 @@
|
|||
package server
|
||||
|
||||
import datadog.opentracing.DDSpan
|
||||
import datadog.trace.agent.test.asserts.ListWriterAssert
|
||||
import datadog.trace.agent.test.asserts.TraceAssert
|
||||
import datadog.trace.agent.test.base.HttpServerTest
|
||||
import datadog.trace.api.DDSpanTypes
|
||||
import datadog.trace.instrumentation.netty41.server.NettyHttpServerDecorator
|
||||
import datadog.trace.instrumentation.ratpack.RatpackServerDecorator
|
||||
import groovy.transform.stc.ClosureParams
|
||||
import groovy.transform.stc.SimpleType
|
||||
import io.opentracing.tag.Tags
|
||||
import ratpack.error.ServerErrorHandler
|
||||
import ratpack.groovy.test.embed.GroovyEmbeddedApp
|
||||
|
@ -95,25 +92,9 @@ class RatpackHttpServerTest extends HttpServerTest<EmbeddedApp, NettyHttpServerD
|
|||
true
|
||||
}
|
||||
|
||||
void cleanAndAssertTraces(
|
||||
final int size,
|
||||
@ClosureParams(value = SimpleType, options = "datadog.trace.agent.test.asserts.ListWriterAssert")
|
||||
@DelegatesTo(value = ListWriterAssert, strategy = Closure.DELEGATE_FIRST)
|
||||
final Closure spec) {
|
||||
// If this is failing, make sure HttpServerTestAdvice is applied correctly.
|
||||
TEST_WRITER.waitForTraces(size * 2)
|
||||
|
||||
// Ratpack closes the handler span before the controller returns, so we need to manually reorder it.
|
||||
TEST_WRITER.each {
|
||||
def controllerSpan = it.find {
|
||||
it.operationName == "controller"
|
||||
}
|
||||
if (controllerSpan) {
|
||||
it.remove(controllerSpan)
|
||||
it.add(controllerSpan)
|
||||
}
|
||||
}
|
||||
super.cleanAndAssertTraces(size, spec)
|
||||
@Override
|
||||
boolean reorderControllerSpan() {
|
||||
true
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
package server
|
||||
|
||||
import datadog.trace.agent.test.asserts.ListWriterAssert
|
||||
|
||||
import datadog.trace.agent.test.base.HttpServerTest
|
||||
import datadog.trace.instrumentation.netty41.server.NettyHttpServerDecorator
|
||||
import groovy.transform.stc.ClosureParams
|
||||
import groovy.transform.stc.SimpleType
|
||||
import io.vertx.core.AbstractVerticle
|
||||
import io.vertx.core.DeploymentOptions
|
||||
import io.vertx.core.Future
|
||||
|
@ -68,6 +66,11 @@ class VertxHttpServerTest extends HttpServerTest<Vertx, NettyHttpServerDecorator
|
|||
false
|
||||
}
|
||||
|
||||
@Override
|
||||
boolean reorderControllerSpan() {
|
||||
true
|
||||
}
|
||||
|
||||
static class VertxWebTestServer extends AbstractVerticle {
|
||||
|
||||
@Override
|
||||
|
@ -101,25 +104,4 @@ class VertxHttpServerTest extends HttpServerTest<Vertx, NettyHttpServerDecorator
|
|||
.listen(port) { startFuture.complete() }
|
||||
}
|
||||
}
|
||||
|
||||
void cleanAndAssertTraces(
|
||||
final int size,
|
||||
@ClosureParams(value = SimpleType, options = "datadog.trace.agent.test.asserts.ListWriterAssert")
|
||||
@DelegatesTo(value = ListWriterAssert, strategy = Closure.DELEGATE_FIRST)
|
||||
final Closure spec) {
|
||||
// If this is failing, make sure HttpServerTestAdvice is applied correctly.
|
||||
TEST_WRITER.waitForTraces(size * 2)
|
||||
|
||||
// Netty closes the parent span before the controller returns, so we need to manually reorder it.
|
||||
TEST_WRITER.each {
|
||||
def controllerSpan = it.find {
|
||||
it.operationName == "controller"
|
||||
}
|
||||
if (controllerSpan) {
|
||||
it.remove(controllerSpan)
|
||||
it.add(controllerSpan)
|
||||
}
|
||||
}
|
||||
super.cleanAndAssertTraces(size, spec)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -76,6 +76,10 @@ abstract class HttpServerTest<SERVER, DECORATOR extends HttpServerDecorator> ext
|
|||
false
|
||||
}
|
||||
|
||||
boolean reorderControllerSpan() {
|
||||
true
|
||||
}
|
||||
|
||||
boolean testNotFound() {
|
||||
true
|
||||
}
|
||||
|
@ -352,6 +356,19 @@ abstract class HttpServerTest<SERVER, DECORATOR extends HttpServerDecorator> ext
|
|||
assert toRemove.size() == size
|
||||
TEST_WRITER.removeAll(toRemove)
|
||||
|
||||
if(reorderControllerSpan()) {
|
||||
// Some frameworks close the handler span before the controller returns, so we need to manually reorder it.
|
||||
TEST_WRITER.each {
|
||||
def controllerSpan = it.find {
|
||||
it.operationName == "controller"
|
||||
}
|
||||
if (controllerSpan) {
|
||||
it.remove(controllerSpan)
|
||||
it.add(controllerSpan)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
assertTraces(size, spec)
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue