[go: nahoru, domu]

Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Blocking calls detected when using Thymeleaf with Spring Webflux #252

Open
JanVdloock opened this issue Mar 5, 2021 · 1 comment
Open

Comments

@JanVdloock
Copy link

When running a Spring Boot 2.4.3 project with WebFlux and Thymeleaf to render some HTML pages, BlockHound detects blocking calls when the HTML Pages are rendered.

I am running with JDK 11 on Windows 10.

I attachment a sample program to reproduce the problem. If the test class is run, this error is shown:

2021-03-05 19:37:38.199 ERROR 3284 --- [ctor-http-nio-4] a.w.r.e.AbstractErrorWebExceptionHandler : [831b8141-1] 500 Server Error for HTTP GET "/hello"

reactor.blockhound.BlockingOperationError: Blocking call! java.io.RandomAccessFile#readBytes
at java.base/java.io.RandomAccessFile.readBytes(RandomAccessFile.java) ~[na:na]
Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException:
Error has been observed at the following site(s):
|_ checkpoint ? Handler eu.xenit.test.spring.reactor.webflux.blockhound.ThymeLeafController#hello(String, Model) [DispatcherHandler]
|_ checkpoint ? HTTP GET "/hello" [ExceptionHandlingWebHandler]
Stack trace:
at java.base/java.io.RandomAccessFile.readBytes(RandomAccessFile.java) ~[na:na]
at java.base/java.io.RandomAccessFile.read(RandomAccessFile.java:406) ~[na:na]
at java.base/java.io.RandomAccessFile.readFully(RandomAccessFile.java:470) ~[na:na]
at java.base/java.util.zip.ZipFile$Source.readFullyAt(ZipFile.java:1304) ~[na:na]
at java.base/java.util.zip.ZipFile$ZipFileInputStream.initDataOffset(ZipFile.java:998) ~[na:na]
at java.base/java.util.zip.ZipFile$ZipFileInputStream.read(ZipFile.java:1013) ~[na:na]
at java.base/java.util.zip.ZipFile$ZipFileInflaterInputStream.fill(ZipFile.java:468) ~[na:na]
at java.base/java.util.zip.InflaterInputStream.read(InflaterInputStream.java:159) ~[na:na]
at java.base/java.io.InputStream.readNBytes(InputStream.java:490) ~[na:na]
at java.base/java.util.jar.JarFile.getBytes(JarFile.java:805) ~[na:na]
at java.base/java.util.jar.JarFile.checkForSpecialAttributes(JarFile.java:1005) ~[na:na]
at java.base/java.util.jar.JarFile.isMultiRelease(JarFile.java:388) ~[na:na]
at java.base/java.util.jar.JarFile.getEntry(JarFile.java:507) ~[na:na]
at java.base/sun.net.www.protocol.jar.URLJarFile.getEntry(URLJarFile.java:131) ~[na:na]
at java.base/sun.net.www.protocol.jar.JarURLConnection.connect(JarURLConnection.java:137) ~[na:na]
at java.base/sun.net.www.protocol.jar.JarURLConnection.getInputStream(JarURLConnection.java:155) ~[na:na]
at java.base/java.net.URL.openStream(URL.java:1139) ~[na:na]
at java.base/java.lang.ClassLoader.getResourceAsStream(ClassLoader.java:1738) ~[na:na]
at org.thymeleaf.util.ClassLoaderUtils.findResourceAsStream(ClassLoaderUtils.java:355) ~[thymeleaf-3.0.12.RELEASE.jar:3.0.12.RELEASE]
at org.thymeleaf.util.ClassLoaderUtils.loadResourceAsStream(ClassLoaderUtils.java:324) ~[thymeleaf-3.0.12.RELEASE.jar:3.0.12.RELEASE]
at org.thymeleaf.Thymeleaf.(Thymeleaf.java:77) ~[thymeleaf-3.0.12.RELEASE.jar:3.0.12.RELEASE]
at org.thymeleaf.ConfigurationPrinterHelper.printConfiguration(ConfigurationPrinterHelper.java:88) ~[thymeleaf-3.0.12.RELEASE.jar:3.0.12.RELEASE]
at org.thymeleaf.TemplateEngine.initialize(TemplateEngine.java:346) ~[thymeleaf-3.0.12.RELEASE.jar:3.0.12.RELEASE]
at org.thymeleaf.TemplateEngine.getConfiguration(TemplateEngine.java:406) ~[thymeleaf-3.0.12.RELEASE.jar:3.0.12.RELEASE]
at org.thymeleaf.spring5.view.reactive.ThymeleafReactiveView.render(ThymeleafReactiveView.java:334) ~[thymeleaf-spring5-3.0.12.RELEASE.jar:3.0.12.RELEASE]
at org.springframework.web.reactive.result.view.ViewResolutionResultHandler.renderWith(ViewResolutionResultHandler.java:340) ~[spring-webflux-5.3.4.jar:5.3.4]
at org.springframework.web.reactive.result.view.ViewResolutionResultHandler.render(ViewResolutionResultHandler.java:328) ~[spring-webflux-5.3.4.jar:5.3.4]

