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

Benedict commented on CASSANDRA-3578:
-------------------------------------

bq. My point is that the "no room" case can be a false positive when 
discardUnusedTail has consumed space that isn't actually written to.
Check out sync() (the bit inside if (nextMarker < 0) { }) - we check for this 
by checking the discardedTailFrom property, and write a marker if there's room 
at the start of the discarded region.


bq. Which part? The nonclemature is obviously correct this way.

We point next to next, which is absolutely correct! In my book, though maybe we 
have different books :-) The nextMarker we define in the sync() method is the 
*next* value we want to set the nextSyncMarkerPosition, and it is also the next 
sync marker we will write a length to at the next sync (during the current sync 
we only zero it). Although you could legitimately consider it the previous tail 
marker, I don't because I consider the file to be a list of effectively 
[length:data][length:data][0:undefined]. The tail marker is a convenience of an 
unitialised head marker. I would prefer to rename the local variable 'offset' 
to 'lastMarker'

The isFullySynced() is necessary to avoid the race condition you raised in your 
previous comment.


> Multithreaded commitlog
> -----------------------
>
>                 Key: CASSANDRA-3578
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-3578
>             Project: Cassandra
>          Issue Type: Improvement
>            Reporter: Jonathan Ellis
>            Assignee: Benedict
>            Priority: Minor
>              Labels: performance
>         Attachments: 0001-CASSANDRA-3578.patch, ComitlogStress.java, 
> Current-CL.png, Multi-Threded-CL.png, TestEA.java, latency.svg, oprate.svg, 
> parallel_commit_log_2.patch
>
>
> Brian Aker pointed out a while ago that allowing multiple threads to modify 
> the commitlog simultaneously (reserving space for each with a CAS first, the 
> way we do in the SlabAllocator.Region.allocate) can improve performance, 
> since you're not bottlenecking on a single thread to do all the copying and 
> CRC computation.
> Now that we use mmap'd CommitLog segments (CASSANDRA-3411) this becomes 
> doable.
> (moved from CASSANDRA-622, which was getting a bit muddled.)



--
This message was sent by Atlassian JIRA
(v6.1#6144)

Reply via email to