我目前正在使用 3 个 cockroachDB 节点测试失败场景。
使用这种情况:
- 在循环中插入记录
- 关闭 3 个节点中的 2 个(模拟仲裁丢失)
- 等待足够长的时间,以便 Postgres JDBC 驱动程序引发 IO 异常
- 重启一个节点以恢复 Quorum
- 重试上一个失败的语句
然后我遇到了以下异常
Cause: org.postgresql.util.PSQLException: ERROR: duplicate key value (messageid)=('71100358-aeae-41ac-a397-b79788097f74') violates unique constraint "primary"
这意味着当 Quorum 再次可用时,插入在第一次尝试时成功(我从中获得了 IO 异常)。问题是我不知道。
我不能假设“重复键值”异常是由应用程序逻辑问题引起的。是否有任何参数可以调整,以便基础语句在 IO Exception 之前回滚?或者也许是更好的方法?
测试是使用
- CockroachDB v1.1.5(3个节点)
- MyBatis 3.4.0
- PostgreSQL 驱动程序 42.2.1
- 爪哇 8