[
https://issues.apache.org/jira/browse/OAK-2879?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Francesco Mari updated OAK-2879:
--------------------------------
Attachment: OAK-2879-03.patch
[^OAK-2879-03.patch] fixes and improves the previous one. In particular,
- the {{CancelableDiff}} is used consistently during the whole compaction
process.
- the {{CompactionStrategy}} cancels compaction when the available disk space
is less than a quarter of the current repository size.
- {{size()}} is not used during the periodic disk space check. I maintain an
estimated size of the repository by hooking into the {{writeSegment()}} and
{{cleanuo()}} methods. {{size()}} is used only once during initialisation.
Contention is reduced to a minimum.
- the cancelation condition is represented by a {{Supplier<Boolean>}}, whose
implementation is now a detail of the {{FileStore}} itself.
[~mduerig], what do you think?
> Compaction should check for required disk space before running
> --------------------------------------------------------------
>
> Key: OAK-2879
> URL: https://issues.apache.org/jira/browse/OAK-2879
> Project: Jackrabbit Oak
> Issue Type: Sub-task
> Components: segmentmk
> Reporter: Michael Dürig
> Assignee: Francesco Mari
> Labels: compaction, doc-impacting, gc, resilience
> Fix For: 1.3.8
>
> Attachments: OAK-2879-01.patch, OAK-2879-02.patch, OAK-2879-03.patch
>
>
> In the worst case compaction doubles the repository size while running. As
> this is somewhat unexpected we should check whether there is enough free disk
> space before running compaction and log a warning otherwise. This is to avoid
> a common source of running out of disk space and ending up with a corrupted
> repository.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)