0

我们在清理 cronjob 和 riak 时发生了一些奇怪的事情:

我们存储的对象(邮箱)有一个 2i 用于修改日期(这是一个 unix 时间戳)。有一个 cronjob 经常运行删除所有在 180 天内未修改的邮箱。但是,我们发现有证据表明,过去三天内修改过的一些(非常少)邮箱被此 cronjob 删除了。在对每一行代码进行多次审查和调试之后,我确信这不是 cronjob 的问题。

  • 我还追溯了对该存储桶的所有删除调用 - 没有其他人正在删除那里的对象。
  • 当然,我还检查了 Riak 以读取带有 r=ALL 的邮箱:它们肯定已经消失了。(并且它们与 w=QUORUM 一起存储)
  • 我还检查了日志:更新邮箱确实成功(写操作没有报告错误)

这给我留下了两个可能的原因:

  • riak 丢失数据(我不愿意轻易相信)
  • 二级索引已损坏,对它们的查询返回错误的键

所以我的问题是:

  • 2is真的可以打破吗?
  • 可以验证吗?
  • 我错过了一些完全不同的东西吗?

干杯,马蒂亚斯

4

1 回答 1

1

Riak 中的二级索引查询是覆盖查询,这意味着它们只会使用其中一个存储的副本,而不执行仲裁读取。

当您使用 w=QUORUM 编写代码时,如果您将 n_val 设置为 3 或更高,而操作仍被视为成功,则可能无法更新一个(或多个)副本。如果这是为覆盖查询选择的一个,您最终可能会根据旧值删除。为了避免这种情况,您需要使用 w=ALL 执行更新。

于 2014-07-23T08:29:20.887 回答