Browse Source

Switch to non-blocking thread after WebSession creation

See gh-26958
pull/26973/head
Rossen Stoyanchev 5 years ago
parent
commit
de1ba79c55
  1. 5
      spring-web/src/main/java/org/springframework/web/server/session/InMemoryWebSessionStore.java
  2. 11
      spring-web/src/test/java/org/springframework/web/server/session/InMemoryWebSessionStoreTests.java

5
spring-web/src/main/java/org/springframework/web/server/session/InMemoryWebSessionStore.java

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
/*
* Copyright 2002-2019 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.
@ -118,7 +118,8 @@ public class InMemoryWebSessionStore implements WebSessionStore { @@ -118,7 +118,8 @@ public class InMemoryWebSessionStore implements WebSessionStore {
this.expiredSessionChecker.checkIfNecessary(now);
return Mono.<WebSession>fromSupplier(() -> new InMemoryWebSession(now))
.subscribeOn(Schedulers.boundedElastic());
.subscribeOn(Schedulers.boundedElastic())
.publishOn(Schedulers.parallel());
}
@Override

11
spring-web/src/test/java/org/springframework/web/server/session/InMemoryWebSessionStoreTests.java

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
/*
* Copyright 2002-2019 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.
@ -22,9 +22,7 @@ import java.time.Instant; @@ -22,9 +22,7 @@ import java.time.Instant;
import java.util.Map;
import java.util.stream.IntStream;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import reactor.core.publisher.Mono;
import reactor.core.scheduler.Schedulers;
import org.springframework.beans.DirectFieldAccessor;
@ -59,11 +57,10 @@ public class InMemoryWebSessionStoreTests { @@ -59,11 +57,10 @@ public class InMemoryWebSessionStoreTests {
assertThat(session.isStarted()).isTrue();
}
@Disabled // TODO: remove if/when Blockhound is enabled
@Test // gh-24027
@Test // gh-24027, gh-26958
public void createSessionDoesNotBlock() {
Mono.defer(() -> this.store.createWebSession())
.subscribeOn(Schedulers.parallel())
this.store.createWebSession()
.doOnNext(session -> assertThat(Schedulers.isInNonBlockingThread()).isTrue())
.block();
}

Loading…
Cancel
Save