CAS操作期间的Cassandra WriteTimeoutException处理
这些问题与文章中的“CAS操作”一段有关: (a) 如果paxos阶段失败,驱动程序将抛出一个WriteTimeoutException,其WriteType.CAS与WriteTimeoutException#getWriteType()检索到的一样。在这种情况下,您无法知道是否应用了CAS操作 你是怎么理解的 我认为如果paxos(prepare)阶段失败,那么协调器根本不会启动提交阶段? 我猜paxos阶段如何失败并不重要(没有足够的副本或副本超时或…) (b) 然后,提交阶段类似于常规Cassandra写入…如果确保对该事务所涉及的列的后续读取语句使用setConsistenceLevel(ConsistenceLevel.SERIAL),则可以忽略此错误,因为它将强制Cassandra在继续读取之前提交任何剩余的未提交Paxos状态 想知道与ConsistenceLevel.QUORUM写入相关的上述内容: 如果提交阶段由于没有仲裁(不可用节点或超时)而失败,那么我们将返回WriteType为SIMPLE的WriteTimeoutException,对吗? 在这种情况下,写操作是否成功并不清楚,对吗? 所以我不确定从现在起所有的可能性是什么(恢复/回滚/无) 这是否意味着如果我使用ConsistenceLevel.QUORUM进行读取操作,我可以看到旧的数据版本(好像上面的写入未成功)一段时间,然后再次使用QUORUM读取,我将看到写入成功? (事实上,在WriteTimeoutException之后,我在复制因子为3的3节点集群中看到了这一点(需要2个副本,但只有1个副本确认了写入)–在写入之后读取的仲裁返回了旧数据,然后当我使用cqlsh检查时,我看到了新数据) 这怎么可能? 猜测: 可能在超时之后,协调器会说我们还没有提交阶段的仲裁(后续的仲裁读取会获得较旧的数据版本),并向客户端返回WriteTimeoutException.type=SIMPLE。当超时的节点实际响应/提交时,我们将在未来的这一时刻拥有一个仲裁,在所有仲裁读取之后,将获得更新的数据版本。 但不确定使用带序列的读取时的解释。是相关的也是相关的CAS操作期间的Cassandra WriteTimeoutException处理,cassandra,cassandra-2.0,Cassandra,Cassandra 2.0,这些问题与文章中的“CAS操作”一段有关: (a) 如果paxos阶段失败,驱动程序将抛出一个WriteTimeoutException,其WriteType.CAS与WriteTimeoutException#getWriteType()检索到的一样。在这种情况下,您无法知道是否应用了CAS操作 你是怎么理解的 我认为如果paxos(prepare)阶段失败,那么协调器根本不会启动提交阶段? 我猜paxos阶段如何失败并不重要(没有足够的副本或副本超时或…) (b) 然后,提交阶段类似于常规C