如何处理Infinispan持久缓存存储中SoftIndexFileStore的旧文件?

时间:2016-11-17 10:23:52

标签: infinispan

我使用SoftIndexFileStore为Infinispan(8.2.4 Final)设置了一个集群缓存存储区。

该文档指出,如果条目到期,则压缩器无法清除已清除的条目,并且磁盘使用量将超时。来自用户指南:

  

当条目存储过期时,SIFS无法检测到某些条目   这些条目已过期。因此,这样的旧文件不会   压缩(未实现方法AdvancedStore.purgeExpired())。   这可能导致文件系统空间使用过多。

我的大多数条目都会过期,但有些条目需要无限期地保留,这意味着我不能在每次删除所有数据文件时简单地运行清理作业。

如何处理这种浪费的磁盘使用情况?经过几周的运行后,我看到很多文件在几周内都没有被修改过。删除尚未修改的旧文件是否安全,例如不到一个月前?

1 个答案:

答案 0 :(得分:2)

没有;旧文件不会被再次修改(它们被写入一次,然后被认为是不可变的,直到被删除)。手动删除它们可能会导致失败,因为这些文件在索引中被引用。

令人遗憾的是,当迭代存储并且条目被发现过期时,Compactor.free()未被调用,因为可能存在多个并发迭代,并且我们最终可能会多次调用它以进行单次输入。

正确的解决方案是实现定期(或JMX触发)过程,该过程遍历旧文件,计算过期条目占用的空间并调度超过某个压缩阈值的文件。这应该进入Compactor。有关一般设计说明,请参阅SIFS javadoc

如果您有兴趣开发此功能,并且想要进一步讨论,请转到Infinispan forum