spring-reactor-webflux-thymeleaf-blockhound.zip

@feser
Copy link
feser commented Sep 17, 2021

Hi,

In addition to above, there is a blocking call at org.thymeleaf.spring5.SpringWebFluxTemplateEngine.createFullStream.

You can reproduce the error with BlockHound.

Version: 3.0.12.RELEASE

Stack trace:

reactor.blockhound.BlockingOperationError: Blocking call! java.io.FileInputStream#readBytes
at java.base/java.io.FileInputStream.readBytes(FileInputStream.java)
at java.base/java.io.FileInputStream.read(FileInputStream.java:279)
at java.base/java.io.BufferedInputStream.read1(BufferedInputStream.java:290)
at java.base/java.io.BufferedInputStream.read(BufferedInputStream.java:351)
at java.base/java.io.BufferedInputStream.read1(BufferedInputStream.java:290)
at java.base/java.io.BufferedInputStream.read(BufferedInputStream.java:351)
at java.base/sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)
at java.base/sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)
at java.base/sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
at java.base/java.io.InputStreamReader.read(InputStreamReader.java:181)
at java.base/java.io.BufferedReader.fill(BufferedReader.java:161)
at java.base/java.io.BufferedReader.read1(BufferedReader.java:212)
at java.base/java.io.BufferedReader.read(BufferedReader.java:287)
at org.thymeleaf.templateparser.reader.BlockAwareReader.readBytes(BlockAwareReader.java:223)
at org.thymeleaf.templateparser.reader.BlockAwareReader.read(BlockAwareReader.java:68)
at org.thymeleaf.templateparser.reader.PrototypeOnlyCommentMarkupReader.read(PrototypeOnlyCommentMarkupReader.java:30)
at org.thymeleaf.templateparser.reader.BlockAwareReader.readBytes(BlockAwareReader.java:223)
at org.thymeleaf.templateparser.reader.BlockAwareReader.read(BlockAwareReader.java:68)
at org.thymeleaf.templateparser.reader.ParserLevelCommentMarkupReader.read(ParserLevelCommentMarkupReader.java:30)
at java.base/java.io.Reader.read(Reader.java:229)
at org.attoparser.MarkupParser.parseDocument(MarkupParser.java:286)
at org.attoparser.MarkupParser.parse(MarkupParser.java:257)
at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parse(AbstractMarkupTemplateParser.java:230)
at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parseStandalone(AbstractMarkupTemplateParser.java:100)
at org.thymeleaf.engine.TemplateManager.parseAndProcess(TemplateManager.java:649)
at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1098)
at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1072)
at org.thymeleaf.spring5.SpringWebFluxTemplateEngine.lambda$createFullStream$0(SpringWebFluxTemplateEngine.java:212)
at reactor.core.publisher.MonoCreate.subscribe(MonoCreate.java:57)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants