round the zipkin span duration up to 1 microsecond, if it's zero. (#1694)

* round the zipkin span duration up to 1 microsecond, if it's zero.

* fix formatting
This commit is contained in:
John Watson 2020-09-23 18:29:07 -07:00 committed by GitHub
parent 8157af01a1
commit 0b8a2dadbd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 19 additions and 6 deletions

View File

@ -127,7 +127,6 @@ public final class ZipkinSpanExporter implements SpanExporter {
Endpoint endpoint = chooseEndpoint(spanData, localEndpoint);
long startTimestamp = toEpochMicros(spanData.getStartEpochNanos());
long endTimestamp = toEpochMicros(spanData.getEndEpochNanos());
final Span.Builder spanBuilder =
@ -137,7 +136,7 @@ public final class ZipkinSpanExporter implements SpanExporter {
.kind(toSpanKind(spanData))
.name(spanData.getName())
.timestamp(toEpochMicros(spanData.getStartEpochNanos()))
.duration(endTimestamp - startTimestamp)
.duration(Math.max(1, endTimestamp - startTimestamp))
.localEndpoint(endpoint);
if (SpanId.isValid(spanData.getParentSpanId())) {

View File

@ -88,6 +88,18 @@ class ZipkinSpanExporterTest {
.isEqualTo(buildZipkinSpan(Span.Kind.SERVER));
}
@Test
void generateSpan_subMicroDurations() {
SpanData data =
buildStandardSpan()
.setStartEpochNanos(1505855794_194009601L)
.setEndEpochNanos(1505855794_194009999L)
.build();
Span expected = standardZipkinSpanBuilder(Span.Kind.SERVER).duration(1).build();
assertThat(ZipkinSpanExporter.generateSpan(data, localEndpoint)).isEqualTo(expected);
}
@Test
void generateSpan_ServerKind() {
SpanData data = buildStandardSpan().setKind(Kind.SERVER).build();
@ -313,15 +325,19 @@ class ZipkinSpanExporterTest {
.setHasRemoteParent(true)
.setName("Recv.helloworld.Greeter.SayHello")
.setStartEpochNanos(1505855794_194009601L)
.setEndEpochNanos(1505855799_465726528L)
.setAttributes(attributes)
.setTotalAttributeCount(attributes.size())
.setEvents(annotations)
.setLinks(Collections.emptyList())
.setEndEpochNanos(1505855799_465726528L)
.setHasEnded(true);
}
private static Span buildZipkinSpan(Span.Kind kind) {
return standardZipkinSpanBuilder(kind).build();
}
private static Span.Builder standardZipkinSpanBuilder(Span.Kind kind) {
return Span.newBuilder()
.traceId(TRACE_ID)
.parentId(PARENT_SPAN_ID)
@ -332,9 +348,7 @@ class ZipkinSpanExporterTest {
.duration((1505855799000000L + 465726528L / 1000) - (1505855794000000L + 194009601L / 1000))
.localEndpoint(localEndpoint)
.addAnnotation(1505855799000000L + 433901068L / 1000, "RECEIVED")
.addAnnotation(1505855799000000L + 459486280L / 1000, "SENT")
// .putTag(ZipkinSpanExporter.STATUS_CODE, status)
.build();
.addAnnotation(1505855799000000L + 459486280L / 1000, "SENT");
}
abstract static class ConfigBuilderTest extends ConfigBuilder<ConfigBuilderTest> {