Skip to content

Commit

Permalink
Merge pull request #192 from manimaul/wk/TACO-35-trace-span-prop
Browse files Browse the repository at this point in the history
TACO-35 - adding span to Request object
  • Loading branch information
pdex authored Mar 29, 2018
2 parents 4137eea + 7e67556 commit b6f2294
Show file tree
Hide file tree
Showing 13 changed files with 155 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public HttpClient(XioClient client, String hostHeader) {

public void write(HttpRequest request, TraceContext context) {
request.headers().set("Host", hostHeader);
client.write(new XioRequest(request, context));
client.write(new XioRequest<>(request, context));
}

public void write(HttpRequest request) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
package com.xjeffrose.xio.http;

import brave.Span;
import com.google.auto.value.AutoValue;
import com.xjeffrose.xio.core.internal.UnstableApi;
import io.netty.buffer.ByteBuf;
import io.netty.handler.codec.http.HttpHeaderNames;
import io.netty.handler.codec.http.HttpMethod;
import java.util.Optional;
import lombok.Builder;
import javax.annotation.Nullable;
import lombok.ToString;

/** Value class for representing an outgoing HTTP1/2 Request, for use in a client. */
Expand All @@ -30,6 +31,9 @@ public boolean startOfStream() {

public abstract int streamId();

@Nullable
public abstract Span traceSpan();

/** Not intended to be called. */
@Override
public String version() {
Expand All @@ -53,6 +57,8 @@ public abstract static class Builder {

public abstract Builder streamId(int streamId);

public abstract Builder traceSpan(Span span);

public abstract DefaultFullRequest build();

abstract Optional<Headers> headers();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,19 @@
package com.xjeffrose.xio.http;

import brave.Span;
import com.google.auto.value.AutoValue;
import com.xjeffrose.xio.core.internal.UnstableApi;
import io.netty.handler.codec.http.HttpHeaderNames;
import io.netty.handler.codec.http.HttpMethod;
import java.util.Optional;
import lombok.Builder;
import javax.annotation.Nullable;
import lombok.ToString;

/** Value class for representing a streaming outgoing HTTP1/2 Request, for use in a client. */
@UnstableApi
@AutoValue
@ToString
public abstract class DefaultStreamingRequest implements StreamingRequest {
public abstract class DefaultStreamingRequest implements StreamingRequest, Traceable {

@Override
public boolean startOfStream() {
Expand All @@ -27,6 +28,9 @@ public boolean startOfStream() {

public abstract int streamId();

@Nullable
public abstract Span traceSpan();

/** Not intended to be called. */
@Override
public String version() {
Expand All @@ -48,6 +52,8 @@ public abstract static class Builder {

public abstract Builder streamId(int streamId);

public abstract Builder traceSpan(Span span);

public abstract DefaultStreamingRequest build();

abstract Optional<Headers> headers();
Expand Down
2 changes: 1 addition & 1 deletion xio-core/src/main/java/com/xjeffrose/xio/http/Request.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import io.netty.handler.codec.http.HttpMethod;

@UnstableApi
public interface Request {
public interface Request extends Traceable {

boolean startOfStream();

Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package com.xjeffrose.xio.http;

import brave.Span;
import com.xjeffrose.xio.core.internal.UnstableApi;
import io.netty.buffer.ByteBuf;
import io.netty.handler.codec.http.HttpMethod;
import javax.annotation.Nullable;
import lombok.ToString;

@UnstableApi
Expand All @@ -11,12 +13,20 @@ public class StreamingRequestData implements Request, StreamingData {

private final Request request;
private final StreamingData data;
private final Span span;

public StreamingRequestData(Request request, StreamingData data) {
public StreamingRequestData(Request request, StreamingData data, Span span) {
this.request = request;
this.data = data;
this.span = span;
}

public StreamingRequestData(Request request, StreamingData data) {
this(request, data, null);
}

// region Request

@Override
public boolean startOfStream() {
return false;
Expand Down Expand Up @@ -62,6 +72,20 @@ public ByteBuf body() {
return request.body();
}

// endregion

// region Traceable

@Nullable
@Override
public Span traceSpan() {
return span;
}

// endregion

// region StreamingData

@Override
public ByteBuf content() {
return data.content();
Expand All @@ -76,4 +100,7 @@ public boolean endOfStream() {
public Headers trailingHeaders() {
return data.trailingHeaders();
}

// endregion

}
10 changes: 10 additions & 0 deletions xio-core/src/main/java/com/xjeffrose/xio/http/Traceable.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.xjeffrose.xio.http;

import brave.Span;
import javax.annotation.Nullable;

public interface Traceable {

@Nullable
Span traceSpan();
}
Original file line number Diff line number Diff line change
@@ -1,20 +1,28 @@
package com.xjeffrose.xio.http.internal;

import brave.Span;
import com.xjeffrose.xio.http.FullRequest;
import com.xjeffrose.xio.http.Headers;
import io.netty.buffer.ByteBuf;
import io.netty.handler.codec.http.FullHttpRequest;
import io.netty.handler.codec.http.HttpMethod;
import io.netty.handler.codec.http.HttpUtil;
import javax.annotation.Nullable;

public class FullHttp1Request implements FullRequest {

private final FullHttpRequest delegate;
private final Http1Headers headers;
private final Span span;

public FullHttp1Request(FullHttpRequest delegate) {
public FullHttp1Request(FullHttpRequest delegate, @Nullable Span span) {
this.delegate = delegate;
headers = new Http1Headers(delegate.headers());
this.headers = new Http1Headers(delegate.headers());
this.span = span;
}

public FullHttp1Request(FullHttpRequest delegate) {
this(delegate, null);
}

@Override
Expand Down Expand Up @@ -61,4 +69,16 @@ public boolean hasBody() {
public ByteBuf body() {
return delegate.content();
}

// endregion

// region Traceable

@Nullable
@Override
public Span traceSpan() {
return null;
}

// endregion
}
Original file line number Diff line number Diff line change
@@ -1,22 +1,32 @@
package com.xjeffrose.xio.http.internal;

import brave.Span;
import com.xjeffrose.xio.http.FullRequest;
import com.xjeffrose.xio.http.Headers;
import io.netty.handler.codec.http.HttpMethod;
import io.netty.handler.codec.http2.Http2Headers;
import javax.annotation.Nullable;

public class FullHttp2Request implements FullRequest {

private final Http2Headers delegate;
private final Http2HeadersWrapper headers;
private final int streamId;
private final Span span;

public FullHttp2Request(Http2Headers delegate, int streamId) {
public FullHttp2Request(Http2Headers delegate, int streamId, @Nullable Span span) {
this.delegate = delegate;
headers = new Http2HeadersWrapper(delegate);
this.headers = new Http2HeadersWrapper(delegate);
this.streamId = streamId;
this.span = span;
}

public FullHttp2Request(Http2Headers delegate, int streamId) {
this(delegate, streamId, null);
}

// region Request

@Override
public boolean startOfStream() {
return true;
Expand Down Expand Up @@ -56,4 +66,17 @@ public Headers headers() {
public boolean keepAlive() {
return true;
}

// endregion

// region Traceable

@Nullable
@Override
public Span traceSpan() {
return span;
}

// endregion

}
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
package com.xjeffrose.xio.http.internal;

import brave.Span;
import com.xjeffrose.xio.http.Headers;
import com.xjeffrose.xio.http.StreamingRequest;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.handler.codec.http.HttpMethod;
import io.netty.handler.codec.http.HttpRequest;
import io.netty.handler.codec.http.HttpUtil;
import javax.annotation.Nullable;
import lombok.ToString;

// TODO(CK): Rename this to StreamingHttp1Request
Expand All @@ -17,12 +19,20 @@ public class Http1Request implements StreamingRequest {

protected final HttpRequest delegate;
private final Http1Headers headers;
private final Span span;

public Http1Request(HttpRequest delegate) {
public Http1Request(HttpRequest delegate, @Nullable Span span) {
this.delegate = delegate;
headers = new Http1Headers(delegate.headers());
this.span = span;
}

public Http1Request(HttpRequest delegate) {
this(delegate, null);
}

// region Request

@Override
public boolean startOfStream() {
return true;
Expand Down Expand Up @@ -62,4 +72,17 @@ public boolean keepAlive() {
public ByteBuf body() {
return Unpooled.EMPTY_BUFFER;
}

// endregion

// region Traceable

@Nullable
@Override
public Span traceSpan() {
return span;
}

// endregion

}
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
package com.xjeffrose.xio.http.internal;

import brave.Span;
import com.xjeffrose.xio.http.Headers;
import com.xjeffrose.xio.http.StreamingRequest;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.handler.codec.http.HttpMethod;
import io.netty.handler.codec.http2.Http2Headers;
import javax.annotation.Nullable;
import lombok.ToString;

/** Wrap an incoming Http2 Request, for use in a server. */
Expand All @@ -15,13 +17,21 @@ public class StreamingHttp2Request implements StreamingRequest {
private final Http2Headers delegate;
private final Http2HeadersWrapper headers;
private final int streamId;
private final Span span;

public StreamingHttp2Request(Http2Headers delegate, int streamId) {
public StreamingHttp2Request(Http2Headers delegate, int streamId, @Nullable Span span) {
this.delegate = delegate;
headers = new Http2HeadersWrapper(delegate);
this.headers = new Http2HeadersWrapper(delegate);
this.streamId = streamId;
this.span = span;
}

public StreamingHttp2Request(Http2Headers delegate, int streamId) {
this(delegate, streamId, null);
}

// region Request

@Override
public boolean startOfStream() {
return true;
Expand Down Expand Up @@ -66,4 +76,17 @@ public boolean keepAlive() {
public ByteBuf body() {
return Unpooled.EMPTY_BUFFER;
}

// endregion

// region Traceable

@Nullable
@Override
public Span traceSpan() {
return span;
}

// endregion

}
Original file line number Diff line number Diff line change
@@ -1,11 +1,6 @@
package com.xjeffrose.xio.tracing;

import brave.Span;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelFutureListener;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelOutboundHandlerAdapter;
import io.netty.channel.ChannelPromise;
import io.netty.channel.*;
import io.netty.handler.codec.http.HttpRequest;

class HttpClientRequestTracingHandler extends ChannelOutboundHandlerAdapter {
Expand All @@ -26,7 +21,7 @@ public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise)
}

HttpRequest request = (HttpRequest) msg;
Span span = state.onRequest(ctx, request);
state.onRequest(ctx, request);

ctx.write(msg, promise)
.addListener(
Expand Down
Loading

0 comments on commit b6f2294

Please sign in to comment.