ICache <tk,tv =“”> WithNoRetries()方法有什么用途以及如何以及何时使用它?

时间:2018-07-13 05:34:10

标签: ignite

我正在使用Ignite.Net,并且有一个非常简单的用例,其中我想使用CacheAtomicityMode.ATOMIC将某些东西放入缓存而无需任何事务,以实现我正在尝试使用putIfAbsentAsync(key,Value)方法

但请看以下方法的说明 https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/IgniteCache.html#putIfAbsentAsync-K-V-页,我有点困惑! 对Ignite陌生,请您帮助我更好地理解这一点?以下是我的疑问。

上面链接中对putIfAbsentAsync方法的描述如下:

对于CacheAtomicityMode。由于自动重试,主节点崩溃时ATOMIC返回值可能不正确。建议使用withNoRetries()禁用重试,并在更新失败的情况下手动还原主备备份一致性。 / em>”

  • 能否请您解释什么是自动重试?如何以及何时使用它?

  • 使用withNoRetries()禁用重试有什么利弊?

  • 我还使用具有相同缓存配置的ReplaceAsync(),RemoveAsync()和PutIfAbsentAsync()。禁用重试后,这些功能的功能是否会受到影响?

  • 主节点可能崩溃的可能情况是什么?

  • 在哪些情况下putIfAbsentAsync()返回false?

  • 在哪些情况下putIfAbsentAsync()会引发异常?并且列出所有可能的异常? 我知道上面的链接说明了例外列表 (TransactionTimeoutException,TransactionRollbackException,TransactionHeuristicException)但是所有这三个都与事务有关!我真的不明白为什么在ATOMIC模式下会引发Transaction异常,因为在ATOMIC模式下没有任何事务吗?

  • 我尝试了另一个只有一个服务器节点和一个客户端节点的用例。服务器节点创建并存储缓存,而客户端节点只是放置或获取缓存,当我在客户端节点试图将某些内容放入缓存之前手动停止服务器节点时,我得到了SocketException即java.net.SocketException:Socket close Exception 。如果这是一个有效的用例,那么最好在页面上列出这些例外。

  • 我不理解此行“在更新失败的情况下手动还原主备份一致性”,您能解释一下什么是主备份一致性吗?以及如何手动还原它?

1 个答案:

答案 0 :(得分:2)

withNoRetries()仅允许重试。如果操作失败,则会立即得到异常。相比之下,默认行为会重试操作,直到可能为止。

在文档中详细了解ATOMIC limitationsIEP-12。请注意,通常只有在一个以上的节点一次离开群集时,才有可能。