cloudfoundry / cf-java-client

Java Client Library for Cloud Foundry
Apache License 2.0
328 stars 318 forks source link

org.cloudfoundry.util.DelayTimeoutException when creating service instance #1117

Closed SvenScheurer closed 3 years ago

SvenScheurer commented 3 years ago

Hi, I'm running a spring-boot application (2.3.12.RELEASE) using version 5.0.0-release of the cf-java-client.

When making a call to cloudFoundryOperations.services().createInstance(CreateServiceInstanceRequest req) I do see my CF service instance being created, nevertheless the Flux always times out at around 5 mins of running with the following error:

org.cloudfoundry.util.DelayTimeoutException: null
    at org.cloudfoundry.util.DelayUtils.lambda$getDelay$6(DelayUtils.java:90)
    Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: 
Assembly trace from producer [reactor.core.publisher.MonoDoFinallyFuseable] :
    reactor.core.publisher.Mono.checkpoint(Mono.java:1932)
    org.cloudfoundry.operations.services.DefaultServices.createInstance(DefaultServices.java:176)
Error has been observed at the following site(s):
    |_ Mono.checkpoint ⇢ at org.cloudfoundry.operations.services.DefaultServices.createInstance(DefaultServices.java:176)
Stack trace:
        at org.cloudfoundry.util.DelayUtils.lambda$getDelay$6(DelayUtils.java:90)
        at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.drain(FluxConcatMap.java:374)
        at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.onNext(FluxConcatMap.java:250)
        at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:120)
        at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:120)
        at reactor.core.publisher.FluxIndex$IndexSubscriber.onNext(FluxIndex.java:101)
        at reactor.core.publisher.EmitterProcessor.drain(EmitterProcessor.java:491)
        at reactor.core.publisher.EmitterProcessor.tryEmitNext(EmitterProcessor.java:299)
        at reactor.core.publisher.SinkManySerialized.tryEmitNext(SinkManySerialized.java:97)
        at reactor.core.publisher.InternalManySink.emitNext(InternalManySink.java:27)
        at reactor.core.publisher.FluxRepeatWhen$RepeatWhenMainSubscriber.onComplete(FluxRepeatWhen.java:162)
        at reactor.core.publisher.FluxFilterFuseable$FilterFuseableSubscriber.onComplete(FluxFilterFuseable.java:171)
        at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.onComplete(FluxMapFuseable.java:344)
        at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.onComplete(FluxMapFuseable.java:344)
        at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1816)
        at reactor.core.publisher.MonoFlatMap$FlatMapInner.onNext(MonoFlatMap.java:249)
        at reactor.core.publisher.Operators$MonoInnerProducerBase.complete(Operators.java:2659)
        at reactor.core.publisher.MonoSingle$SingleSubscriber.onComplete(MonoSingle.java:180)
        at reactor.core.publisher.FluxFlatMap$FlatMapMain.checkTerminated(FluxFlatMap.java:846)
        at reactor.core.publisher.FluxFlatMap$FlatMapMain.drainLoop(FluxFlatMap.java:608)
        at reactor.core.publisher.FluxFlatMap$FlatMapMain.innerComplete(FluxFlatMap.java:894)
        at reactor.core.publisher.FluxFlatMap$FlatMapInner.onComplete(FluxFlatMap.java:997)
        at reactor.core.publisher.FluxMap$MapSubscriber.onComplete(FluxMap.java:142)
        at reactor.core.publisher.FluxHandle$HandleSubscriber.onComplete(FluxHandle.java:212)
        at reactor.core.publisher.FluxMap$MapConditionalSubscriber.onComplete(FluxMap.java:269)
        at reactor.core.publisher.FluxDoFinally$DoFinallySubscriber.onComplete(FluxDoFinally.java:145)
        at reactor.core.publisher.FluxHandleFuseable$HandleFuseableSubscriber.onComplete(FluxHandleFuseable.java:229)
        at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.onComplete(FluxContextWrite.java:126)
        at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1816)
        at reactor.core.publisher.MonoCollectList$MonoCollectListSubscriber.onComplete(MonoCollectList.java:128)
        at reactor.core.publisher.FluxPeek$PeekSubscriber.onComplete(FluxPeek.java:259)
        at reactor.core.publisher.FluxMap$MapSubscriber.onComplete(FluxMap.java:142)
        at reactor.core.publisher.FluxDoFinally$DoFinallySubscriber.onComplete(FluxDoFinally.java:145)
        at reactor.core.publisher.FluxMap$MapSubscriber.onComplete(FluxMap.java:142)
        at reactor.netty.channel.FluxReceive.onInboundComplete(FluxReceive.java:383)
        at reactor.netty.channel.ChannelOperations.onInboundComplete(ChannelOperations.java:373)
        at reactor.netty.channel.ChannelOperations.terminate(ChannelOperations.java:429)
        at reactor.netty.http.client.HttpClientOperations.onInboundNext(HttpClientOperations.java:655)
        at reactor.netty.channel.ChannelOperationsHandler.channelRead(ChannelOperationsHandler.java:96)

Using the CLI I can see the creation finished successfully:

Showing status of last operation from service testd1...

status: create succeeded message: started: 2021-08-19T16:07:21Z updated: 2021-08-19T16:19:26Z

Is this a known issue? Do I have to configure the clients other than specified in the readme? Thanks!

SvenScheurer commented 3 years ago

Found that CreateServiceInstanceRequest has a completionTimeout which defaults to 5 minutes. Maybe it's worth improving the exception? Closing this as fixed 😄