[ 
https://issues.apache.org/jira/browse/OAK-1932?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14053694#comment-14053694
 ] 

Jukka Zitting commented on OAK-1932:
------------------------------------

bq. I beg to differ  it could happen on normal compact operations too.

If you unroll the loop, the sequence of calls is something like this:

{code}
Compactor compactor = new Compactor(...);
compactor.compact(EMPTY_NODE, B);
compactor.compact(A, B);
compactor.compact(B, C);
{code}

Since we use the same {{Compactor}} instance, the end result is the same 
regardless of whether a single {{NodeBuilder}} is used for all {{compact()}} 
calls (like it used to be) or a new NodeBuilder is instantiated for each call 
(which is what the patch did). The attached test case uses a different call 
pattern, for which the class originally wasn't designed for.

Anyway, as mentioned above, the change does make the {{Compactor}} easier to 
reuse for other cases, so it's clearly an improvement.

> TarMK compaction can create mixed segments
> ------------------------------------------
>
>                 Key: OAK-1932
>                 URL: https://issues.apache.org/jira/browse/OAK-1932
>             Project: Jackrabbit Oak
>          Issue Type: Bug
>          Components: core, segmentmk
>    Affects Versions: 1.0.1
>            Reporter: Jukka Zitting
>            Assignee: Jukka Zitting
>         Attachments: Compactor.java.patch, CompactorTest.java.patch
>
>
> As described in http://markmail.org/message/ujkqdlthudaortxf, commits that 
> occur while the compaction operation is running can make the compacted 
> segments contain references to older data segments, which prevents old data 
> from being reclaimed during cleanup.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to