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)