cf-java-client Timeout Workaround
search cancel

cf-java-client Timeout Workaround

book

Article ID: 298153

calendar_today

Updated On:

Products

VMware Tanzu Application Service for VMs

Issue/Introduction

This Knowledge Base (KB) article details a timeout error that may be experienced while pushing an app with cf-java-client

The error:
org.cloudfoundry.util.DelayTimeoutException
	at org.cloudfoundry.util.DelayUtils.lambda$getDelay$6(DelayUtils.java:90)
	Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: 
Assembly trace from producer [reactor.core.publisher.MonoIgnoreElements] :
	reactor.core.publisher.Mono.checkpoint(Mono.java:1902)
	org.cloudfoundry.operations.applications.DefaultApplications.pushManifest(DefaultApplications.java:431)
Error has been observed at the following site(s):
	|_ Mono.checkpoint ⇢ at org.cloudfoundry.operations.applications.DefaultApplications.pushManifest(DefaultApplications.java:431)
Stack trace:
<removed for brevity>


Environment

Product Version: 3.0

Resolution

Typically this error is influenced from slowness between the cloud controllers and blobstore. Testing the cloud controller to blobstore performance can be done with a provided utility on the cloud controller VM's called "perform_blobstore_benchmarks". For more information on this please see this doc. If there is no output by running that utility please see this doc.

Workaround
It is suggested to identify the performance bottleneck between cloud controller and blobstore and optimize as the conclusive resolution. In the event a temporary workaround is required, the timeout that leads to this error is influenced from the provided staging timeout given to the client during the push operation. Increasing the staging timeout given to the client, or during the pushManifest method in the client should allow the operation to complete and avoid the timeout. 

Code snippit example for reference:

PushApplicationManifestRequest pushApplicationManifestRequest = PushApplicationManifestRequest.builder().manifest(manifest).stagingTimeout(Duration.ofMinutes(10)).build();