Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CAS操作期间的Cassandra WriteTimeoutException处理_Cassandra_Cassandra 2.0 - Fatal编程技术网

CAS操作期间的Cassandra WriteTimeoutException处理

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

这些问题与文章中的“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。当超时的节点实际响应/提交时,我们将在未来的这一时刻拥有一个仲裁,在所有仲裁读取之后,将获得更新的数据版本。 但不确定使用带序列的读取时的解释。

是相关的也是相关的