2016-11-17 41 views
2

我有一个使用SoftIndexFileStore进行持久性设置的Infinispan(8.2.4 Final)集群缓存存储。如何处理Infinispan持久缓存存储中的SoftIndexFileStore的旧文件?

该文档指出,如果条目过期,压缩程序无法清除已清除的条目,并且磁盘使用量将超时。从用户指南:

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

我的大部分条目都过期了,但有一些需要无限期保存,这意味着我不能每隔一段时间简单地运行一次清理作业来删除所有数据文件。

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

回答

2

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

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

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

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

+0

所以现在我没有简单的方法来处理这个增加的磁盘使用情况。我将不得不创建某种程序来停止一个节点,删除所有数据和索引文件,然后使节点恢复,以便它加入群集并复制所有数据。 – bitwalker

+0

还在习惯SO,不知道编辑评论的5分钟规则。只是想感谢你的回答。 – bitwalker

+0

是的,我不得不承认,在设计商店时,我还没有尽快过期。请在https://issues.jboss.org/上提出请求此功能的问题 –