Skip to content

Commit

Permalink
Merge branch '2.2.x'
Browse files Browse the repository at this point in the history
Closes gh-21327
  • Loading branch information
wilkinsona committed May 6, 2020
2 parents 1bc41ec + 9ba78db commit e03cb94
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 1 deletion.
Expand Up @@ -141,6 +141,7 @@ private Undertow.Builder createBuilder(int port) {
else {
builder.addHttpListener(port, getListenAddress());
}
builder.setServerOption(UndertowOptions.SHUTDOWN_TIMEOUT, 0);
for (UndertowBuilderCustomizer customizer : this.builderCustomizers) {
customizer.customize(builder);
}
Expand Down
Expand Up @@ -241,6 +241,7 @@ private Builder createBuilder(int port) {
else {
builder.addHttpListener(port, getListenAddress());
}
builder.setServerOption(UndertowOptions.SHUTDOWN_TIMEOUT, 0);
for (UndertowBuilderCustomizer customizer : this.builderCustomizers) {
customizer.customize(builder);
}
Expand Down
Expand Up @@ -25,6 +25,7 @@
import java.util.Arrays;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.Callable;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.Future;
Expand Down Expand Up @@ -423,6 +424,25 @@ void whenARequestCompletesDuringGracePeriodThenShutDownGracefullyReturnsTrueBefo
assertThat(responseLatch.await(5, TimeUnit.SECONDS)).isTrue();
}

@Test
void whenARequestIsActiveThenStopWillComplete() throws InterruptedException, BrokenBarrierException {
AbstractReactiveWebServerFactory factory = getFactory();
BlockingHandler blockingHandler = new BlockingHandler();
this.webServer = factory.getWebServer(blockingHandler);
this.webServer.start();
Mono<ResponseEntity<Void>> request = getWebClient(this.webServer.getPort()).build().get().retrieve()
.toBodilessEntity();
AtomicReference<ResponseEntity<Void>> responseReference = new AtomicReference<>();
CountDownLatch responseLatch = new CountDownLatch(1);
request.subscribe((response) -> {
responseReference.set(response);
responseLatch.countDown();
});
blockingHandler.awaitQueue();
this.webServer.stop();
blockingHandler.completeOne();
}

protected WebClient prepareCompressionTest() {
Compression compression = new Compression();
compression.setEnabled(true);
Expand Down
Expand Up @@ -1147,6 +1147,25 @@ void whenAnAsyncRequestCompletesAndTheConnectionIsClosedDuringGracePeriodThenShu
assertThat(request.get(30, TimeUnit.SECONDS)).isInstanceOf(HttpResponse.class);
}

@Test
void whenARequestIsActiveThenStopWillComplete() throws InterruptedException, BrokenBarrierException {
AbstractServletWebServerFactory factory = getFactory();
BlockingServlet blockingServlet = new BlockingServlet();
this.webServer = factory
.getWebServer((context) -> context.addServlet("blockingServlet", blockingServlet).addMapping("/"));
this.webServer.start();
int port = this.webServer.getPort();
initiateGetRequest(port, "/");
blockingServlet.awaitQueue();
this.webServer.stop();
try {
blockingServlet.admitOne();
}
catch (RuntimeException ex) {

}
}

protected Future<Boolean> initiateGracefulShutdown() {
RunnableFuture<Boolean> future = new FutureTask<Boolean>(() -> this.webServer.shutDownGracefully());
new Thread(future).start();
Expand Down Expand Up @@ -1524,7 +1543,10 @@ protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws Se

public void admitOne() {
try {
this.barriers.take().await();
CyclicBarrier barrier = this.barriers.take();
if (!barrier.isBroken()) {
barrier.await();
}
}
catch (InterruptedException ex) {
Thread.currentThread().interrupt();
Expand Down

0 comments on commit e03cb94

Please sign in to comment.