Allow to suspend/resume RestClient
christophstrobl opened this issue · 0 comments
Description
In order to create and resume from a checkpoint using CRaC it is required that all sockets are closed before taking the snapshot.
HttpAsyncClientBuilder
used by the RestClientBuilder
allows to set a NHttpClientConnectionManager
which id defaulted to a PoolingNHttpClientConnectionManager
. The pool will keep connections open for a given timeout which leads to an error when invoking jcmd ... JDK.checkpoint
.
However, NHttpClientConnectionManager
would allow to explicitly closeExpiredConnections()
as well as closeIdleConnections
which will make sure the requirements for capturing a snapshot are met.
Is there a way to provide an API on RestClient
that would allow to evict open connections?
class RestClientResource implements org.crac.Resource {
RestClient client;
// ...
@Override
public void beforeCheckpoint(Context<? extends Resource> context) throws Exception {
// client -> httpAsyncClient -> connmgr -> connmgr.closeExpiredConnections() & connmgr.closeIdleConnections(0, MILLISECONDS);
client.evicConnections();
}
@Override
public void afterRestore(Context<? extends Resource> context) throws Exception {
// nothing to do
}
}
In doing so existing references to the RestClient
instances will remain valid, which would not be the case if the client was closed before the checkpoint and recreated from captured settings in the afterRestore method.