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.

Reply via email to