question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

Blocking calls reported by BlockHound

See original GitHub issue

I’m using Spring WebClient to do a simple GET request to a HTTPS URL. BlockHound reports two blocking calls. 100% standard WebClient & Reactor Netty configuration.

First:

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:276)
	at java.base/sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:270)
	at java.base/sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:313)
	at java.base/sun.nio.cs.StreamDecoder.read(StreamDecoder.java:188)
	at java.base/java.io.InputStreamReader.read(InputStreamReader.java:177)
	at java.base/java.io.BufferedReader.fill(BufferedReader.java:162)
	at java.base/java.io.BufferedReader.readLine(BufferedReader.java:329)
	at java.base/java.io.BufferedReader.readLine(BufferedReader.java:396)
	at io.netty.util.NetUtil$1.run(NetUtil.java:167)
	at io.netty.util.NetUtil$1.run(NetUtil.java:151)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:318)
	at io.netty.util.NetUtil.<clinit>(NetUtil.java:151)
	at reactor.netty.transport.AddressUtils.attemptParsingIpString(AddressUtils.java:238)
	at reactor.netty.transport.AddressUtils.createForIpString(AddressUtils.java:259)
	at reactor.netty.transport.AddressUtils.createInetSocketAddress(AddressUtils.java:56)
	at reactor.netty.transport.AddressUtils.createUnresolved(AddressUtils.java:86)
	at reactor.netty.http.client.UriEndpointFactory.lambda$createUriEndpoint$0(UriEndpointFactory.java:64)
	at reactor.netty.http.client.UriEndpoint.toExternalForm(UriEndpoint.java:63)
	at reactor.netty.http.client.HttpClientConnect$HttpClientHandler.<init>(HttpClientConnect.java:493)
	at reactor.netty.http.client.HttpClientConnect$MonoHttpConnect.subscribe(HttpClientConnect.java:207)
	at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64)
	at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52)
	at reactor.core.publisher.Mono.subscribe(Mono.java:4400)
	at reactor.core.publisher.MonoSubscribeOn$SubscribeOnSubscriber.run(MonoSubscribeOn.java:126)
	at reactor.core.scheduler.WorkerTask.call(WorkerTask.java:84)
	at reactor.core.scheduler.WorkerTask.call(WorkerTask.java:37)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
	at java.base/java.lang.Thread.run(Thread.java:833)

Second:

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:276)
	at java.base/java.io.BufferedInputStream.fill(BufferedInputStream.java:244)
	at java.base/java.io.BufferedInputStream.read(BufferedInputStream.java:263)
	at java.base/sun.security.util.DerValue.<init>(DerValue.java:412)
	at java.base/sun.security.util.DerValue.<init>(DerValue.java:459)
	at java.base/sun.security.pkcs12.PKCS12KeyStore.engineLoad(PKCS12KeyStore.java:2012)
	at java.base/sun.security.util.KeyStoreDelegator.engineLoad(KeyStoreDelegator.java:221)
	at java.base/java.security.KeyStore.load(KeyStore.java:1473)
	at java.base/sun.security.ssl.TrustStoreManager$TrustAnchorManager.loadKeyStore(TrustStoreManager.java:390)
	at java.base/sun.security.ssl.TrustStoreManager$TrustAnchorManager.getTrustedCerts(TrustStoreManager.java:336)
	at java.base/sun.security.ssl.TrustStoreManager.getTrustedCerts(TrustStoreManager.java:57)
	at java.base/sun.security.ssl.TrustManagerFactoryImpl.engineInit(TrustManagerFactoryImpl.java:49)
	at java.base/javax.net.ssl.TrustManagerFactory.init(TrustManagerFactory.java:282)
	at java.base/sun.security.ssl.SSLContextImpl.engineInit(SSLContextImpl.java:94)
	at java.base/javax.net.ssl.SSLContext.init(SSLContext.java:314)
	at io.netty.handler.ssl.JdkSslContext.<clinit>(JdkSslContext.java:75)
	at io.netty.handler.ssl.SslContext.newClientContextInternal(SslContext.java:824)
	at io.netty.handler.ssl.SslContextBuilder.build(SslContextBuilder.java:611)
	at reactor.netty.tcp.AbstractProtocolSslContextSpec.sslContext(AbstractProtocolSslContextSpec.java:53)
	at reactor.netty.tcp.SslProvider.<init>(SslProvider.java:366)
	at reactor.netty.tcp.SslProvider$Build.build(SslProvider.java:742)
	at reactor.netty.http.client.HttpClientSecure.<clinit>(HttpClientSecure.java:59)
	at reactor.netty.http.client.HttpClientConnect$MonoHttpConnect.lambda$subscribe$0(HttpClientConnect.java:219)
	at reactor.core.publisher.MonoCreate.subscribe(MonoCreate.java:57)
	at reactor.core.publisher.FluxRetryWhen.subscribe(FluxRetryWhen.java:77)
	at reactor.core.publisher.MonoRetryWhen.subscribeOrReturn(MonoRetryWhen.java:46)
	at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:57)
	at reactor.netty.http.client.HttpClientConnect$MonoHttpConnect.subscribe(HttpClientConnect.java:271)
	at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64)
	at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52)
	at reactor.core.publisher.Mono.subscribe(Mono.java:4400)
	at reactor.core.publisher.MonoSubscribeOn$SubscribeOnSubscriber.run(MonoSubscribeOn.java:126)
	at reactor.core.scheduler.WorkerTask.call(WorkerTask.java:84)
	at reactor.core.scheduler.WorkerTask.call(WorkerTask.java:37)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
	at java.base/java.lang.Thread.run(Thread.java:833)

Netty version

4.1.74.Final

JVM version (e.g. java -version)

openjdk version “17” 2021-09-14 OpenJDK Runtime Environment (build 17+35-2724) OpenJDK 64-Bit Server VM (build 17+35-2724, mixed mode, sharing)

OS version (e.g. uname -a)

Linux * 5.11.0-49-generic #55-Ubuntu SMP Wed Jan 12 17:36:34 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux

Issue Analytics

  • State:closed
  • Created 2 years ago
  • Comments:5 (5 by maintainers)

github_iconTop GitHub Comments

1reaction
violetaggcommented, Mar 1, 2022

@micopiira Let’s follow up on Reactor Netty gitter about the SslContext.

1reaction
normanmaurercommented, Feb 28, 2022

@micopiira https://github.com/netty/netty/pull/12130 … The second one actually looks valid as you should not create the SslContext in an event loop thread.

Read more comments on GitHub >

github_iconTop Results From Across the Web

BlockHound and Blocking Calls: How It Works - Foojay
BlockHound lets you check if a blocking call occurs in a thread where it shouldn't happen and throws an exception at runtime when...
Read more >
BlockHound: detect blocking calls in Reactive code before it's ...
The first test method verifies that blocking code is not allowed when executed from within a Non-Blocking thread belonging to the Schedulers.parallel() ...
Read more >
Not getting exception in blocking call · Issue #83 - GitHub
BlockHound only reports blocking calls when they are performed from non-blocking threads. You're running everything on the main thread, ...
Read more >
BlockHound detects blocking call for ReactiveRedisTemplate ...
I'm using spring-boot-starter-data-redis-reactive dependency for reactive redis client and blockhound for detecting blocking calls.
Read more >
reactor/BlockHound - Gitter
Hello everyone, Can someone help me with why blockhound is throwing blocking call exception for simple webclient call. https://stackoverflow.com/questions/ ...
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found