Michael Dürig commented on OAK-6507:

Looking at the logic in {{Reclaimers.newOldReclaimer}} I tried to come up with 
a simpler approach (which involves changing the semantics of {{GCGeneration}}: 
basically a segments is reclaimable iff it is old and not in the same 
compaction tail as the segment of the current head state. A segment is old iff 
was created by a gc (full or tail) more than the number of retained generations 
in the past. A segment is in the same compaction tail as another one iff both 
share the same full generation. Encoding this definition and working it 
backwards results in the following fields we need to record in the segments: 
the gc generation (incremented on each gc run, full or tail). The full 
generation (incremented only on full gc runs) and an compaction flag indicating 
whether a segment has been written by a compaction operation (either full or 

> Cleanup incorrectly removes base state created by full compaction
> -----------------------------------------------------------------
>                 Key: OAK-6507
>                 URL: https://issues.apache.org/jira/browse/OAK-6507
>             Project: Jackrabbit Oak
>          Issue Type: Bug
>          Components: segment-tar
>            Reporter: Francesco Mari
>            Assignee: Francesco Mari
>             Fix For: 1.8, 1.7.6
> The predicate used to mark segments for cleanup marks segments written by 
> full compactions. These segments are needed to reconstruct the full state of 
> the repository, together with the state built by tail compactions.

This message was sent by Atlassian JIRA

Reply via email to