在couchbase服务器故障的情况下更新CAS值

问题描述 投票:1回答:1

我正试图在我的应用程序中处理一些couchbase异常。upsert方法可以抛出一个 暂时性失败异常 表明服务器端出现了暂时性的故障。会不会出现文档的CAS值被更新的情况?为了防止出现这种异常,我是用指数backOff重试固定次数。如果CAS值被更新了,那么在下一次重试的时候,我需要确保下一次传递更新的CAS值,否则我会得到一个CASMismatchException。

那么,在服务器端出现故障的情况下,是否能保证CAS值不会被更新?

java couchbase spring-retry compare-and-swap exponential-backoff
1个回答
0
投票

CAS代表了文档的 "版本",当你需要乐观的锁定时,就会用到它(两个应用程序同时尝试修改同一个文档)。

当服务器出现比较复杂的问题(磁盘故障、内存不足等)时,会抛出TemporaryFailureException。如果你的集群配置得当,你的服务器会自动失效,另一个节点会取代它的位置。所以,用某种backOff机制重试操作,等待服务器晋升是一种有效的策略。

值得强调的是,如果在此期间需要读取文档,可以调用 "readFromReplica "这个方法。Couchbase SDK内部也有一个断路器。

© www.soinside.com 2019 - 2024. All rights reserved.