From b8043a42fccc4a717de667dd49c3b54f57016125 Mon Sep 17 00:00:00 2001 From: heyams Date: Tue, 30 Jan 2024 13:08:51 -0800 Subject: [PATCH 01/28] Fix server.address for Cassandra --- .../CassandraNetworkAttributesGetter.java | 4 +- .../v4/common/AbstractCassandraTest.java | 6 +++ .../CassandraNetworkAttributesGetter.java | 42 ++++++++++++++++++- .../cassandra/v4_0/CassandraSingletons.java | 3 ++ .../CassandraNetworkAttributesGetter.java | 42 ++++++++++++++++++- .../v4_4/CassandraTelemetryBuilder.java | 3 ++ .../v4_4/AbstractCassandra44Test.java | 4 ++ 7 files changed, 101 insertions(+), 3 deletions(-) diff --git a/instrumentation/cassandra/cassandra-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v3_0/CassandraNetworkAttributesGetter.java b/instrumentation/cassandra/cassandra-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v3_0/CassandraNetworkAttributesGetter.java index 5e6f41fecdee..604ec45afaba 100644 --- a/instrumentation/cassandra/cassandra-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v3_0/CassandraNetworkAttributesGetter.java +++ b/instrumentation/cassandra/cassandra-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v3_0/CassandraNetworkAttributesGetter.java @@ -7,11 +7,13 @@ import com.datastax.driver.core.ExecutionInfo; import io.opentelemetry.instrumentation.api.semconv.network.NetworkAttributesGetter; +import io.opentelemetry.instrumentation.api.semconv.network.ServerAttributesGetter; import java.net.InetSocketAddress; import javax.annotation.Nullable; final class CassandraNetworkAttributesGetter - implements NetworkAttributesGetter { + implements ServerAttributesGetter, + NetworkAttributesGetter { @Override @Nullable diff --git a/instrumentation/cassandra/cassandra-4-common/testing/src/main/java/io/opentelemetry/cassandra/v4/common/AbstractCassandraTest.java b/instrumentation/cassandra/cassandra-4-common/testing/src/main/java/io/opentelemetry/cassandra/v4/common/AbstractCassandraTest.java index 3589983dc59a..6603f9375c35 100644 --- a/instrumentation/cassandra/cassandra-4-common/testing/src/main/java/io/opentelemetry/cassandra/v4/common/AbstractCassandraTest.java +++ b/instrumentation/cassandra/cassandra-4-common/testing/src/main/java/io/opentelemetry/cassandra/v4/common/AbstractCassandraTest.java @@ -19,6 +19,8 @@ import static io.opentelemetry.semconv.SemanticAttributes.DB_STATEMENT; import static io.opentelemetry.semconv.SemanticAttributes.DB_SYSTEM; import static io.opentelemetry.semconv.SemanticAttributes.NETWORK_TYPE; +import static io.opentelemetry.semconv.SemanticAttributes.SERVER_ADDRESS; +import static io.opentelemetry.semconv.SemanticAttributes.SERVER_PORT; import static org.junit.jupiter.api.Named.named; import com.datastax.oss.driver.api.core.CqlSession; @@ -91,6 +93,8 @@ void syncTest(Parameter parameter) { .hasNoParent() .hasAttributesSatisfyingExactly( equalTo(NETWORK_TYPE, "ipv4"), + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, cassandraPort), equalTo(NetworkAttributes.NETWORK_PEER_ADDRESS, "127.0.0.1"), equalTo(NetworkAttributes.NETWORK_PEER_PORT, cassandraPort), equalTo(DB_SYSTEM, "cassandra"), @@ -138,6 +142,8 @@ void asyncTest(Parameter parameter) throws Exception { .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(NETWORK_TYPE, "ipv4"), + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, cassandraPort), equalTo(NetworkAttributes.NETWORK_PEER_ADDRESS, "127.0.0.1"), equalTo(NetworkAttributes.NETWORK_PEER_PORT, cassandraPort), equalTo(DB_SYSTEM, "cassandra"), diff --git a/instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraNetworkAttributesGetter.java b/instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraNetworkAttributesGetter.java index 44ed4e1e851d..1e9dde49e6c6 100644 --- a/instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraNetworkAttributesGetter.java +++ b/instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraNetworkAttributesGetter.java @@ -8,12 +8,52 @@ import com.datastax.oss.driver.api.core.cql.ExecutionInfo; import com.datastax.oss.driver.api.core.metadata.Node; import io.opentelemetry.instrumentation.api.semconv.network.NetworkAttributesGetter; +import io.opentelemetry.instrumentation.api.semconv.network.ServerAttributesGetter; import java.net.InetSocketAddress; import java.net.SocketAddress; import javax.annotation.Nullable; final class CassandraNetworkAttributesGetter - implements NetworkAttributesGetter { + implements ServerAttributesGetter, + NetworkAttributesGetter { + + @Nullable + @Override + public String getServerAddress(CassandraRequest request) { + SocketAddress socketAddress = + request + .getSession() + .getMetadata() + .getNodes() + .values() + .iterator() + .next() + .getEndPoint() + .resolve(); + if (socketAddress instanceof InetSocketAddress) { + return ((InetSocketAddress) socketAddress).getHostName(); + } + return null; + } + + @Nullable + @Override + public Integer getServerPort(CassandraRequest request) { + SocketAddress socketAddress = + request + .getSession() + .getMetadata() + .getNodes() + .values() + .iterator() + .next() + .getEndPoint() + .resolve(); + if (socketAddress instanceof InetSocketAddress) { + return ((InetSocketAddress) socketAddress).getPort(); + } + return null; + } @Override @Nullable diff --git a/instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraSingletons.java b/instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraSingletons.java index 78cdf2e8f9d8..ceba9ee6582c 100644 --- a/instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraSingletons.java +++ b/instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraSingletons.java @@ -12,6 +12,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor; import io.opentelemetry.instrumentation.api.semconv.network.NetworkAttributesExtractor; +import io.opentelemetry.instrumentation.api.semconv.network.ServerAttributesExtractor; import io.opentelemetry.javaagent.bootstrap.internal.CommonConfig; import io.opentelemetry.semconv.SemanticAttributes; @@ -37,6 +38,8 @@ public final class CassandraSingletons { .build()) .addAttributesExtractor( NetworkAttributesExtractor.create(new CassandraNetworkAttributesGetter())) + .addAttributesExtractor( + ServerAttributesExtractor.create(new CassandraNetworkAttributesGetter())) .addAttributesExtractor(new CassandraAttributesExtractor()) .buildInstrumenter(SpanKindExtractor.alwaysClient()); } diff --git a/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraNetworkAttributesGetter.java b/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraNetworkAttributesGetter.java index ecb9de3f4088..b99492e0f05d 100644 --- a/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraNetworkAttributesGetter.java +++ b/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraNetworkAttributesGetter.java @@ -8,12 +8,52 @@ import com.datastax.oss.driver.api.core.cql.ExecutionInfo; import com.datastax.oss.driver.api.core.metadata.Node; import io.opentelemetry.instrumentation.api.semconv.network.NetworkAttributesGetter; +import io.opentelemetry.instrumentation.api.semconv.network.ServerAttributesGetter; import java.net.InetSocketAddress; import java.net.SocketAddress; import javax.annotation.Nullable; final class CassandraNetworkAttributesGetter - implements NetworkAttributesGetter { + implements ServerAttributesGetter, + NetworkAttributesGetter { + + @Nullable + @Override + public String getServerAddress(CassandraRequest request) { + SocketAddress socketAddress = + request + .getSession() + .getMetadata() + .getNodes() + .values() + .iterator() + .next() + .getEndPoint() + .resolve(); + if (socketAddress instanceof InetSocketAddress) { + return ((InetSocketAddress) socketAddress).getHostName(); + } + return null; + } + + @Nullable + @Override + public Integer getServerPort(CassandraRequest request) { + SocketAddress socketAddress = + request + .getSession() + .getMetadata() + .getNodes() + .values() + .iterator() + .next() + .getEndPoint() + .resolve(); + if (socketAddress instanceof InetSocketAddress) { + return ((InetSocketAddress) socketAddress).getPort(); + } + return null; + } @Override @Nullable diff --git a/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraTelemetryBuilder.java b/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraTelemetryBuilder.java index c94e7290d6d2..e6b604eb8a4d 100644 --- a/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraTelemetryBuilder.java +++ b/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraTelemetryBuilder.java @@ -13,6 +13,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor; import io.opentelemetry.instrumentation.api.semconv.network.NetworkAttributesExtractor; +import io.opentelemetry.instrumentation.api.semconv.network.ServerAttributesExtractor; import io.opentelemetry.semconv.SemanticAttributes; /** A builder of {@link CassandraTelemetry}. */ @@ -60,6 +61,8 @@ protected Instrumenter createInstrumenter( .build()) .addAttributesExtractor( NetworkAttributesExtractor.create(new CassandraNetworkAttributesGetter())) + .addAttributesExtractor( + ServerAttributesExtractor.create(new CassandraNetworkAttributesGetter())) .addAttributesExtractor(new CassandraAttributesExtractor()) .buildInstrumenter(SpanKindExtractor.alwaysClient()); } diff --git a/instrumentation/cassandra/cassandra-4.4/testing/src/main/java/io/opentelemetry/testing/cassandra/v4_4/AbstractCassandra44Test.java b/instrumentation/cassandra/cassandra-4.4/testing/src/main/java/io/opentelemetry/testing/cassandra/v4_4/AbstractCassandra44Test.java index 1fa2d82b5fb3..fc108bbadaeb 100644 --- a/instrumentation/cassandra/cassandra-4.4/testing/src/main/java/io/opentelemetry/testing/cassandra/v4_4/AbstractCassandra44Test.java +++ b/instrumentation/cassandra/cassandra-4.4/testing/src/main/java/io/opentelemetry/testing/cassandra/v4_4/AbstractCassandra44Test.java @@ -19,6 +19,8 @@ import static io.opentelemetry.semconv.SemanticAttributes.DB_STATEMENT; import static io.opentelemetry.semconv.SemanticAttributes.DB_SYSTEM; import static io.opentelemetry.semconv.SemanticAttributes.NETWORK_TYPE; +import static io.opentelemetry.semconv.SemanticAttributes.SERVER_ADDRESS; +import static io.opentelemetry.semconv.SemanticAttributes.SERVER_PORT; import static org.junit.jupiter.api.Named.named; import com.datastax.oss.driver.api.core.CqlSession; @@ -57,6 +59,8 @@ void reactiveTest(Parameter parameter) { .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(NETWORK_TYPE, "ipv4"), + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, cassandraPort), equalTo(NetworkAttributes.NETWORK_PEER_ADDRESS, "127.0.0.1"), equalTo(NetworkAttributes.NETWORK_PEER_PORT, cassandraPort), equalTo(DB_SYSTEM, "cassandra"), From d482ba42ee72292b89ef252806c2fafdf30c430b Mon Sep 17 00:00:00 2001 From: heyams Date: Wed, 31 Jan 2024 12:06:17 -0800 Subject: [PATCH 02/28] Create experimental attributes extractor for cassandra --- .../v3_0/ExperimentalAttributesExtractor.java | 37 ++++++++++++++++ .../cassandra/v4_0/CassandraSingletons.java | 4 +- .../v4_0/ExperimentalAttributesExtractor.java | 44 +++++++++++++++++++ .../CassandraNetworkAttributesGetter.java | 42 +----------------- .../v4_4/CassandraTelemetryBuilder.java | 4 +- .../v4_4/ExperimentalAttributesExtractor.java | 44 +++++++++++++++++++ 6 files changed, 128 insertions(+), 47 deletions(-) create mode 100644 instrumentation/cassandra/cassandra-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v3_0/ExperimentalAttributesExtractor.java create mode 100644 instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/ExperimentalAttributesExtractor.java create mode 100644 instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/ExperimentalAttributesExtractor.java diff --git a/instrumentation/cassandra/cassandra-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v3_0/ExperimentalAttributesExtractor.java b/instrumentation/cassandra/cassandra-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v3_0/ExperimentalAttributesExtractor.java new file mode 100644 index 000000000000..8fd25683b964 --- /dev/null +++ b/instrumentation/cassandra/cassandra-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v3_0/ExperimentalAttributesExtractor.java @@ -0,0 +1,37 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.cassandra.v3_0; + +import com.datastax.driver.core.ExecutionInfo; +import io.opentelemetry.api.common.AttributesBuilder; +import io.opentelemetry.context.Context; +import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; +import io.opentelemetry.semconv.SemanticAttributes; +import javax.annotation.Nullable; + +public class ExperimentalAttributesExtractor + implements AttributesExtractor { + @Override + public void onStart(AttributesBuilder attributes, Context context, CassandraRequest request) {} + + @Override + public void onEnd( + AttributesBuilder attributes, + Context context, + CassandraRequest request, + @Nullable ExecutionInfo executionInfo, + @Nullable Throwable error) { + if (executionInfo == null) { + return; + } + attributes.put( + SemanticAttributes.SERVER_ADDRESS, + executionInfo.getQueriedHost().getSocketAddress().getHostName()); + attributes.put( + SemanticAttributes.SERVER_PORT, + executionInfo.getQueriedHost().getSocketAddress().getPort()); + } +} diff --git a/instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraSingletons.java b/instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraSingletons.java index ceba9ee6582c..418de3bbbf88 100644 --- a/instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraSingletons.java +++ b/instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraSingletons.java @@ -12,7 +12,6 @@ import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor; import io.opentelemetry.instrumentation.api.semconv.network.NetworkAttributesExtractor; -import io.opentelemetry.instrumentation.api.semconv.network.ServerAttributesExtractor; import io.opentelemetry.javaagent.bootstrap.internal.CommonConfig; import io.opentelemetry.semconv.SemanticAttributes; @@ -38,8 +37,7 @@ public final class CassandraSingletons { .build()) .addAttributesExtractor( NetworkAttributesExtractor.create(new CassandraNetworkAttributesGetter())) - .addAttributesExtractor( - ServerAttributesExtractor.create(new CassandraNetworkAttributesGetter())) + .addAttributesExtractor(new ExperimentalAttributesExtractor()) .addAttributesExtractor(new CassandraAttributesExtractor()) .buildInstrumenter(SpanKindExtractor.alwaysClient()); } diff --git a/instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/ExperimentalAttributesExtractor.java b/instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/ExperimentalAttributesExtractor.java new file mode 100644 index 000000000000..f75e2745c06e --- /dev/null +++ b/instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/ExperimentalAttributesExtractor.java @@ -0,0 +1,44 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.cassandra.v4_0; + +import com.datastax.oss.driver.api.core.cql.ExecutionInfo; +import com.datastax.oss.driver.api.core.metadata.Node; +import io.opentelemetry.api.common.AttributesBuilder; +import io.opentelemetry.context.Context; +import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; +import io.opentelemetry.semconv.SemanticAttributes; +import java.net.InetSocketAddress; +import java.net.SocketAddress; +import javax.annotation.Nullable; + +public class ExperimentalAttributesExtractor + implements AttributesExtractor { + @Override + public void onStart(AttributesBuilder attributes, Context context, CassandraRequest request) {} + + @Override + public void onEnd( + AttributesBuilder attributes, + Context context, + CassandraRequest request, + @Nullable ExecutionInfo executionInfo, + @Nullable Throwable error) { + if (executionInfo == null) { + return; + } + Node coordinator = executionInfo.getCoordinator(); + if (coordinator == null) { + return; + } + SocketAddress address = coordinator.getEndPoint().resolve(); + if (address instanceof InetSocketAddress) { + attributes.put( + SemanticAttributes.SERVER_ADDRESS, ((InetSocketAddress) address).getHostName()); + attributes.put(SemanticAttributes.SERVER_PORT, ((InetSocketAddress) address).getPort()); + } + } +} diff --git a/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraNetworkAttributesGetter.java b/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraNetworkAttributesGetter.java index b99492e0f05d..ecb9de3f4088 100644 --- a/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraNetworkAttributesGetter.java +++ b/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraNetworkAttributesGetter.java @@ -8,52 +8,12 @@ import com.datastax.oss.driver.api.core.cql.ExecutionInfo; import com.datastax.oss.driver.api.core.metadata.Node; import io.opentelemetry.instrumentation.api.semconv.network.NetworkAttributesGetter; -import io.opentelemetry.instrumentation.api.semconv.network.ServerAttributesGetter; import java.net.InetSocketAddress; import java.net.SocketAddress; import javax.annotation.Nullable; final class CassandraNetworkAttributesGetter - implements ServerAttributesGetter, - NetworkAttributesGetter { - - @Nullable - @Override - public String getServerAddress(CassandraRequest request) { - SocketAddress socketAddress = - request - .getSession() - .getMetadata() - .getNodes() - .values() - .iterator() - .next() - .getEndPoint() - .resolve(); - if (socketAddress instanceof InetSocketAddress) { - return ((InetSocketAddress) socketAddress).getHostName(); - } - return null; - } - - @Nullable - @Override - public Integer getServerPort(CassandraRequest request) { - SocketAddress socketAddress = - request - .getSession() - .getMetadata() - .getNodes() - .values() - .iterator() - .next() - .getEndPoint() - .resolve(); - if (socketAddress instanceof InetSocketAddress) { - return ((InetSocketAddress) socketAddress).getPort(); - } - return null; - } + implements NetworkAttributesGetter { @Override @Nullable diff --git a/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraTelemetryBuilder.java b/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraTelemetryBuilder.java index e6b604eb8a4d..ff22a1fb343c 100644 --- a/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraTelemetryBuilder.java +++ b/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraTelemetryBuilder.java @@ -13,7 +13,6 @@ import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor; import io.opentelemetry.instrumentation.api.semconv.network.NetworkAttributesExtractor; -import io.opentelemetry.instrumentation.api.semconv.network.ServerAttributesExtractor; import io.opentelemetry.semconv.SemanticAttributes; /** A builder of {@link CassandraTelemetry}. */ @@ -61,8 +60,7 @@ protected Instrumenter createInstrumenter( .build()) .addAttributesExtractor( NetworkAttributesExtractor.create(new CassandraNetworkAttributesGetter())) - .addAttributesExtractor( - ServerAttributesExtractor.create(new CassandraNetworkAttributesGetter())) + .addAttributesExtractor(new ExperimentalAttributesExtractor()) .addAttributesExtractor(new CassandraAttributesExtractor()) .buildInstrumenter(SpanKindExtractor.alwaysClient()); } diff --git a/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/ExperimentalAttributesExtractor.java b/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/ExperimentalAttributesExtractor.java new file mode 100644 index 000000000000..e5b3a25c679e --- /dev/null +++ b/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/ExperimentalAttributesExtractor.java @@ -0,0 +1,44 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.cassandra.v4_4; + +import com.datastax.oss.driver.api.core.cql.ExecutionInfo; +import com.datastax.oss.driver.api.core.metadata.Node; +import io.opentelemetry.api.common.AttributesBuilder; +import io.opentelemetry.context.Context; +import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; +import io.opentelemetry.semconv.SemanticAttributes; +import java.net.InetSocketAddress; +import java.net.SocketAddress; +import javax.annotation.Nullable; + +public class ExperimentalAttributesExtractor + implements AttributesExtractor { + @Override + public void onStart(AttributesBuilder attributes, Context context, CassandraRequest request) {} + + @Override + public void onEnd( + AttributesBuilder attributes, + Context context, + CassandraRequest request, + @Nullable ExecutionInfo executionInfo, + @Nullable Throwable error) { + if (executionInfo == null) { + return; + } + Node coordinator = executionInfo.getCoordinator(); + if (coordinator == null) { + return; + } + SocketAddress address = coordinator.getEndPoint().resolve(); + if (address instanceof InetSocketAddress) { + attributes.put( + SemanticAttributes.SERVER_ADDRESS, ((InetSocketAddress) address).getHostName()); + attributes.put(SemanticAttributes.SERVER_PORT, ((InetSocketAddress) address).getPort()); + } + } +} From 127d2ad7c03fbcfe0422d5078b6645bdc23d32d1 Mon Sep 17 00:00:00 2001 From: heyams Date: Wed, 31 Jan 2024 12:13:47 -0800 Subject: [PATCH 03/28] Update --- .../CassandraNetworkAttributesGetter.java | 4 +- .../cassandra/v3_0/CassandraSingletons.java | 1 + .../src/test/java/CassandraClientTest.java | 12 ++++++ .../CassandraNetworkAttributesGetter.java | 42 +------------------ 4 files changed, 15 insertions(+), 44 deletions(-) diff --git a/instrumentation/cassandra/cassandra-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v3_0/CassandraNetworkAttributesGetter.java b/instrumentation/cassandra/cassandra-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v3_0/CassandraNetworkAttributesGetter.java index 604ec45afaba..5e6f41fecdee 100644 --- a/instrumentation/cassandra/cassandra-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v3_0/CassandraNetworkAttributesGetter.java +++ b/instrumentation/cassandra/cassandra-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v3_0/CassandraNetworkAttributesGetter.java @@ -7,13 +7,11 @@ import com.datastax.driver.core.ExecutionInfo; import io.opentelemetry.instrumentation.api.semconv.network.NetworkAttributesGetter; -import io.opentelemetry.instrumentation.api.semconv.network.ServerAttributesGetter; import java.net.InetSocketAddress; import javax.annotation.Nullable; final class CassandraNetworkAttributesGetter - implements ServerAttributesGetter, - NetworkAttributesGetter { + implements NetworkAttributesGetter { @Override @Nullable diff --git a/instrumentation/cassandra/cassandra-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v3_0/CassandraSingletons.java b/instrumentation/cassandra/cassandra-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v3_0/CassandraSingletons.java index 35f6666b8817..8808f4702858 100644 --- a/instrumentation/cassandra/cassandra-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v3_0/CassandraSingletons.java +++ b/instrumentation/cassandra/cassandra-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v3_0/CassandraSingletons.java @@ -38,6 +38,7 @@ public final class CassandraSingletons { .build()) .addAttributesExtractor( NetworkAttributesExtractor.create(new CassandraNetworkAttributesGetter())) + .addAttributesExtractor(new ExperimentalAttributesExtractor()) .buildInstrumenter(SpanKindExtractor.alwaysClient()); } diff --git a/instrumentation/cassandra/cassandra-3.0/javaagent/src/test/java/CassandraClientTest.java b/instrumentation/cassandra/cassandra-3.0/javaagent/src/test/java/CassandraClientTest.java index a2b31dd55937..424eaf6aef69 100644 --- a/instrumentation/cassandra/cassandra-3.0/javaagent/src/test/java/CassandraClientTest.java +++ b/instrumentation/cassandra/cassandra-3.0/javaagent/src/test/java/CassandraClientTest.java @@ -86,6 +86,8 @@ void syncTest(Parameter parameter) { .hasNoParent() .hasAttributesSatisfyingExactly( equalTo(SemanticAttributes.NETWORK_TYPE, "ipv4"), + equalTo(SemanticAttributes.SERVER_ADDRESS, "localhost"), + equalTo(SemanticAttributes.SERVER_PORT, cassandraPort), equalTo(NetworkAttributes.NETWORK_PEER_ADDRESS, "127.0.0.1"), equalTo(NetworkAttributes.NETWORK_PEER_PORT, cassandraPort), equalTo(SemanticAttributes.DB_SYSTEM, "cassandra"), @@ -99,6 +101,8 @@ void syncTest(Parameter parameter) { .hasNoParent() .hasAttributesSatisfyingExactly( equalTo(SemanticAttributes.NETWORK_TYPE, "ipv4"), + equalTo(SemanticAttributes.SERVER_ADDRESS, "localhost"), + equalTo(SemanticAttributes.SERVER_PORT, cassandraPort), equalTo(NetworkAttributes.NETWORK_PEER_ADDRESS, "127.0.0.1"), equalTo(NetworkAttributes.NETWORK_PEER_PORT, cassandraPort), equalTo(SemanticAttributes.DB_SYSTEM, "cassandra"), @@ -116,6 +120,8 @@ void syncTest(Parameter parameter) { .hasNoParent() .hasAttributesSatisfyingExactly( equalTo(SemanticAttributes.NETWORK_TYPE, "ipv4"), + equalTo(SemanticAttributes.SERVER_ADDRESS, "localhost"), + equalTo(SemanticAttributes.SERVER_PORT, cassandraPort), equalTo(NetworkAttributes.NETWORK_PEER_ADDRESS, "127.0.0.1"), equalTo(NetworkAttributes.NETWORK_PEER_PORT, cassandraPort), equalTo(SemanticAttributes.DB_SYSTEM, "cassandra"), @@ -153,6 +159,8 @@ void asyncTest(Parameter parameter) { .hasNoParent() .hasAttributesSatisfyingExactly( equalTo(SemanticAttributes.NETWORK_TYPE, "ipv4"), + equalTo(SemanticAttributes.SERVER_ADDRESS, "localhost"), + equalTo(SemanticAttributes.SERVER_PORT, cassandraPort), equalTo(NetworkAttributes.NETWORK_PEER_ADDRESS, "127.0.0.1"), equalTo(NetworkAttributes.NETWORK_PEER_PORT, cassandraPort), equalTo(SemanticAttributes.DB_SYSTEM, "cassandra"), @@ -167,6 +175,8 @@ void asyncTest(Parameter parameter) { .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(SemanticAttributes.NETWORK_TYPE, "ipv4"), + equalTo(SemanticAttributes.SERVER_ADDRESS, "localhost"), + equalTo(SemanticAttributes.SERVER_PORT, cassandraPort), equalTo(NetworkAttributes.NETWORK_PEER_ADDRESS, "127.0.0.1"), equalTo(NetworkAttributes.NETWORK_PEER_PORT, cassandraPort), equalTo(SemanticAttributes.DB_SYSTEM, "cassandra"), @@ -189,6 +199,8 @@ void asyncTest(Parameter parameter) { .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(SemanticAttributes.NETWORK_TYPE, "ipv4"), + equalTo(SemanticAttributes.SERVER_ADDRESS, "localhost"), + equalTo(SemanticAttributes.SERVER_PORT, cassandraPort), equalTo(NetworkAttributes.NETWORK_PEER_ADDRESS, "127.0.0.1"), equalTo(NetworkAttributes.NETWORK_PEER_PORT, cassandraPort), equalTo(SemanticAttributes.DB_SYSTEM, "cassandra"), diff --git a/instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraNetworkAttributesGetter.java b/instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraNetworkAttributesGetter.java index 1e9dde49e6c6..44ed4e1e851d 100644 --- a/instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraNetworkAttributesGetter.java +++ b/instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraNetworkAttributesGetter.java @@ -8,52 +8,12 @@ import com.datastax.oss.driver.api.core.cql.ExecutionInfo; import com.datastax.oss.driver.api.core.metadata.Node; import io.opentelemetry.instrumentation.api.semconv.network.NetworkAttributesGetter; -import io.opentelemetry.instrumentation.api.semconv.network.ServerAttributesGetter; import java.net.InetSocketAddress; import java.net.SocketAddress; import javax.annotation.Nullable; final class CassandraNetworkAttributesGetter - implements ServerAttributesGetter, - NetworkAttributesGetter { - - @Nullable - @Override - public String getServerAddress(CassandraRequest request) { - SocketAddress socketAddress = - request - .getSession() - .getMetadata() - .getNodes() - .values() - .iterator() - .next() - .getEndPoint() - .resolve(); - if (socketAddress instanceof InetSocketAddress) { - return ((InetSocketAddress) socketAddress).getHostName(); - } - return null; - } - - @Nullable - @Override - public Integer getServerPort(CassandraRequest request) { - SocketAddress socketAddress = - request - .getSession() - .getMetadata() - .getNodes() - .values() - .iterator() - .next() - .getEndPoint() - .resolve(); - if (socketAddress instanceof InetSocketAddress) { - return ((InetSocketAddress) socketAddress).getPort(); - } - return null; - } + implements NetworkAttributesGetter { @Override @Nullable From be525184e88d41a64bc7d7a3375e66216af25f39 Mon Sep 17 00:00:00 2001 From: heyams Date: Wed, 31 Jan 2024 12:31:48 -0800 Subject: [PATCH 04/28] Rename --- ...> CassandraServerAttributesExtractor.java} | 2 +- .../cassandra/v3_0/CassandraSingletons.java | 2 +- .../v4_0/CassandraAttributesExtractor.java | 77 ------------------- ...> CassandraServerAttributesExtractor.java} | 2 +- .../cassandra/v4_0/CassandraSingletons.java | 3 +- ...> CassandraServerAttributesExtractor.java} | 2 +- .../v4_4/CassandraTelemetryBuilder.java | 3 +- .../v4_4/ExperimentalAttributesExtractor.java | 44 ----------- 8 files changed, 6 insertions(+), 129 deletions(-) rename instrumentation/cassandra/cassandra-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v3_0/{ExperimentalAttributesExtractor.java => CassandraServerAttributesExtractor.java} (96%) delete mode 100644 instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraAttributesExtractor.java rename instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/{ExperimentalAttributesExtractor.java => CassandraServerAttributesExtractor.java} (96%) rename instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/{CassandraAttributesExtractor.java => CassandraServerAttributesExtractor.java} (98%) delete mode 100644 instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/ExperimentalAttributesExtractor.java diff --git a/instrumentation/cassandra/cassandra-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v3_0/ExperimentalAttributesExtractor.java b/instrumentation/cassandra/cassandra-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v3_0/CassandraServerAttributesExtractor.java similarity index 96% rename from instrumentation/cassandra/cassandra-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v3_0/ExperimentalAttributesExtractor.java rename to instrumentation/cassandra/cassandra-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v3_0/CassandraServerAttributesExtractor.java index 8fd25683b964..e7bce594651a 100644 --- a/instrumentation/cassandra/cassandra-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v3_0/ExperimentalAttributesExtractor.java +++ b/instrumentation/cassandra/cassandra-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v3_0/CassandraServerAttributesExtractor.java @@ -12,7 +12,7 @@ import io.opentelemetry.semconv.SemanticAttributes; import javax.annotation.Nullable; -public class ExperimentalAttributesExtractor +public class CassandraServerAttributesExtractor implements AttributesExtractor { @Override public void onStart(AttributesBuilder attributes, Context context, CassandraRequest request) {} diff --git a/instrumentation/cassandra/cassandra-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v3_0/CassandraSingletons.java b/instrumentation/cassandra/cassandra-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v3_0/CassandraSingletons.java index 8808f4702858..79e4fc5dddc6 100644 --- a/instrumentation/cassandra/cassandra-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v3_0/CassandraSingletons.java +++ b/instrumentation/cassandra/cassandra-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v3_0/CassandraSingletons.java @@ -38,7 +38,7 @@ public final class CassandraSingletons { .build()) .addAttributesExtractor( NetworkAttributesExtractor.create(new CassandraNetworkAttributesGetter())) - .addAttributesExtractor(new ExperimentalAttributesExtractor()) + .addAttributesExtractor(new CassandraServerAttributesExtractor()) .buildInstrumenter(SpanKindExtractor.alwaysClient()); } diff --git a/instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraAttributesExtractor.java b/instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraAttributesExtractor.java deleted file mode 100644 index c39d2835baa7..000000000000 --- a/instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraAttributesExtractor.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.javaagent.instrumentation.cassandra.v4_0; - -import com.datastax.oss.driver.api.core.config.DefaultDriverOption; -import com.datastax.oss.driver.api.core.config.DriverExecutionProfile; -import com.datastax.oss.driver.api.core.cql.ExecutionInfo; -import com.datastax.oss.driver.api.core.cql.Statement; -import com.datastax.oss.driver.api.core.metadata.Node; -import io.opentelemetry.api.common.AttributesBuilder; -import io.opentelemetry.context.Context; -import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; -import io.opentelemetry.semconv.SemanticAttributes; -import javax.annotation.Nullable; - -final class CassandraAttributesExtractor - implements AttributesExtractor { - - @Override - public void onStart( - AttributesBuilder attributes, Context parentContext, CassandraRequest request) {} - - @Override - public void onEnd( - AttributesBuilder attributes, - Context context, - CassandraRequest request, - @Nullable ExecutionInfo executionInfo, - @Nullable Throwable error) { - if (executionInfo == null) { - return; - } - - Node coordinator = executionInfo.getCoordinator(); - if (coordinator != null) { - if (coordinator.getDatacenter() != null) { - attributes.put(SemanticAttributes.DB_CASSANDRA_COORDINATOR_DC, coordinator.getDatacenter()); - } - if (coordinator.getHostId() != null) { - attributes.put( - SemanticAttributes.DB_CASSANDRA_COORDINATOR_ID, coordinator.getHostId().toString()); - } - } - attributes.put( - SemanticAttributes.DB_CASSANDRA_SPECULATIVE_EXECUTION_COUNT, - executionInfo.getSpeculativeExecutionCount()); - - Statement statement = executionInfo.getStatement(); - String consistencyLevel; - DriverExecutionProfile config = - request.getSession().getContext().getConfig().getDefaultProfile(); - if (statement.getConsistencyLevel() != null) { - consistencyLevel = statement.getConsistencyLevel().name(); - } else { - consistencyLevel = config.getString(DefaultDriverOption.REQUEST_CONSISTENCY); - } - attributes.put(SemanticAttributes.DB_CASSANDRA_CONSISTENCY_LEVEL, consistencyLevel); - - if (statement.getPageSize() > 0) { - attributes.put(SemanticAttributes.DB_CASSANDRA_PAGE_SIZE, statement.getPageSize()); - } else { - int pageSize = config.getInt(DefaultDriverOption.REQUEST_PAGE_SIZE); - if (pageSize > 0) { - attributes.put(SemanticAttributes.DB_CASSANDRA_PAGE_SIZE, pageSize); - } - } - - Boolean idempotent = statement.isIdempotent(); - if (idempotent == null) { - idempotent = config.getBoolean(DefaultDriverOption.REQUEST_DEFAULT_IDEMPOTENCE); - } - attributes.put(SemanticAttributes.DB_CASSANDRA_IDEMPOTENCE, idempotent); - } -} diff --git a/instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/ExperimentalAttributesExtractor.java b/instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraServerAttributesExtractor.java similarity index 96% rename from instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/ExperimentalAttributesExtractor.java rename to instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraServerAttributesExtractor.java index f75e2745c06e..f2afdeae2c81 100644 --- a/instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/ExperimentalAttributesExtractor.java +++ b/instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraServerAttributesExtractor.java @@ -15,7 +15,7 @@ import java.net.SocketAddress; import javax.annotation.Nullable; -public class ExperimentalAttributesExtractor +public class CassandraServerAttributesExtractor implements AttributesExtractor { @Override public void onStart(AttributesBuilder attributes, Context context, CassandraRequest request) {} diff --git a/instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraSingletons.java b/instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraSingletons.java index 418de3bbbf88..500231d2f6c6 100644 --- a/instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraSingletons.java +++ b/instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraSingletons.java @@ -37,8 +37,7 @@ public final class CassandraSingletons { .build()) .addAttributesExtractor( NetworkAttributesExtractor.create(new CassandraNetworkAttributesGetter())) - .addAttributesExtractor(new ExperimentalAttributesExtractor()) - .addAttributesExtractor(new CassandraAttributesExtractor()) + .addAttributesExtractor(new CassandraServerAttributesExtractor()) .buildInstrumenter(SpanKindExtractor.alwaysClient()); } diff --git a/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraAttributesExtractor.java b/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraServerAttributesExtractor.java similarity index 98% rename from instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraAttributesExtractor.java rename to instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraServerAttributesExtractor.java index 9617e4c8db99..8a0c0068826f 100644 --- a/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraAttributesExtractor.java +++ b/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraServerAttributesExtractor.java @@ -16,7 +16,7 @@ import io.opentelemetry.semconv.SemanticAttributes; import javax.annotation.Nullable; -final class CassandraAttributesExtractor +final class CassandraServerAttributesExtractor implements AttributesExtractor { @Override diff --git a/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraTelemetryBuilder.java b/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraTelemetryBuilder.java index ff22a1fb343c..de2983f2f4d7 100644 --- a/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraTelemetryBuilder.java +++ b/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraTelemetryBuilder.java @@ -60,8 +60,7 @@ protected Instrumenter createInstrumenter( .build()) .addAttributesExtractor( NetworkAttributesExtractor.create(new CassandraNetworkAttributesGetter())) - .addAttributesExtractor(new ExperimentalAttributesExtractor()) - .addAttributesExtractor(new CassandraAttributesExtractor()) + .addAttributesExtractor(new CassandraServerAttributesExtractor()) .buildInstrumenter(SpanKindExtractor.alwaysClient()); } } diff --git a/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/ExperimentalAttributesExtractor.java b/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/ExperimentalAttributesExtractor.java deleted file mode 100644 index e5b3a25c679e..000000000000 --- a/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/ExperimentalAttributesExtractor.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.instrumentation.cassandra.v4_4; - -import com.datastax.oss.driver.api.core.cql.ExecutionInfo; -import com.datastax.oss.driver.api.core.metadata.Node; -import io.opentelemetry.api.common.AttributesBuilder; -import io.opentelemetry.context.Context; -import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; -import io.opentelemetry.semconv.SemanticAttributes; -import java.net.InetSocketAddress; -import java.net.SocketAddress; -import javax.annotation.Nullable; - -public class ExperimentalAttributesExtractor - implements AttributesExtractor { - @Override - public void onStart(AttributesBuilder attributes, Context context, CassandraRequest request) {} - - @Override - public void onEnd( - AttributesBuilder attributes, - Context context, - CassandraRequest request, - @Nullable ExecutionInfo executionInfo, - @Nullable Throwable error) { - if (executionInfo == null) { - return; - } - Node coordinator = executionInfo.getCoordinator(); - if (coordinator == null) { - return; - } - SocketAddress address = coordinator.getEndPoint().resolve(); - if (address instanceof InetSocketAddress) { - attributes.put( - SemanticAttributes.SERVER_ADDRESS, ((InetSocketAddress) address).getHostName()); - attributes.put(SemanticAttributes.SERVER_PORT, ((InetSocketAddress) address).getPort()); - } - } -} From 79c2d7657aa72746d576ac5499775173ebb31f04 Mon Sep 17 00:00:00 2001 From: heyams Date: Wed, 31 Jan 2024 14:19:57 -0800 Subject: [PATCH 05/28] Fix tests --- .../v4_4/CassandraServerAttributesExtractor.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraServerAttributesExtractor.java b/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraServerAttributesExtractor.java index 8a0c0068826f..39f82544aac1 100644 --- a/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraServerAttributesExtractor.java +++ b/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraServerAttributesExtractor.java @@ -14,6 +14,8 @@ import io.opentelemetry.context.Context; import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; import io.opentelemetry.semconv.SemanticAttributes; +import java.net.InetSocketAddress; +import java.net.SocketAddress; import javax.annotation.Nullable; final class CassandraServerAttributesExtractor @@ -36,6 +38,12 @@ public void onEnd( Node coordinator = executionInfo.getCoordinator(); if (coordinator != null) { + SocketAddress address = coordinator.getEndPoint().resolve(); + if (address instanceof InetSocketAddress) { + attributes.put( + SemanticAttributes.SERVER_ADDRESS, ((InetSocketAddress) address).getHostName()); + attributes.put(SemanticAttributes.SERVER_PORT, ((InetSocketAddress) address).getPort()); + } if (coordinator.getDatacenter() != null) { attributes.put(SemanticAttributes.DB_CASSANDRA_COORDINATOR_DC, coordinator.getDatacenter()); } From 6c16f6d314d06254d067546e8871e78a95269783 Mon Sep 17 00:00:00 2001 From: heyams Date: Wed, 31 Jan 2024 14:28:50 -0800 Subject: [PATCH 06/28] Update --- .../CassandraServerAttributesExtractor.java | 59 ++++++++++++++++--- 1 file changed, 50 insertions(+), 9 deletions(-) diff --git a/instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraServerAttributesExtractor.java b/instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraServerAttributesExtractor.java index f2afdeae2c81..2f12e5f784d1 100644 --- a/instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraServerAttributesExtractor.java +++ b/instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraServerAttributesExtractor.java @@ -5,7 +5,10 @@ package io.opentelemetry.javaagent.instrumentation.cassandra.v4_0; +import com.datastax.oss.driver.api.core.config.DefaultDriverOption; +import com.datastax.oss.driver.api.core.config.DriverExecutionProfile; import com.datastax.oss.driver.api.core.cql.ExecutionInfo; +import com.datastax.oss.driver.api.core.cql.Statement; import com.datastax.oss.driver.api.core.metadata.Node; import io.opentelemetry.api.common.AttributesBuilder; import io.opentelemetry.context.Context; @@ -15,10 +18,12 @@ import java.net.SocketAddress; import javax.annotation.Nullable; -public class CassandraServerAttributesExtractor +final class CassandraServerAttributesExtractor implements AttributesExtractor { + @Override - public void onStart(AttributesBuilder attributes, Context context, CassandraRequest request) {} + public void onStart( + AttributesBuilder attributes, Context parentContext, CassandraRequest request) {} @Override public void onEnd( @@ -30,15 +35,51 @@ public void onEnd( if (executionInfo == null) { return; } + Node coordinator = executionInfo.getCoordinator(); - if (coordinator == null) { - return; + if (coordinator != null) { + SocketAddress address = coordinator.getEndPoint().resolve(); + if (address instanceof InetSocketAddress) { + attributes.put( + SemanticAttributes.SERVER_ADDRESS, ((InetSocketAddress) address).getHostName()); + attributes.put(SemanticAttributes.SERVER_PORT, ((InetSocketAddress) address).getPort()); + } + if (coordinator.getDatacenter() != null) { + attributes.put(SemanticAttributes.DB_CASSANDRA_COORDINATOR_DC, coordinator.getDatacenter()); + } + if (coordinator.getHostId() != null) { + attributes.put( + SemanticAttributes.DB_CASSANDRA_COORDINATOR_ID, coordinator.getHostId().toString()); + } + } + attributes.put( + SemanticAttributes.DB_CASSANDRA_SPECULATIVE_EXECUTION_COUNT, + executionInfo.getSpeculativeExecutionCount()); + + Statement statement = executionInfo.getStatement(); + String consistencyLevel; + DriverExecutionProfile config = + request.getSession().getContext().getConfig().getDefaultProfile(); + if (statement.getConsistencyLevel() != null) { + consistencyLevel = statement.getConsistencyLevel().name(); + } else { + consistencyLevel = config.getString(DefaultDriverOption.REQUEST_CONSISTENCY); + } + attributes.put(SemanticAttributes.DB_CASSANDRA_CONSISTENCY_LEVEL, consistencyLevel); + + if (statement.getPageSize() > 0) { + attributes.put(SemanticAttributes.DB_CASSANDRA_PAGE_SIZE, statement.getPageSize()); + } else { + int pageSize = config.getInt(DefaultDriverOption.REQUEST_PAGE_SIZE); + if (pageSize > 0) { + attributes.put(SemanticAttributes.DB_CASSANDRA_PAGE_SIZE, pageSize); + } } - SocketAddress address = coordinator.getEndPoint().resolve(); - if (address instanceof InetSocketAddress) { - attributes.put( - SemanticAttributes.SERVER_ADDRESS, ((InetSocketAddress) address).getHostName()); - attributes.put(SemanticAttributes.SERVER_PORT, ((InetSocketAddress) address).getPort()); + + Boolean idempotent = statement.isIdempotent(); + if (idempotent == null) { + idempotent = config.getBoolean(DefaultDriverOption.REQUEST_DEFAULT_IDEMPOTENCE); } + attributes.put(SemanticAttributes.DB_CASSANDRA_IDEMPOTENCE, idempotent); } } From 3774f3dfc9f98e79ff08fd016f944a34e15dc467 Mon Sep 17 00:00:00 2001 From: heyams Date: Wed, 31 Jan 2024 14:33:55 -0800 Subject: [PATCH 07/28] Rename back to CassandraAttributesExtractor --- ...tributesExtractor.java => CassandraAttributesExtractor.java} | 2 +- .../instrumentation/cassandra/v3_0/CassandraSingletons.java | 2 +- ...tributesExtractor.java => CassandraAttributesExtractor.java} | 2 +- .../instrumentation/cassandra/v4_0/CassandraSingletons.java | 2 +- ...tributesExtractor.java => CassandraAttributesExtractor.java} | 2 +- .../cassandra/v4_4/CassandraTelemetryBuilder.java | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) rename instrumentation/cassandra/cassandra-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v3_0/{CassandraServerAttributesExtractor.java => CassandraAttributesExtractor.java} (96%) rename instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/{CassandraServerAttributesExtractor.java => CassandraAttributesExtractor.java} (98%) rename instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/{CassandraServerAttributesExtractor.java => CassandraAttributesExtractor.java} (98%) diff --git a/instrumentation/cassandra/cassandra-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v3_0/CassandraServerAttributesExtractor.java b/instrumentation/cassandra/cassandra-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v3_0/CassandraAttributesExtractor.java similarity index 96% rename from instrumentation/cassandra/cassandra-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v3_0/CassandraServerAttributesExtractor.java rename to instrumentation/cassandra/cassandra-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v3_0/CassandraAttributesExtractor.java index e7bce594651a..268a7f2eb301 100644 --- a/instrumentation/cassandra/cassandra-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v3_0/CassandraServerAttributesExtractor.java +++ b/instrumentation/cassandra/cassandra-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v3_0/CassandraAttributesExtractor.java @@ -12,7 +12,7 @@ import io.opentelemetry.semconv.SemanticAttributes; import javax.annotation.Nullable; -public class CassandraServerAttributesExtractor +public class CassandraAttributesExtractor implements AttributesExtractor { @Override public void onStart(AttributesBuilder attributes, Context context, CassandraRequest request) {} diff --git a/instrumentation/cassandra/cassandra-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v3_0/CassandraSingletons.java b/instrumentation/cassandra/cassandra-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v3_0/CassandraSingletons.java index 79e4fc5dddc6..bb42cefde545 100644 --- a/instrumentation/cassandra/cassandra-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v3_0/CassandraSingletons.java +++ b/instrumentation/cassandra/cassandra-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v3_0/CassandraSingletons.java @@ -38,7 +38,7 @@ public final class CassandraSingletons { .build()) .addAttributesExtractor( NetworkAttributesExtractor.create(new CassandraNetworkAttributesGetter())) - .addAttributesExtractor(new CassandraServerAttributesExtractor()) + .addAttributesExtractor(new CassandraAttributesExtractor()) .buildInstrumenter(SpanKindExtractor.alwaysClient()); } diff --git a/instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraServerAttributesExtractor.java b/instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraAttributesExtractor.java similarity index 98% rename from instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraServerAttributesExtractor.java rename to instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraAttributesExtractor.java index 2f12e5f784d1..460610ec6cea 100644 --- a/instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraServerAttributesExtractor.java +++ b/instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraAttributesExtractor.java @@ -18,7 +18,7 @@ import java.net.SocketAddress; import javax.annotation.Nullable; -final class CassandraServerAttributesExtractor +final class CassandraAttributesExtractor implements AttributesExtractor { @Override diff --git a/instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraSingletons.java b/instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraSingletons.java index 500231d2f6c6..78cdf2e8f9d8 100644 --- a/instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraSingletons.java +++ b/instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraSingletons.java @@ -37,7 +37,7 @@ public final class CassandraSingletons { .build()) .addAttributesExtractor( NetworkAttributesExtractor.create(new CassandraNetworkAttributesGetter())) - .addAttributesExtractor(new CassandraServerAttributesExtractor()) + .addAttributesExtractor(new CassandraAttributesExtractor()) .buildInstrumenter(SpanKindExtractor.alwaysClient()); } diff --git a/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraServerAttributesExtractor.java b/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraAttributesExtractor.java similarity index 98% rename from instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraServerAttributesExtractor.java rename to instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraAttributesExtractor.java index 39f82544aac1..7e7641bb0b50 100644 --- a/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraServerAttributesExtractor.java +++ b/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraAttributesExtractor.java @@ -18,7 +18,7 @@ import java.net.SocketAddress; import javax.annotation.Nullable; -final class CassandraServerAttributesExtractor +final class CassandraAttributesExtractor implements AttributesExtractor { @Override diff --git a/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraTelemetryBuilder.java b/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraTelemetryBuilder.java index de2983f2f4d7..c94e7290d6d2 100644 --- a/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraTelemetryBuilder.java +++ b/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraTelemetryBuilder.java @@ -60,7 +60,7 @@ protected Instrumenter createInstrumenter( .build()) .addAttributesExtractor( NetworkAttributesExtractor.create(new CassandraNetworkAttributesGetter())) - .addAttributesExtractor(new CassandraServerAttributesExtractor()) + .addAttributesExtractor(new CassandraAttributesExtractor()) .buildInstrumenter(SpanKindExtractor.alwaysClient()); } } From 02594cad382bf7d7341fa02722e4173f5c79e0c3 Mon Sep 17 00:00:00 2001 From: heyams Date: Thu, 1 Feb 2024 12:20:47 -0800 Subject: [PATCH 08/28] Consider SniEndpoint --- .../v4_4/CassandraAttributesExtractor.java | 30 ++++++++++++++----- .../CassandraNetworkAttributesGetter.java | 13 ++++++-- .../v4_4/AbstractCassandra44Test.java | 24 +++++++++++++++ 3 files changed, 57 insertions(+), 10 deletions(-) diff --git a/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraAttributesExtractor.java b/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraAttributesExtractor.java index 7e7641bb0b50..8d26983a9ec1 100644 --- a/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraAttributesExtractor.java +++ b/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraAttributesExtractor.java @@ -9,13 +9,15 @@ import com.datastax.oss.driver.api.core.config.DriverExecutionProfile; import com.datastax.oss.driver.api.core.cql.ExecutionInfo; import com.datastax.oss.driver.api.core.cql.Statement; +import com.datastax.oss.driver.api.core.metadata.EndPoint; import com.datastax.oss.driver.api.core.metadata.Node; +import com.datastax.oss.driver.internal.core.metadata.DefaultEndPoint; +import com.datastax.oss.driver.internal.core.metadata.SniEndPoint; import io.opentelemetry.api.common.AttributesBuilder; import io.opentelemetry.context.Context; import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; import io.opentelemetry.semconv.SemanticAttributes; import java.net.InetSocketAddress; -import java.net.SocketAddress; import javax.annotation.Nullable; final class CassandraAttributesExtractor @@ -38,12 +40,8 @@ public void onEnd( Node coordinator = executionInfo.getCoordinator(); if (coordinator != null) { - SocketAddress address = coordinator.getEndPoint().resolve(); - if (address instanceof InetSocketAddress) { - attributes.put( - SemanticAttributes.SERVER_ADDRESS, ((InetSocketAddress) address).getHostName()); - attributes.put(SemanticAttributes.SERVER_PORT, ((InetSocketAddress) address).getPort()); - } + updateServerAddressAndPort(attributes, coordinator); + if (coordinator.getDatacenter() != null) { attributes.put(SemanticAttributes.DB_CASSANDRA_COORDINATOR_DC, coordinator.getDatacenter()); } @@ -82,4 +80,22 @@ public void onEnd( } attributes.put(SemanticAttributes.DB_CASSANDRA_IDEMPOTENCE, idempotent); } + + private static void updateServerAddressAndPort(AttributesBuilder attributes, Node coordinator) { + EndPoint endPoint = coordinator.getEndPoint(); + if (endPoint instanceof DefaultEndPoint) { + InetSocketAddress address = ((DefaultEndPoint) endPoint).resolve(); + attributes.put(SemanticAttributes.SERVER_ADDRESS, address.getHostName()); + attributes.put(SemanticAttributes.SERVER_PORT, address.getPort()); + } else if (endPoint instanceof SniEndPoint) { + String serverName = ((SniEndPoint) endPoint).getServerName(); + // parse serverName to get hostname and port + int index = serverName.indexOf(":"); + if (index != -1) { + attributes.put(SemanticAttributes.SERVER_ADDRESS, serverName.substring(0, index)); + attributes.put( + SemanticAttributes.SERVER_PORT, Integer.parseInt(serverName.substring(index + 1))); + } + } + } } diff --git a/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraNetworkAttributesGetter.java b/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraNetworkAttributesGetter.java index ecb9de3f4088..b11f2bdb762e 100644 --- a/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraNetworkAttributesGetter.java +++ b/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraNetworkAttributesGetter.java @@ -6,10 +6,12 @@ package io.opentelemetry.instrumentation.cassandra.v4_4; import com.datastax.oss.driver.api.core.cql.ExecutionInfo; +import com.datastax.oss.driver.api.core.metadata.EndPoint; import com.datastax.oss.driver.api.core.metadata.Node; +import com.datastax.oss.driver.internal.core.metadata.DefaultEndPoint; +import com.datastax.oss.driver.internal.core.metadata.SniEndPoint; import io.opentelemetry.instrumentation.api.semconv.network.NetworkAttributesGetter; import java.net.InetSocketAddress; -import java.net.SocketAddress; import javax.annotation.Nullable; final class CassandraNetworkAttributesGetter @@ -28,7 +30,12 @@ public InetSocketAddress getNetworkPeerInetSocketAddress( } // resolve() returns an existing InetSocketAddress, it does not do a dns resolve, // at least in the only current EndPoint implementation (DefaultEndPoint) - SocketAddress address = coordinator.getEndPoint().resolve(); - return address instanceof InetSocketAddress ? (InetSocketAddress) address : null; + EndPoint endPoint = coordinator.getEndPoint(); + if (endPoint instanceof DefaultEndPoint) { + return (InetSocketAddress) coordinator.getEndPoint().resolve(); + } else if (endPoint instanceof SniEndPoint) { + return ((SniEndPoint) endPoint).resolve(); + } + return null; } } diff --git a/instrumentation/cassandra/cassandra-4.4/testing/src/main/java/io/opentelemetry/testing/cassandra/v4_4/AbstractCassandra44Test.java b/instrumentation/cassandra/cassandra-4.4/testing/src/main/java/io/opentelemetry/testing/cassandra/v4_4/AbstractCassandra44Test.java index fc108bbadaeb..5f91722eb015 100644 --- a/instrumentation/cassandra/cassandra-4.4/testing/src/main/java/io/opentelemetry/testing/cassandra/v4_4/AbstractCassandra44Test.java +++ b/instrumentation/cassandra/cassandra-4.4/testing/src/main/java/io/opentelemetry/testing/cassandra/v4_4/AbstractCassandra44Test.java @@ -24,9 +24,14 @@ import static org.junit.jupiter.api.Named.named; import com.datastax.oss.driver.api.core.CqlSession; +import com.datastax.oss.driver.api.core.config.DefaultDriverOption; +import com.datastax.oss.driver.api.core.config.DriverConfigLoader; +import com.datastax.oss.driver.internal.core.metadata.SniEndPoint; import io.opentelemetry.api.trace.SpanKind; import io.opentelemetry.cassandra.v4.common.AbstractCassandraTest; import io.opentelemetry.instrumentation.api.semconv.network.internal.NetworkAttributes; +import java.net.InetSocketAddress; +import java.time.Duration; import java.util.stream.Stream; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; @@ -139,4 +144,23 @@ private static Stream provideReactiveParameters() { "SELECT", "users")))); } + + @Override + protected CqlSession getSession(String keyspace) { + DriverConfigLoader configLoader = + DriverConfigLoader.programmaticBuilder() + .withDuration(DefaultDriverOption.REQUEST_TIMEOUT, Duration.ofSeconds(0)) + .withDuration(DefaultDriverOption.CONNECTION_INIT_QUERY_TIMEOUT, Duration.ofSeconds(10)) + .build(); + return wrap( + CqlSession.builder() + .addContactEndPoint( + new SniEndPoint( + new InetSocketAddress("localhost", cassandraPort), + "localhost:" + cassandraPort)) + .withConfigLoader(configLoader) + .withLocalDatacenter("datacenter1") + .withKeyspace(keyspace) + .build()); + } } From 1858849e9f5ec1f53158bfcfccb689d098cf5a4e Mon Sep 17 00:00:00 2001 From: heyams Date: Thu, 1 Feb 2024 13:18:36 -0800 Subject: [PATCH 09/28] Fix tests --- .../v4/common/AbstractCassandraTest.java | 21 +++++++++++++++---- .../v4_4/AbstractCassandra44Test.java | 2 +- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/instrumentation/cassandra/cassandra-4-common/testing/src/main/java/io/opentelemetry/cassandra/v4/common/AbstractCassandraTest.java b/instrumentation/cassandra/cassandra-4-common/testing/src/main/java/io/opentelemetry/cassandra/v4/common/AbstractCassandraTest.java index 6603f9375c35..6165b8a0d5f0 100644 --- a/instrumentation/cassandra/cassandra-4-common/testing/src/main/java/io/opentelemetry/cassandra/v4/common/AbstractCassandraTest.java +++ b/instrumentation/cassandra/cassandra-4-common/testing/src/main/java/io/opentelemetry/cassandra/v4/common/AbstractCassandraTest.java @@ -21,6 +21,7 @@ import static io.opentelemetry.semconv.SemanticAttributes.NETWORK_TYPE; import static io.opentelemetry.semconv.SemanticAttributes.SERVER_ADDRESS; import static io.opentelemetry.semconv.SemanticAttributes.SERVER_PORT; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Named.named; import com.datastax.oss.driver.api.core.CqlSession; @@ -92,10 +93,16 @@ void syncTest(Parameter parameter) { .hasKind(SpanKind.CLIENT) .hasNoParent() .hasAttributesSatisfyingExactly( - equalTo(NETWORK_TYPE, "ipv4"), + satisfies( + NETWORK_TYPE, + val -> val.satisfiesAnyOf( + v -> assertThat(v).isEqualTo("ipv4"), v -> assertThat(v).isEqualTo("ipv6"))), equalTo(SERVER_ADDRESS, "localhost"), equalTo(SERVER_PORT, cassandraPort), - equalTo(NetworkAttributes.NETWORK_PEER_ADDRESS, "127.0.0.1"), + satisfies( + NetworkAttributes.NETWORK_PEER_ADDRESS, + val -> val.satisfiesAnyOf( + v -> assertThat(v).isEqualTo("127.0.0.1"), v -> assertThat(v).isEqualTo("0:0:0:0:0:0:0:1"))), equalTo(NetworkAttributes.NETWORK_PEER_PORT, cassandraPort), equalTo(DB_SYSTEM, "cassandra"), equalTo(DB_NAME, parameter.keyspace), @@ -141,10 +148,16 @@ void asyncTest(Parameter parameter) throws Exception { .hasKind(SpanKind.CLIENT) .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( - equalTo(NETWORK_TYPE, "ipv4"), + satisfies( + NETWORK_TYPE, + val -> val.satisfiesAnyOf( + v -> assertThat(v).isEqualTo("ipv4"), v -> assertThat(v).isEqualTo("ipv6"))), equalTo(SERVER_ADDRESS, "localhost"), equalTo(SERVER_PORT, cassandraPort), - equalTo(NetworkAttributes.NETWORK_PEER_ADDRESS, "127.0.0.1"), + satisfies( + NetworkAttributes.NETWORK_PEER_ADDRESS, + val -> val.satisfiesAnyOf( + v -> assertThat(v).isEqualTo("127.0.0.1"), v -> assertThat(v).isEqualTo("0:0:0:0:0:0:0:1"))), equalTo(NetworkAttributes.NETWORK_PEER_PORT, cassandraPort), equalTo(DB_SYSTEM, "cassandra"), equalTo(DB_NAME, parameter.keyspace), diff --git a/instrumentation/cassandra/cassandra-4.4/testing/src/main/java/io/opentelemetry/testing/cassandra/v4_4/AbstractCassandra44Test.java b/instrumentation/cassandra/cassandra-4.4/testing/src/main/java/io/opentelemetry/testing/cassandra/v4_4/AbstractCassandra44Test.java index 5f91722eb015..8dc0d0e47043 100644 --- a/instrumentation/cassandra/cassandra-4.4/testing/src/main/java/io/opentelemetry/testing/cassandra/v4_4/AbstractCassandra44Test.java +++ b/instrumentation/cassandra/cassandra-4.4/testing/src/main/java/io/opentelemetry/testing/cassandra/v4_4/AbstractCassandra44Test.java @@ -66,7 +66,7 @@ void reactiveTest(Parameter parameter) { equalTo(NETWORK_TYPE, "ipv4"), equalTo(SERVER_ADDRESS, "localhost"), equalTo(SERVER_PORT, cassandraPort), - equalTo(NetworkAttributes.NETWORK_PEER_ADDRESS, "127.0.0.1"), + equalTo(NetworkAttributes.NETWORK_PEER_ADDRESS, "0:0:0:0:0:0:0:1"), equalTo(NetworkAttributes.NETWORK_PEER_PORT, cassandraPort), equalTo(DB_SYSTEM, "cassandra"), equalTo(DB_NAME, parameter.keyspace), From 7e1dd2ac19b5aa08dd6253aa1a22f07d7feac770 Mon Sep 17 00:00:00 2001 From: heyams Date: Thu, 1 Feb 2024 13:33:37 -0800 Subject: [PATCH 10/28] Fix spotless --- .../v4/common/AbstractCassandraTest.java | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/instrumentation/cassandra/cassandra-4-common/testing/src/main/java/io/opentelemetry/cassandra/v4/common/AbstractCassandraTest.java b/instrumentation/cassandra/cassandra-4-common/testing/src/main/java/io/opentelemetry/cassandra/v4/common/AbstractCassandraTest.java index 6165b8a0d5f0..508773a7cc87 100644 --- a/instrumentation/cassandra/cassandra-4-common/testing/src/main/java/io/opentelemetry/cassandra/v4/common/AbstractCassandraTest.java +++ b/instrumentation/cassandra/cassandra-4-common/testing/src/main/java/io/opentelemetry/cassandra/v4/common/AbstractCassandraTest.java @@ -95,14 +95,18 @@ void syncTest(Parameter parameter) { .hasAttributesSatisfyingExactly( satisfies( NETWORK_TYPE, - val -> val.satisfiesAnyOf( - v -> assertThat(v).isEqualTo("ipv4"), v -> assertThat(v).isEqualTo("ipv6"))), + val -> + val.satisfiesAnyOf( + v -> assertThat(v).isEqualTo("ipv4"), + v -> assertThat(v).isEqualTo("ipv6"))), equalTo(SERVER_ADDRESS, "localhost"), equalTo(SERVER_PORT, cassandraPort), satisfies( NetworkAttributes.NETWORK_PEER_ADDRESS, - val -> val.satisfiesAnyOf( - v -> assertThat(v).isEqualTo("127.0.0.1"), v -> assertThat(v).isEqualTo("0:0:0:0:0:0:0:1"))), + val -> + val.satisfiesAnyOf( + v -> assertThat(v).isEqualTo("127.0.0.1"), + v -> assertThat(v).isEqualTo("0:0:0:0:0:0:0:1"))), equalTo(NetworkAttributes.NETWORK_PEER_PORT, cassandraPort), equalTo(DB_SYSTEM, "cassandra"), equalTo(DB_NAME, parameter.keyspace), @@ -150,14 +154,18 @@ void asyncTest(Parameter parameter) throws Exception { .hasAttributesSatisfyingExactly( satisfies( NETWORK_TYPE, - val -> val.satisfiesAnyOf( - v -> assertThat(v).isEqualTo("ipv4"), v -> assertThat(v).isEqualTo("ipv6"))), + val -> + val.satisfiesAnyOf( + v -> assertThat(v).isEqualTo("ipv4"), + v -> assertThat(v).isEqualTo("ipv6"))), equalTo(SERVER_ADDRESS, "localhost"), equalTo(SERVER_PORT, cassandraPort), satisfies( NetworkAttributes.NETWORK_PEER_ADDRESS, - val -> val.satisfiesAnyOf( - v -> assertThat(v).isEqualTo("127.0.0.1"), v -> assertThat(v).isEqualTo("0:0:0:0:0:0:0:1"))), + val -> + val.satisfiesAnyOf( + v -> assertThat(v).isEqualTo("127.0.0.1"), + v -> assertThat(v).isEqualTo("0:0:0:0:0:0:0:1"))), equalTo(NetworkAttributes.NETWORK_PEER_PORT, cassandraPort), equalTo(DB_SYSTEM, "cassandra"), equalTo(DB_NAME, parameter.keyspace), From 415fc2209723ead7dd60e17f2dbda1257614de65 Mon Sep 17 00:00:00 2001 From: heyams Date: Mon, 5 Feb 2024 12:56:48 -0800 Subject: [PATCH 11/28] Use reflection to access proxyAddress --- .../v4/common/AbstractCassandraTest.java | 3 ++ .../v4_4/CassandraAttributesExtractor.java | 29 +++++++++++++------ .../CassandraNetworkAttributesGetter.java | 1 - .../v4_4/AbstractCassandra44Test.java | 7 ++--- 4 files changed, 26 insertions(+), 14 deletions(-) diff --git a/instrumentation/cassandra/cassandra-4-common/testing/src/main/java/io/opentelemetry/cassandra/v4/common/AbstractCassandraTest.java b/instrumentation/cassandra/cassandra-4-common/testing/src/main/java/io/opentelemetry/cassandra/v4/common/AbstractCassandraTest.java index 508773a7cc87..22b5d52b4364 100644 --- a/instrumentation/cassandra/cassandra-4-common/testing/src/main/java/io/opentelemetry/cassandra/v4/common/AbstractCassandraTest.java +++ b/instrumentation/cassandra/cassandra-4-common/testing/src/main/java/io/opentelemetry/cassandra/v4/common/AbstractCassandraTest.java @@ -53,6 +53,8 @@ public abstract class AbstractCassandraTest { protected static int cassandraPort; + protected static String cassandraContainerName; + protected abstract InstrumentationExtension testing(); protected CqlSession wrap(CqlSession session) { @@ -70,6 +72,7 @@ static void beforeAll() { cassandra.start(); cassandraPort = cassandra.getMappedPort(9042); + cassandraContainerName = cassandra.getHost(); } @AfterAll diff --git a/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraAttributesExtractor.java b/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraAttributesExtractor.java index 8d26983a9ec1..a45a8f169560 100644 --- a/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraAttributesExtractor.java +++ b/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraAttributesExtractor.java @@ -17,12 +17,17 @@ import io.opentelemetry.context.Context; import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; import io.opentelemetry.semconv.SemanticAttributes; +import java.lang.reflect.Field; import java.net.InetSocketAddress; import javax.annotation.Nullable; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; final class CassandraAttributesExtractor implements AttributesExtractor { + private static final Logger logger = LoggerFactory.getLogger(CassandraAttributesExtractor.class); + @Override public void onStart( AttributesBuilder attributes, Context parentContext, CassandraRequest request) {} @@ -40,7 +45,11 @@ public void onEnd( Node coordinator = executionInfo.getCoordinator(); if (coordinator != null) { - updateServerAddressAndPort(attributes, coordinator); + try { + updateServerAddressAndPort(attributes, coordinator); + } catch (NoSuchFieldException | IllegalAccessException e) { + logger.error("Error while extracting server address and port", e); + } if (coordinator.getDatacenter() != null) { attributes.put(SemanticAttributes.DB_CASSANDRA_COORDINATOR_DC, coordinator.getDatacenter()); @@ -81,20 +90,22 @@ public void onEnd( attributes.put(SemanticAttributes.DB_CASSANDRA_IDEMPOTENCE, idempotent); } - private static void updateServerAddressAndPort(AttributesBuilder attributes, Node coordinator) { + private static void updateServerAddressAndPort(AttributesBuilder attributes, Node coordinator) + throws NoSuchFieldException, IllegalAccessException { EndPoint endPoint = coordinator.getEndPoint(); if (endPoint instanceof DefaultEndPoint) { InetSocketAddress address = ((DefaultEndPoint) endPoint).resolve(); attributes.put(SemanticAttributes.SERVER_ADDRESS, address.getHostName()); attributes.put(SemanticAttributes.SERVER_PORT, address.getPort()); } else if (endPoint instanceof SniEndPoint) { - String serverName = ((SniEndPoint) endPoint).getServerName(); - // parse serverName to get hostname and port - int index = serverName.indexOf(":"); - if (index != -1) { - attributes.put(SemanticAttributes.SERVER_ADDRESS, serverName.substring(0, index)); - attributes.put( - SemanticAttributes.SERVER_PORT, Integer.parseInt(serverName.substring(index + 1))); + SniEndPoint sniEndPoint = (SniEndPoint) endPoint; + Field privateField = sniEndPoint.getClass().getDeclaredField("proxyAddress"); + privateField.setAccessible(true); + Object object = privateField.get(sniEndPoint); + if (object instanceof InetSocketAddress) { + InetSocketAddress address = (InetSocketAddress) object; + attributes.put(SemanticAttributes.SERVER_ADDRESS, address.getHostName()); + attributes.put(SemanticAttributes.SERVER_PORT, address.getPort()); } } } diff --git a/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraNetworkAttributesGetter.java b/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraNetworkAttributesGetter.java index b11f2bdb762e..08b0a270b411 100644 --- a/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraNetworkAttributesGetter.java +++ b/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraNetworkAttributesGetter.java @@ -29,7 +29,6 @@ public InetSocketAddress getNetworkPeerInetSocketAddress( return null; } // resolve() returns an existing InetSocketAddress, it does not do a dns resolve, - // at least in the only current EndPoint implementation (DefaultEndPoint) EndPoint endPoint = coordinator.getEndPoint(); if (endPoint instanceof DefaultEndPoint) { return (InetSocketAddress) coordinator.getEndPoint().resolve(); diff --git a/instrumentation/cassandra/cassandra-4.4/testing/src/main/java/io/opentelemetry/testing/cassandra/v4_4/AbstractCassandra44Test.java b/instrumentation/cassandra/cassandra-4.4/testing/src/main/java/io/opentelemetry/testing/cassandra/v4_4/AbstractCassandra44Test.java index 8dc0d0e47043..da8e66f7c612 100644 --- a/instrumentation/cassandra/cassandra-4.4/testing/src/main/java/io/opentelemetry/testing/cassandra/v4_4/AbstractCassandra44Test.java +++ b/instrumentation/cassandra/cassandra-4.4/testing/src/main/java/io/opentelemetry/testing/cassandra/v4_4/AbstractCassandra44Test.java @@ -152,12 +152,11 @@ protected CqlSession getSession(String keyspace) { .withDuration(DefaultDriverOption.REQUEST_TIMEOUT, Duration.ofSeconds(0)) .withDuration(DefaultDriverOption.CONNECTION_INIT_QUERY_TIMEOUT, Duration.ofSeconds(10)) .build(); + + InetSocketAddress address = new InetSocketAddress("localhost", cassandraPort); return wrap( CqlSession.builder() - .addContactEndPoint( - new SniEndPoint( - new InetSocketAddress("localhost", cassandraPort), - "localhost:" + cassandraPort)) + .addContactEndPoint(new SniEndPoint(address, cassandraContainerName)) .withConfigLoader(configLoader) .withLocalDatacenter("datacenter1") .withKeyspace(keyspace) From c254dd7930fb98e1cf854a93f6c31bc8b96a42cd Mon Sep 17 00:00:00 2001 From: heyams Date: Mon, 5 Feb 2024 13:34:11 -0800 Subject: [PATCH 12/28] Revert --- .../cassandra/v4/common/AbstractCassandraTest.java | 3 --- .../testing/cassandra/v4_4/AbstractCassandra44Test.java | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/instrumentation/cassandra/cassandra-4-common/testing/src/main/java/io/opentelemetry/cassandra/v4/common/AbstractCassandraTest.java b/instrumentation/cassandra/cassandra-4-common/testing/src/main/java/io/opentelemetry/cassandra/v4/common/AbstractCassandraTest.java index 22b5d52b4364..508773a7cc87 100644 --- a/instrumentation/cassandra/cassandra-4-common/testing/src/main/java/io/opentelemetry/cassandra/v4/common/AbstractCassandraTest.java +++ b/instrumentation/cassandra/cassandra-4-common/testing/src/main/java/io/opentelemetry/cassandra/v4/common/AbstractCassandraTest.java @@ -53,8 +53,6 @@ public abstract class AbstractCassandraTest { protected static int cassandraPort; - protected static String cassandraContainerName; - protected abstract InstrumentationExtension testing(); protected CqlSession wrap(CqlSession session) { @@ -72,7 +70,6 @@ static void beforeAll() { cassandra.start(); cassandraPort = cassandra.getMappedPort(9042); - cassandraContainerName = cassandra.getHost(); } @AfterAll diff --git a/instrumentation/cassandra/cassandra-4.4/testing/src/main/java/io/opentelemetry/testing/cassandra/v4_4/AbstractCassandra44Test.java b/instrumentation/cassandra/cassandra-4.4/testing/src/main/java/io/opentelemetry/testing/cassandra/v4_4/AbstractCassandra44Test.java index da8e66f7c612..311dd8d4f880 100644 --- a/instrumentation/cassandra/cassandra-4.4/testing/src/main/java/io/opentelemetry/testing/cassandra/v4_4/AbstractCassandra44Test.java +++ b/instrumentation/cassandra/cassandra-4.4/testing/src/main/java/io/opentelemetry/testing/cassandra/v4_4/AbstractCassandra44Test.java @@ -156,7 +156,7 @@ protected CqlSession getSession(String keyspace) { InetSocketAddress address = new InetSocketAddress("localhost", cassandraPort); return wrap( CqlSession.builder() - .addContactEndPoint(new SniEndPoint(address, cassandraContainerName)) + .addContactEndPoint(new SniEndPoint(address, "localhost")) .withConfigLoader(configLoader) .withLocalDatacenter("datacenter1") .withKeyspace(keyspace) From 4e3c23000dc13d8135f83347ced3626030131d60 Mon Sep 17 00:00:00 2001 From: heyams Date: Wed, 7 Feb 2024 12:48:22 -0800 Subject: [PATCH 13/28] Cache proxyAddress field --- .../v4_4/CassandraAttributesExtractor.java | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraAttributesExtractor.java b/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraAttributesExtractor.java index a45a8f169560..a483faef58ef 100644 --- a/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraAttributesExtractor.java +++ b/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraAttributesExtractor.java @@ -27,6 +27,16 @@ final class CassandraAttributesExtractor implements AttributesExtractor { private static final Logger logger = LoggerFactory.getLogger(CassandraAttributesExtractor.class); + private static Field proxyAddressField; + + static { + try { + proxyAddressField = SniEndPoint.class.getDeclaredField("proxyAddress"); + proxyAddressField.setAccessible(true); + } catch (NoSuchFieldException e) { + logger.error("No such a field called \"proxyAddress\"", e); + } + } @Override public void onStart( @@ -97,11 +107,9 @@ private static void updateServerAddressAndPort(AttributesBuilder attributes, Nod InetSocketAddress address = ((DefaultEndPoint) endPoint).resolve(); attributes.put(SemanticAttributes.SERVER_ADDRESS, address.getHostName()); attributes.put(SemanticAttributes.SERVER_PORT, address.getPort()); - } else if (endPoint instanceof SniEndPoint) { + } else if (endPoint instanceof SniEndPoint && proxyAddressField != null) { SniEndPoint sniEndPoint = (SniEndPoint) endPoint; - Field privateField = sniEndPoint.getClass().getDeclaredField("proxyAddress"); - privateField.setAccessible(true); - Object object = privateField.get(sniEndPoint); + Object object = proxyAddressField.get(sniEndPoint); if (object instanceof InetSocketAddress) { InetSocketAddress address = (InetSocketAddress) object; attributes.put(SemanticAttributes.SERVER_ADDRESS, address.getHostName()); From 5e9a16f7566c0d050849ff54dc03a604740b358c Mon Sep 17 00:00:00 2001 From: heyams Date: Wed, 7 Feb 2024 14:29:46 -0800 Subject: [PATCH 14/28] Comment --- .../v4_4/CassandraAttributesExtractor.java | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraAttributesExtractor.java b/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraAttributesExtractor.java index a483faef58ef..cc16eb930c6a 100644 --- a/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraAttributesExtractor.java +++ b/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraAttributesExtractor.java @@ -27,16 +27,7 @@ final class CassandraAttributesExtractor implements AttributesExtractor { private static final Logger logger = LoggerFactory.getLogger(CassandraAttributesExtractor.class); - private static Field proxyAddressField; - - static { - try { - proxyAddressField = SniEndPoint.class.getDeclaredField("proxyAddress"); - proxyAddressField.setAccessible(true); - } catch (NoSuchFieldException e) { - logger.error("No such a field called \"proxyAddress\"", e); - } - } + private static final Field proxyAddressField = getProxyAddressField(); @Override public void onStart( @@ -117,4 +108,15 @@ private static void updateServerAddressAndPort(AttributesBuilder attributes, Nod } } } + + @Nullable + private static Field getProxyAddressField() { + try { + Field field = SniEndPoint.class.getDeclaredField("proxyAddress"); + field.setAccessible(true); + return field; + } catch (Exception e) { + return null; + } + } } From da7b1c90de61fbd73f020e010f0b7d41c1430ebc Mon Sep 17 00:00:00 2001 From: heyams Date: Thu, 8 Feb 2024 09:53:30 -0800 Subject: [PATCH 15/28] Fix errorprone --- .../cassandra/v4_4/CassandraAttributesExtractor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraAttributesExtractor.java b/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraAttributesExtractor.java index cc16eb930c6a..e69c75735b14 100644 --- a/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraAttributesExtractor.java +++ b/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraAttributesExtractor.java @@ -92,7 +92,7 @@ public void onEnd( } private static void updateServerAddressAndPort(AttributesBuilder attributes, Node coordinator) - throws NoSuchFieldException, IllegalAccessException { + throws IllegalAccessException { EndPoint endPoint = coordinator.getEndPoint(); if (endPoint instanceof DefaultEndPoint) { InetSocketAddress address = ((DefaultEndPoint) endPoint).resolve(); From 4ac21ca11b2b3063a63c8468783ae5ec544ecf23 Mon Sep 17 00:00:00 2001 From: heyams Date: Thu, 8 Feb 2024 10:00:10 -0800 Subject: [PATCH 16/28] Fix --- .../cassandra/v4_4/CassandraAttributesExtractor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraAttributesExtractor.java b/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraAttributesExtractor.java index e69c75735b14..e427d3ffccad 100644 --- a/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraAttributesExtractor.java +++ b/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraAttributesExtractor.java @@ -48,7 +48,7 @@ public void onEnd( if (coordinator != null) { try { updateServerAddressAndPort(attributes, coordinator); - } catch (NoSuchFieldException | IllegalAccessException e) { + } catch (IllegalAccessException e) { logger.error("Error while extracting server address and port", e); } From a1bca4eb5fd0e3f81688315679c3cf92a6d095f5 Mon Sep 17 00:00:00 2001 From: heyams Date: Thu, 8 Feb 2024 14:00:51 -0800 Subject: [PATCH 17/28] Update --- .../v4_4/CassandraAttributesExtractor.java | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraAttributesExtractor.java b/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraAttributesExtractor.java index e427d3ffccad..4dfe72632714 100644 --- a/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraAttributesExtractor.java +++ b/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraAttributesExtractor.java @@ -46,11 +46,7 @@ public void onEnd( Node coordinator = executionInfo.getCoordinator(); if (coordinator != null) { - try { - updateServerAddressAndPort(attributes, coordinator); - } catch (IllegalAccessException e) { - logger.error("Error while extracting server address and port", e); - } + updateServerAddressAndPort(attributes, coordinator); if (coordinator.getDatacenter() != null) { attributes.put(SemanticAttributes.DB_CASSANDRA_COORDINATOR_DC, coordinator.getDatacenter()); @@ -91,8 +87,7 @@ public void onEnd( attributes.put(SemanticAttributes.DB_CASSANDRA_IDEMPOTENCE, idempotent); } - private static void updateServerAddressAndPort(AttributesBuilder attributes, Node coordinator) - throws IllegalAccessException { + private static void updateServerAddressAndPort(AttributesBuilder attributes, Node coordinator) { EndPoint endPoint = coordinator.getEndPoint(); if (endPoint instanceof DefaultEndPoint) { InetSocketAddress address = ((DefaultEndPoint) endPoint).resolve(); @@ -100,7 +95,14 @@ private static void updateServerAddressAndPort(AttributesBuilder attributes, Nod attributes.put(SemanticAttributes.SERVER_PORT, address.getPort()); } else if (endPoint instanceof SniEndPoint && proxyAddressField != null) { SniEndPoint sniEndPoint = (SniEndPoint) endPoint; - Object object = proxyAddressField.get(sniEndPoint); + Object object = null; + try { + object = proxyAddressField.get(sniEndPoint); + } catch (IllegalAccessException e) { + logger.warn( + "Error when retrieving the private field proxyAddress of SniEndPoint using reflection.", + e); + } if (object instanceof InetSocketAddress) { InetSocketAddress address = (InetSocketAddress) object; attributes.put(SemanticAttributes.SERVER_ADDRESS, address.getHostName()); From d2af7b28e5c089df1a644045039c282b0309929a Mon Sep 17 00:00:00 2001 From: heyams Date: Mon, 12 Feb 2024 09:57:26 -0800 Subject: [PATCH 18/28] Address comments --- .../v3_0/CassandraAttributesExtractor.java | 2 +- .../v4_0/CassandraAttributesExtractor.java | 2 +- .../v4_4/CassandraAttributesExtractor.java | 18 +++++++++--------- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/instrumentation/cassandra/cassandra-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v3_0/CassandraAttributesExtractor.java b/instrumentation/cassandra/cassandra-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v3_0/CassandraAttributesExtractor.java index 268a7f2eb301..1c6b616b7f90 100644 --- a/instrumentation/cassandra/cassandra-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v3_0/CassandraAttributesExtractor.java +++ b/instrumentation/cassandra/cassandra-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v3_0/CassandraAttributesExtractor.java @@ -29,7 +29,7 @@ public void onEnd( } attributes.put( SemanticAttributes.SERVER_ADDRESS, - executionInfo.getQueriedHost().getSocketAddress().getHostName()); + executionInfo.getQueriedHost().getSocketAddress().getHostString()); attributes.put( SemanticAttributes.SERVER_PORT, executionInfo.getQueriedHost().getSocketAddress().getPort()); diff --git a/instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraAttributesExtractor.java b/instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraAttributesExtractor.java index 460610ec6cea..afcff2f78594 100644 --- a/instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraAttributesExtractor.java +++ b/instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraAttributesExtractor.java @@ -41,7 +41,7 @@ public void onEnd( SocketAddress address = coordinator.getEndPoint().resolve(); if (address instanceof InetSocketAddress) { attributes.put( - SemanticAttributes.SERVER_ADDRESS, ((InetSocketAddress) address).getHostName()); + SemanticAttributes.SERVER_ADDRESS, ((InetSocketAddress) address).getHostString()); attributes.put(SemanticAttributes.SERVER_PORT, ((InetSocketAddress) address).getPort()); } if (coordinator.getDatacenter() != null) { diff --git a/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraAttributesExtractor.java b/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraAttributesExtractor.java index 4dfe72632714..51a2d8b6b82b 100644 --- a/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraAttributesExtractor.java +++ b/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraAttributesExtractor.java @@ -19,14 +19,15 @@ import io.opentelemetry.semconv.SemanticAttributes; import java.lang.reflect.Field; import java.net.InetSocketAddress; +import java.util.logging.Logger; import javax.annotation.Nullable; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; final class CassandraAttributesExtractor implements AttributesExtractor { - private static final Logger logger = LoggerFactory.getLogger(CassandraAttributesExtractor.class); + private static final java.util.logging.Logger logger = + Logger.getLogger(CassandraAttributesExtractor.class.getName()); + private static final Field proxyAddressField = getProxyAddressField(); @Override @@ -91,21 +92,20 @@ private static void updateServerAddressAndPort(AttributesBuilder attributes, Nod EndPoint endPoint = coordinator.getEndPoint(); if (endPoint instanceof DefaultEndPoint) { InetSocketAddress address = ((DefaultEndPoint) endPoint).resolve(); - attributes.put(SemanticAttributes.SERVER_ADDRESS, address.getHostName()); + attributes.put(SemanticAttributes.SERVER_ADDRESS, address.getHostString()); attributes.put(SemanticAttributes.SERVER_PORT, address.getPort()); } else if (endPoint instanceof SniEndPoint && proxyAddressField != null) { SniEndPoint sniEndPoint = (SniEndPoint) endPoint; Object object = null; try { object = proxyAddressField.get(sniEndPoint); - } catch (IllegalAccessException e) { - logger.warn( - "Error when retrieving the private field proxyAddress of SniEndPoint using reflection.", - e); + } catch (Exception e) { + logger.fine( + "Error when accessing the private field proxyAddress of SniEndPoint using reflection."); } if (object instanceof InetSocketAddress) { InetSocketAddress address = (InetSocketAddress) object; - attributes.put(SemanticAttributes.SERVER_ADDRESS, address.getHostName()); + attributes.put(SemanticAttributes.SERVER_ADDRESS, address.getHostString()); attributes.put(SemanticAttributes.SERVER_PORT, address.getPort()); } } From c66b91f1cd522ec1945024b9a03ef34d55d5a34c Mon Sep 17 00:00:00 2001 From: heyams Date: Tue, 13 Feb 2024 10:01:33 -0800 Subject: [PATCH 19/28] Comments --- .../cassandra/v4_4/CassandraAttributesExtractor.java | 9 ++++++--- .../testing/cassandra/v4_4/AbstractCassandra44Test.java | 2 +- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraAttributesExtractor.java b/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraAttributesExtractor.java index 51a2d8b6b82b..b017c352f2b6 100644 --- a/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraAttributesExtractor.java +++ b/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraAttributesExtractor.java @@ -19,13 +19,14 @@ import io.opentelemetry.semconv.SemanticAttributes; import java.lang.reflect.Field; import java.net.InetSocketAddress; +import java.util.logging.Level; import java.util.logging.Logger; import javax.annotation.Nullable; final class CassandraAttributesExtractor implements AttributesExtractor { - private static final java.util.logging.Logger logger = + private static final Logger logger = Logger.getLogger(CassandraAttributesExtractor.class.getName()); private static final Field proxyAddressField = getProxyAddressField(); @@ -100,8 +101,10 @@ private static void updateServerAddressAndPort(AttributesBuilder attributes, Nod try { object = proxyAddressField.get(sniEndPoint); } catch (Exception e) { - logger.fine( - "Error when accessing the private field proxyAddress of SniEndPoint using reflection."); + logger.log( + Level.FINE, + "Error when accessing the private field proxyAddress of SniEndPoint using reflection.", + e); } if (object instanceof InetSocketAddress) { InetSocketAddress address = (InetSocketAddress) object; diff --git a/instrumentation/cassandra/cassandra-4.4/testing/src/main/java/io/opentelemetry/testing/cassandra/v4_4/AbstractCassandra44Test.java b/instrumentation/cassandra/cassandra-4.4/testing/src/main/java/io/opentelemetry/testing/cassandra/v4_4/AbstractCassandra44Test.java index 311dd8d4f880..5ba1224c5cb1 100644 --- a/instrumentation/cassandra/cassandra-4.4/testing/src/main/java/io/opentelemetry/testing/cassandra/v4_4/AbstractCassandra44Test.java +++ b/instrumentation/cassandra/cassandra-4.4/testing/src/main/java/io/opentelemetry/testing/cassandra/v4_4/AbstractCassandra44Test.java @@ -156,7 +156,7 @@ protected CqlSession getSession(String keyspace) { InetSocketAddress address = new InetSocketAddress("localhost", cassandraPort); return wrap( CqlSession.builder() - .addContactEndPoint(new SniEndPoint(address, "localhost")) + .addContactEndPoint(new SniEndPoint(address, "dummy")) .withConfigLoader(configLoader) .withLocalDatacenter("datacenter1") .withKeyspace(keyspace) From 447c362e6310306dba6fc157f38b345e7b964020 Mon Sep 17 00:00:00 2001 From: heyams Date: Wed, 14 Feb 2024 10:41:47 -0800 Subject: [PATCH 20/28] empty From 7b9f4795f3f8262ab46995625c9ec9faf2c7c2aa Mon Sep 17 00:00:00 2001 From: heyams Date: Wed, 14 Feb 2024 10:43:06 -0800 Subject: [PATCH 21/28] empty From f185da0a1d8c3c84750f2e4e5798d3bd2f243870 Mon Sep 17 00:00:00 2001 From: heyams Date: Wed, 14 Feb 2024 12:53:14 -0800 Subject: [PATCH 22/28] Use a diff data center to fix sporadic 'could not reach any contact point --- .../testing/cassandra/v4_4/AbstractCassandra44Test.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/instrumentation/cassandra/cassandra-4.4/testing/src/main/java/io/opentelemetry/testing/cassandra/v4_4/AbstractCassandra44Test.java b/instrumentation/cassandra/cassandra-4.4/testing/src/main/java/io/opentelemetry/testing/cassandra/v4_4/AbstractCassandra44Test.java index 5ba1224c5cb1..a8c070c01d8a 100644 --- a/instrumentation/cassandra/cassandra-4.4/testing/src/main/java/io/opentelemetry/testing/cassandra/v4_4/AbstractCassandra44Test.java +++ b/instrumentation/cassandra/cassandra-4.4/testing/src/main/java/io/opentelemetry/testing/cassandra/v4_4/AbstractCassandra44Test.java @@ -158,7 +158,7 @@ protected CqlSession getSession(String keyspace) { CqlSession.builder() .addContactEndPoint(new SniEndPoint(address, "dummy")) .withConfigLoader(configLoader) - .withLocalDatacenter("datacenter1") + .withLocalDatacenter("datacenter2") .withKeyspace(keyspace) .build()); } From bcb1cf2523a1854055583c9d03aaf7543cbe1e50 Mon Sep 17 00:00:00 2001 From: heyams Date: Wed, 14 Feb 2024 16:23:49 -0800 Subject: [PATCH 23/28] Revert --- .../testing/cassandra/v4_4/AbstractCassandra44Test.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/instrumentation/cassandra/cassandra-4.4/testing/src/main/java/io/opentelemetry/testing/cassandra/v4_4/AbstractCassandra44Test.java b/instrumentation/cassandra/cassandra-4.4/testing/src/main/java/io/opentelemetry/testing/cassandra/v4_4/AbstractCassandra44Test.java index a8c070c01d8a..5ba1224c5cb1 100644 --- a/instrumentation/cassandra/cassandra-4.4/testing/src/main/java/io/opentelemetry/testing/cassandra/v4_4/AbstractCassandra44Test.java +++ b/instrumentation/cassandra/cassandra-4.4/testing/src/main/java/io/opentelemetry/testing/cassandra/v4_4/AbstractCassandra44Test.java @@ -158,7 +158,7 @@ protected CqlSession getSession(String keyspace) { CqlSession.builder() .addContactEndPoint(new SniEndPoint(address, "dummy")) .withConfigLoader(configLoader) - .withLocalDatacenter("datacenter2") + .withLocalDatacenter("datacenter1") .withKeyspace(keyspace) .build()); } From ccdb8721b565a54c66085fceed72f6ae5e568b97 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Thu, 15 Feb 2024 07:52:58 -0800 Subject: [PATCH 24/28] Use DefaultDriverConfigLoader.builder() --- .../v4/common/AbstractCassandraTest.java | 9 ++++++-- .../v4_4/AbstractCassandra44Test.java | 21 ++++--------------- 2 files changed, 11 insertions(+), 19 deletions(-) diff --git a/instrumentation/cassandra/cassandra-4-common/testing/src/main/java/io/opentelemetry/cassandra/v4/common/AbstractCassandraTest.java b/instrumentation/cassandra/cassandra-4-common/testing/src/main/java/io/opentelemetry/cassandra/v4/common/AbstractCassandraTest.java index 508773a7cc87..e509823582dc 100644 --- a/instrumentation/cassandra/cassandra-4-common/testing/src/main/java/io/opentelemetry/cassandra/v4/common/AbstractCassandraTest.java +++ b/instrumentation/cassandra/cassandra-4-common/testing/src/main/java/io/opentelemetry/cassandra/v4/common/AbstractCassandraTest.java @@ -25,6 +25,7 @@ import static org.junit.jupiter.api.Named.named; import com.datastax.oss.driver.api.core.CqlSession; +import com.datastax.oss.driver.api.core.CqlSessionBuilder; import com.datastax.oss.driver.api.core.config.DefaultDriverOption; import com.datastax.oss.driver.api.core.config.DriverConfigLoader; import com.datastax.oss.driver.internal.core.config.typesafe.DefaultDriverConfigLoader; @@ -329,11 +330,15 @@ protected CqlSession getSession(String keyspace) { .withDuration(DefaultDriverOption.CONNECTION_INIT_QUERY_TIMEOUT, Duration.ofSeconds(10)) .build(); return wrap( - CqlSession.builder() - .addContactPoint(new InetSocketAddress("localhost", cassandraPort)) + addContactPoint(CqlSession.builder()) .withConfigLoader(configLoader) .withLocalDatacenter("datacenter1") .withKeyspace(keyspace) .build()); } + + protected CqlSessionBuilder addContactPoint(CqlSessionBuilder sessionBuilder) { + sessionBuilder.addContactPoint(new InetSocketAddress("localhost", cassandraPort)); + return sessionBuilder; + } } diff --git a/instrumentation/cassandra/cassandra-4.4/testing/src/main/java/io/opentelemetry/testing/cassandra/v4_4/AbstractCassandra44Test.java b/instrumentation/cassandra/cassandra-4.4/testing/src/main/java/io/opentelemetry/testing/cassandra/v4_4/AbstractCassandra44Test.java index 5ba1224c5cb1..b048c6ef2d39 100644 --- a/instrumentation/cassandra/cassandra-4.4/testing/src/main/java/io/opentelemetry/testing/cassandra/v4_4/AbstractCassandra44Test.java +++ b/instrumentation/cassandra/cassandra-4.4/testing/src/main/java/io/opentelemetry/testing/cassandra/v4_4/AbstractCassandra44Test.java @@ -24,14 +24,12 @@ import static org.junit.jupiter.api.Named.named; import com.datastax.oss.driver.api.core.CqlSession; -import com.datastax.oss.driver.api.core.config.DefaultDriverOption; -import com.datastax.oss.driver.api.core.config.DriverConfigLoader; +import com.datastax.oss.driver.api.core.CqlSessionBuilder; import com.datastax.oss.driver.internal.core.metadata.SniEndPoint; import io.opentelemetry.api.trace.SpanKind; import io.opentelemetry.cassandra.v4.common.AbstractCassandraTest; import io.opentelemetry.instrumentation.api.semconv.network.internal.NetworkAttributes; import java.net.InetSocketAddress; -import java.time.Duration; import java.util.stream.Stream; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; @@ -146,20 +144,9 @@ private static Stream provideReactiveParameters() { } @Override - protected CqlSession getSession(String keyspace) { - DriverConfigLoader configLoader = - DriverConfigLoader.programmaticBuilder() - .withDuration(DefaultDriverOption.REQUEST_TIMEOUT, Duration.ofSeconds(0)) - .withDuration(DefaultDriverOption.CONNECTION_INIT_QUERY_TIMEOUT, Duration.ofSeconds(10)) - .build(); - + protected CqlSessionBuilder addContactPoint(CqlSessionBuilder sessionBuilder) { InetSocketAddress address = new InetSocketAddress("localhost", cassandraPort); - return wrap( - CqlSession.builder() - .addContactEndPoint(new SniEndPoint(address, "dummy")) - .withConfigLoader(configLoader) - .withLocalDatacenter("datacenter1") - .withKeyspace(keyspace) - .build()); + sessionBuilder.addContactEndPoint(new SniEndPoint(address, "dummy")); + return sessionBuilder; } } From bc6ab22edf897a3fd98efa1ce53aa6f04bb0bf8c Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Thu, 15 Feb 2024 08:59:46 -0800 Subject: [PATCH 25/28] Remove SniEndpoint testing --- .../cassandra/v4_4/AbstractCassandra44Test.java | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/instrumentation/cassandra/cassandra-4.4/testing/src/main/java/io/opentelemetry/testing/cassandra/v4_4/AbstractCassandra44Test.java b/instrumentation/cassandra/cassandra-4.4/testing/src/main/java/io/opentelemetry/testing/cassandra/v4_4/AbstractCassandra44Test.java index b048c6ef2d39..df114dd00ae9 100644 --- a/instrumentation/cassandra/cassandra-4.4/testing/src/main/java/io/opentelemetry/testing/cassandra/v4_4/AbstractCassandra44Test.java +++ b/instrumentation/cassandra/cassandra-4.4/testing/src/main/java/io/opentelemetry/testing/cassandra/v4_4/AbstractCassandra44Test.java @@ -24,12 +24,9 @@ import static org.junit.jupiter.api.Named.named; import com.datastax.oss.driver.api.core.CqlSession; -import com.datastax.oss.driver.api.core.CqlSessionBuilder; -import com.datastax.oss.driver.internal.core.metadata.SniEndPoint; import io.opentelemetry.api.trace.SpanKind; import io.opentelemetry.cassandra.v4.common.AbstractCassandraTest; import io.opentelemetry.instrumentation.api.semconv.network.internal.NetworkAttributes; -import java.net.InetSocketAddress; import java.util.stream.Stream; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; @@ -142,11 +139,4 @@ private static Stream provideReactiveParameters() { "SELECT", "users")))); } - - @Override - protected CqlSessionBuilder addContactPoint(CqlSessionBuilder sessionBuilder) { - InetSocketAddress address = new InetSocketAddress("localhost", cassandraPort); - sessionBuilder.addContactEndPoint(new SniEndPoint(address, "dummy")); - return sessionBuilder; - } } From 814290e13039f476c617cb79e8ae0569723b37ee Mon Sep 17 00:00:00 2001 From: heyams Date: Thu, 15 Feb 2024 10:08:45 -0800 Subject: [PATCH 26/28] Fix test --- .../cassandra/v4_4/AbstractCassandra44Test.java | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/instrumentation/cassandra/cassandra-4.4/testing/src/main/java/io/opentelemetry/testing/cassandra/v4_4/AbstractCassandra44Test.java b/instrumentation/cassandra/cassandra-4.4/testing/src/main/java/io/opentelemetry/testing/cassandra/v4_4/AbstractCassandra44Test.java index df114dd00ae9..c4a62a43c793 100644 --- a/instrumentation/cassandra/cassandra-4.4/testing/src/main/java/io/opentelemetry/testing/cassandra/v4_4/AbstractCassandra44Test.java +++ b/instrumentation/cassandra/cassandra-4.4/testing/src/main/java/io/opentelemetry/testing/cassandra/v4_4/AbstractCassandra44Test.java @@ -21,6 +21,7 @@ import static io.opentelemetry.semconv.SemanticAttributes.NETWORK_TYPE; import static io.opentelemetry.semconv.SemanticAttributes.SERVER_ADDRESS; import static io.opentelemetry.semconv.SemanticAttributes.SERVER_PORT; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Named.named; import com.datastax.oss.driver.api.core.CqlSession; @@ -58,10 +59,20 @@ void reactiveTest(Parameter parameter) { .hasKind(SpanKind.CLIENT) .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( - equalTo(NETWORK_TYPE, "ipv4"), + satisfies( + NETWORK_TYPE, + val -> + val.satisfiesAnyOf( + v -> assertThat(v).isEqualTo("ipv4"), + v -> assertThat(v).isEqualTo("ipv6"))), equalTo(SERVER_ADDRESS, "localhost"), equalTo(SERVER_PORT, cassandraPort), - equalTo(NetworkAttributes.NETWORK_PEER_ADDRESS, "0:0:0:0:0:0:0:1"), + satisfies( + NetworkAttributes.NETWORK_PEER_ADDRESS, + val -> + val.satisfiesAnyOf( + v -> assertThat(v).isEqualTo("127.0.0.1"), + v -> assertThat(v).isEqualTo("0:0:0:0:0:0:0:1"))), equalTo(NetworkAttributes.NETWORK_PEER_PORT, cassandraPort), equalTo(DB_SYSTEM, "cassandra"), equalTo(DB_NAME, parameter.keyspace), From bce1ca467cae6f62406298da904359aca4ab8354 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Thu, 15 Feb 2024 10:53:09 -0800 Subject: [PATCH 27/28] Revert "Remove SniEndpoint testing" This reverts commit bc6ab22edf897a3fd98efa1ce53aa6f04bb0bf8c. --- .../cassandra/v4_4/AbstractCassandra44Test.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/instrumentation/cassandra/cassandra-4.4/testing/src/main/java/io/opentelemetry/testing/cassandra/v4_4/AbstractCassandra44Test.java b/instrumentation/cassandra/cassandra-4.4/testing/src/main/java/io/opentelemetry/testing/cassandra/v4_4/AbstractCassandra44Test.java index c4a62a43c793..32da79f80b91 100644 --- a/instrumentation/cassandra/cassandra-4.4/testing/src/main/java/io/opentelemetry/testing/cassandra/v4_4/AbstractCassandra44Test.java +++ b/instrumentation/cassandra/cassandra-4.4/testing/src/main/java/io/opentelemetry/testing/cassandra/v4_4/AbstractCassandra44Test.java @@ -25,9 +25,12 @@ import static org.junit.jupiter.api.Named.named; import com.datastax.oss.driver.api.core.CqlSession; +import com.datastax.oss.driver.api.core.CqlSessionBuilder; +import com.datastax.oss.driver.internal.core.metadata.SniEndPoint; import io.opentelemetry.api.trace.SpanKind; import io.opentelemetry.cassandra.v4.common.AbstractCassandraTest; import io.opentelemetry.instrumentation.api.semconv.network.internal.NetworkAttributes; +import java.net.InetSocketAddress; import java.util.stream.Stream; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; @@ -150,4 +153,11 @@ private static Stream provideReactiveParameters() { "SELECT", "users")))); } + + @Override + protected CqlSessionBuilder addContactPoint(CqlSessionBuilder sessionBuilder) { + InetSocketAddress address = new InetSocketAddress("localhost", cassandraPort); + sessionBuilder.addContactEndPoint(new SniEndPoint(address, "dummy")); + return sessionBuilder; + } } From a3694b3a15b179864b14b6e258597e60346fdba0 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Thu, 15 Feb 2024 12:28:46 -0800 Subject: [PATCH 28/28] One more try --- .../testing/cassandra/v4_4/AbstractCassandra44Test.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/instrumentation/cassandra/cassandra-4.4/testing/src/main/java/io/opentelemetry/testing/cassandra/v4_4/AbstractCassandra44Test.java b/instrumentation/cassandra/cassandra-4.4/testing/src/main/java/io/opentelemetry/testing/cassandra/v4_4/AbstractCassandra44Test.java index 32da79f80b91..e737dbddf064 100644 --- a/instrumentation/cassandra/cassandra-4.4/testing/src/main/java/io/opentelemetry/testing/cassandra/v4_4/AbstractCassandra44Test.java +++ b/instrumentation/cassandra/cassandra-4.4/testing/src/main/java/io/opentelemetry/testing/cassandra/v4_4/AbstractCassandra44Test.java @@ -157,7 +157,7 @@ private static Stream provideReactiveParameters() { @Override protected CqlSessionBuilder addContactPoint(CqlSessionBuilder sessionBuilder) { InetSocketAddress address = new InetSocketAddress("localhost", cassandraPort); - sessionBuilder.addContactEndPoint(new SniEndPoint(address, "dummy")); + sessionBuilder.addContactEndPoint(new SniEndPoint(address, "localhost")); return sessionBuilder; } }