Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Activity
    Kirill Marchuk
    @62mkv
    in the test code itself ?
    ehm, probably that would be easier
    Sergei Egorov
    @bsideup
    yup... I doubt Spring Boot adds anything to the bug?
    Kirill Marchuk
    @62mkv
    hopefully so
    but it's realistic one зато :)
    Sergei Egorov
    @bsideup
    I mean, the reproducer is already good enough, just wanted to mention that it could be much simpler (easier to provide, too! =))
    Kirill Marchuk
    @62mkv
    probably! I just had most of it hanging around in my "real" project, so not a big deal
    Kirill Marchuk
    @62mkv
    this has been already discussed with Mark, so hopefully no reproducers will be required!
    Sergei Egorov
    @bsideup
    Nice!
    Kirill Marchuk
    @62mkv
    :point_up: April 24, 2020 6:34 PM maybe worth creating an issue? @bsideup could you go about it? I am sure you can put it better than myself
    Sergei Egorov
    @bsideup
    @62mkv already there:
    reactor/reactor-core#2137
    kumartheashwani
    @kumartheashwani
    Hi Team.. I am new user of blockhound... tried adding the maven dependency of latest release 1.0.3.RELEASE and starting my application....
    it throws error /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home/bin/java -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:58838,suspend=y,server=n -XX:TieredStopAtLevel=1 -noverify -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true -javaagent:/Users/kashwani/Library/Caches/IntelliJIdea2019.3/captureAgent/debugger-agent.jar -Dfile.encoding=UTF-8 -classpath "/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home/jre/lib/ext/cldrdata.jar:/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home/jre/lib/ext/dnsns.jar:/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home/jre/lib/ext/jaccess.jar:/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home/jre/lib/ext/localedata.jar:/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home/jre/lib/ext/nashorn.jar:/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home/jre/lib/ext/sunec.jar:/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar:/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar:/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home/jre/lib/ext/zipfs.jar:/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home/jre/lib/management-agent.jar:/Library/Java/JavaVirtualMachines/adoptopenjdk-
    IDEA.app/Contents/lib/idea_rt.jar" com.paypal.payments.Application
    Connected to the target VM, address: '127.0.0.1:58838', transport: 'socket'
    00:33:14.018 [main] DEBUG reactor.util.Loggers$LoggerFactory - Using Slf4j logging framework
    Exception in thread "main" java.lang.IllegalStateException: The instrumentation have failed.
    at reactor.blockhound.BlockHound$Builder.testInstrumentation(BlockHound.java:435)
    at reactor.blockhound.BlockHound$Builder.install(BlockHound.java:401)
    at reactor.blockhound.BlockHound.install(BlockHound.java:94)
    at com.paypal.payments.Application.main(Application.java:20)
    Disconnected from the target VM, address: '127.0.0.1:58838', transport: 'socket'
    Process finished with exit code 1
    Tried searching if someone has faced this issue before but couldn't get anything.... is there something I can try to debug and proceed
    2 replies
    Alex Drawbond
    @lxdraw
    Hello, I am struggling to understand what the difference is between Builder#markAsBlocking and Builder#allowBlockingCallsInside. When would I use one vs the other?
    7 replies
    Kirill Marchuk
    @62mkv
    hi
    not sure what to make of this trace:
    18:03:03.327 [reactor-http-nio-2] ERROR io.netty.util.concurrent.DefaultPromise.rejectedExecution - Failed to submit a listener notification task. Event loop shut down?
    reactor.blockhound.BlockingOperationError: Blocking call! sun.misc.Unsafe#park
            at sun.misc.Unsafe.park(Unsafe.java)
            at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
            at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:836)
            at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:870)
            at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1199)
            at java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(ReentrantLock.java:209)
            at java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:285)
            at java.util.concurrent.LinkedBlockingQueue.offer(LinkedBlockingQueue.java:418)
            at java.util.AbstractQueue.add(AbstractQueue.java:95)
            at io.netty.util.concurrent.GlobalEventExecutor.addTask(GlobalEventExecutor.java:141)
            at io.netty.util.concurrent.GlobalEventExecutor.execute(GlobalEventExecutor.java:206)
            at io.netty.util.concurrent.DefaultPromise.safeExecute(DefaultPromise.java:841)
            at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:498)
            at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:615)
            at io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:604)
            at io.netty.util.concurrent.DefaultPromise.setSuccess(DefaultPromise.java:96)
            at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:1051)
            at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
            at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
            at java.lang.Thread.run(Thread.java:748)
    that thread does not seem to have any reactor-related calls, so why would it be considered non-blocking?
    4 replies
    Kirill Marchuk
    @62mkv
    ok so this is probably a thread created by reactor-netty
    Kirill Marchuk
    @62mkv
    violetta believes it's a Netty issue, so it's fine with me
    cj848
    @cj848
    hello @bsideup. Hi. I posted the PR. I hope you review. The address is reactor/BlockHound#120 it's about log4j2 allow blocking call.
    1 reply
    Amardeep Singh Khera
    @amardeepkhera

    Hi,
    I am using webclient to make a rest call like this

    webClient
         .post()
         .uri("some url")
         ...
         .onErrorResume(WebClientResponseException::class) { 
           objectmapper.readValue<Error>(it.responseBodyAsString)
         }

    I am using block hound which detects a blocking call at objectmapper.readValue<Error>(it.responseBodyAsString).
    As a solution I have updated the above code to

     .onErrorResume(WebClientResponseException::class) { 
         fromCallable { objectmapper.readValue<ErrorResponse>(response) }
                    .subscribeOn(boundedElastic())
            }
         }

    My question is, is it really required to wrap readValue in a callable, if yes then the solution outlined is correct?

    1 reply
    Carlos Adolfo Ortiz Q
    @cortizqgithub

    Hi

    Do you recommend BlockHound to be in production? I'm newbie here.

    2 replies
    Damian Hanusiak
    @SkySurferOne
    Hello,
    I'm using BlockHound in api integration tests. For some reason it sometimes detects blocking call in WebTestClient's exchange method. Shouldn't it be ignored by default?
    Kirill Marchuk
    @62mkv
    as is usually suggested for this kind of issues, consider raising an issue against corresponding Spring project. if there's truly no way around that blocking call, then a reasonable changes in default BlockHound configuration could be considered as well
    pandepra
    @pandepra

    I am profiling my reactor application using BlockHound. I have a filter on my ExchangeFunction:

    @Override
    public Mono<ClientResponse> filter(ClientRequest request, ExchangeFunction next) {
    final ClientRequest.Builder builder = ClientRequest.from(request);
    Mono<ClientResponse> exchange =
    Mono.defer(() -> next.exchange(builder.build())) //detects blocking call
    .transform(reactiveUtil::contextualize)
    .publishOn(Schedulers.parallel());
    return exchange;
    }

    BlockHound detects a blocking call on the next.exchange(). This method is called on an elastic thread. I need some help debugging this. Where exactly is the thread getting blocked?

    7 replies
    pandepra
    @pandepra
    I have a method where I generate a UUID on a parallel thread and do some processing on a string. BlockHound says that this is a blocking call. I am facing scalability issues in my reactor application. Shall I do this processing on an elastic thread?
    3 replies
    Alwyn Schoeman
    @alwyn

    Does anyone know of any things to look out for when using BlockHound against Spring Integration?

    In my case I am using a reactive MessageGateway, but in my deserializer I am doing readNBytes() no an inputStream. I'm hoping Spring Integration wraps that in a reactive manner because BlockHound is saying everything is fine...

    eksd
    @eksd

    Hi! If Blockhound is installed VisualVM shows that some threads have state "WAIT". Without Blockhound these threads have state "PARK". Can anyone explain why this is happening?

    Heres is thread dump with blockhound:

    "parallel-1" #41 daemon prio=5 os_prio=31 tid=0x00007fbfeba22800 nid=0xa103 waiting on condition [0x0000700010c45000]
       java.lang.Thread.State: WAITING (parking)
            at sun.misc.Unsafe.$$BlockHound$$_park(Native Method)
            - parking to wait for  <0x000000077e874e38> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
            at sun.misc.Unsafe.park(Unsafe.java)
            at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
            at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
            at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1081)
            at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)
            at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
            at java.lang.Thread.run(Thread.java:748)
    
       Locked ownable synchronizers:
            - None

    Without Blockhound:

    "parallel-3" #41 daemon prio=5 os_prio=31 tid=0x00007f8e0527f000 nid=0x6503 waiting on condition [0x0000700004ed3000]
       java.lang.Thread.State: WAITING (parking)
            at sun.misc.Unsafe.park(Native Method)
            - parking to wait for  <0x000000076b99a6e8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
            at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
            at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
            at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1081)
            at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)
            at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
            at java.lang.Thread.run(Thread.java:748)
    
       Locked ownable synchronizers:
            - None
    Kirill Marchuk
    @62mkv
    @eksd which line should we be looking at?
    to me those screenshots look almost identical
    apart from the method name that has actually parked the thread, but that is perfectly valid, as that's how BlockHound works (thru instrumentation)
    lol, the message is from Aug. 3. by this time OP might as well be in a completely different organisation doing some ML/AI stuff in PyTorch :laughing:
    happens to me almost every time I have some tricky question to community :cry:
    Rimon Mostafiz
    @rimonmostafiz
    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: 
    Assembly trace from producer [reactor.core.publisher.MonoFlatMap] :
        reactor.core.publisher.Mono.flatMap
        org.springframework.boot.autoconfigure.web.reactive.error.AbstractErrorWebExceptionHandler.handle(AbstractErrorWebExceptionHandler.java:304)
    Error has been observed at the following site(s):
        |_       Mono.flatMap ⇢ at org.springframework.boot.autoconfigure.web.reactive.error.AbstractErrorWebExceptionHandler.handle(AbstractErrorWebExceptionHandler.java:304)
        |_      Mono.doOnNext ⇢ at org.springframework.boot.autoconfigure.web.reactive.error.AbstractErrorWebExceptionHandler.handle(AbstractErrorWebExceptionHandler.java:305)
        |_       Mono.flatMap ⇢ at org.springframework.boot.autoconfigure.web.reactive.error.AbstractErrorWebExceptionHandler.handle(AbstractErrorWebExceptionHandler.java:306)
        |_                    ⇢ at org.springframework.web.server.handler.ExceptionHandlingWebHandler.lambda$handle$0(ExceptionHandlingWebHandler.java:77)
        |_ Mono.onErrorResume ⇢ at org.springframework.web.server.handler.ExceptionHandlingWebHandler.handle(ExceptionHandlingWebHandler.java:77)
        |_         Mono.errorat org.springframework.web.server.handler.ResponseStatusExceptionHandler.handle(ResponseStatusExceptionHandler.java:67)
        |_                    ⇢ at org.springframework.web.server.handler.ExceptionHandlingWebHandler.lambda$handle$0(ExceptionHandlingWebHandler.java:77)
        |_ Mono.onErrorResume ⇢ at org.springframework.web.server.handler.ExceptionHandlingWebHandler.handle(ExceptionHandlingWebHandler.java:77)
        |_   Mono.doOnSuccess ⇢ at org.springframework.web.server.adapter.HttpWebHandlerAdapter.handle(HttpWebHandlerAdapter.java:236)
    Stack trace:
            at java.base/java.io.RandomAccessFile.readBytes(RandomAccessFile.java) ~[na:na]
            at java.base/java.io.RandomAccessFile.read(RandomAccessFile.java:407) ~[na:na]
            at java.base/java.io.RandomAccessFile.readFully(RandomAccessFile.java:471) ~[na:na]

    Here is the full stack trace: https://pastebin.ubuntu.com/p/br3krS4z2Q/

    I'm trying to read a file from Minio using Amazon S3 Async Client

    public Mono<Tuple2<FingerData, FingerEnum>> getFingerData(Pair<GetObjectRequest, FingerEnum> pair) {
            return Mono
                    .fromFuture(s3AsyncClient.getObject(pair.getFirst(), new FluxResponseProvider()))
                    .flatMapMany(FluxResponse::getFlux)
                    .collectList()
                    .flatMap(byteBuffersToByteArray)
                    .flatMap(byteArrayToFingerData)
                    .map(fingerData -> Tuples.of(fingerData, pair.getSecond()));
        }
    
        // converting ListOf ByteBuffer to byte[]
        private final Function<List<ByteBuffer>, Mono<byte[]>> byteBuffersToByteArray = byteBuffers -> {
            if (byteBuffers.size() > 0) {
                byte[] x = byteBuffers.get(0).array();
                for (int i = 1; i < byteBuffers.size(); i++) {
                    byte[] y = byteBuffers.get(i).array();
                    x = ByteBuffer.allocate(x.length + y.length).put(x).put(y).array();
                }
                return Mono.just(x);
            } else {
                return Mono.empty();
            }
        };
    Kirill Marchuk
    @62mkv
    @rimonmostafiz so, and... what is the question?
    Rimon Mostafiz
    @rimonmostafiz
    What is causing the Blocking here?
    Kirill Marchuk
    @62mkv
    this constructor: HtmlCharacterEntityReferences
    it reads from properties, and that causes a blocking read
    I would assume this has to happen only once, so you could either initialize this class in the application startup phase, or add this call to BlockHound exceptions
    Rimon Mostafiz
    @rimonmostafiz

    When I'm trying to fetch data from redis using a key, I'm getting this error

    reactor.blockhound.BlockingOperationError: Blocking call! jdk.internal.misc.Unsafe#park
        at java.base/jdk.internal.misc.Unsafe.park(Unsafe.java) ~[na:na]
        Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: 
    Assembly trace from producer [reactor.core.publisher.FluxUsingWhen] :
        reactor.core.publisher.Flux.usingWhen
        org.springframework.data.redis.core.ReactiveRedisTemplate.doInConnection(ReactiveRedisTemplate.java:196)
    Error has been observed at the following site(s):
        |_     Flux.usingWhen ⇢ at org.springframework.data.redis.core.ReactiveRedisTemplate.doInConnection(ReactiveRedisTemplate.java:196)
        |_          Mono.fromat org.springframework.data.redis.core.ReactiveRedisTemplate.createMono(ReactiveRedisTemplate.java:180)
        |_                    ⇢ at org.springframework.data.redis.core.DefaultReactiveValueOperations.createMono(DefaultReactiveValueOperations.java:349)
        |_                    ⇢ at org.springframework.data.redis.core.DefaultReactiveValueOperations.get(DefaultReactiveValueOperations.java:171)
        |_                    ⇢ at com.tigerit.reactiveafis.rest.ApiRestController.getMatchById2(ApiRestController.java:77)
        |_          Mono.fromat org.springframework.http.codec.EncoderHttpMessageWriter.write(EncoderHttpMessageWriter.java:118)
        |_ Mono.switchIfEmpty ⇢ at org.springframework.http.codec.EncoderHttpMessageWriter.write(EncoderHttpMessageWriter.java:119)
        |_       Mono.flatMap ⇢ at org.springframework.http.codec.EncoderHttpMessageWriter.write(EncoderHttpMessageWriter.java:123)
        |_                    ⇢ at org.springframework.http.codec.EncoderHttpMessageWriter.write(EncoderHttpMessageWriter.java:204)
        |_                    ⇢ at org.springframework.web.reactive.result.method.annotation.AbstractMessageWriterResultHandler.writeBody(AbstractMessageWriterResultHandler.java:104)
        |_                    ⇢ at org.springframework.web.reactive.result.method.annotation.ResponseBodyResultHandler.handleResult(ResponseBodyResultHandler.java:86)
        |_         checkpoint ⇢ Handler com.tigerit.reactiveafis.rest.ApiRestController#getMatchById2(String) [DispatcherHandler]
        |_                    ⇢ at org.springframework.web.server.handler.DefaultWebFilterChain.lambda$filter$0(DefaultWebFilterChain.java:120)
        |_         Mono.defer ⇢ at org.springframework.web.server.handler.DefaultWebFilterChain.filter(DefaultWebFilterChain.java:119)
        |_                    ⇢ at org.springframework.web.server.handler.FilteringWebHandler.handle(FilteringWebHandler.java:59)
        |_                    ⇢ at org.springframework.web.server.handler.WebHandlerDecorator.handle(WebHandlerDecorator.java:56)
        |_         Mono.errorat org.springframework.web.server.handler.ExceptionHandlingWebHandler$CheckpointInsertingHandler.handle(ExceptionHandlingWebHandler.java:98)
        |_         checkpoint ⇢ HTTP GET "/rest/afis/verification/job-details/84ee9e00-c688-41e5-af09-9afb0ac6e009" [ExceptionHandlingWebHandler]
        |_          Mono.castat org.springframework.web.server.handler.ExceptionHandlingWebHandler$CheckpointInsertingHandler.handle(ExceptionHandlingWebHandler.java:98)
        |_                    ⇢ at org.springframework.web.server.handler.ExceptionHandlingWebHandler.lambda$handle$0(ExceptionHandlingWebHandler.java:77)
        |_ Mono.onErrorResume ⇢ at org.springframework.web.server.handler.ExceptionHandlingWebHandler.handle(ExceptionHandlingWebHandler.java:77)
    Stack trace:

    I'm using lattuce, What am I missing?

    Rimon Mostafiz
    @rimonmostafiz
    Here is my redis config
    @Configuration
    @RequiredArgsConstructor
    public class ReactiveRedisConfig {
    
        @Value("${spring.redis.cluster.nodes}")
        List<String> redisClusterNodes;
    
        private final ObjectMapper objectMapper;
    
        @Bean
        public ReactiveRedisConnectionFactory reactiveRedisConnectionFactory() {
            RedisClusterConfiguration redisClusterConfiguration = new RedisClusterConfiguration(redisClusterNodes);
            return new LettuceConnectionFactory(redisClusterConfiguration);
        }
    
        @Bean
        public ReactiveRedisOperations<String, AfisVerificationJob> AfisVerificationJobReactiveRedisTemplate() {
            RedisSerializationContext<String, AfisVerificationJob> serializationContext = RedisSerializationContext
                    .<String, AfisVerificationJob>newSerializationContext(new StringRedisSerializer())
                    .key(new StringRedisSerializer())
                    .value(configureJackson2JsonRedisSerializer(AfisVerificationJob.class))
                    .build();
    
            return new ReactiveRedisTemplate<>(reactiveRedisConnectionFactory(), serializationContext);
        }
    
        public <T> Jackson2JsonRedisSerializer<T> configureJackson2JsonRedisSerializer(Class<T> t) {
            Jackson2JsonRedisSerializer<T> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(t);
            jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
    
            return jackson2JsonRedisSerializer;
        }
    }
    And my controller method is
    @GetMapping("/rest/afis/verification/job-details/{jobId}")
        public Mono<AfisVerificationJob> getMatchById2(@PathVariable("jobId") String jobId) {
            return redisOperations.opsForValue().get("afis:job:" + jobId);
        }
    Why BlockHound detects it as a blocking call?
    n4kong
    @n4kong
    Hi, i have error on health check after add blockhound lib
    nioEventLoopGroup-3-3 | MongoReactiveHealthIndicator | Mongo health check failed reactor.blockhound.BlockingOperationError: Blocking call! java.io.FileInputStream#readBytes at java.io.FileInputStream.readBytes(FileInputStream.java) at java.io.FileInputStream.read(FileInputStream.java:255) at sun.security.provider.NativePRNG$RandomIO.readFully(NativePRNG.java:424) at sun.security.provider.NativePRNG$RandomIO.ensureBufferValid(NativePRNG.java:526) at sun.security.provider.NativePRNG$RandomIO.implNextBytes(NativePRNG.java:545) at sun.security.provider.NativePRNG$RandomIO.access$400(NativePRNG.java:331) at sun.security.provider.NativePRNG.engineNextBytes(NativePRNG.java:220) at java.security.SecureRandom.nextBytes(SecureRandom.java:468) at java.security.SecureRandom.next(SecureRandom.java:491) at java.util.Random.nextInt(Random.java:390) at com.mongodb.internal.connection.ScramShaAuthenticator$DefaultRandomStringGenerator.generate(ScramShaAuthenticator.java:354)
    2 replies
    eksd
    @eksd
    Hi! Is there any way to allow blocking calls inside the whole package?
    3 replies
    Amardeep Singh Khera
    @amardeepkhera
    Hi, I am using reactor.retry.Retry from io.projectreactor.addons:reactor-extra:3.3.4.RELEASE lib to include retries in my reactive chain.Everthing works as expected, but when I run againist blockhound I get a blocking exception as follows.Is there any recommended way to fix this, or is it a bug in the library itself.
    at java.io.FileInputStream.readBytes(FileInputStream.java)
    at java.io.FileInputStream.read(FileInputStream.java:255)
    at java.io.BufferedInputStream.fill(BufferedInputStream.java:246)
    at java.io.BufferedInputStream.read1(BufferedInputStream.java:286)
    at java.io.BufferedInputStream.read(BufferedInputStream.java:345)
    at java.io.DataInputStream.readFully(DataInputStream.java:195)
    at java.io.DataInputStream.readFully(DataInputStream.java:169)
    at java.time.zone.TzdbZoneRulesProvider.load(TzdbZoneRulesProvider.java:187)
    at java.time.zone.TzdbZoneRulesProvider.<init>(TzdbZoneRulesProvider.java:113)
    at java.time.zone.ZoneRulesProvider$1.run(ZoneRulesProvider.java:157)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.time.zone.ZoneRulesProvider.<clinit>(ZoneRulesProvider.java:144)
    at java.time.ZoneRegion.ofId(ZoneRegion.java:120)
    at java.time.ZoneId.of(ZoneId.java:411)
    at java.time.ZoneId.of(ZoneId.java:359)
    at java.time.ZoneId.of(ZoneId.java:315)
    at java.util.TimeZone.toZoneId(TimeZone.java:556)
    at java.time.ZoneId.systemDefault(ZoneId.java:274)
    at reactor.scheduler.clock.SchedulerClock.of(SchedulerClock.java:166)
    at reactor.retry.AbstractRetry.<init>(AbstractRetry.java:66)
    at reactor.retry.DefaultRetry.<init>(DefaultRetry.java:48)
    at reactor.retry.DefaultRetry.create(DefaultRetry.java:58)
    at reactor.retry.Retry.allBut(Retry.java:107)