Ilya Kazakov created IGNITE-13856:
-------------------------------------

             Summary: Superlinear performance of 
DirectByteBufferStreamImplV2.writeMessage(msg, writer)
                 Key: IGNITE-13856
                 URL: https://issues.apache.org/jira/browse/IGNITE-13856
             Project: Ignite
          Issue Type: Improvement
          Components: binary
    Affects Versions: 2.9
            Reporter: Ilya Kazakov
            Assignee: Ilya Kazakov
         Attachments: LongStringSQL.java

{code:java}
@Override public void writeMessage(Message msg, MessageWriter writer) { 
    if (msg != null) { 
        if (buf.hasRemaining()) { 
            try { 
                writer.beforeInnerMessageWrite()
                writer.setCurrentWriteClass(msg.getClass()); 
                lastFinished = msg.writeTo(buf, writer); 
            } 
            finally { 
                writer.afterInnerMessageWrite(lastFinished); 
            }
        }
    } 
}{code}
It is going to do multiple invocations of msg.writeTo(). If msg is 
GridH2String, it will to val.getBytes() on every invocation of writeTo(), 
leading to spiking of CPU and RAM usage.
We should change this module to make sure that all serialization happens only 
once.

 

Reproducer is attached. If we increase string size in 10 times, then the 
execution time increases more than 10 times. 



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

Reply via email to