Alexander Menshikov created IGNITE-8054:
-------------------------------------------
Summary: Let serialize only valuable part of GridLongList
Key: IGNITE-8054
URL:
https://issues.apache.org/jira/browse/IGNITE-8054 Project: Ignite
Issue Type: Bug
Components: messaging
Affects Versions: 2.4
Reporter: Alexander Menshikov
Fix For: 2.5
Here in GridLongList we serialize all elements and don't take into account `idx` value:
{code:java}
@Override public boolean writeTo(ByteBuffer buf, MessageWriter writer) {
writer.setBuffer(buf);
if (!writer.isHeaderWritten()) {
if (!writer.writeHeader(directType(), fieldsCount()))
return false;
writer.onHeaderWritten();
}
switch (writer.state()) {
case 0:
if (!writer.writeLongArray("arr", arr))
return false;
writer.incrementState();
case 1:
if (!writer.writeInt("idx", idx))
return false;
writer.incrementState();
}
return true;
} {code}
Which is not happening in another serialization method in the same class:
{code:java}
public static void writeTo(DataOutput out, @Nullable GridLongList list) throws IOException {
out.writeInt(list != null ? list.idx : -1);
if (list != null) {
for (int i = 0; i < list.idx; i++)
out.writeLong(list.arr[i]);
}
} {code}
So, we can simply reduce messages size by sending only a valuable part of the array.
I created this issue according to a discussion on the mailing list:
http://apache-ignite-developers.2346864.n4.nabble.com/Optimize-GridLongList-serialization-td28571.html--
This message was sent by Atlassian JIRA
(v7.6.3#76005)