Fix instrumentation for reactor kafka 1.3.21 (#9445)
This commit is contained in:
parent
7e16e40ca2
commit
f0533aed1c
|
@ -22,6 +22,8 @@ dependencies {
|
||||||
|
|
||||||
testImplementation("com.fasterxml.jackson.core:jackson-databind:2.14.2")
|
testImplementation("com.fasterxml.jackson.core:jackson-databind:2.14.2")
|
||||||
testImplementation("org.testcontainers:elasticsearch")
|
testImplementation("org.testcontainers:elasticsearch")
|
||||||
|
|
||||||
|
latestDepTestLibrary("co.elastic.clients:elasticsearch-java:8.0.+")
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks {
|
tasks {
|
||||||
|
|
|
@ -22,9 +22,9 @@ dependencies {
|
||||||
implementation(project(":instrumentation:kafka:kafka-clients:kafka-clients-common:library"))
|
implementation(project(":instrumentation:kafka:kafka-clients:kafka-clients-common:library"))
|
||||||
implementation(project(":instrumentation:reactor:reactor-3.1:library"))
|
implementation(project(":instrumentation:reactor:reactor-3.1:library"))
|
||||||
|
|
||||||
// using 1.3.0 to be able to implement several new KafkaReceiver methods added in 1.3.3
|
// using 1.3 to be able to implement several new KafkaReceiver methods added in 1.3.3 and 1.3.21
|
||||||
// @NoMuzzle is used to ensure that this does not break muzzle checks
|
// @NoMuzzle is used to ensure that this does not break muzzle checks
|
||||||
compileOnly("io.projectreactor.kafka:reactor-kafka:1.3.3")
|
compileOnly("io.projectreactor.kafka:reactor-kafka:1.3.21")
|
||||||
|
|
||||||
testInstrumentation(project(":instrumentation:kafka:kafka-clients:kafka-clients-0.11:javaagent"))
|
testInstrumentation(project(":instrumentation:kafka:kafka-clients:kafka-clients-0.11:javaagent"))
|
||||||
testInstrumentation(project(":instrumentation:reactor:reactor-3.1:javaagent"))
|
testInstrumentation(project(":instrumentation:reactor:reactor-3.1:javaagent"))
|
||||||
|
@ -60,6 +60,27 @@ testing {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val testV1_3_21 by registering(JvmTestSuite::class) {
|
||||||
|
dependencies {
|
||||||
|
implementation(project(":instrumentation:reactor:reactor-kafka-1.0:testing"))
|
||||||
|
|
||||||
|
if (testLatestDeps) {
|
||||||
|
implementation("io.projectreactor.kafka:reactor-kafka:+")
|
||||||
|
implementation("io.projectreactor:reactor-core:3.4.+")
|
||||||
|
} else {
|
||||||
|
implementation("io.projectreactor.kafka:reactor-kafka:1.3.21")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
targets {
|
||||||
|
all {
|
||||||
|
testTask.configure {
|
||||||
|
systemProperty("hasConsumerGroupAndId", true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -25,7 +25,7 @@ public final class InstrumentedKafkaReceiver<K, V> implements KafkaReceiver<K, V
|
||||||
// added in 1.3.3
|
// added in 1.3.3
|
||||||
@Override
|
@Override
|
||||||
public Flux<ReceiverRecord<K, V>> receive(Integer prefetch) {
|
public Flux<ReceiverRecord<K, V>> receive(Integer prefetch) {
|
||||||
return wrap(KafkaReceiver133Access.receive(actual, prefetch));
|
return wrap(KafkaReceiver13Access.receive(actual, prefetch));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -36,7 +36,7 @@ public final class InstrumentedKafkaReceiver<K, V> implements KafkaReceiver<K, V
|
||||||
// added in 1.3.3
|
// added in 1.3.3
|
||||||
@Override
|
@Override
|
||||||
public Flux<Flux<ConsumerRecord<K, V>>> receiveAutoAck(Integer prefetch) {
|
public Flux<Flux<ConsumerRecord<K, V>>> receiveAutoAck(Integer prefetch) {
|
||||||
return KafkaReceiver133Access.receiveAutoAck(actual, prefetch)
|
return KafkaReceiver13Access.receiveAutoAck(actual, prefetch)
|
||||||
.map(InstrumentedKafkaReceiver::wrap);
|
.map(InstrumentedKafkaReceiver::wrap);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -48,7 +48,7 @@ public final class InstrumentedKafkaReceiver<K, V> implements KafkaReceiver<K, V
|
||||||
// added in 1.3.3
|
// added in 1.3.3
|
||||||
@Override
|
@Override
|
||||||
public Flux<ConsumerRecord<K, V>> receiveAtmostOnce(Integer prefetch) {
|
public Flux<ConsumerRecord<K, V>> receiveAtmostOnce(Integer prefetch) {
|
||||||
return wrap(KafkaReceiver133Access.receiveAtmostOnce(actual, prefetch));
|
return wrap(KafkaReceiver13Access.receiveAtmostOnce(actual, prefetch));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -66,7 +66,7 @@ public final class InstrumentedKafkaReceiver<K, V> implements KafkaReceiver<K, V
|
||||||
@Override
|
@Override
|
||||||
public Flux<Flux<ConsumerRecord<K, V>>> receiveExactlyOnce(
|
public Flux<Flux<ConsumerRecord<K, V>>> receiveExactlyOnce(
|
||||||
TransactionManager transactionManager, Integer prefetch) {
|
TransactionManager transactionManager, Integer prefetch) {
|
||||||
return KafkaReceiver133Access.receiveExactlyOnce(actual, transactionManager, prefetch)
|
return KafkaReceiver13Access.receiveExactlyOnce(actual, transactionManager, prefetch)
|
||||||
.map(InstrumentedKafkaReceiver::wrap);
|
.map(InstrumentedKafkaReceiver::wrap);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -75,6 +75,19 @@ public final class InstrumentedKafkaReceiver<K, V> implements KafkaReceiver<K, V
|
||||||
return actual.doOnConsumer(function);
|
return actual.doOnConsumer(function);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// added in 1.3.21
|
||||||
|
@Override
|
||||||
|
public Flux<Flux<ReceiverRecord<K, V>>> receiveBatch(Integer prefetch) {
|
||||||
|
return KafkaReceiver13Access.receiveBatch(actual, prefetch)
|
||||||
|
.map(InstrumentedKafkaReceiver::wrap);
|
||||||
|
}
|
||||||
|
|
||||||
|
// added in 1.3.21
|
||||||
|
@Override
|
||||||
|
public Flux<Flux<ReceiverRecord<K, V>>> receiveBatch() {
|
||||||
|
return KafkaReceiver13Access.receiveBatch(actual).map(InstrumentedKafkaReceiver::wrap);
|
||||||
|
}
|
||||||
|
|
||||||
private static <K, V, R extends ConsumerRecord<K, V>> Flux<R> wrap(Flux<R> flux) {
|
private static <K, V, R extends ConsumerRecord<K, V>> Flux<R> wrap(Flux<R> flux) {
|
||||||
return flux instanceof InstrumentedKafkaFlux ? flux : new InstrumentedKafkaFlux<>(flux);
|
return flux instanceof InstrumentedKafkaFlux ? flux : new InstrumentedKafkaFlux<>(flux);
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,7 +12,7 @@ import reactor.kafka.receiver.KafkaReceiver;
|
||||||
import reactor.kafka.receiver.ReceiverRecord;
|
import reactor.kafka.receiver.ReceiverRecord;
|
||||||
import reactor.kafka.sender.TransactionManager;
|
import reactor.kafka.sender.TransactionManager;
|
||||||
|
|
||||||
final class KafkaReceiver133Access {
|
final class KafkaReceiver13Access {
|
||||||
|
|
||||||
@NoMuzzle
|
@NoMuzzle
|
||||||
static <K, V> Flux<ReceiverRecord<K, V>> receive(KafkaReceiver<K, V> receiver, Integer prefetch) {
|
static <K, V> Flux<ReceiverRecord<K, V>> receive(KafkaReceiver<K, V> receiver, Integer prefetch) {
|
||||||
|
@ -37,5 +37,16 @@ final class KafkaReceiver133Access {
|
||||||
return receiver.receiveExactlyOnce(transactionManager, prefetch);
|
return receiver.receiveExactlyOnce(transactionManager, prefetch);
|
||||||
}
|
}
|
||||||
|
|
||||||
private KafkaReceiver133Access() {}
|
@NoMuzzle
|
||||||
|
static <K, V> Flux<Flux<ReceiverRecord<K, V>>> receiveBatch(
|
||||||
|
KafkaReceiver<K, V> receiver, Integer prefetch) {
|
||||||
|
return receiver.receiveBatch(prefetch);
|
||||||
|
}
|
||||||
|
|
||||||
|
@NoMuzzle
|
||||||
|
static <K, V> Flux<Flux<ReceiverRecord<K, V>>> receiveBatch(KafkaReceiver<K, V> receiver) {
|
||||||
|
return receiver.receiveBatch();
|
||||||
|
}
|
||||||
|
|
||||||
|
private KafkaReceiver13Access() {}
|
||||||
}
|
}
|
|
@ -0,0 +1,33 @@
|
||||||
|
/*
|
||||||
|
* Copyright The OpenTelemetry Authors
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
package io.opentelemetry.javaagent.instrumentation.reactor.kafka.v1_0;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
class ReactorKafka1321InstrumentationTest extends AbstractReactorKafkaTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void receiveBatch() {
|
||||||
|
testSingleRecordProcess(
|
||||||
|
recordConsumer ->
|
||||||
|
receiver
|
||||||
|
.receiveBatch()
|
||||||
|
.concatMap(r -> r)
|
||||||
|
.doOnNext(r -> r.receiverOffset().acknowledge())
|
||||||
|
.subscribe(recordConsumer));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void receiveBatchWithSize() {
|
||||||
|
testSingleRecordProcess(
|
||||||
|
recordConsumer ->
|
||||||
|
receiver
|
||||||
|
.receiveBatch(1)
|
||||||
|
.concatMap(r -> r)
|
||||||
|
.doOnNext(r -> r.receiverOffset().acknowledge())
|
||||||
|
.subscribe(recordConsumer));
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue