diff --git a/QUICKSTART.md b/QUICKSTART.md
index a87f86b6ace..b11de4d934e 100644
--- a/QUICKSTART.md
+++ b/QUICKSTART.md
@@ -55,7 +55,7 @@ try (Scope scope = tracer.withSpan(span)) {
// your use case
...
} catch (Throwable t) {
- Status status = Status.UNKNOWN.withDescription("Change it to your error message");
+ Status status = Status.ERROR.withDescription("Change it to your error message");
span.setStatus(status);
} finally {
span.end(); // closing the scope does not end the span, this has to be done manually
diff --git a/api/src/main/java/io/opentelemetry/trace/Status.java b/api/src/main/java/io/opentelemetry/trace/Status.java
index 74a27478a8e..6b47eeed2bb 100644
--- a/api/src/main/java/io/opentelemetry/trace/Status.java
+++ b/api/src/main/java/io/opentelemetry/trace/Status.java
@@ -17,10 +17,9 @@
package io.opentelemetry.trace;
import io.opentelemetry.internal.Utils;
-import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
-import java.util.List;
+import java.util.Map;
import java.util.Objects;
import java.util.TreeMap;
import javax.annotation.Nullable;
@@ -44,163 +43,18 @@ public final class Status {
* @since 0.1.0
*/
public enum CanonicalCode {
- /**
- * The operation completed successfully.
- *
- * @since 0.1.0
- */
- OK(0),
-
- /**
- * The operation was cancelled (typically by the caller).
- *
- * @since 0.1.0
- */
- CANCELLED(1),
-
- /**
- * Unknown error. An example of where this error may be returned is if a Status value received
- * from another address space belongs to an error-space that is not known in this address space.
- * Also errors raised by APIs that do not return enough error information may be converted to
- * this error.
- *
- * @since 0.1.0
- */
- UNKNOWN(2),
-
- /**
- * Client specified an invalid argument. Note that this differs from FAILED_PRECONDITION.
- * INVALID_ARGUMENT indicates arguments that are problematic regardless of the state of the
- * system (e.g., a malformed file name).
- *
- * @since 0.1.0
- */
- INVALID_ARGUMENT(3),
-
- /**
- * Deadline expired before operation could complete. For operations that change the state of the
- * system, this error may be returned even if the operation has completed successfully. For
- * example, a successful response from a server could have been delayed long enough for the
- * deadline to expire.
- *
- * @since 0.1.0
- */
- DEADLINE_EXCEEDED(4),
-
- /**
- * Some requested entity (e.g., file or directory) was not found.
- *
- * @since 0.1.0
- */
- NOT_FOUND(5),
-
- /**
- * Some entity that we attempted to create (e.g., file or directory) already exists.
- *
- * @since 0.1.0
- */
- ALREADY_EXISTS(6),
-
- /**
- * The caller does not have permission to execute the specified operation. PERMISSION_DENIED
- * must not be used for rejections caused by exhausting some resource (use RESOURCE_EXHAUSTED
- * instead for those errors). PERMISSION_DENIED must not be used if the caller cannot be
- * identified (use UNAUTHENTICATED instead for those errors).
- *
- * @since 0.1.0
- */
- PERMISSION_DENIED(7),
-
- /**
- * Some resource has been exhausted, perhaps a per-user quota, or perhaps the entire file system
- * is out of space.
- *
- * @since 0.1.0
- */
- RESOURCE_EXHAUSTED(8),
-
- /**
- * Operation was rejected because the system is not in a state required for the operation's
- * execution. For example, directory to be deleted may be non-empty, an rmdir operation is
- * applied to a non-directory, etc.
- *
- *
A litmus test that may help a service implementor in deciding between FAILED_PRECONDITION,
- * ABORTED, and UNAVAILABLE: (a) Use UNAVAILABLE if the client can retry just the failing call.
- * (b) Use ABORTED if the client should retry at a higher-level (e.g., restarting a
- * read-modify-write sequence). (c) Use FAILED_PRECONDITION if the client should not retry until
- * the system state has been explicitly fixed. E.g., if an "rmdir" fails because the directory
- * is non-empty, FAILED_PRECONDITION should be returned since the client should not retry unless
- * they have first fixed up the directory by deleting files from it.
- *
- * @since 0.1.0
- */
- FAILED_PRECONDITION(9),
-
- /**
- * The operation was aborted, typically due to a concurrency issue like sequencer check
- * failures, transaction aborts, etc.
- *
- *
See litmus test above for deciding between FAILED_PRECONDITION, ABORTED, and UNAVAILABLE.
- *
- * @since 0.1.0
- */
- ABORTED(10),
/**
- * Operation was attempted past the valid range. E.g., seeking or reading past end of file.
- *
- *
Unlike INVALID_ARGUMENT, this error indicates a problem that may be fixed if the system
- * state changes. For example, a 32-bit file system will generate INVALID_ARGUMENT if asked to
- * read at an offset that is not in the range [0,2^32-1], but it will generate OUT_OF_RANGE if
- * asked to read from an offset past the current file size.
- *
- *
There is a fair bit of overlap between FAILED_PRECONDITION and OUT_OF_RANGE. We recommend
- * using OUT_OF_RANGE (the more specific error) when it applies so that callers who are
- * iterating through a space can easily look for an OUT_OF_RANGE error to detect when they are
- * done.
- *
- * @since 0.1.0
+ * The operation has been validated by an Application developers or Operator to have completed
+ * successfully.
*/
- OUT_OF_RANGE(11),
-
- /**
- * Operation is not implemented or not supported/enabled in this service.
- *
- * @since 0.1.0
- */
- UNIMPLEMENTED(12),
-
- /**
- * Internal errors. Means some invariants expected by underlying system has been broken. If you
- * see one of these errors, something is very broken.
- *
- * @since 0.1.0
- */
- INTERNAL(13),
-
- /**
- * The service is currently unavailable. This is a most likely a transient condition and may be
- * corrected by retrying with a backoff.
- *
- *
See litmus test above for deciding between FAILED_PRECONDITION, ABORTED, and UNAVAILABLE.
- *
- * @since 0.1.0
- */
- UNAVAILABLE(14),
+ OK(0),
- /**
- * Unrecoverable data loss or corruption.
- *
- * @since 0.1.0
- */
- DATA_LOSS(15),
+ /** The default status. */
+ UNSET(1),
- /**
- * The request does not have valid authentication credentials for the operation.
- *
- * @since 0.1.0
- */
- UNAUTHENTICATED(16);
+ /** The operation contains an error. */
+ ERROR(2);
private final int value;
@@ -225,14 +79,14 @@ public int value() {
* @since 0.1.0
*/
public Status toStatus() {
- return STATUS_LIST.get(value);
+ return STATUSES_BY_VALUE.get(value);
}
}
// Create the canonical list of Status instances indexed by their code values.
- private static final List STATUS_LIST = buildStatusList();
+ private static final Map STATUSES_BY_VALUE = buildStatusList();
- private static List buildStatusList() {
+ private static Map buildStatusList() {
TreeMap canonicalizer = new TreeMap<>();
for (CanonicalCode code : CanonicalCode.values()) {
Status replaced = canonicalizer.put(code.value(), new Status(code, null));
@@ -244,133 +98,22 @@ private static List buildStatusList() {
+ code.name());
}
}
- return Collections.unmodifiableList(new ArrayList<>(canonicalizer.values()));
+ return Collections.unmodifiableMap(canonicalizer);
}
// A pseudo-enum of Status instances mapped 1:1 with values in CanonicalCode. This simplifies
// construction patterns for derived instances of Status.
/**
- * The operation completed successfully.
- *
- * @since 0.1.0
+ * The operation has been validated by an Application developers or Operator to have completed
+ * successfully.
*/
public static final Status OK = CanonicalCode.OK.toStatus();
- /**
- * The operation was cancelled (typically by the caller).
- *
- * @since 0.1.0
- */
- public static final Status CANCELLED = CanonicalCode.CANCELLED.toStatus();
-
- /**
- * Unknown error. See {@link CanonicalCode#UNKNOWN}.
- *
- * @since 0.1.0
- */
- public static final Status UNKNOWN = CanonicalCode.UNKNOWN.toStatus();
-
- /**
- * Client specified an invalid argument. See {@link CanonicalCode#INVALID_ARGUMENT}.
- *
- * @since 0.1.0
- */
- public static final Status INVALID_ARGUMENT = CanonicalCode.INVALID_ARGUMENT.toStatus();
-
- /**
- * Deadline expired before operation could complete. See {@link CanonicalCode#DEADLINE_EXCEEDED}.
- *
- * @since 0.1.0
- */
- public static final Status DEADLINE_EXCEEDED = CanonicalCode.DEADLINE_EXCEEDED.toStatus();
-
- /**
- * Some requested entity (e.g., file or directory) was not found.
- *
- * @since 0.1.0
- */
- public static final Status NOT_FOUND = CanonicalCode.NOT_FOUND.toStatus();
-
- /**
- * Some entity that we attempted to create (e.g., file or directory) already exists.
- *
- * @since 0.1.0
- */
- public static final Status ALREADY_EXISTS = CanonicalCode.ALREADY_EXISTS.toStatus();
-
- /**
- * The caller does not have permission to execute the specified operation. See {@link
- * CanonicalCode#PERMISSION_DENIED}.
- *
- * @since 0.1.0
- */
- public static final Status PERMISSION_DENIED = CanonicalCode.PERMISSION_DENIED.toStatus();
-
- /**
- * The request does not have valid authentication credentials for the operation.
- *
- * @since 0.1.0
- */
- public static final Status UNAUTHENTICATED = CanonicalCode.UNAUTHENTICATED.toStatus();
-
- /**
- * Some resource has been exhausted, perhaps a per-user quota, or perhaps the entire file system
- * is out of space.
- *
- * @since 0.1.0
- */
- public static final Status RESOURCE_EXHAUSTED = CanonicalCode.RESOURCE_EXHAUSTED.toStatus();
-
- /**
- * Operation was rejected because the system is not in a state required for the operation's
- * execution. See {@link CanonicalCode#FAILED_PRECONDITION}.
- *
- * @since 0.1.0
- */
- public static final Status FAILED_PRECONDITION = CanonicalCode.FAILED_PRECONDITION.toStatus();
-
- /**
- * The operation was aborted, typically due to a concurrency issue like sequencer check failures,
- * transaction aborts, etc. See {@link CanonicalCode#ABORTED}.
- *
- * @since 0.1.0
- */
- public static final Status ABORTED = CanonicalCode.ABORTED.toStatus();
-
- /**
- * Operation was attempted past the valid range. See {@link CanonicalCode#OUT_OF_RANGE}.
- *
- * @since 0.1.0
- */
- public static final Status OUT_OF_RANGE = CanonicalCode.OUT_OF_RANGE.toStatus();
+ /** The default status. */
+ public static final Status UNSET = CanonicalCode.UNSET.toStatus();
- /**
- * Operation is not implemented or not supported/enabled in this service.
- *
- * @since 0.1.0
- */
- public static final Status UNIMPLEMENTED = CanonicalCode.UNIMPLEMENTED.toStatus();
-
- /**
- * Internal errors. See {@link CanonicalCode#INTERNAL}.
- *
- * @since 0.1.0
- */
- public static final Status INTERNAL = CanonicalCode.INTERNAL.toStatus();
-
- /**
- * The service is currently unavailable. See {@link CanonicalCode#UNAVAILABLE}.
- *
- * @since 0.1.0
- */
- public static final Status UNAVAILABLE = CanonicalCode.UNAVAILABLE.toStatus();
-
- /**
- * Unrecoverable data loss or corruption.
- *
- * @since 0.1.0
- */
- public static final Status DATA_LOSS = CanonicalCode.DATA_LOSS.toStatus();
+ /** The operation contains an error. */
+ public static final Status ERROR = CanonicalCode.ERROR.toStatus();
// The canonical code of this message.
private final CanonicalCode canonicalCode;
@@ -419,13 +162,22 @@ public String getDescription() {
}
/**
- * Returns {@code true} if this {@code Status} is OK, i.e., not an error.
+ * Returns {@code true} if this {@code Status} is UNSET, i.e., not an error.
*
- * @return {@code true} if this {@code Status} is OK.
- * @since 0.1.0
+ * @return {@code true} if this {@code Status} is UNSET.
+ */
+ public boolean isUnset() {
+ return CanonicalCode.UNSET == canonicalCode;
+ }
+
+ /**
+ * Returns {@code true} if this {@code Status} is ok, i.e., status is not set, or has been
+ * overridden to be ok by an operator.
+ *
+ * @return {@code true} if this {@code Status} is OK or UNSET.
*/
public boolean isOk() {
- return CanonicalCode.OK == canonicalCode;
+ return isUnset() || CanonicalCode.OK == canonicalCode;
}
/**
diff --git a/api/src/test/java/io/opentelemetry/trace/StatusTest.java b/api/src/test/java/io/opentelemetry/trace/StatusTest.java
index af9b2c81e50..7a51cccbf1c 100644
--- a/api/src/test/java/io/opentelemetry/trace/StatusTest.java
+++ b/api/src/test/java/io/opentelemetry/trace/StatusTest.java
@@ -28,14 +28,15 @@ void status_Ok() {
assertThat(Status.OK.getCanonicalCode()).isEqualTo(Status.CanonicalCode.OK);
assertThat(Status.OK.getDescription()).isNull();
assertThat(Status.OK.isOk()).isTrue();
+ assertThat(Status.UNSET.isOk()).isTrue();
}
@Test
void createStatus_WithDescription() {
- Status status = Status.UNKNOWN.withDescription("This is an error.");
- assertThat(status.getCanonicalCode()).isEqualTo(Status.CanonicalCode.UNKNOWN);
+ Status status = Status.ERROR.withDescription("This is an error.");
+ assertThat(status.getCanonicalCode()).isEqualTo(Status.CanonicalCode.ERROR);
assertThat(status.getDescription()).isEqualTo("This is an error.");
- assertThat(status.isOk()).isFalse();
+ assertThat(status.isUnset()).isFalse();
}
@Test
@@ -43,9 +44,9 @@ void status_EqualsAndHashCode() {
EqualsTester tester = new EqualsTester();
tester.addEqualityGroup(Status.OK, Status.OK.withDescription(null));
tester.addEqualityGroup(
- Status.CANCELLED.withDescription("ThisIsAnError"),
- Status.CANCELLED.withDescription("ThisIsAnError"));
- tester.addEqualityGroup(Status.UNKNOWN.withDescription("This is an error."));
+ Status.ERROR.withDescription("ThisIsAnError"),
+ Status.ERROR.withDescription("ThisIsAnError"));
+ tester.addEqualityGroup(Status.ERROR.withDescription("This is an error."));
tester.testEquals();
}
}
diff --git a/exporters/jaeger/src/test/java/io/opentelemetry/exporters/jaeger/AdapterTest.java b/exporters/jaeger/src/test/java/io/opentelemetry/exporters/jaeger/AdapterTest.java
index e428b778c30..e2cff4d053f 100644
--- a/exporters/jaeger/src/test/java/io/opentelemetry/exporters/jaeger/AdapterTest.java
+++ b/exporters/jaeger/src/test/java/io/opentelemetry/exporters/jaeger/AdapterTest.java
@@ -218,7 +218,7 @@ void testSpanRef() {
}
@Test
- void testStatusNotOk() {
+ void testStatusNotUnset() {
long startMs = System.currentTimeMillis();
long endMs = startMs + 900;
SpanData span =
@@ -230,7 +230,7 @@ void testStatusNotOk() {
.setStartEpochNanos(TimeUnit.MILLISECONDS.toNanos(startMs))
.setEndEpochNanos(TimeUnit.MILLISECONDS.toNanos(endMs))
.setKind(Span.Kind.SERVER)
- .setStatus(Status.CANCELLED)
+ .setStatus(Status.ERROR)
.setTotalRecordedEvents(0)
.setTotalRecordedLinks(0)
.build();
@@ -257,7 +257,7 @@ void testSpanError() {
.setStartEpochNanos(TimeUnit.MILLISECONDS.toNanos(startMs))
.setEndEpochNanos(TimeUnit.MILLISECONDS.toNanos(endMs))
.setKind(Span.Kind.SERVER)
- .setStatus(Status.UNKNOWN)
+ .setStatus(Status.ERROR)
.setAttributes(attributes)
.setTotalRecordedEvents(0)
.setTotalRecordedLinks(0)
diff --git a/exporters/otlp/src/main/java/io/opentelemetry/exporters/otlp/SpanAdapter.java b/exporters/otlp/src/main/java/io/opentelemetry/exporters/otlp/SpanAdapter.java
index 23a2ac4722f..1ad318d5e8b 100644
--- a/exporters/otlp/src/main/java/io/opentelemetry/exporters/otlp/SpanAdapter.java
+++ b/exporters/otlp/src/main/java/io/opentelemetry/exporters/otlp/SpanAdapter.java
@@ -39,6 +39,7 @@
import io.opentelemetry.sdk.trace.data.SpanData.Link;
import io.opentelemetry.trace.Span.Kind;
import io.opentelemetry.trace.SpanId;
+import io.opentelemetry.trace.Status.CanonicalCode;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
@@ -181,8 +182,12 @@ public void consume(AttributeKey key, T value) {
}
static Status toStatusProto(io.opentelemetry.trace.Status status) {
- Status.Builder builder =
- Status.newBuilder().setCode(StatusCode.forNumber(status.getCanonicalCode().value()));
+ // todo: Update this when the proto definitions are updated to include UNSET and ERROR
+ StatusCode protoStatusCode = StatusCode.STATUS_CODE_OK;
+ if (status.getCanonicalCode() == CanonicalCode.ERROR) {
+ protoStatusCode = StatusCode.STATUS_CODE_UNKNOWN_ERROR;
+ }
+ Status.Builder builder = Status.newBuilder().setCode(protoStatusCode);
if (status.getDescription() != null) {
builder.setMessage(status.getDescription());
}
diff --git a/exporters/otlp/src/test/java/io/opentelemetry/exporters/otlp/SpanAdapterTest.java b/exporters/otlp/src/test/java/io/opentelemetry/exporters/otlp/SpanAdapterTest.java
index 4293aa47724..f5457e8bda3 100644
--- a/exporters/otlp/src/test/java/io/opentelemetry/exporters/otlp/SpanAdapterTest.java
+++ b/exporters/otlp/src/test/java/io/opentelemetry/exporters/otlp/SpanAdapterTest.java
@@ -23,22 +23,7 @@
import static io.opentelemetry.proto.trace.v1.Span.SpanKind.SPAN_KIND_INTERNAL;
import static io.opentelemetry.proto.trace.v1.Span.SpanKind.SPAN_KIND_PRODUCER;
import static io.opentelemetry.proto.trace.v1.Span.SpanKind.SPAN_KIND_SERVER;
-import static io.opentelemetry.proto.trace.v1.Status.StatusCode.STATUS_CODE_ABORTED;
-import static io.opentelemetry.proto.trace.v1.Status.StatusCode.STATUS_CODE_ALREADY_EXISTS;
-import static io.opentelemetry.proto.trace.v1.Status.StatusCode.STATUS_CODE_CANCELLED;
-import static io.opentelemetry.proto.trace.v1.Status.StatusCode.STATUS_CODE_DATA_LOSS;
-import static io.opentelemetry.proto.trace.v1.Status.StatusCode.STATUS_CODE_DEADLINE_EXCEEDED;
-import static io.opentelemetry.proto.trace.v1.Status.StatusCode.STATUS_CODE_FAILED_PRECONDITION;
-import static io.opentelemetry.proto.trace.v1.Status.StatusCode.STATUS_CODE_INTERNAL_ERROR;
-import static io.opentelemetry.proto.trace.v1.Status.StatusCode.STATUS_CODE_INVALID_ARGUMENT;
-import static io.opentelemetry.proto.trace.v1.Status.StatusCode.STATUS_CODE_NOT_FOUND;
import static io.opentelemetry.proto.trace.v1.Status.StatusCode.STATUS_CODE_OK;
-import static io.opentelemetry.proto.trace.v1.Status.StatusCode.STATUS_CODE_OUT_OF_RANGE;
-import static io.opentelemetry.proto.trace.v1.Status.StatusCode.STATUS_CODE_PERMISSION_DENIED;
-import static io.opentelemetry.proto.trace.v1.Status.StatusCode.STATUS_CODE_RESOURCE_EXHAUSTED;
-import static io.opentelemetry.proto.trace.v1.Status.StatusCode.STATUS_CODE_UNAUTHENTICATED;
-import static io.opentelemetry.proto.trace.v1.Status.StatusCode.STATUS_CODE_UNAVAILABLE;
-import static io.opentelemetry.proto.trace.v1.Status.StatusCode.STATUS_CODE_UNIMPLEMENTED;
import static io.opentelemetry.proto.trace.v1.Status.StatusCode.STATUS_CODE_UNKNOWN_ERROR;
import static org.assertj.core.api.Assertions.assertThat;
@@ -135,118 +120,21 @@ void toProtoSpanKind() {
@Test
void toProtoStatus() {
- assertThat(SpanAdapter.toStatusProto(io.opentelemetry.trace.Status.OK))
+ assertThat(SpanAdapter.toStatusProto(io.opentelemetry.trace.Status.UNSET))
.isEqualTo(Status.newBuilder().setCode(STATUS_CODE_OK).build());
assertThat(
- SpanAdapter.toStatusProto(
- io.opentelemetry.trace.Status.CANCELLED.withDescription("CANCELLED")))
+ SpanAdapter.toStatusProto(io.opentelemetry.trace.Status.ERROR.withDescription("ERROR")))
.isEqualTo(
- Status.newBuilder().setCode(STATUS_CODE_CANCELLED).setMessage("CANCELLED").build());
+ Status.newBuilder().setCode(STATUS_CODE_UNKNOWN_ERROR).setMessage("ERROR").build());
assertThat(
SpanAdapter.toStatusProto(
- io.opentelemetry.trace.Status.UNKNOWN.withDescription("UNKNOWN")))
+ io.opentelemetry.trace.Status.ERROR.withDescription("UNKNOWN")))
.isEqualTo(
Status.newBuilder().setCode(STATUS_CODE_UNKNOWN_ERROR).setMessage("UNKNOWN").build());
assertThat(
SpanAdapter.toStatusProto(
- io.opentelemetry.trace.Status.INVALID_ARGUMENT.withDescription("INVALID_ARGUMENT")))
- .isEqualTo(
- Status.newBuilder()
- .setCode(STATUS_CODE_INVALID_ARGUMENT)
- .setMessage("INVALID_ARGUMENT")
- .build());
- assertThat(
- SpanAdapter.toStatusProto(
- io.opentelemetry.trace.Status.DEADLINE_EXCEEDED.withDescription(
- "DEADLINE_EXCEEDED")))
- .isEqualTo(
- Status.newBuilder()
- .setCode(STATUS_CODE_DEADLINE_EXCEEDED)
- .setMessage("DEADLINE_EXCEEDED")
- .build());
- assertThat(
- SpanAdapter.toStatusProto(
- io.opentelemetry.trace.Status.NOT_FOUND.withDescription("NOT_FOUND")))
- .isEqualTo(
- Status.newBuilder().setCode(STATUS_CODE_NOT_FOUND).setMessage("NOT_FOUND").build());
- assertThat(
- SpanAdapter.toStatusProto(
- io.opentelemetry.trace.Status.ALREADY_EXISTS.withDescription("ALREADY_EXISTS")))
- .isEqualTo(
- Status.newBuilder()
- .setCode(STATUS_CODE_ALREADY_EXISTS)
- .setMessage("ALREADY_EXISTS")
- .build());
- assertThat(
- SpanAdapter.toStatusProto(
- io.opentelemetry.trace.Status.PERMISSION_DENIED.withDescription(
- "PERMISSION_DENIED")))
- .isEqualTo(
- Status.newBuilder()
- .setCode(STATUS_CODE_PERMISSION_DENIED)
- .setMessage("PERMISSION_DENIED")
- .build());
- assertThat(
- SpanAdapter.toStatusProto(
- io.opentelemetry.trace.Status.RESOURCE_EXHAUSTED.withDescription(
- "RESOURCE_EXHAUSTED")))
- .isEqualTo(
- Status.newBuilder()
- .setCode(STATUS_CODE_RESOURCE_EXHAUSTED)
- .setMessage("RESOURCE_EXHAUSTED")
- .build());
- assertThat(
- SpanAdapter.toStatusProto(
- io.opentelemetry.trace.Status.FAILED_PRECONDITION.withDescription(
- "FAILED_PRECONDITION")))
- .isEqualTo(
- Status.newBuilder()
- .setCode(STATUS_CODE_FAILED_PRECONDITION)
- .setMessage("FAILED_PRECONDITION")
- .build());
- assertThat(
- SpanAdapter.toStatusProto(
- io.opentelemetry.trace.Status.ABORTED.withDescription("ABORTED")))
- .isEqualTo(Status.newBuilder().setCode(STATUS_CODE_ABORTED).setMessage("ABORTED").build());
- assertThat(
- SpanAdapter.toStatusProto(
- io.opentelemetry.trace.Status.OUT_OF_RANGE.withDescription("OUT_OF_RANGE")))
- .isEqualTo(
- Status.newBuilder()
- .setCode(STATUS_CODE_OUT_OF_RANGE)
- .setMessage("OUT_OF_RANGE")
- .build());
- assertThat(
- SpanAdapter.toStatusProto(
- io.opentelemetry.trace.Status.UNIMPLEMENTED.withDescription("UNIMPLEMENTED")))
- .isEqualTo(
- Status.newBuilder()
- .setCode(STATUS_CODE_UNIMPLEMENTED)
- .setMessage("UNIMPLEMENTED")
- .build());
- assertThat(
- SpanAdapter.toStatusProto(
- io.opentelemetry.trace.Status.INTERNAL.withDescription("INTERNAL")))
- .isEqualTo(
- Status.newBuilder().setCode(STATUS_CODE_INTERNAL_ERROR).setMessage("INTERNAL").build());
- assertThat(
- SpanAdapter.toStatusProto(
- io.opentelemetry.trace.Status.UNAVAILABLE.withDescription("UNAVAILABLE")))
- .isEqualTo(
- Status.newBuilder().setCode(STATUS_CODE_UNAVAILABLE).setMessage("UNAVAILABLE").build());
- assertThat(
- SpanAdapter.toStatusProto(
- io.opentelemetry.trace.Status.DATA_LOSS.withDescription("DATA_LOSS")))
- .isEqualTo(
- Status.newBuilder().setCode(STATUS_CODE_DATA_LOSS).setMessage("DATA_LOSS").build());
- assertThat(
- SpanAdapter.toStatusProto(
- io.opentelemetry.trace.Status.UNAUTHENTICATED.withDescription("UNAUTHENTICATED")))
- .isEqualTo(
- Status.newBuilder()
- .setCode(STATUS_CODE_UNAUTHENTICATED)
- .setMessage("UNAUTHENTICATED")
- .build());
+ io.opentelemetry.trace.Status.OK.withDescription("OK_OVERRIDE")))
+ .isEqualTo(Status.newBuilder().setCode(STATUS_CODE_OK).setMessage("OK_OVERRIDE").build());
}
@Test
diff --git a/exporters/zipkin/src/test/java/io/opentelemetry/exporters/zipkin/ZipkinSpanExporterTest.java b/exporters/zipkin/src/test/java/io/opentelemetry/exporters/zipkin/ZipkinSpanExporterTest.java
index fbd19663bcc..7d69bf394f0 100644
--- a/exporters/zipkin/src/test/java/io/opentelemetry/exporters/zipkin/ZipkinSpanExporterTest.java
+++ b/exporters/zipkin/src/test/java/io/opentelemetry/exporters/zipkin/ZipkinSpanExporterTest.java
@@ -209,7 +209,7 @@ void generateSpan_AlreadyHasHttpStatusInfo() {
buildStandardSpan()
.setAttributes(attributeMap)
.setKind(Kind.CLIENT)
- .setStatus(Status.NOT_FOUND)
+ .setStatus(Status.ERROR)
.build();
assertThat(ZipkinSpanExporter.generateSpan(data, localEndpoint))
@@ -230,7 +230,7 @@ void generateSpan_WithRpcErrorStatus() {
SpanData data =
buildStandardSpan()
- .setStatus(Status.DEADLINE_EXCEEDED.withDescription(errorMessage))
+ .setStatus(Status.ERROR.withDescription(errorMessage))
.setAttributes(attributeMap)
.build();
@@ -240,8 +240,8 @@ void generateSpan_WithRpcErrorStatus() {
.toBuilder()
.putTag(ZipkinSpanExporter.OTEL_STATUS_DESCRIPTION, errorMessage)
.putTag(SemanticAttributes.RPC_SERVICE.getKey(), "my service name")
- .putTag(ZipkinSpanExporter.OTEL_STATUS_CODE, "DEADLINE_EXCEEDED")
- .putTag(ZipkinSpanExporter.STATUS_ERROR.getKey(), "DEADLINE_EXCEEDED")
+ .putTag(ZipkinSpanExporter.OTEL_STATUS_CODE, "ERROR")
+ .putTag(ZipkinSpanExporter.STATUS_ERROR.getKey(), "ERROR")
.build());
}
diff --git a/extensions/trace_utils/src/main/java/io/opentelemetry/extensions/trace/CurrentSpanUtils.java b/extensions/trace_utils/src/main/java/io/opentelemetry/extensions/trace/CurrentSpanUtils.java
index 2d95350fab8..d06464a1b59 100644
--- a/extensions/trace_utils/src/main/java/io/opentelemetry/extensions/trace/CurrentSpanUtils.java
+++ b/extensions/trace_utils/src/main/java/io/opentelemetry/extensions/trace/CurrentSpanUtils.java
@@ -121,7 +121,7 @@ public V call() throws Exception {
private static void setErrorStatus(Span span, Throwable t) {
span.setStatus(
- Status.UNKNOWN.withDescription(
+ Status.ERROR.withDescription(
t.getMessage() == null ? t.getClass().getSimpleName() : t.getMessage()));
}
}
diff --git a/extensions/trace_utils/src/test/java/io/opentelemetry/extensions/trace/CurrentSpanUtilsTest.java b/extensions/trace_utils/src/test/java/io/opentelemetry/extensions/trace/CurrentSpanUtilsTest.java
index aff00a9ca81..7d4973dbc62 100644
--- a/extensions/trace_utils/src/test/java/io/opentelemetry/extensions/trace/CurrentSpanUtilsTest.java
+++ b/extensions/trace_utils/src/test/java/io/opentelemetry/extensions/trace/CurrentSpanUtilsTest.java
@@ -100,7 +100,7 @@ void withSpanRunnable_WithError() {
throw error;
};
executeRunnableAndExpectError(runnable, error);
- verify(span).setStatus(Status.UNKNOWN.withDescription("MyError"));
+ verify(span).setStatus(Status.ERROR.withDescription("MyError"));
verify(span).end();
assertThat(getCurrentSpan()).isInstanceOf(DefaultSpan.class);
}
@@ -116,7 +116,7 @@ void withSpanRunnable_WithErrorNoMessage() {
throw error;
};
executeRunnableAndExpectError(runnable, error);
- verify(span).setStatus(Status.UNKNOWN.withDescription("AssertionError"));
+ verify(span).setStatus(Status.ERROR.withDescription("AssertionError"));
verify(span).end();
assertThat(getCurrentSpan()).isInstanceOf(DefaultSpan.class);
}
@@ -162,7 +162,7 @@ void withSpanCallable_WithException() {
throw exception;
};
executeCallableAndExpectError(callable, exception);
- verify(span).setStatus(Status.UNKNOWN.withDescription("MyException"));
+ verify(span).setStatus(Status.ERROR.withDescription("MyException"));
verify(span).end();
assertThat(getCurrentSpan()).isInstanceOf(DefaultSpan.class);
}
@@ -178,7 +178,7 @@ void withSpanCallable_WithExceptionNoMessage() {
throw exception;
};
executeCallableAndExpectError(callable, exception);
- verify(span).setStatus(Status.UNKNOWN.withDescription("Exception"));
+ verify(span).setStatus(Status.ERROR.withDescription("Exception"));
verify(span).end();
assertThat(getCurrentSpan()).isInstanceOf(DefaultSpan.class);
}
@@ -194,7 +194,7 @@ void withSpanCallable_WithError() {
throw error;
};
executeCallableAndExpectError(callable, error);
- verify(span).setStatus(Status.UNKNOWN.withDescription("MyError"));
+ verify(span).setStatus(Status.ERROR.withDescription("MyError"));
verify(span).end();
assertThat(getCurrentSpan()).isInstanceOf(DefaultSpan.class);
}
@@ -210,7 +210,7 @@ void withSpanCallable_WithErrorNoMessage() {
throw error;
};
executeCallableAndExpectError(callable, error);
- verify(span).setStatus(Status.UNKNOWN.withDescription("AssertionError"));
+ verify(span).setStatus(Status.ERROR.withDescription("AssertionError"));
verify(span).end();
assertThat(getCurrentSpan()).isInstanceOf(DefaultSpan.class);
}
diff --git a/opentracing_shim/src/main/java/io/opentelemetry/opentracingshim/SpanBuilderShim.java b/opentracing_shim/src/main/java/io/opentelemetry/opentracingshim/SpanBuilderShim.java
index db51e6788a1..5fc1233793b 100644
--- a/opentracing_shim/src/main/java/io/opentelemetry/opentracingshim/SpanBuilderShim.java
+++ b/opentracing_shim/src/main/java/io/opentelemetry/opentracingshim/SpanBuilderShim.java
@@ -221,7 +221,7 @@ public Span start() {
span.setAttribute(key, value);
}
if (error) {
- span.setStatus(Status.UNKNOWN);
+ span.setStatus(Status.ERROR);
}
SpanShim spanShim = new SpanShim(telemetryInfo(), span);
diff --git a/opentracing_shim/src/main/java/io/opentelemetry/opentracingshim/SpanShim.java b/opentracing_shim/src/main/java/io/opentelemetry/opentracingshim/SpanShim.java
index ee3ba79f5a4..74620ec8668 100644
--- a/opentracing_shim/src/main/java/io/opentelemetry/opentracingshim/SpanShim.java
+++ b/opentracing_shim/src/main/java/io/opentelemetry/opentracingshim/SpanShim.java
@@ -76,7 +76,7 @@ public Span setTag(String key, String value) {
// TODO: confirm we can safely ignore span.kind after Span was created
// https://github.com/bogdandrutu/opentelemetry/issues/42
} else if (Tags.ERROR.getKey().equals(key)) {
- Status status = Boolean.parseBoolean(value) ? Status.UNKNOWN : Status.OK;
+ Status status = Boolean.parseBoolean(value) ? Status.ERROR : Status.UNSET;
span.setStatus(status);
} else {
span.setAttribute(key, value);
@@ -88,7 +88,7 @@ public Span setTag(String key, String value) {
@Override
public Span setTag(String key, boolean value) {
if (Tags.ERROR.getKey().equals(key)) {
- Status status = value ? Status.UNKNOWN : Status.OK;
+ Status status = value ? Status.ERROR : Status.UNSET;
span.setStatus(status);
} else {
span.setAttribute(key, value);
diff --git a/opentracing_shim/src/test/java/io/opentelemetry/opentracingshim/testbed/errorreporting/ErrorReportingTest.java b/opentracing_shim/src/test/java/io/opentelemetry/opentracingshim/testbed/errorreporting/ErrorReportingTest.java
index 2a79b1ad81e..5e436d23fab 100644
--- a/opentracing_shim/src/test/java/io/opentelemetry/opentracingshim/testbed/errorreporting/ErrorReportingTest.java
+++ b/opentracing_shim/src/test/java/io/opentelemetry/opentracingshim/testbed/errorreporting/ErrorReportingTest.java
@@ -67,7 +67,7 @@ void testSimpleError() {
List spans = inMemoryTracing.getSpanExporter().getFinishedSpanItems();
assertEquals(spans.size(), 1);
- assertEquals(spans.get(0).getStatus().getCanonicalCode(), Status.UNKNOWN.getCanonicalCode());
+ assertEquals(spans.get(0).getStatus().getCanonicalCode(), Status.ERROR.getCanonicalCode());
}
/* Error handling in a callback capturing/activating the Span */
@@ -91,7 +91,7 @@ void testCallbackError() {
List spans = inMemoryTracing.getSpanExporter().getFinishedSpanItems();
assertEquals(spans.size(), 1);
- assertEquals(spans.get(0).getStatus().getCanonicalCode(), Status.UNKNOWN.getCanonicalCode());
+ assertEquals(spans.get(0).getStatus().getCanonicalCode(), Status.ERROR.getCanonicalCode());
}
/* Error handling for a max-retries task (such as url fetching).
@@ -122,7 +122,7 @@ void testErrorRecovery() {
List spans = inMemoryTracing.getSpanExporter().getFinishedSpanItems();
assertEquals(spans.size(), 1);
- assertEquals(spans.get(0).getStatus().getCanonicalCode(), Status.UNKNOWN.getCanonicalCode());
+ assertEquals(spans.get(0).getStatus().getCanonicalCode(), Status.ERROR.getCanonicalCode());
List events = spans.get(0).getEvents();
assertEquals(events.size(), maxRetries);
@@ -159,7 +159,7 @@ void testInstrumentationLayer() {
List spans = inMemoryTracing.getSpanExporter().getFinishedSpanItems();
assertEquals(spans.size(), 1);
- assertEquals(spans.get(0).getStatus().getCanonicalCode(), Status.UNKNOWN.getCanonicalCode());
+ assertEquals(spans.get(0).getStatus().getCanonicalCode(), Status.ERROR.getCanonicalCode());
}
static class ScopedRunnable implements Runnable {
diff --git a/sdk/tracing/src/main/java/io/opentelemetry/sdk/trace/RecordEventsReadableSpan.java b/sdk/tracing/src/main/java/io/opentelemetry/sdk/trace/RecordEventsReadableSpan.java
index c2debc664c9..bf6ea9063bf 100644
--- a/sdk/tracing/src/main/java/io/opentelemetry/sdk/trace/RecordEventsReadableSpan.java
+++ b/sdk/tracing/src/main/java/io/opentelemetry/sdk/trace/RecordEventsReadableSpan.java
@@ -102,7 +102,7 @@ final class RecordEventsReadableSpan implements ReadWriteSpan {
// The status of the span.
@GuardedBy("lock")
@Nullable
- private Status status;
+ private Status status = Status.UNSET;
// The end time of the span.
@GuardedBy("lock")
private long endEpochNanos;
@@ -511,7 +511,7 @@ public boolean isRecording() {
@GuardedBy("lock")
private Status getStatusWithDefault() {
synchronized (lock) {
- return status == null ? Status.OK : status;
+ return status;
}
}
diff --git a/sdk/tracing/src/test/java/io/opentelemetry/sdk/trace/RecordEventsReadableSpanTest.java b/sdk/tracing/src/test/java/io/opentelemetry/sdk/trace/RecordEventsReadableSpanTest.java
index dcefaf960f2..09acb4cd512 100644
--- a/sdk/tracing/src/test/java/io/opentelemetry/sdk/trace/RecordEventsReadableSpanTest.java
+++ b/sdk/tracing/src/test/java/io/opentelemetry/sdk/trace/RecordEventsReadableSpanTest.java
@@ -112,7 +112,7 @@ void nothingChangedAfterEnd() {
span.end();
// Check that adding trace events or update fields after Span#end() does not throw any thrown
// and are ignored.
- spanDoWork(span, Status.CANCELLED);
+ spanDoWork(span, Status.ERROR.withDescription("CANCELLED"));
SpanData spanData = span.toSpanData();
verifySpanData(
spanData,
@@ -122,7 +122,7 @@ void nothingChangedAfterEnd() {
SPAN_NAME,
START_EPOCH_NANOS,
START_EPOCH_NANOS,
- Status.OK,
+ Status.UNSET,
/*hasEnded=*/ true);
}
@@ -182,7 +182,7 @@ void toSpanData_ActiveSpan() {
SPAN_NEW_NAME,
START_EPOCH_NANOS,
0,
- Status.OK,
+ Status.UNSET,
/*hasEnded=*/ false);
assertThat(span.hasEnded()).isFalse();
} finally {
@@ -195,7 +195,7 @@ void toSpanData_ActiveSpan() {
void toSpanData_EndedSpan() {
RecordEventsReadableSpan span = createTestSpan(Kind.INTERNAL);
try {
- spanDoWork(span, Status.CANCELLED);
+ spanDoWork(span, Status.ERROR.withDescription("CANCELLED"));
} finally {
span.end();
}
@@ -211,7 +211,7 @@ void toSpanData_EndedSpan() {
SPAN_NEW_NAME,
START_EPOCH_NANOS,
testClock.now(),
- Status.CANCELLED,
+ Status.ERROR.withDescription("CANCELLED"),
/*hasEnded=*/ true);
}
@@ -296,13 +296,14 @@ void setStatus() {
RecordEventsReadableSpan span = createTestSpan(Kind.CONSUMER);
try {
testClock.advanceMillis(MILLIS_PER_SECOND);
- assertThat(span.toSpanData().getStatus()).isEqualTo(Status.OK);
- span.setStatus(Status.CANCELLED);
- assertThat(span.toSpanData().getStatus()).isEqualTo(Status.CANCELLED);
+ assertThat(span.toSpanData().getStatus()).isEqualTo(Status.UNSET);
+ span.setStatus(Status.ERROR.withDescription("CANCELLED"));
+ assertThat(span.toSpanData().getStatus())
+ .isEqualTo(Status.ERROR.withDescription("CANCELLED"));
} finally {
span.end();
}
- assertThat(span.toSpanData().getStatus()).isEqualTo(Status.CANCELLED);
+ assertThat(span.toSpanData().getStatus()).isEqualTo(Status.ERROR.withDescription("CANCELLED"));
}
@Test
@@ -775,7 +776,7 @@ void badArgsIgnored() {
// Ignored the bad calls
SpanData data = span.toSpanData();
assertThat(data.getAttributes().isEmpty()).isTrue();
- assertThat(data.getStatus()).isEqualTo(Status.OK);
+ assertThat(data.getStatus()).isEqualTo(Status.UNSET);
assertThat(data.getName()).isEqualTo(SPAN_NAME);
}
@@ -951,7 +952,7 @@ void testAsSpanData() {
name,
startEpochNanos,
endEpochNanos,
- Status.OK,
+ Status.UNSET,
/* hasEnded= */ true);
assertThat(result.getTotalRecordedLinks()).isEqualTo(1);
assertThat(result.isSampled()).isEqualTo(false);
diff --git a/sdk_extensions/testbed/src/test/java/io/opentelemetry/sdk/extensions/trace/testbed/errorreporting/ErrorReportingTest.java b/sdk_extensions/testbed/src/test/java/io/opentelemetry/sdk/extensions/trace/testbed/errorreporting/ErrorReportingTest.java
index cfd743f52a0..f37589c475d 100644
--- a/sdk_extensions/testbed/src/test/java/io/opentelemetry/sdk/extensions/trace/testbed/errorreporting/ErrorReportingTest.java
+++ b/sdk_extensions/testbed/src/test/java/io/opentelemetry/sdk/extensions/trace/testbed/errorreporting/ErrorReportingTest.java
@@ -53,7 +53,7 @@ void testSimpleError() {
try (Scope ignored = tracer.withSpan(span)) {
throw new RuntimeException("Invalid state");
} catch (Exception e) {
- span.setStatus(Status.UNKNOWN);
+ span.setStatus(Status.ERROR);
} finally {
span.end();
}
@@ -63,7 +63,7 @@ void testSimpleError() {
List spans = inMemoryTracing.getSpanExporter().getFinishedSpanItems();
assertThat(spans).hasSize(1);
assertThat(spans.get(0).getStatus().getCanonicalCode().value())
- .isEqualTo(Status.UNKNOWN.getCanonicalCode().value());
+ .isEqualTo(Status.ERROR.getCanonicalCode().value());
}
/* Error handling in a callback capturing/activating the Span */
@@ -75,7 +75,7 @@ void testCallbackError() {
try (Scope ignored = tracer.withSpan(span)) {
throw new RuntimeException("Invalid state");
} catch (Exception exc) {
- span.setStatus(Status.UNKNOWN);
+ span.setStatus(Status.ERROR);
} finally {
span.end();
}
@@ -88,7 +88,7 @@ void testCallbackError() {
List spans = inMemoryTracing.getSpanExporter().getFinishedSpanItems();
assertThat(spans).hasSize(1);
assertThat(spans.get(0).getStatus().getCanonicalCode())
- .isEqualTo(Status.UNKNOWN.getCanonicalCode());
+ .isEqualTo(Status.ERROR.getCanonicalCode());
}
/* Error handling for a max-retries task (such as url fetching).
@@ -108,7 +108,7 @@ void testErrorRecovery() {
}
}
- span.setStatus(Status.UNKNOWN); // Could not fetch anything.
+ span.setStatus(Status.ERROR); // Could not fetch anything.
span.end();
assertThat(tracer.getCurrentSpan()).isSameAs(DefaultSpan.getInvalid());
@@ -116,7 +116,7 @@ void testErrorRecovery() {
List spans = inMemoryTracing.getSpanExporter().getFinishedSpanItems();
assertThat(spans).hasSize(1);
assertThat(spans.get(0).getStatus().getCanonicalCode())
- .isEqualTo(Status.UNKNOWN.getCanonicalCode());
+ .isEqualTo(Status.ERROR.getCanonicalCode());
List events = spans.get(0).getEvents();
assertEquals(events.size(), maxRetries);
@@ -136,7 +136,7 @@ void testInstrumentationLayer() {
try {
throw new RuntimeException("Invalid state");
} catch (Exception exc) {
- tracer.getCurrentSpan().setStatus(Status.UNKNOWN);
+ tracer.getCurrentSpan().setStatus(Status.ERROR);
} finally {
tracer.getCurrentSpan().end();
}
@@ -150,7 +150,7 @@ void testInstrumentationLayer() {
List spans = inMemoryTracing.getSpanExporter().getFinishedSpanItems();
assertEquals(spans.size(), 1);
- assertEquals(spans.get(0).getStatus().getCanonicalCode(), Status.UNKNOWN.getCanonicalCode());
+ assertEquals(spans.get(0).getStatus().getCanonicalCode(), Status.ERROR.getCanonicalCode());
}
private static class ScopedRunnable implements Runnable {
diff --git a/sdk_extensions/tracing_incubator/src/test/java/io/opentelemetry/sdk/extensions/incubator/trace/data/SpanDataBuilderTest.java b/sdk_extensions/tracing_incubator/src/test/java/io/opentelemetry/sdk/extensions/incubator/trace/data/SpanDataBuilderTest.java
index e613eecbee1..c9da1f15606 100644
--- a/sdk_extensions/tracing_incubator/src/test/java/io/opentelemetry/sdk/extensions/incubator/trace/data/SpanDataBuilderTest.java
+++ b/sdk_extensions/tracing_incubator/src/test/java/io/opentelemetry/sdk/extensions/incubator/trace/data/SpanDataBuilderTest.java
@@ -40,7 +40,7 @@ class SpanDataBuilderTest {
.setStartEpochNanos(0)
.setEndEpochNanos(100)
.setKind(Span.Kind.SERVER)
- .setStatus(Status.UNKNOWN)
+ .setStatus(Status.ERROR)
.setAttributes(
Attributes.newBuilder()
.setAttribute("cat", "meow")
@@ -58,10 +58,12 @@ void noOp() {
@Test
void modifySpanData() {
- assertThat(TEST_SPAN_DATA.getStatus()).isEqualTo(Status.UNKNOWN);
+ assertThat(TEST_SPAN_DATA.getStatus()).isEqualTo(Status.ERROR);
SpanData modified =
- SpanDataBuilder.newBuilder(TEST_SPAN_DATA).setStatus(Status.ABORTED).build();
- assertThat(modified.getStatus()).isEqualTo(Status.ABORTED);
+ SpanDataBuilder.newBuilder(TEST_SPAN_DATA)
+ .setStatus(Status.ERROR.withDescription("ABORTED"))
+ .build();
+ assertThat(modified.getStatus()).isEqualTo(Status.ERROR.withDescription("ABORTED"));
}
@Test
@@ -73,7 +75,9 @@ void equalsHashCode() {
SpanDataBuilder.newBuilder(TEST_SPAN_DATA).build(),
SpanDataBuilder.newBuilder(TEST_SPAN_DATA).build())
.addEqualityGroup(
- SpanDataBuilder.newBuilder(TEST_SPAN_DATA).setStatus(Status.ABORTED).build());
+ SpanDataBuilder.newBuilder(TEST_SPAN_DATA)
+ .setStatus(Status.ERROR.withDescription("ABORTED"))
+ .build());
tester.testEquals();
}
}
diff --git a/sdk_extensions/zpages/src/jmh/java/io/opentelemetry/sdk/extensions/zpages/TracezDataAggregatorBenchmark.java b/sdk_extensions/zpages/src/jmh/java/io/opentelemetry/sdk/extensions/zpages/TracezDataAggregatorBenchmark.java
index 6e1dae95809..120d7122dd1 100644
--- a/sdk_extensions/zpages/src/jmh/java/io/opentelemetry/sdk/extensions/zpages/TracezDataAggregatorBenchmark.java
+++ b/sdk_extensions/zpages/src/jmh/java/io/opentelemetry/sdk/extensions/zpages/TracezDataAggregatorBenchmark.java
@@ -55,7 +55,7 @@ public final void setup() {
tracer.spanBuilder(runningSpan).startSpan();
tracer.spanBuilder(latencySpan).startSpan().end();
Span error = tracer.spanBuilder(errorSpan).startSpan();
- error.setStatus(Status.UNKNOWN);
+ error.setStatus(Status.ERROR);
error.end();
}
}
diff --git a/sdk_extensions/zpages/src/test/java/io/opentelemetry/sdk/extensions/zpages/TracezDataAggregatorTest.java b/sdk_extensions/zpages/src/test/java/io/opentelemetry/sdk/extensions/zpages/TracezDataAggregatorTest.java
index 17562e9e74a..375c2119d5e 100644
--- a/sdk_extensions/zpages/src/test/java/io/opentelemetry/sdk/extensions/zpages/TracezDataAggregatorTest.java
+++ b/sdk_extensions/zpages/src/test/java/io/opentelemetry/sdk/extensions/zpages/TracezDataAggregatorTest.java
@@ -240,7 +240,7 @@ void getErrorSpanCounts_noCompletedSpans() {
/* getErrorSpanCounts should return a an empty map */
Span span = tracer.spanBuilder(SPAN_NAME_ONE).startSpan();
Map counts = dataAggregator.getErrorSpanCounts();
- span.setStatus(Status.UNKNOWN);
+ span.setStatus(Status.ERROR);
span.end();
assertThat(counts).isEmpty();
}
@@ -248,25 +248,23 @@ void getErrorSpanCounts_noCompletedSpans() {
@Test
void getErrorSpanCounts_oneSpanPerErrorCode() {
for (CanonicalCode errorCode : CanonicalCode.values()) {
- if (!errorCode.equals(CanonicalCode.OK)) {
+ if (errorCode.equals(CanonicalCode.ERROR)) {
Span span = tracer.spanBuilder(SPAN_NAME_ONE).startSpan();
span.setStatus(errorCode.toStatus());
span.end();
}
}
- /* getErrorSpanCounts should return a map with CanonicalCode.values().length - 1 spans, as every
- code, expect OK, represents an error */
Map errorCounts = dataAggregator.getErrorSpanCounts();
- assertThat(errorCounts.get(SPAN_NAME_ONE)).isEqualTo(CanonicalCode.values().length - 1);
+ assertThat(errorCounts.get(SPAN_NAME_ONE)).isEqualTo(1);
}
@Test
void getErrorSpanCounts_twoSpanNames() {
Span span1 = tracer.spanBuilder(SPAN_NAME_ONE).startSpan();
- span1.setStatus(Status.UNKNOWN);
+ span1.setStatus(Status.ERROR);
span1.end();
Span span2 = tracer.spanBuilder(SPAN_NAME_TWO).startSpan();
- span2.setStatus(Status.UNKNOWN);
+ span2.setStatus(Status.ERROR);
span2.end();
/* getErrorSpanCounts should return a map with 2 different span names */
Map errorCounts = dataAggregator.getErrorSpanCounts();
@@ -287,9 +285,9 @@ void getErrorSpans_oneSpanNameWithDifferentErrors() {
Span span2 = tracer.spanBuilder(SPAN_NAME_ONE).startSpan();
/* getErrorSpans should return an empty List */
assertThat(dataAggregator.getErrorSpans(SPAN_NAME_ONE)).isEmpty();
- span1.setStatus(Status.UNKNOWN);
+ span1.setStatus(Status.ERROR);
span1.end();
- span2.setStatus(Status.ABORTED);
+ span2.setStatus(Status.ERROR.withDescription("ABORTED"));
span2.end();
/* getErrorSpans should return a List with both spans */
List errorSpans = dataAggregator.getErrorSpans(SPAN_NAME_ONE);
@@ -304,9 +302,9 @@ void getErrorSpans_twoSpanNames() {
/* getErrorSpans should return an empty List for each span name */
assertThat(dataAggregator.getErrorSpans(SPAN_NAME_ONE)).isEmpty();
assertThat(dataAggregator.getErrorSpans(SPAN_NAME_TWO)).isEmpty();
- span1.setStatus(Status.UNKNOWN);
+ span1.setStatus(Status.ERROR);
span1.end();
- span2.setStatus(Status.UNKNOWN);
+ span2.setStatus(Status.ERROR);
span2.end();
/* getErrorSpans should return a List with only the corresponding span */
assertThat(dataAggregator.getErrorSpans(SPAN_NAME_ONE))
diff --git a/sdk_extensions/zpages/src/test/java/io/opentelemetry/sdk/extensions/zpages/TracezSpanProcessorTest.java b/sdk_extensions/zpages/src/test/java/io/opentelemetry/sdk/extensions/zpages/TracezSpanProcessorTest.java
index e7c4040cd4e..f754b66d4b6 100644
--- a/sdk_extensions/zpages/src/test/java/io/opentelemetry/sdk/extensions/zpages/TracezSpanProcessorTest.java
+++ b/sdk_extensions/zpages/src/test/java/io/opentelemetry/sdk/extensions/zpages/TracezSpanProcessorTest.java
@@ -49,7 +49,7 @@ class TracezSpanProcessorTest {
TraceFlags.getSampled(),
TraceState.builder().build());
private static final SpanContext NOT_SAMPLED_SPAN_CONTEXT = SpanContext.getInvalid();
- private static final Status SPAN_STATUS = Status.UNKNOWN;
+ private static final Status SPAN_STATUS = Status.ERROR;
private static void assertSpanCacheSizes(
TracezSpanProcessor spanProcessor, int runningSpanCacheSize, int completedSpanCacheSize) {
diff --git a/sdk_extensions/zpages/src/test/java/io/opentelemetry/sdk/extensions/zpages/TracezZPageHandlerTest.java b/sdk_extensions/zpages/src/test/java/io/opentelemetry/sdk/extensions/zpages/TracezZPageHandlerTest.java
index 50f07c0cdda..8475fe90058 100644
--- a/sdk_extensions/zpages/src/test/java/io/opentelemetry/sdk/extensions/zpages/TracezZPageHandlerTest.java
+++ b/sdk_extensions/zpages/src/test/java/io/opentelemetry/sdk/extensions/zpages/TracezZPageHandlerTest.java
@@ -24,6 +24,7 @@
import io.opentelemetry.sdk.trace.TracerSdkProvider;
import io.opentelemetry.trace.EndSpanOptions;
import io.opentelemetry.trace.Span;
+import io.opentelemetry.trace.Status;
import io.opentelemetry.trace.Status.CanonicalCode;
import io.opentelemetry.trace.Tracer;
import java.io.ByteArrayOutputStream;
@@ -76,7 +77,7 @@ void summaryTable_emitRowForEachSpan() {
latencySpan.end(endOptions);
Span errorSpan = tracer.spanBuilder(ERROR_SPAN).startSpan();
- errorSpan.setStatus(CanonicalCode.INVALID_ARGUMENT.toStatus());
+ errorSpan.setStatus(CanonicalCode.ERROR.toStatus());
errorSpan.end();
TracezZPageHandler tracezZPageHandler = new TracezZPageHandler(dataAggregator);
@@ -255,9 +256,9 @@ void summaryTable_linkForErrorSpans() {
Span errorSpan2 = tracer.spanBuilder(ERROR_SPAN).startSpan();
Span errorSpan3 = tracer.spanBuilder(ERROR_SPAN).startSpan();
Span finishedSpan = tracer.spanBuilder(FINISHED_SPAN_ONE).startSpan();
- errorSpan1.setStatus(CanonicalCode.CANCELLED.toStatus());
- errorSpan2.setStatus(CanonicalCode.ABORTED.toStatus());
- errorSpan3.setStatus(CanonicalCode.DEADLINE_EXCEEDED.toStatus());
+ errorSpan1.setStatus(Status.ERROR.withDescription("CANCELLED"));
+ errorSpan2.setStatus(Status.ERROR.withDescription("ABORTED"));
+ errorSpan3.setStatus(Status.ERROR.withDescription("DEADLINE_EXCEEDED"));
errorSpan1.end();
errorSpan2.end();
errorSpan3.end();
@@ -287,10 +288,8 @@ void spanDetails_emitRunningSpanDetailsCorrectly() {
assertThat(output.toString()).contains("Span Details
");
assertThat(output.toString()).contains(" Span Name: " + RUNNING_SPAN + "");
assertThat(output.toString()).contains(" Number of running: 1");
- assertThat(output.toString())
- .contains(runningSpan.getContext().getTraceIdAsHexString().toString());
- assertThat(output.toString())
- .contains(runningSpan.getContext().getSpanIdAsHexString().toString());
+ assertThat(output.toString()).contains(runningSpan.getContext().getTraceIdAsHexString());
+ assertThat(output.toString()).contains(runningSpan.getContext().getSpanIdAsHexString());
runningSpan.end();
}
@@ -313,14 +312,10 @@ void spanDetails_emitLatencySpanDetailsCorrectly() {
assertThat(output.toString()).contains("Span Details
");
assertThat(output.toString()).contains(" Span Name: " + LATENCY_SPAN + "");
assertThat(output.toString()).contains(" Number of latency samples: 2");
- assertThat(output.toString())
- .contains(latencySpan1.getContext().getTraceIdAsHexString().toString());
- assertThat(output.toString())
- .contains(latencySpan1.getContext().getSpanIdAsHexString().toString());
- assertThat(output.toString())
- .contains(latencySpan2.getContext().getTraceIdAsHexString().toString());
- assertThat(output.toString())
- .contains(latencySpan2.getContext().getSpanIdAsHexString().toString());
+ assertThat(output.toString()).contains(latencySpan1.getContext().getTraceIdAsHexString());
+ assertThat(output.toString()).contains(latencySpan1.getContext().getSpanIdAsHexString());
+ assertThat(output.toString()).contains(latencySpan2.getContext().getTraceIdAsHexString());
+ assertThat(output.toString()).contains(latencySpan2.getContext().getSpanIdAsHexString());
}
@Test
@@ -328,8 +323,8 @@ void spanDetails_emitErrorSpanDetailsCorrectly() {
OutputStream output = new ByteArrayOutputStream();
Span errorSpan1 = tracer.spanBuilder(ERROR_SPAN).startSpan();
Span errorSpan2 = tracer.spanBuilder(ERROR_SPAN).startSpan();
- errorSpan1.setStatus(CanonicalCode.CANCELLED.toStatus());
- errorSpan2.setStatus(CanonicalCode.ABORTED.toStatus());
+ errorSpan1.setStatus(Status.ERROR.withDescription("CANCELLED"));
+ errorSpan2.setStatus(Status.ERROR.withDescription("ABORTED"));
errorSpan1.end();
errorSpan2.end();
Map queryMap =
@@ -341,14 +336,10 @@ void spanDetails_emitErrorSpanDetailsCorrectly() {
assertThat(output.toString()).contains("Span Details
");
assertThat(output.toString()).contains(" Span Name: " + ERROR_SPAN + "");
assertThat(output.toString()).contains(" Number of error samples: 2");
- assertThat(output.toString())
- .contains(errorSpan1.getContext().getTraceIdAsHexString().toString());
- assertThat(output.toString())
- .contains(errorSpan1.getContext().getSpanIdAsHexString().toString());
- assertThat(output.toString())
- .contains(errorSpan2.getContext().getTraceIdAsHexString().toString());
- assertThat(output.toString())
- .contains(errorSpan2.getContext().getSpanIdAsHexString().toString());
+ assertThat(output.toString()).contains(errorSpan1.getContext().getTraceIdAsHexString());
+ assertThat(output.toString()).contains(errorSpan1.getContext().getSpanIdAsHexString());
+ assertThat(output.toString()).contains(errorSpan2.getContext().getTraceIdAsHexString());
+ assertThat(output.toString()).contains(errorSpan2.getContext().getSpanIdAsHexString());
}
@Test