Skip to content

Commit 7614fc6

Browse files
committed
Switch to Micrometer 1.10's tracing APIs.
Micrometer Tracing 1.10 has some breaking APIs. See #1254.
1 parent 11788b5 commit 7614fc6

File tree

10 files changed

+83
-72
lines changed

10 files changed

+83
-72
lines changed

spring-data-cassandra/src/main/java/org/springframework/data/cassandra/observability/CassandraObservation.java

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
*/
1616
package org.springframework.data.cassandra.observability;
1717

18-
import io.micrometer.common.docs.TagKey;
18+
import io.micrometer.common.docs.KeyName;
1919
import io.micrometer.observation.docs.DocumentedObservation;
2020

2121
/**
@@ -44,13 +44,13 @@ public String getContextualName() {
4444
}
4545

4646
@Override
47-
public TagKey[] getLowCardinalityTagKeys() {
48-
return LowCardinalityTags.values();
47+
public KeyName[] getLowCardinalityKeyNames() {
48+
return LowCardinalityKeyNames.values();
4949
}
5050

5151
@Override
52-
public TagKey[] getHighCardinalityTagKeys() {
53-
return HighCardinalityTags.values();
52+
public KeyName[] getHighCardinalityKeyNames() {
53+
return HighCardinalityKeyNames.values();
5454
}
5555

5656
@Override
@@ -59,14 +59,14 @@ public String getPrefix() {
5959
}
6060
};
6161

62-
enum LowCardinalityTags implements TagKey {
62+
enum LowCardinalityKeyNames implements KeyName {
6363

6464
/**
6565
* Name of the Cassandra keyspace.
6666
*/
6767
KEYSPACE_NAME {
6868
@Override
69-
public String getKey() {
69+
public String getKeyName() {
7070
return "spring.data.cassandra.keyspace";
7171
}
7272
},
@@ -76,7 +76,7 @@ public String getKey() {
7676
*/
7777
SESSION_NAME {
7878
@Override
79-
public String getKey() {
79+
public String getKeyName() {
8080
return "spring.data.cassandra.sessionName";
8181
}
8282
},
@@ -86,7 +86,7 @@ public String getKey() {
8686
*/
8787
METHOD_NAME {
8888
@Override
89-
public String getKey() {
89+
public String getKeyName() {
9090
return "spring.data.cassandra.methodName";
9191
}
9292
},
@@ -96,7 +96,7 @@ public String getKey() {
9696
*/
9797
URL {
9898
@Override
99-
public String getKey() {
99+
public String getKeyName() {
100100
return "spring.data.cassandra.url";
101101
}
102102
},
@@ -106,20 +106,20 @@ public String getKey() {
106106
*/
107107
NODE_ERROR_TAG {
108108
@Override
109-
public String getKey() {
109+
public String getKeyName() {
110110
return "spring.data.cassandra.node[%s].error";
111111
}
112112
}
113113
}
114114

115-
enum HighCardinalityTags implements TagKey {
115+
enum HighCardinalityKeyNames implements KeyName {
116116

117117
/**
118-
* A tag containing Cassandra CQL.
118+
* A key-value containing Cassandra CQL.
119119
*/
120120
CQL_TAG {
121121
@Override
122-
public String getKey() {
122+
public String getKeyName() {
123123
return "spring.data.cassandra.cql";
124124
}
125125
}
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,12 @@
1818
import io.micrometer.observation.Observation;
1919

2020
/**
21-
* {@link Observation.TagsProvider} for Cassandra.
21+
* {@link Observation.KeyValuesProvider} for Cassandra.
2222
*
2323
* @author Greg Turnquist
2424
* @since 4.0.0
2525
*/
26-
public interface CqlSessionTagsProvider extends Observation.TagsProvider<CqlSessionContext> {
26+
public interface CqlSessionKeyValuesProvider extends Observation.KeyValuesProvider<CqlSessionContext> {
2727

2828
@Override
2929
default boolean supportsContext(Observation.Context context) {

spring-data-cassandra/src/main/java/org/springframework/data/cassandra/observability/CqlSessionTracingBeanPostProcessor.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,20 +34,20 @@ public class CqlSessionTracingBeanPostProcessor implements BeanPostProcessor {
3434

3535
private final ObservationRegistry observationRegistry;
3636

37-
private final CqlSessionTagsProvider tagsProvider;
37+
private final CqlSessionKeyValuesProvider keyValuesProvider;
3838

3939
public CqlSessionTracingBeanPostProcessor(ObservationRegistry observationRegistry,
40-
CqlSessionTagsProvider tagsProvider) {
40+
CqlSessionKeyValuesProvider keyValuesProvider) {
4141

4242
this.observationRegistry = observationRegistry;
43-
this.tagsProvider = tagsProvider;
43+
this.keyValuesProvider = keyValuesProvider;
4444
}
4545

4646
@Override
4747
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
4848

4949
if (bean instanceof CqlSession) {
50-
return CqlSessionTracingFactory.wrap((CqlSession) bean, this.observationRegistry, this.tagsProvider);
50+
return CqlSessionTracingFactory.wrap((CqlSession) bean, this.observationRegistry, this.keyValuesProvider);
5151
}
5252

5353
return bean;

spring-data-cassandra/src/main/java/org/springframework/data/cassandra/observability/CqlSessionTracingFactory.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,16 +39,16 @@ private CqlSessionTracingFactory() {
3939
*
4040
* @param session
4141
* @param observationRegistry
42-
* @param tagsProvider
42+
* @param keyValuesProvider
4343
* @return
4444
*/
4545
public static CqlSession wrap(CqlSession session, ObservationRegistry observationRegistry,
46-
CqlSessionTagsProvider tagsProvider) {
46+
CqlSessionKeyValuesProvider keyValuesProvider) {
4747

4848
ProxyFactory proxyFactory = new ProxyFactory();
4949

5050
proxyFactory.setTarget(session);
51-
proxyFactory.addAdvice(new CqlSessionTracingInterceptor(session, observationRegistry, tagsProvider));
51+
proxyFactory.addAdvice(new CqlSessionTracingInterceptor(session, observationRegistry, keyValuesProvider));
5252
proxyFactory.addInterface(CqlSession.class);
5353

5454
return (CqlSession) proxyFactory.getProxy();

spring-data-cassandra/src/main/java/org/springframework/data/cassandra/observability/CqlSessionTracingInterceptor.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -46,22 +46,22 @@
4646
* @since 4.0.0
4747
*/
4848
final class CqlSessionTracingInterceptor
49-
implements MethodInterceptor, Observation.TagsProviderAware<CqlSessionTagsProvider> {
49+
implements MethodInterceptor, Observation.KeyValuesProviderAware<CqlSessionKeyValuesProvider> {
5050

5151
private static final Log log = LogFactory.getLog(CqlSessionTracingInterceptor.class);
5252

5353
private final CqlSession delegateSession;
5454

5555
private final ObservationRegistry observationRegistry;
5656

57-
private CqlSessionTagsProvider tagsProvider;
57+
private CqlSessionKeyValuesProvider keyValuesProvider;
5858

5959
CqlSessionTracingInterceptor(CqlSession delegateSession, ObservationRegistry observationRegistry,
60-
CqlSessionTagsProvider tagsProvider) {
60+
CqlSessionKeyValuesProvider keyValuesProvider) {
6161

6262
this.delegateSession = delegateSession;
6363
this.observationRegistry = observationRegistry;
64-
this.tagsProvider = tagsProvider;
64+
this.keyValuesProvider = keyValuesProvider;
6565
}
6666

6767
@Nullable
@@ -154,12 +154,12 @@ private Observation childObservation(Statement<?> statement, String methodName,
154154
return CassandraObservation.CASSANDRA_QUERY_OBSERVATION //
155155
.observation(this.observationRegistry, observationContext) //
156156
.contextualName(CassandraObservation.CASSANDRA_QUERY_OBSERVATION.getContextualName()) //
157-
.tagsProvider(this.tagsProvider) //
157+
.keyValuesProvider(this.keyValuesProvider) //
158158
.start();
159159
}
160160

161161
@Override
162-
public void setTagsProvider(CqlSessionTagsProvider tagsProvider) {
163-
this.tagsProvider = tagsProvider;
162+
public void setKeyValuesProvider(CqlSessionKeyValuesProvider keyValuesProvider) {
163+
this.keyValuesProvider = keyValuesProvider;
164164
}
165165
}

spring-data-cassandra/src/main/java/org/springframework/data/cassandra/observability/CqlSessionTracingObservationHandler.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
*/
1616
package org.springframework.data.cassandra.observability;
1717

18-
import io.micrometer.common.Tag;
18+
import io.micrometer.common.KeyValue;
1919
import io.micrometer.observation.Observation;
2020
import io.micrometer.tracing.Span;
2121
import io.micrometer.tracing.Tracer;
@@ -61,14 +61,14 @@ public void onStop(CqlSessionContext context) {
6161
String sessionName = null;
6262
String url = null;
6363

64-
for (Tag tag : context.getLowCardinalityTags()) {
64+
for (KeyValue keyValue : context.getLowCardinalityKeyValues()) {
6565

66-
if (tag.getKey().equals(CassandraObservation.LowCardinalityTags.SESSION_NAME.getKey())) {
67-
sessionName = tag.getValue();
66+
if (keyValue.getKey().equals(CassandraObservation.LowCardinalityKeyNames.SESSION_NAME.getKeyName())) {
67+
sessionName = keyValue.getValue();
6868
}
6969

70-
if (tag.getKey().equals(CassandraObservation.LowCardinalityTags.URL.getKey())) {
71-
url = tag.getValue();
70+
if (keyValue.getKey().equals(CassandraObservation.LowCardinalityKeyNames.URL.getKeyName())) {
71+
url = keyValue.getValue();
7272
}
7373
}
7474

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,15 @@
1515
*/
1616
package org.springframework.data.cassandra.observability;
1717

18-
import io.micrometer.common.Tags;
18+
import io.micrometer.common.KeyValue;
19+
import io.micrometer.common.KeyValues;
1920

2021
import java.util.Optional;
2122
import java.util.StringJoiner;
2223

24+
import org.springframework.data.cassandra.observability.CassandraObservation.HighCardinalityKeyNames;
25+
import org.springframework.data.cassandra.observability.CassandraObservation.LowCardinalityKeyNames;
26+
2327
import com.datastax.oss.driver.api.core.CqlIdentifier;
2428
import com.datastax.oss.driver.api.core.cql.BatchStatement;
2529
import com.datastax.oss.driver.api.core.cql.BatchableStatement;
@@ -28,34 +32,39 @@
2832
import com.datastax.oss.driver.api.core.cql.Statement;
2933

3034
/**
31-
* Default {@link CqlSessionTagsProvider} implementation.
35+
* Default {@link CqlSessionKeyValuesProvider} implementation.
3236
*
3337
* @author Greg Turnquist
3438
* @since 4.0.0
3539
*/
36-
public class DefaultCassandraTagsProvider implements CqlSessionTagsProvider {
40+
public class DefaultCassandraKeyValuesProvider implements CqlSessionKeyValuesProvider {
3741

3842
@Override
39-
public Tags getLowCardinalityTags(CqlSessionContext context) {
40-
41-
Tags tags = Tags.of( //
42-
CassandraObservation.LowCardinalityTags.SESSION_NAME
43-
.of(Optional.ofNullable(context.getDelegateSession().getName()).orElse("unknown")),
44-
CassandraObservation.LowCardinalityTags.KEYSPACE_NAME.of(
43+
public KeyValues getLowCardinalityKeyValues(CqlSessionContext context) {
44+
45+
KeyValues keyValues = KeyValues.of( //
46+
KeyValue.of( //
47+
LowCardinalityKeyNames.SESSION_NAME.getKeyName(),
48+
Optional.ofNullable(context.getDelegateSession().getName()).orElse("unknown")),
49+
KeyValue.of( //
50+
LowCardinalityKeyNames.KEYSPACE_NAME.getKeyName(),
4551
Optional.ofNullable(context.getStatement().getKeyspace()).map(CqlIdentifier::asInternal).orElse("unknown")),
46-
CassandraObservation.LowCardinalityTags.METHOD_NAME.of(context.getMethodName()));
52+
KeyValue.of( //
53+
LowCardinalityKeyNames.METHOD_NAME.getKeyName(), //
54+
context.getMethodName()));
4755

4856
if (context.getStatement().getNode() != null) {
49-
tags = tags.and(CassandraObservation.LowCardinalityTags.URL
50-
.of(context.getStatement().getNode().getEndPoint().resolve().toString()));
57+
keyValues = keyValues.and(KeyValue.of( //
58+
LowCardinalityKeyNames.URL.getKeyName(),
59+
context.getStatement().getNode().getEndPoint().resolve().toString()));
5160
}
5261

53-
return tags;
62+
return keyValues;
5463
}
5564

5665
@Override
57-
public Tags getHighCardinalityTags(CqlSessionContext context) {
58-
return Tags.of(CassandraObservation.HighCardinalityTags.CQL_TAG.of(getCql(context.getStatement())));
66+
public KeyValues getHighCardinalityKeyValues(CqlSessionContext context) {
67+
return KeyValues.of(KeyValue.of(HighCardinalityKeyNames.CQL_TAG.getKeyName(), getCql(context.getStatement())));
5968
}
6069

6170
/**

spring-data-cassandra/src/test/java/org/springframework/data/cassandra/observability/CqlSessionTracingBeanPostProcessorTests.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,13 +74,13 @@ ObservationRegistry meterRegistry() {
7474
}
7575

7676
@Bean
77-
CqlSessionTagsProvider tagsProvider() {
78-
return new DefaultCassandraTagsProvider();
77+
CqlSessionKeyValuesProvider keyValuesProvider() {
78+
return new DefaultCassandraKeyValuesProvider();
7979
}
8080

8181
@Bean
8282
CqlSessionTracingBeanPostProcessor traceCqlSessionBeanPostProcessor(ObservationRegistry observationRegistry,
83-
CqlSessionTagsProvider tagsProvider) {
83+
CqlSessionKeyValuesProvider tagsProvider) {
8484
return new CqlSessionTracingBeanPostProcessor(observationRegistry, tagsProvider);
8585
}
8686
}

spring-data-cassandra/src/test/java/org/springframework/data/cassandra/observability/CqlSessionTracingTests.java

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@
1818
import static org.assertj.core.api.Assertions.*;
1919
import static org.springframework.data.cassandra.observability.CassandraObservation.*;
2020

21-
import io.micrometer.common.Tag;
22-
import io.micrometer.common.Tags;
21+
import io.micrometer.common.KeyValue;
22+
import io.micrometer.common.KeyValues;
2323
import io.micrometer.core.instrument.MeterRegistry;
2424
import io.micrometer.core.instrument.observation.TimerObservationHandler;
2525
import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
@@ -91,7 +91,7 @@ void tracingNoStatementsShouldProduceNoMetrics() {
9191
ObservationRegistry observationRegistry = ObservationRegistry.create();
9292
observationRegistry.observationConfig().observationHandler(new TimerObservationHandler(meterRegistry));
9393

94-
CqlSessionTagsProvider tagsProvider = new DefaultCassandraTagsProvider();
94+
CqlSessionKeyValuesProvider tagsProvider = new DefaultCassandraKeyValuesProvider();
9595

9696
SimpleTracer tracer = new SimpleTracer();
9797
observationRegistry.observationConfig().observationHandler(new CqlSessionTracingObservationHandler(tracer));
@@ -108,7 +108,7 @@ void shouldCreateObservationForCqlSessionOperations() {
108108
ObservationRegistry observationRegistry = ObservationRegistry.create();
109109
observationRegistry.observationConfig().observationHandler(new TimerObservationHandler(meterRegistry));
110110

111-
CqlSessionTagsProvider tagsProvider = new DefaultCassandraTagsProvider();
111+
CqlSessionKeyValuesProvider tagsProvider = new DefaultCassandraKeyValuesProvider();
112112
SimpleTracer tracer = new SimpleTracer();
113113
observationRegistry.observationConfig().observationHandler(new CqlSessionTracingObservationHandler(tracer));
114114

@@ -122,25 +122,27 @@ void shouldCreateObservationForCqlSessionOperations() {
122122
traceSession.prepareAsync(CREATE_KEYSPACE);
123123
});
124124

125-
MeterRegistryAssert.then(meterRegistry).hasTimerWithNameAndTags(CASSANDRA_QUERY_OBSERVATION.getName(), Tags.of( //
126-
LowCardinalityTags.SESSION_NAME.of("s5"), //
127-
LowCardinalityTags.KEYSPACE_NAME.of("unknown"), //
128-
Tag.of("error", "none") //
125+
MeterRegistryAssert.then(meterRegistry).hasTimerWithNameAndTags(CASSANDRA_QUERY_OBSERVATION.getName(), KeyValues.of( //
126+
KeyValue.of(LowCardinalityKeyNames.SESSION_NAME.getKeyName(), "s5"), //
127+
KeyValue.of(LowCardinalityKeyNames.KEYSPACE_NAME.getKeyName(), "unknown"), //
128+
KeyValue.of("error", "none") //
129129
));
130130

131131
assertThat(tracer.getSpans()).hasSize(4);
132132

133-
assertThat(findSpan(tracer.getSpans(), LowCardinalityTags.METHOD_NAME.getKey(), "execute")).isNotNull();
134-
assertThat(findSpan(tracer.getSpans(), LowCardinalityTags.METHOD_NAME.getKey(), "executeAsync")).isNotNull();
135-
assertThat(findSpan(tracer.getSpans(), LowCardinalityTags.METHOD_NAME.getKey(), "prepare")).isNotNull();
136-
assertThat(findSpan(tracer.getSpans(), LowCardinalityTags.METHOD_NAME.getKey(), "prepareAsync")).isNotNull();
133+
assertThat(findSpan(tracer.getSpans(), LowCardinalityKeyNames.METHOD_NAME.getKeyName(), "execute")).isNotNull();
134+
assertThat(findSpan(tracer.getSpans(), LowCardinalityKeyNames.METHOD_NAME.getKeyName(), "executeAsync"))
135+
.isNotNull();
136+
assertThat(findSpan(tracer.getSpans(), LowCardinalityKeyNames.METHOD_NAME.getKeyName(), "prepare")).isNotNull();
137+
assertThat(findSpan(tracer.getSpans(), LowCardinalityKeyNames.METHOD_NAME.getKeyName(), "prepareAsync"))
138+
.isNotNull();
137139

138140
tracer.getSpans().forEach(simpleSpan -> SpanAssert.then(simpleSpan) //
139141
.hasRemoteServiceNameEqualTo("cassandra-s5") //
140142
.hasNameEqualTo(CASSANDRA_QUERY_OBSERVATION.getContextualName()) //
141-
.hasTag(LowCardinalityTags.SESSION_NAME.getKey(), "s5") //
142-
.hasTag(LowCardinalityTags.KEYSPACE_NAME.getKey(), "unknown") //
143-
.hasTag(HighCardinalityTags.CQL_TAG.getKey(), CREATE_KEYSPACE) //
143+
.hasTag(LowCardinalityKeyNames.SESSION_NAME.getKeyName(), "s5") //
144+
.hasTag(LowCardinalityKeyNames.KEYSPACE_NAME.getKeyName(), "unknown") //
145+
.hasTag(HighCardinalityKeyNames.CQL_TAG.getKeyName(), CREATE_KEYSPACE) //
144146
.hasIpThatIsBlank() //
145147
.hasPortEqualTo(0) //
146148
.hasKindEqualTo(Span.Kind.CLIENT));

0 commit comments

Comments
 (0)