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

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

One way of decoupling would be to hand a 'queue' to the {{SegmentBufferWriter}} 
instead of the {{SegmentStore}}. In a first step that 'queue' would be directly 
backed by the {{SegmentStore}}, thus apart from the abstraction noting changes. 
In a next step that 'queue' could be replaced by a real producer/consumer queue 
pushing segments from the {{SegmentBufferWritter}} to the {{SegmentStore}} on a 
background thread (e.g. the flush thread). 

> Decouple SegmentBufferWriter from SegmentStore
> ----------------------------------------------
>
>                 Key: OAK-3690
>                 URL: https://issues.apache.org/jira/browse/OAK-3690
>             Project: Jackrabbit Oak
>          Issue Type: Technical task
>          Components: segmentmk
>            Reporter: Michael Dürig
>              Labels: technical_debt
>             Fix For: 1.4
>
>
> 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.4#6332)

Reply via email to