[ 
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)

Reply via email to