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

Aleksandr Sorokoumov commented on CASSANDRA-15215:
--------------------------------------------------

The issue was caused by the slow path inĀ 
{{BufferedDataOutputStreamPlus#writeBytes}} when the underlying buffer has less 
than 8 bytes remaining. Previously, this method fell back to {{writeSlow}}. 
This was not correct because it writes N least significant bytes to the wire. 
As {{writeBytes}} treats the register as an optimized version of a byte array, 
it should write N most significant bytes instead. I added a test case that 
isolates the issue and fixed it in all branches. 

[~benedict] can you please re-run the CI?

> VIntCoding should read and write more efficiently
> -------------------------------------------------
>
>                 Key: CASSANDRA-15215
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-15215
>             Project: Cassandra
>          Issue Type: Bug
>          Components: Local/Compaction, Local/SSTable
>            Reporter: Benedict Elliott Smith
>            Assignee: Aleksandr Sorokoumov
>            Priority: Normal
>             Fix For: 3.0.x, 3.11.x, 4.x
>
>         Attachments: testWriteRandomLongDOP_final.png, 
> writeUnsignedVInt_megamorphic_BB.png, writeUnsignedVInt_megamorphic_DOP.png
>
>          Time Spent: 40m
>  Remaining Estimate: 0h
>
> Most vints occupy significantly fewer than 8 bytes, and most buffers have >= 
> 8 bytes spare, in which case we can construct the relevant bytes in a 
> register and memcpy them to the correct position.  Since we read and write a 
> lot of vints, this waste is probably measurable, particularly during 
> compaction and flush, and can probably be considered a performance bug.



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to