Hey Radim, thanks for bringing this to the list.
In general, I'm supportive of the second option you shared ("Exposing neutral
methods") but want to make sure I understand how CRaC would work in practice.
Could you clarify this part:
> Naturally it is possible to close the session object completely and create a
> new one, but the ideal solution would require no application changes beyond
> dependency upgrade.
CRaC doesn't support checkpointing with open sockets, and the Cassandra client
protocol requires a few roundtrips after connection establishment before a
session can be used[1]. Would it be possible to have a separate CqlSession
implementation that includes CRaC's checkpoint and restore hooks[2] to close
and open the session at the appropriate times? This CRaC implementation could
live as a third-party module initially as it is proven out.
[1]:
https://github.com/apache/cassandra/blob/trunk/doc/native_protocol_v5.spec#L176
[2]: https://docs.azul.com/core/crac/crac-guidelines#implementing-crac-resource