Description
Hi,
I started hacking a solution that would close Cassandra connections on checkpoint, following [1] and registering a Lifecycle
that would let the Cassandra session 'suspend'. The checkpoint and restore works in my prototype when I issue the checkpoint via jcmd <pid> JDK.checkpoint
, but if I try automatic checkpoint through -Dspring.context.checkpoint=onRefresh
the Lifecycle.stop()
is not called: at this point DefaultLifecycleProcessor.running
is false and stopForRestart()
is not invoked.
I would like to ask what's the reason and if there's any better pattern; [2] explains that the connections are established too early (before first refresh). Is that a show-stopper? We can close those connections and keep going.
An alternative solution would be to not use the Lifecycle
and register as a org.crac.Resource
; however I understand that it's preferred to integrate the handling into Spring using that rather than directly.
CC @sdeleuze
[1] https://github.com/spring-projects/spring-boot/blob/main/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceCheckpointRestoreConfiguration.java
[2] #1486