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

Aleksey Yeschenko commented on CASSANDRA-15410:
-----------------------------------------------

I don't want to trust {{encodedSize()}} implementations, really (we had 
mismatch bugs in those calculations before).

Now, if you inspect the usages of {{CBUtil#writeString()}} you'll notice that 
absolute most of those calls are performed strictly on ASCII strings. Keyspace 
names, table names, type names, function names, field names, enums - that can 
*only* be ASCII due to our grammar limitations.

Of the strings in messages C* server writes - majority being in 
{{ResultSet.ResultMetadata}} - none of the strings ever go beyond ASCII. So we 
could introduce a special-case {{CBUtil#writeASCIIString()}} to use 
{{ByteBufUtil#writeAscii()}} and use that throughout, that should resolve the 
issue. And you'll get a further speed bump from the loop removal in ascii 
string size calculation in all the {{encodedSize()}} methods.

> Avoid over-allocation of bytes for UTF8 string serialization 
> -------------------------------------------------------------
>
>                 Key: CASSANDRA-15410
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-15410
>             Project: Cassandra
>          Issue Type: Improvement
>          Components: Messaging/Client
>            Reporter: Yifan Cai
>            Assignee: Yifan Cai
>            Priority: Normal
>             Fix For: 4.0
>
>
> In the current message encoding implementation, it first calculates the 
> `encodeSize` and allocates the bytebuffer with that size. 
> However, during encoding, it assumes the worst case of writing UTF8 string to 
> allocate bytes, i.e. assuming each letter takes 3 bytes. 
> The over-estimation further leads to resizing the underlying array and data 
> copy. 



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org

Reply via email to