reduce copies on read, write paths
----------------------------------
Key: CASSANDRA-1788
URL: https://issues.apache.org/jira/browse/CASSANDRA-1788
Project: Cassandra
Issue Type: Improvement
Components: Core
Reporter: Jonathan Ellis
Assignee: Jonathan Ellis
Priority: Minor
Fix For: 0.7.0
Currently, we do _three_ unnecessary copies (that is, writing to the socket is
necessary; any other copies made are overhead) for each message:
- constructing the Message body byte[] (this is typically a call to a
ICompactSerializer[2] serialize method, but sometimes we cheat e.g. in
SchemaCheckVerbHandler's reply)
- which is copied to a buffer containing the entire Message (i.e. including
Header) when sendOneWay calls Message.serializer.serialize()
- which is copied to a newly-allocated ByteBuffer when sendOneWay calls packIt
- which is what we write to the socket
For deserialize we perform a similar orgy of copies:
- IncomingTcpConnection reads the Message length, allocates a byte[], and reads
the serialized Message into it
- ITcpC then calls Message.serializer().deserialize, which allocates a new
byte[] for the body and copies that part
- finally, the verbHandler (determined by the now-deserialized Message header)
deserializes the actual object represented by the body
Most of these are out of scope for 0.7 but I think we can at least elide the
last copy on the write path and the first on the read.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.