Propagate Reactor Context when using FluxSink

This commit makes sure that the Reactor context from a given mono or
flux is propagated to the Flux returned by a FluxSink. This change
affects both DataBufferUtils::write and internal classes used by the
DefaultPartHttpMessageReader.

Closes gh-27517
This commit is contained in:
Arjen Poutsma
2021-10-05 16:20:30 +02:00
parent 7b9848a352
commit c99210c01f
4 changed files with 74 additions and 0 deletions

View File

@@ -29,6 +29,7 @@ import org.reactivestreams.Subscription;
import reactor.core.publisher.BaseSubscriber;
import reactor.core.publisher.Flux;
import reactor.core.publisher.FluxSink;
import reactor.util.context.Context;
import org.springframework.core.codec.DecodingException;
import org.springframework.core.io.buffer.DataBuffer;
@@ -98,6 +99,11 @@ final class MultipartParser extends BaseSubscriber<DataBuffer> {
});
}
@Override
public Context currentContext() {
return this.sink.currentContext();
}
@Override
protected void hookOnSubscribe(Subscription subscription) {
requestBuffer();

View File

@@ -42,6 +42,7 @@ import reactor.core.publisher.Flux;
import reactor.core.publisher.FluxSink;
import reactor.core.publisher.Mono;
import reactor.core.scheduler.Scheduler;
import reactor.util.context.Context;
import org.springframework.core.codec.DecodingException;
import org.springframework.core.io.buffer.DataBuffer;
@@ -113,6 +114,11 @@ final class PartGenerator extends BaseSubscriber<MultipartParser.Token> {
});
}
@Override
public Context currentContext() {
return this.sink.currentContext();
}
@Override
protected void hookOnSubscribe(Subscription subscription) {
requestToken();