Open
Description
If you run the matchday sample with blockhound it shows that there is a blocking call in the SSE stream:
2019-03-10 07:25:50.079 ERROR 27230 --- [or-http-epoll-4] a.w.r.e.AbstractErrorWebExceptionHandler : [89421677] 500 Server Error for HTTP GET "/match/5c84bb91ce138b6a5eb1b464/statusStream"
java.lang.Error: Blocking call! java.io.FileInputStream#readBytes
at reactor.BlockHound$Builder.lambda$new$0(BlockHound.java:153) ~[blockhound-1.0.0.BUILD-SNAPSHOT.jar:na]
at reactor.BlockHound$Builder.lambda$install$8(BlockHound.java:268) ~[blockhound-1.0.0.BUILD-SNAPSHOT.jar:na]
at reactor.BlockHoundRuntime.checkBlocking(BlockHoundRuntime.java:58) ~[blockhound-1.0.0.BUILD-SNAPSHOT.jar:na]
at java.io.FileInputStream.readBytes(FileInputStream.java) ~[na:na]
at java.io.FileInputStream.read(FileInputStream.java:255) ~[na:na]
at java.io.BufferedInputStream.read1(BufferedInputStream.java:284) ~[na:na]
at java.io.BufferedInputStream.read(BufferedInputStream.java:345) ~[na:na]
at java.io.BufferedInputStream.read1(BufferedInputStream.java:284) ~[na:na]
at java.io.BufferedInputStream.read(BufferedInputStream.java:345) ~[na:na]
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284) ~[na:na]
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326) ~[na:na]
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178) ~[na:na]
at java.io.InputStreamReader.read(InputStreamReader.java:184) ~[na:na]
at java.io.BufferedReader.fill(BufferedReader.java:161) ~[na:na]
at java.io.BufferedReader.read1(BufferedReader.java:212) ~[na:na]
at java.io.BufferedReader.read(BufferedReader.java:286) ~[na:na]
at org.thymeleaf.templateparser.reader.BlockAwareReader.readBytes(BlockAwareReader.java:223) ~[thymeleaf-3.0.10-SNAPSHOT.jar:3.0.10-SNAPSHOT]
at org.thymeleaf.templateparser.reader.BlockAwareReader.read(BlockAwareReader.java:68) ~[thymeleaf-3.0.10-SNAPSHOT.jar:3.0.10-SNAPSHOT]
at org.thymeleaf.templateparser.reader.PrototypeOnlyCommentMarkupReader.read(PrototypeOnlyCommentMarkupReader.java:30) ~[thymeleaf-3.0.10-SNAPSHOT.jar:3.0.10-SNAPSHOT]
at org.thymeleaf.templateparser.reader.BlockAwareReader.readBytes(BlockAwareReader.java:223) ~[thymeleaf-3.0.10-SNAPSHOT.jar:3.0.10-SNAPSHOT]
at org.thymeleaf.templateparser.reader.BlockAwareReader.read(BlockAwareReader.java:68) ~[thymeleaf-3.0.10-SNAPSHOT.jar:3.0.10-SNAPSHOT]
at org.thymeleaf.templateparser.reader.ParserLevelCommentMarkupReader.read(ParserLevelCommentMarkupReader.java:30) ~[thymeleaf-3.0.10-SNAPSHOT.jar:3.0.10-SNAPSHOT]
at java.io.Reader.read(Reader.java:140) ~[na:na]
at org.attoparser.MarkupParser.parseDocument(MarkupParser.java:286) ~[attoparser-2.0.5.RELEASE.jar:2.0.5.RELEASE]
at org.attoparser.MarkupParser.parse(MarkupParser.java:257) ~[attoparser-2.0.5.RELEASE.jar:2.0.5.RELEASE]
at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parse(AbstractMarkupTemplateParser.java:230) ~[thymeleaf-3.0.10-SNAPSHOT.jar:3.0.10-SNAPSHOT]
at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parseStandalone(AbstractMarkupTemplateParser.java:100) ~[thymeleaf-3.0.10-SNAPSHOT.jar:3.0.10-SNAPSHOT]
at org.thymeleaf.engine.TemplateManager.parseAndProcessThrottled(TemplateManager.java:797) ~[thymeleaf-3.0.10-SNAPSHOT.jar:3.0.10-SNAPSHOT]
at org.thymeleaf.TemplateEngine.processThrottled(TemplateEngine.java:1184) ~[thymeleaf-3.0.10-SNAPSHOT.jar:3.0.10-SNAPSHOT]
at org.thymeleaf.spring5.SpringWebFluxTemplateEngine.lambda$createDataDrivenStream$3(SpringWebFluxTemplateEngine.java:374) ~[thymeleaf-spring5-3.0.10-SNAPSHOT.jar:3.0.10-SNAPSHOT]
at reactor.core.publisher.FluxUsing.subscribe(FluxUsing.java:75) ~[reactor-core-3.2.6.RELEASE.jar:3.2.6.RELEASE]
...
I guess the template parsing can be cached, so it might not always block, but at least when the template is being read from the classpath it ought to be in a background thread.