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

Michael Dürig commented on OAK-3690:
------------------------------------

Taking this one up again lead to a bit of refactoring. Basically I had to rip 
the {{SegmentStore}} apart. Now {{SegmentStore}} only consists of the methods 
dealing with reading and writing of segments. The methods pertaining to 
{{SegmentId}} instances moved to a new interface {{SegmentIdProvider}}, which 
is actually implemented by the {{SegmentTracker}}. These changes allow me to 
reduce passing {{SegmentStore}} and {{SegmentTracker}} instances around but 
instead rely on an {{SegmentIdProvider}} instance. Finally this results in the 
desired decoupling of {{SegmentBufferWriter}} and related with the additional 
goodie that the counter for {{SegmentId}} instances is not part of 
{{SegmentIdProvider}} and does not need to be passed in separately any more. 

[~frm] as you were involved in similar refactorings lately, could you have a 
look at this: https://github.com/mduerig/jackrabbit-oak/commits/OAK-3690? I 
structured it into a couple of commits with the commit messages explaining 
further details. 

> Decouple SegmentBufferWriter from SegmentStore
> ----------------------------------------------
>
>                 Key: OAK-3690
>                 URL: https://issues.apache.org/jira/browse/OAK-3690
>             Project: Jackrabbit Oak
>          Issue Type: Technical task
>          Components: segment-tar
>            Reporter: Michael Dürig
>            Assignee: Michael Dürig
>              Labels: technical_debt
>             Fix For: 1.8
>
>
> Currently {{SegmentBufferWriter.flush()}} directly calls 
> {{SegmentStore.writeSegment()}} once the current segment does not have enough 
> space for the next record. We should try to cut this dependency as 
> {{SegmentBufferWriter}} should only be concerned with providing buffers for 
> segments. Actually writing these to the store should be handled by a higher 
> level component. 
> A number of deadlock (e.g. (OAK-2560, OAK-3179, OAK-3264) we have seen is one 
> manifestation of this troublesome dependency. 



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to