session cloud spanner 库的池是否用于Java FIFO?

Is session pool of the cloud spanner library for Java FIFO?

如果不是FIFO,会导致意外中止

Spanner 的中止系统和写入规范 session 如下;

如果session池不是FIFO,一个线程(=A)启动的事务有可能会被另一个线程(=B)启动的另一个事务中止,即使B占用A取session后的session.

在 Java 客户端库中,会话池中的会话在 LIFO order 中返回,以改进服务器端的缓存和性能。

在 SessionPool 中使用 FIFO 与 LIFO 应该不会对事务中止率产生任何影响。对于冲突事务,开始时间计为调用 BeginTransaction 后对事务的第一个操作。所以它不应该依赖于使用哪个会话。

此外,截至 v3.0.0, session pool preparing for read/write transactions has been removed, so now the transaction starts when a session is retrieved from the pool when the transaction is run. See details here