Merge branch '5.3.x' into main
This commit is contained in:
commit
aea39fdad3
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2021 the original author or authors.
|
||||
* Copyright 2002-2022 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
|
@ -26,6 +26,8 @@ import org.reactivestreams.Subscriber;
|
|||
import org.reactivestreams.Subscription;
|
||||
import reactor.core.publisher.Operators;
|
||||
|
||||
import org.springframework.core.io.buffer.DataBuffer;
|
||||
import org.springframework.core.io.buffer.DefaultDataBufferFactory;
|
||||
import org.springframework.core.log.LogDelegateFactory;
|
||||
import org.springframework.lang.Nullable;
|
||||
import org.springframework.util.Assert;
|
||||
|
|
@ -56,6 +58,8 @@ public abstract class AbstractListenerReadPublisher<T> implements Publisher<T> {
|
|||
*/
|
||||
protected static Log rsReadLogger = LogDelegateFactory.getHiddenLog(AbstractListenerReadPublisher.class);
|
||||
|
||||
final static DataBuffer EMPTY_BUFFER = DefaultDataBufferFactory.sharedInstance.allocateBuffer(0);
|
||||
|
||||
|
||||
private final AtomicReference<State> state = new AtomicReference<>(State.UNSUBSCRIBED);
|
||||
|
||||
|
|
@ -180,7 +184,7 @@ public abstract class AbstractListenerReadPublisher<T> implements Publisher<T> {
|
|||
|
||||
/**
|
||||
* Read and publish data one at a time until there is no more data, no more
|
||||
* demand, or perhaps we completed in the mean time.
|
||||
* demand, or perhaps we completed meanwhile.
|
||||
* @return {@code true} if there is more demand; {@code false} if there is
|
||||
* no more demand or we have completed.
|
||||
*/
|
||||
|
|
@ -188,7 +192,12 @@ public abstract class AbstractListenerReadPublisher<T> implements Publisher<T> {
|
|||
long r;
|
||||
while ((r = this.demand) > 0 && (this.state.get() != State.COMPLETED)) {
|
||||
T data = read();
|
||||
if (data != null) {
|
||||
if (data == EMPTY_BUFFER) {
|
||||
if (rsReadLogger.isTraceEnabled()) {
|
||||
rsReadLogger.trace(getLogPrefix() + "0 bytes read, trying again");
|
||||
}
|
||||
}
|
||||
else if (data != null) {
|
||||
if (r != Long.MAX_VALUE) {
|
||||
DEMAND_FIELD_UPDATER.addAndGet(this, -1L);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2021 the original author or authors.
|
||||
* Copyright 2002-2022 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
|
@ -241,10 +241,10 @@ class ServletServerHttpRequest extends AbstractServerHttpRequest {
|
|||
/**
|
||||
* Read from the request body InputStream and return a DataBuffer.
|
||||
* Invoked only when {@link ServletInputStream#isReady()} returns "true".
|
||||
* @return a DataBuffer with data read, or {@link #EOF_BUFFER} if the input
|
||||
* stream returned -1, or null if 0 bytes were read.
|
||||
* @return a DataBuffer with data read, or
|
||||
* {@link AbstractListenerReadPublisher#EMPTY_BUFFER} if 0 bytes were read,
|
||||
* or {@link #EOF_BUFFER} if the input stream returned -1.
|
||||
*/
|
||||
@Nullable
|
||||
DataBuffer readFromInputStream() throws IOException {
|
||||
int read = this.request.getInputStream().read(this.buffer);
|
||||
logBytesRead(read);
|
||||
|
|
@ -259,7 +259,7 @@ class ServletServerHttpRequest extends AbstractServerHttpRequest {
|
|||
return EOF_BUFFER;
|
||||
}
|
||||
|
||||
return null;
|
||||
return AbstractListenerReadPublisher.EMPTY_BUFFER;
|
||||
}
|
||||
|
||||
protected final void logBytesRead(int read) {
|
||||
|
|
|
|||
|
|
@ -25,7 +25,6 @@ import java.util.stream.Collectors;
|
|||
|
||||
import com.fasterxml.jackson.annotation.JsonCreator;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import org.junit.jupiter.api.Disabled;
|
||||
import reactor.core.publisher.Flux;
|
||||
import reactor.core.publisher.Mono;
|
||||
import reactor.core.scheduler.Schedulers;
|
||||
|
|
@ -63,7 +62,6 @@ import org.springframework.web.testfixture.http.server.reactive.bootstrap.Undert
|
|||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.junit.jupiter.api.Assumptions.assumeFalse;
|
||||
|
||||
@Disabled
|
||||
class MultipartIntegrationTests extends AbstractHttpHandlerIntegrationTests {
|
||||
|
||||
private WebClient webClient;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2022 the original author or authors.
|
||||
* Copyright 2002-2021 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
|
@ -25,7 +25,6 @@ import kotlinx.coroutines.flow.Flow
|
|||
import kotlinx.coroutines.flow.flow
|
||||
import org.assertj.core.api.Assertions.assertThat
|
||||
import org.assertj.core.api.Assertions.assertThatExceptionOfType
|
||||
import org.junit.jupiter.api.Disabled
|
||||
import org.springframework.context.ApplicationContext
|
||||
import org.springframework.context.annotation.AnnotationConfigApplicationContext
|
||||
import org.springframework.context.annotation.ComponentScan
|
||||
|
|
@ -41,7 +40,6 @@ import org.springframework.web.testfixture.http.server.reactive.bootstrap.HttpSe
|
|||
import reactor.core.publisher.Flux
|
||||
import java.time.Duration
|
||||
|
||||
@Disabled
|
||||
class CoroutinesIntegrationTests : AbstractRequestMappingIntegrationTests() {
|
||||
|
||||
override fun initApplicationContext(): ApplicationContext {
|
||||
|
|
|
|||
Loading…
Reference in New Issue