This is an automated email from the ASF dual-hosted git repository.

shishkovilja pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git


The following commit(s) were added to refs/heads/master by this push:
     new a957edc6f6f IGNITE-25991 Refactor GridLongList (#12335)
a957edc6f6f is described below

commit a957edc6f6f7f017ae4831f223e427df83b74f32
Author: Ilya Shishkov <[email protected]>
AuthorDate: Tue Sep 16 20:53:49 2025 +0300

    IGNITE-25991 Refactor GridLongList (#12335)
---
 .../internal/MessageSerializerGenerator.java       |   9 +
 .../commandline/indexreader/IgniteIndexReader.java |   2 +-
 .../ignite/internal/IgniteCodeGeneratingFail.java  |   2 +
 .../internal/direct/DirectMessageReader.java       |  12 +
 .../internal/direct/DirectMessageWriter.java       |  10 +
 .../direct/stream/DirectByteBufferStream.java      |  29 ++
 .../communication/GridIoMessageFactory.java        |   2 -
 .../GridDhtAtomicDeferredUpdateResponse.java       |   4 +-
 .../dht/atomic/GridDhtAtomicUpdateRequest.java     |  20 +-
 .../atomic/GridNearAtomicFullUpdateRequest.java    |   8 +-
 .../cache/persistence/CacheDataRowAdapter.java     |   2 +-
 .../cache/persistence/freelist/PagesList.java      |   2 +-
 .../cache/persistence/tree/BPlusTree.java          |   2 +-
 .../apache/ignite/internal/util/GridLongList.java  | 143 +--------
 .../communication/MessageCollectionItemType.java   |   5 +-
 .../extensions/communication/MessageReader.java    |   8 +
 .../extensions/communication/MessageWriter.java    |  10 +
 ...tractCommunicationMessageSerializationTest.java |  14 +
 .../apache/ignite/util/GridLongListSelfTest.java   | 340 ++++-----------------
 .../resources/codegen/TestCollectionsMessage.java  |  14 +-
 .../codegen/TestCollectionsMessageSerializer.java  |  14 +
 .../src/test/resources/codegen/TestMapMessage.java |  25 +-
 .../codegen/TestMapMessageSerializer.java          |  28 ++
 .../src/test/resources/codegen/TestMessage.java    |  16 +-
 .../resources/codegen/TestMessageSerializer.java   |  14 +
 25 files changed, 298 insertions(+), 437 deletions(-)

diff --git 
a/modules/codegen2/src/main/java/org/apache/ignite/internal/MessageSerializerGenerator.java
 
b/modules/codegen2/src/main/java/org/apache/ignite/internal/MessageSerializerGenerator.java
index 73dff879e1a..f34346da3b0 100644
--- 
a/modules/codegen2/src/main/java/org/apache/ignite/internal/MessageSerializerGenerator.java
+++ 
b/modules/codegen2/src/main/java/org/apache/ignite/internal/MessageSerializerGenerator.java
@@ -370,6 +370,9 @@ class MessageSerializerGenerator {
             else if (assignableFrom(type, 
type("org.apache.ignite.internal.processors.cache.CacheObject")))
                 returnFalseIfWriteFailed(write, "writer.writeCacheObject", 
getExpr);
 
+            else if (assignableFrom(type, 
type("org.apache.ignite.internal.util.GridLongList")))
+                returnFalseIfWriteFailed(write, "writer.writeGridLongList", 
getExpr);
+
             else if (assignableFrom(type, type(MESSAGE_INTERFACE)))
                 returnFalseIfWriteFailed(write, "writer.writeMessage", 
getExpr);
 
@@ -499,6 +502,9 @@ class MessageSerializerGenerator {
             else if (assignableFrom(type, 
type("org.apache.ignite.internal.processors.cache.CacheObject")))
                 returnFalseIfReadFailed(name, "reader.readCacheObject");
 
+            else if (assignableFrom(type, 
type("org.apache.ignite.internal.util.GridLongList")))
+                returnFalseIfReadFailed(name, "reader.readGridLongList");
+
             else if (assignableFrom(type, type(MESSAGE_INTERFACE)))
                 returnFalseIfReadFailed(name, "reader.readMessage");
 
@@ -565,6 +571,9 @@ class MessageSerializerGenerator {
             if (sameType(type, 
"org.apache.ignite.internal.processors.cache.CacheObject"))
                 return "CACHE_OBJECT";
 
+            if (sameType(type, "org.apache.ignite.internal.util.GridLongList"))
+                return "GRID_LONG_LIST";
+
             PrimitiveType primitiveType = unboxedType(type);
 
             if (primitiveType != null)
diff --git 
a/modules/control-utility/src/main/java/org/apache/ignite/internal/commandline/indexreader/IgniteIndexReader.java
 
b/modules/control-utility/src/main/java/org/apache/ignite/internal/commandline/indexreader/IgniteIndexReader.java
index e877e509ad5..1391755b3e5 100644
--- 
a/modules/control-utility/src/main/java/org/apache/ignite/internal/commandline/indexreader/IgniteIndexReader.java
+++ 
b/modules/control-utility/src/main/java/org/apache/ignite/internal/commandline/indexreader/IgniteIndexReader.java
@@ -492,7 +492,7 @@ public class IgniteIndexReader implements AutoCloseable {
                     io.getBucketsData(addr, data);
 
                     for (Map.Entry<Integer, GridLongList> e : data.entrySet()) 
{
-                        List<Long> listIds = 
LongStream.of(e.getValue().array())
+                        List<Long> listIds = 
LongStream.of(e.getValue().arrayCopy())
                             .map(IgniteIndexReader::normalizePageId)
                             .boxed()
                             .collect(toList());
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/IgniteCodeGeneratingFail.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/IgniteCodeGeneratingFail.java
index 578f0b8e6f1..4938dd48688 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/IgniteCodeGeneratingFail.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/IgniteCodeGeneratingFail.java
@@ -24,9 +24,11 @@ import java.lang.annotation.Target;
 
 /**
  * Annotates fields that code generator should not be override.
+ * Deprecated, see {@link MessageProcessor} and {@link 
MessageSerializerGenerator} for details.
  */
 @Retention(RetentionPolicy.RUNTIME)
 @Target(ElementType.TYPE)
+@Deprecated
 public @interface IgniteCodeGeneratingFail {
     // No-op.
 }
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/direct/DirectMessageReader.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/direct/DirectMessageReader.java
index 77d8a10f8d1..5528e42e1b9 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/direct/DirectMessageReader.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/direct/DirectMessageReader.java
@@ -29,6 +29,7 @@ import 
org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion;
 import org.apache.ignite.internal.processors.cache.CacheObject;
 import org.apache.ignite.internal.processors.cache.KeyCacheObject;
 import 
org.apache.ignite.internal.processors.cacheobject.IgniteCacheObjectProcessor;
+import org.apache.ignite.internal.util.GridLongList;
 import org.apache.ignite.internal.util.tostring.GridToStringInclude;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.lang.IgniteOutClosure;
@@ -331,6 +332,17 @@ public class DirectMessageReader implements MessageReader {
         return key;
     }
 
+    /** {@inheritDoc} */
+    @Override public GridLongList readGridLongList() {
+        DirectByteBufferStream stream = state.item().stream;
+
+        GridLongList ll = stream.readGridLongList();
+
+        lastRead = stream.lastFinished();
+
+        return ll;
+    }
+
     /** {@inheritDoc} */
     @Override public <T> T[] readObjectArray(MessageCollectionItemType 
itemType, Class<T> itemCls) {
         DirectByteBufferStream stream = state.item().stream;
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/direct/DirectMessageWriter.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/direct/DirectMessageWriter.java
index 0b68dbd3fd5..fb51a2e5d56 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/direct/DirectMessageWriter.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/direct/DirectMessageWriter.java
@@ -28,6 +28,7 @@ import 
org.apache.ignite.internal.direct.stream.DirectByteBufferStream;
 import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion;
 import org.apache.ignite.internal.processors.cache.CacheObject;
 import org.apache.ignite.internal.processors.cache.KeyCacheObject;
+import org.apache.ignite.internal.util.GridLongList;
 import org.apache.ignite.internal.util.tostring.GridToStringInclude;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.lang.IgniteOutClosure;
@@ -303,6 +304,15 @@ public class DirectMessageWriter implements MessageWriter {
         return stream.lastFinished();
     }
 
+    /** {@inheritDoc} */
+    @Override public boolean writeGridLongList(@Nullable GridLongList ll) {
+        DirectByteBufferStream stream = state.item().stream;
+
+        stream.writeGridLongList(ll);
+
+        return stream.lastFinished();
+    }
+
     /** {@inheritDoc} */
     @Override public <T> boolean writeObjectArray(T[] arr, 
MessageCollectionItemType itemType) {
         DirectByteBufferStream stream = state.item().stream;
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java
index c6da5fe96da..2c6a99b61c3 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java
@@ -33,6 +33,7 @@ import 
org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion;
 import org.apache.ignite.internal.processors.cache.CacheObject;
 import org.apache.ignite.internal.processors.cache.KeyCacheObject;
 import 
org.apache.ignite.internal.processors.cacheobject.IgniteCacheObjectProcessor;
+import org.apache.ignite.internal.util.GridLongList;
 import org.apache.ignite.internal.util.GridUnsafe;
 import org.apache.ignite.internal.util.tostring.GridToStringExclude;
 import org.apache.ignite.internal.util.typedef.internal.S;
@@ -43,6 +44,7 @@ import 
org.apache.ignite.plugin.extensions.communication.MessageCollectionItemTy
 import org.apache.ignite.plugin.extensions.communication.MessageFactory;
 import org.apache.ignite.plugin.extensions.communication.MessageReader;
 import org.apache.ignite.plugin.extensions.communication.MessageWriter;
+import org.jetbrains.annotations.Nullable;
 
 import static org.apache.ignite.internal.util.GridUnsafe.BIG_ENDIAN;
 import static org.apache.ignite.internal.util.GridUnsafe.BYTE_ARR_OFF;
@@ -862,6 +864,16 @@ public class DirectByteBufferStream {
         }
     }
 
+    /**
+     * @param val Value.
+     */
+    public void writeGridLongList(@Nullable GridLongList val) {
+        if (val != null)
+            writeLongArray(val.array(), val.size());
+        else
+            writeInt(-1);
+    }
+
     /**
      * @param msg Message.
      * @param writer Writer.
@@ -1492,6 +1504,15 @@ public class DirectByteBufferStream {
         return cacheObjProc.toCacheObject(null, cacheObjType, cacheObjArr);
     }
 
+    /**
+     * @return Value.
+     */
+    public GridLongList readGridLongList() {
+        long[] arr = readLongArray();
+
+        return arr != null ? new GridLongList(arr) : null;
+    }
+
     /**
      * @param reader Reader.
      * @return Message.
@@ -2052,6 +2073,11 @@ public class DirectByteBufferStream {
 
                 break;
 
+            case GRID_LONG_LIST:
+                writeGridLongList((GridLongList)val);
+
+                break;
+
             case MSG:
                 try {
                     if (val != null)
@@ -2147,6 +2173,9 @@ public class DirectByteBufferStream {
             case CACHE_OBJECT:
                 return readCacheObject();
 
+            case GRID_LONG_LIST:
+                return readGridLongList();
+
             case MSG:
                 return readMessage(reader);
 
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessageFactory.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessageFactory.java
index 804df58ac83..b0f1f0e62ad 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessageFactory.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessageFactory.java
@@ -196,7 +196,6 @@ import 
org.apache.ignite.internal.processors.service.ServiceSingleNodeDeployment
 import 
org.apache.ignite.internal.processors.service.ServiceSingleNodeDeploymentResultBatch;
 import org.apache.ignite.internal.util.GridByteArrayList;
 import org.apache.ignite.internal.util.GridIntList;
-import org.apache.ignite.internal.util.GridLongList;
 import org.apache.ignite.internal.util.UUIDCollectionMessage;
 import org.apache.ignite.internal.util.distributed.SingleNodeMessage;
 import org.apache.ignite.plugin.extensions.communication.MessageFactory;
@@ -302,7 +301,6 @@ public class GridIoMessageFactory implements 
MessageFactoryProvider {
         factory.register((short)81, MetadataResponseMessage::new);
         factory.register((short)82, JobStealingRequest::new, new 
JobStealingRequestSerializer());
         factory.register((short)84, GridByteArrayList::new);
-        factory.register((short)85, GridLongList::new);
         factory.register((short)86, GridCacheVersion::new, new 
GridCacheVersionSerializer());
         factory.register((short)87, GridDhtPartitionExchangeId::new, new 
GridDhtPartitionExchangeIdSerializer());
         factory.register((short)88, GridCacheReturn::new);
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicDeferredUpdateResponse.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicDeferredUpdateResponse.java
index 5742604ccfc..cd4fcc2ae5a 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicDeferredUpdateResponse.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicDeferredUpdateResponse.java
@@ -116,7 +116,7 @@ public class GridDhtAtomicDeferredUpdateResponse extends 
GridCacheIdMessage impl
 
         switch (writer.state()) {
             case 4:
-                if (!writer.writeMessage(futIds))
+                if (!writer.writeGridLongList(futIds))
                     return false;
 
                 writer.incrementState();
@@ -135,7 +135,7 @@ public class GridDhtAtomicDeferredUpdateResponse extends 
GridCacheIdMessage impl
 
         switch (reader.state()) {
             case 4:
-                futIds = reader.readMessage();
+                futIds = reader.readGridLongList();
 
                 if (!reader.isLastRead())
                     return false;
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicUpdateRequest.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicUpdateRequest.java
index 9c56300a83b..40393bf68b0 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicUpdateRequest.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicUpdateRequest.java
@@ -555,7 +555,7 @@ public class GridDhtAtomicUpdateRequest extends 
GridDhtAtomicAbstractUpdateReque
 
         switch (writer.state()) {
             case 12:
-                if (!writer.writeMessage(conflictExpireTimes))
+                if (!writer.writeGridLongList(conflictExpireTimes))
                     return false;
 
                 writer.incrementState();
@@ -597,7 +597,7 @@ public class GridDhtAtomicUpdateRequest extends 
GridDhtAtomicAbstractUpdateReque
                 writer.incrementState();
 
             case 19:
-                if (!writer.writeMessage(nearExpireTimes))
+                if (!writer.writeGridLongList(nearExpireTimes))
                     return false;
 
                 writer.incrementState();
@@ -609,7 +609,7 @@ public class GridDhtAtomicUpdateRequest extends 
GridDhtAtomicAbstractUpdateReque
                 writer.incrementState();
 
             case 21:
-                if (!writer.writeMessage(nearTtls))
+                if (!writer.writeGridLongList(nearTtls))
                     return false;
 
                 writer.incrementState();
@@ -633,13 +633,13 @@ public class GridDhtAtomicUpdateRequest extends 
GridDhtAtomicAbstractUpdateReque
                 writer.incrementState();
 
             case 25:
-                if (!writer.writeMessage(ttls))
+                if (!writer.writeGridLongList(ttls))
                     return false;
 
                 writer.incrementState();
 
             case 26:
-                if (!writer.writeMessage(updateCntrs))
+                if (!writer.writeGridLongList(updateCntrs))
                     return false;
 
                 writer.incrementState();
@@ -664,7 +664,7 @@ public class GridDhtAtomicUpdateRequest extends 
GridDhtAtomicAbstractUpdateReque
 
         switch (reader.state()) {
             case 12:
-                conflictExpireTimes = reader.readMessage();
+                conflictExpireTimes = reader.readGridLongList();
 
                 if (!reader.isLastRead())
                     return false;
@@ -720,7 +720,7 @@ public class GridDhtAtomicUpdateRequest extends 
GridDhtAtomicAbstractUpdateReque
                 reader.incrementState();
 
             case 19:
-                nearExpireTimes = reader.readMessage();
+                nearExpireTimes = reader.readGridLongList();
 
                 if (!reader.isLastRead())
                     return false;
@@ -736,7 +736,7 @@ public class GridDhtAtomicUpdateRequest extends 
GridDhtAtomicAbstractUpdateReque
                 reader.incrementState();
 
             case 21:
-                nearTtls = reader.readMessage();
+                nearTtls = reader.readGridLongList();
 
                 if (!reader.isLastRead())
                     return false;
@@ -768,7 +768,7 @@ public class GridDhtAtomicUpdateRequest extends 
GridDhtAtomicAbstractUpdateReque
                 reader.incrementState();
 
             case 25:
-                ttls = reader.readMessage();
+                ttls = reader.readGridLongList();
 
                 if (!reader.isLastRead())
                     return false;
@@ -776,7 +776,7 @@ public class GridDhtAtomicUpdateRequest extends 
GridDhtAtomicAbstractUpdateReque
                 reader.incrementState();
 
             case 26:
-                updateCntrs = reader.readMessage();
+                updateCntrs = reader.readGridLongList();
 
                 if (!reader.isLastRead())
                     return false;
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicFullUpdateRequest.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicFullUpdateRequest.java
index fdb25125b2c..557b0e5a3f6 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicFullUpdateRequest.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicFullUpdateRequest.java
@@ -427,13 +427,13 @@ public class GridNearAtomicFullUpdateRequest extends 
GridNearAtomicAbstractUpdat
 
         switch (writer.state()) {
             case 10:
-                if (!writer.writeMessage(conflictExpireTimes))
+                if (!writer.writeGridLongList(conflictExpireTimes))
                     return false;
 
                 writer.incrementState();
 
             case 11:
-                if (!writer.writeMessage(conflictTtls))
+                if (!writer.writeGridLongList(conflictTtls))
                     return false;
 
                 writer.incrementState();
@@ -494,7 +494,7 @@ public class GridNearAtomicFullUpdateRequest extends 
GridNearAtomicAbstractUpdat
 
         switch (reader.state()) {
             case 10:
-                conflictExpireTimes = reader.readMessage();
+                conflictExpireTimes = reader.readGridLongList();
 
                 if (!reader.isLastRead())
                     return false;
@@ -502,7 +502,7 @@ public class GridNearAtomicFullUpdateRequest extends 
GridNearAtomicAbstractUpdat
                 reader.incrementState();
 
             case 11:
-                conflictTtls = reader.readMessage();
+                conflictTtls = reader.readGridLongList();
 
                 if (!reader.isLastRead())
                     return false;
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/CacheDataRowAdapter.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/CacheDataRowAdapter.java
index 583322858f2..77579fe144f 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/CacheDataRowAdapter.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/CacheDataRowAdapter.java
@@ -813,7 +813,7 @@ public class CacheDataRowAdapter implements CacheDataRow {
 
         pageIds.add(pageId);
 
-        return pageIds.array();
+        return pageIds.arrayCopy();
     }
 
     /**
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/freelist/PagesList.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/freelist/PagesList.java
index 348ae7ce42f..98fe0a47ade 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/freelist/PagesList.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/freelist/PagesList.java
@@ -283,7 +283,7 @@ public abstract class PagesList extends DataStructure {
                     Stripe[] old = getBucket(bucket);
                     assert old == null;
 
-                    long[] upd = e.getValue().array();
+                    long[] upd = e.getValue().arrayCopy();
 
                     Stripe[] tails = new Stripe[upd.length];
 
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/tree/BPlusTree.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/tree/BPlusTree.java
index 060d357b025..782724dd5f4 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/tree/BPlusTree.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/tree/BPlusTree.java
@@ -6036,7 +6036,7 @@ public abstract class BPlusTree<L, T extends L> extends 
DataStructure implements
      * @return Array of page ids.
      */
     private long[] pages(boolean empty, Supplier<long[]> pages) {
-        return empty ? GridLongList.EMPTY_ARRAY : pages.get();
+        return empty ? U.EMPTY_LONGS : pages.get();
     }
 
     /**
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/util/GridLongList.java 
b/modules/core/src/main/java/org/apache/ignite/internal/util/GridLongList.java
index 20551186e6a..27f5dfc13b5 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/util/GridLongList.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/util/GridLongList.java
@@ -21,29 +21,21 @@ import java.io.Externalizable;
 import java.io.IOException;
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
-import java.nio.ByteBuffer;
 import java.util.Arrays;
 import java.util.NoSuchElementException;
-import org.apache.ignite.internal.IgniteCodeGeneratingFail;
-import org.apache.ignite.internal.util.typedef.F;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.internal.util.typedef.internal.SB;
-import org.apache.ignite.plugin.extensions.communication.Message;
-import org.apache.ignite.plugin.extensions.communication.MessageReader;
-import org.apache.ignite.plugin.extensions.communication.MessageWriter;
+
+import static org.apache.ignite.internal.util.IgniteUtils.EMPTY_LONGS;
 
 /**
  * Minimal list API to work with primitive longs. This list exists
  * to avoid boxing/unboxing when using standard list from Java.
  */
-@IgniteCodeGeneratingFail
-public class GridLongList implements Message, Externalizable {
+public class GridLongList implements Externalizable {
     /** */
     private static final long serialVersionUID = 0L;
 
-    /** Empty array. */
-    public static final long[] EMPTY_ARRAY = new long[0];
-
     /** */
     private long[] arr;
 
@@ -74,26 +66,6 @@ public class GridLongList implements Message, Externalizable 
{
         idx = arr.length;
     }
 
-    /**
-     * @param vals Values.
-     * @return List from values.
-     */
-    public static GridLongList asList(long... vals) {
-        if (F.isEmpty(vals))
-            return new GridLongList();
-
-        return new GridLongList(vals);
-    }
-
-    /**
-     * @param arr Array.
-     * @param size Size.
-     */
-    private GridLongList(long[] arr, int size) {
-        this.arr = arr;
-        idx = size;
-    }
-
     /** {@inheritDoc} */
     @Override public boolean equals(Object o) {
         if (this == o)
@@ -188,44 +160,6 @@ public class GridLongList implements Message, 
Externalizable {
         return arr[--idx];
     }
 
-    /**
-     * Returns (possibly reordered) copy of this list, excluding all elements 
of given list.
-     *
-     * @param l List of elements to remove.
-     * @return New list without all elements from {@code l}.
-     */
-    public GridLongList copyWithout(GridLongList l) {
-        assert l != null;
-
-        if (idx == 0)
-            return new GridLongList();
-
-        if (l.idx == 0)
-            return new GridLongList(Arrays.copyOf(arr, idx));
-
-        long[] newArr = Arrays.copyOf(arr, idx);
-        int newIdx = idx;
-
-        for (int i = 0; i < l.size(); i++) {
-            long rmVal = l.get(i);
-
-            for (int j = 0; j < newIdx; j++) {
-                if (newArr[j] == rmVal) {
-
-                    while (newIdx > 0 && newArr[newIdx - 1] == rmVal)
-                        newIdx--;
-
-                    if (newIdx > 0) {
-                        newArr[j] = newArr[newIdx - 1];
-                        newIdx--;
-                    }
-                }
-            }
-        }
-
-        return new GridLongList(newArr, newIdx);
-    }
-
     /**
      * @param i Index.
      * @return Value.
@@ -243,6 +177,13 @@ public class GridLongList implements Message, 
Externalizable {
         return idx;
     }
 
+    /**
+     * @return Array.
+     */
+    public long[] array() {
+        return arr;
+    }
+
     /**
      * @return {@code True} if this list has no elements.
      */
@@ -325,9 +266,9 @@ public class GridLongList implements Message, 
Externalizable {
     /**
      * @return Array copy.
      */
-    public long[] array() {
+    public long[] arrayCopy() {
         if (arr == null)
-            return EMPTY_ARRAY;
+            return EMPTY_LONGS;
 
         long[] res = new long[idx];
 
@@ -382,64 +323,4 @@ public class GridLongList implements Message, 
Externalizable {
 
         return this;
     }
-
-    /** {@inheritDoc} */
-    @Override public boolean writeTo(ByteBuffer buf, MessageWriter writer) {
-        writer.setBuffer(buf);
-
-        if (!writer.isHeaderWritten()) {
-            if (!writer.writeHeader(directType()))
-                return false;
-
-            writer.onHeaderWritten();
-        }
-
-        switch (writer.state()) {
-            case 0:
-                if (!writer.writeLongArray(arr, idx))
-                    return false;
-
-                writer.incrementState();
-
-            case 1:
-                if (!writer.writeInt(idx))
-                    return false;
-
-                writer.incrementState();
-
-        }
-
-        return true;
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean readFrom(ByteBuffer buf, MessageReader reader) {
-        reader.setBuffer(buf);
-
-        switch (reader.state()) {
-            case 0:
-                arr = reader.readLongArray();
-
-                if (!reader.isLastRead())
-                    return false;
-
-                reader.incrementState();
-
-            case 1:
-                idx = reader.readInt();
-
-                if (!reader.isLastRead())
-                    return false;
-
-                reader.incrementState();
-
-        }
-
-        return true;
-    }
-
-    /** {@inheritDoc} */
-    @Override public short directType() {
-        return 85;
-    }
 }
diff --git 
a/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageCollectionItemType.java
 
b/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageCollectionItemType.java
index 90e7c81d18a..b994809b77d 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageCollectionItemType.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageCollectionItemType.java
@@ -93,7 +93,10 @@ public enum MessageCollectionItemType {
     KEY_CACHE_OBJECT,
 
     /** Cache object. */
-    CACHE_OBJECT;
+    CACHE_OBJECT,
+
+    /** GridLongList */
+    GRID_LONG_LIST;
 
     /** Enum values. */
     private static final MessageCollectionItemType[] VALS = values();
diff --git 
a/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageReader.java
 
b/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageReader.java
index b0f55d1a851..e1622b60c41 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageReader.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageReader.java
@@ -26,6 +26,7 @@ import java.util.UUID;
 import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion;
 import org.apache.ignite.internal.processors.cache.CacheObject;
 import org.apache.ignite.internal.processors.cache.KeyCacheObject;
+import org.apache.ignite.internal.util.GridLongList;
 import org.apache.ignite.lang.IgniteUuid;
 
 /**
@@ -210,6 +211,13 @@ public interface MessageReader {
      */
     public KeyCacheObject readKeyCacheObject();
 
+    /**
+     * Reads {@link GridLongList}.
+     *
+     * @return Grid long list.
+     */
+    public GridLongList readGridLongList();
+
     /**
      * Reads array of objects.
      *
diff --git 
a/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageWriter.java
 
b/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageWriter.java
index 356766bdfc0..c0a2c8fc744 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageWriter.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageWriter.java
@@ -25,7 +25,9 @@ import java.util.UUID;
 import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion;
 import org.apache.ignite.internal.processors.cache.CacheObject;
 import org.apache.ignite.internal.processors.cache.KeyCacheObject;
+import org.apache.ignite.internal.util.GridLongList;
 import org.apache.ignite.lang.IgniteUuid;
+import org.jetbrains.annotations.Nullable;
 
 /**
  * Communication message writer.
@@ -259,6 +261,14 @@ public interface MessageWriter {
      */
     public boolean writeKeyCacheObject(KeyCacheObject obj);
 
+    /**
+     * Writes {@link GridLongList}.
+     *
+     * @param ll Grid long list.
+     * @return Whether value was fully written.
+     */
+    public boolean writeGridLongList(@Nullable GridLongList ll);
+
     /**
      * Writes array of objects.
      *
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/managers/communication/AbstractCommunicationMessageSerializationTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/managers/communication/AbstractCommunicationMessageSerializationTest.java
index 6665d64a507..d30c93514cf 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/managers/communication/AbstractCommunicationMessageSerializationTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/managers/communication/AbstractCommunicationMessageSerializationTest.java
@@ -26,6 +26,7 @@ import java.util.UUID;
 import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion;
 import org.apache.ignite.internal.processors.cache.CacheObject;
 import org.apache.ignite.internal.processors.cache.KeyCacheObject;
+import org.apache.ignite.internal.util.GridLongList;
 import org.apache.ignite.lang.IgniteUuid;
 import org.apache.ignite.plugin.extensions.communication.Message;
 import 
org.apache.ignite.plugin.extensions.communication.MessageCollectionItemType;
@@ -34,6 +35,7 @@ import 
org.apache.ignite.plugin.extensions.communication.MessageFactoryProvider;
 import org.apache.ignite.plugin.extensions.communication.MessageReader;
 import org.apache.ignite.plugin.extensions.communication.MessageWriter;
 import org.apache.ignite.spi.communication.tcp.messages.HandshakeMessage;
+import org.jetbrains.annotations.Nullable;
 import org.junit.Test;
 
 import static java.lang.Integer.MAX_VALUE;
@@ -284,6 +286,11 @@ public abstract class 
AbstractCommunicationMessageSerializationTest {
             return writeField(KeyCacheObject.class);
         }
 
+        /** {@inheritDoc} */
+        @Override public boolean writeGridLongList(@Nullable GridLongList ll) {
+            return writeField(GridLongList.class);
+        }
+
         /** {@inheritDoc} */
         @Override public boolean writeMessage(Message val) {
             return writeField(Message.class);
@@ -537,6 +544,13 @@ public abstract class 
AbstractCommunicationMessageSerializationTest {
             return null;
         }
 
+        /** {@inheritDoc} */
+        @Override public GridLongList readGridLongList() {
+            readField(GridLongList.class);
+
+            return null;
+        }
+
         /** {@inheritDoc} */
         @Override public <T> T[] readObjectArray(MessageCollectionItemType 
itemType, Class<T> itemCls) {
             readField(Object[].class);
diff --git 
a/modules/core/src/test/java/org/apache/ignite/util/GridLongListSelfTest.java 
b/modules/core/src/test/java/org/apache/ignite/util/GridLongListSelfTest.java
index 63e2edf6778..981653bbb52 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/util/GridLongListSelfTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/util/GridLongListSelfTest.java
@@ -20,62 +20,18 @@ package org.apache.ignite.util;
 import java.nio.ByteBuffer;
 import org.apache.ignite.internal.direct.DirectMessageWriter;
 import org.apache.ignite.internal.util.GridLongList;
+import org.apache.ignite.internal.util.typedef.F;
 import org.apache.ignite.plugin.extensions.communication.MessageWriter;
 import org.junit.Assert;
 import org.junit.Test;
 
-import static org.apache.ignite.internal.util.GridLongList.asList;
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
 
 /**
  *
  */
 public class GridLongListSelfTest {
-    /** Size of the header when list is written with message writer. */
-    private static final int HEADER_SIZE = 2;
-
-    /**
-     * @throws Exception If failed.
-     */
-    @SuppressWarnings("ZeroLengthArrayAllocation")
-    @Test
-    public void testCopyWithout() throws Exception {
-        assertCopy(
-            new GridLongList(new long[] {}),
-            new GridLongList(new long[] {}));
-
-        assertCopy(
-            new GridLongList(new long[] {}),
-            new GridLongList(new long[] {1}));
-
-        assertCopy(
-            new GridLongList(new long[] {1}),
-            new GridLongList(new long[] {}));
-
-        assertCopy(
-            new GridLongList(new long[] {1, 2, 3}),
-            new GridLongList(new long[] {4, 5, 6}));
-
-        assertCopy(
-            new GridLongList(new long[] {1, 2, 3}),
-            new GridLongList(new long[] {1, 2, 3}));
-
-        assertCopy(
-            new GridLongList(new long[] {1, 2, 3, 4, 5, 1}),
-            new GridLongList(new long[] {1, 1}));
-
-        assertCopy(
-            new GridLongList(new long[] {1, 1, 1, 2, 3, 4, 5, 1, 1, 1}),
-            new GridLongList(new long[] {1, 1}));
-
-        assertCopy(
-            new GridLongList(new long[] {1, 2, 3}),
-            new GridLongList(new long[] {1, 1, 2, 2, 3, 3}));
-    }
-
     /**
      *
      */
@@ -99,25 +55,6 @@ public class GridLongListSelfTest {
         assertEquals(new GridLongList(), list);
     }
 
-    /**
-     * Assert {@link GridLongList#copyWithout(GridLongList)} on given lists.
-     *
-     * @param lst Source lists.
-     * @param rmv Exclude list.
-     */
-    private void assertCopy(GridLongList lst, GridLongList rmv) {
-        GridLongList res = lst.copyWithout(rmv);
-
-        for (int i = 0; i < lst.size(); i++) {
-            long v = lst.get(i);
-
-            if (rmv.contains(v))
-                assertFalse(res.contains(v));
-            else
-                assertTrue(res.contains(v));
-        }
-    }
-
     /**
      *
      */
@@ -170,10 +107,10 @@ public class GridLongListSelfTest {
      *
      */
     @Test
-    public void testArray() {
+    public void testArrayCopy() {
         GridLongList list = new GridLongList();
 
-        long[] arr = list.array();
+        long[] arr = list.arrayCopy();
 
         assertNotNull(arr);
 
@@ -181,7 +118,7 @@ public class GridLongListSelfTest {
 
         list.add(1L);
 
-        arr = list.array();
+        arr = list.arrayCopy();
 
         assertNotNull(arr);
 
@@ -193,166 +130,46 @@ public class GridLongListSelfTest {
     /** */
     @Test
     public void testSerializationDefaultConstructor() {
-        MessageWriter writer = new DirectMessageWriter(null);
-
-        ByteBuffer buf = ByteBuffer.allocate(4096);
-
-        GridLongList ll = new GridLongList();
-
-        {
-            Assert.assertTrue(ll.writeTo(buf, writer));
-
-            Assert.assertEquals(HEADER_SIZE + 1 /* array */ + 1 /* index */, 
buf.position());
-        }
-
-        {
-            writer.reset();
-            buf.clear();
-
-            ll.add(2L);
-            ll.add(4L);
-
-            Assert.assertTrue(ll.writeTo(buf, writer));
-
-            Assert.assertEquals(HEADER_SIZE + 17 /* array */ + 1 /* index */, 
buf.position());
-        }
-
-        {
-            writer.reset();
-            buf.clear();
-
-            ll.remove();
-
-            Assert.assertTrue(ll.writeTo(buf, writer));
-
-            Assert.assertEquals(HEADER_SIZE + 9 /* array */ + 1 /* index */, 
buf.position());
-        }
-
-        {
-            writer.reset();
-            buf.clear();
-
-            ll.remove();
-
-            Assert.assertTrue(ll.writeTo(buf, writer));
-
-            Assert.assertEquals(HEADER_SIZE + 1 /* array */ + 1 /* index */, 
buf.position());
-        }
-
-        {
-            writer.reset();
-            buf.clear();
-
-            for (int i = 0; i < 300; i++)
-                ll.add(i);
-
-            Assert.assertTrue(ll.writeTo(buf, writer));
-
-            Assert.assertEquals(300, ll.size());
-
-            Assert.assertEquals(HEADER_SIZE + 2402 /* array */ + 2 /* index 
*/, buf.position());
-        }
-
-        {
-            writer.reset();
-            buf.clear();
-
-            ll.clear();
-
-            Assert.assertTrue(ll.writeTo(buf, writer));
-
-            Assert.assertEquals(HEADER_SIZE + 1 /* array */ + 1 /* index */, 
buf.position());
-        }
+        testSerialization(new GridLongList(), 0);
     }
 
     /** */
     @Test
     public void testSerializationConstructorWithSize() {
-        MessageWriter writer = new DirectMessageWriter(null);
-
-        ByteBuffer buf = ByteBuffer.allocate(4096);
-
-        GridLongList ll = new GridLongList(5);
-
-        {
-            Assert.assertTrue(ll.writeTo(buf, writer));
-
-            Assert.assertEquals(HEADER_SIZE + 1 /* array */ + 1 /* index */, 
buf.position());
-        }
-
-        {
-            writer.reset();
-            buf.clear();
-
-            ll.add(2L);
-            ll.add(4L);
-
-            Assert.assertTrue(ll.writeTo(buf, writer));
-
-            Assert.assertEquals(HEADER_SIZE + 17 /* array */ + 1 /* index */, 
buf.position());
-        }
-
-        {
-            writer.reset();
-            buf.clear();
-
-            ll.remove();
-
-            Assert.assertTrue(ll.writeTo(buf, writer));
-
-            Assert.assertEquals(HEADER_SIZE + 9 /* array */ + 1 /* index */, 
buf.position());
-        }
-
-        {
-            writer.reset();
-            buf.clear();
-
-            ll.remove();
-
-            Assert.assertTrue(ll.writeTo(buf, writer));
-
-            Assert.assertEquals(HEADER_SIZE + 1 /* array */ + 1 /* index */, 
buf.position());
-        }
-
-        {
-            writer.reset();
-            buf.clear();
-
-            for (int i = 0; i < 300; i++)
-                ll.add(i);
-
-            Assert.assertTrue(ll.writeTo(buf, writer));
-
-            Assert.assertEquals(300, ll.size());
-
-            Assert.assertEquals(HEADER_SIZE + 2402 /* array */ + 2 /* index 
*/, buf.position());
-        }
-
-        {
-            writer.reset();
-            buf.clear();
-
-            ll.clear();
-
-            Assert.assertTrue(ll.writeTo(buf, writer));
-
-            Assert.assertEquals(HEADER_SIZE + 1 /* array */ + 1 /* index */, 
buf.position());
-        }
+        testSerialization(new GridLongList(5), 0);
     }
 
     /** */
     @Test
     public void testSerializationConstructorWithZeroSize() {
+        testSerialization(new GridLongList(0), 0);
+    }
+
+    /** */
+    @Test
+    public void testSerializationCopyConstructor() {
+        testSerialization(asList(1L, 2L, 3L), 3);
+    }
+
+    /**
+     * @param ll Grid long list.
+     * @param initSz Initial size of list.
+     */
+    private static void testSerialization(GridLongList ll, int initSz) {
         MessageWriter writer = new DirectMessageWriter(null);
 
         ByteBuffer buf = ByteBuffer.allocate(4096);
 
-        GridLongList ll = new GridLongList(0);
+        writer.setBuffer(buf);
+
+        // Items size in bytes + length (1 byte for up to Byte.MAX_VALUE 
elements,
+        // 2 bytes up to Short.MAX_VALUE elements), etc.
+        int sz = initSz * 8 + 1;
 
         {
-            Assert.assertTrue(ll.writeTo(buf, writer));
+            Assert.assertTrue(writer.writeGridLongList(ll));
 
-            Assert.assertEquals(HEADER_SIZE + 1 /* array */ + 1 /* index */, 
buf.position());
+            Assert.assertEquals(sz /* array */, buf.position());
         }
 
         {
@@ -362,9 +179,9 @@ public class GridLongListSelfTest {
             ll.add(2L);
             ll.add(4L);
 
-            Assert.assertTrue(ll.writeTo(buf, writer));
+            Assert.assertTrue(writer.writeGridLongList(ll));
 
-            Assert.assertEquals(HEADER_SIZE + 17 /* array */ + 1 /* index */, 
buf.position());
+            Assert.assertEquals(sz += 16 /* array */, buf.position());
         }
 
         {
@@ -373,9 +190,9 @@ public class GridLongListSelfTest {
 
             ll.remove();
 
-            Assert.assertTrue(ll.writeTo(buf, writer));
+            Assert.assertTrue(writer.writeGridLongList(ll));
 
-            Assert.assertEquals(HEADER_SIZE + 9 /* array */ + 1 /* index */, 
buf.position());
+            Assert.assertEquals(sz -= 8 /* array */, buf.position());
         }
 
         {
@@ -384,9 +201,9 @@ public class GridLongListSelfTest {
 
             ll.remove();
 
-            Assert.assertTrue(ll.writeTo(buf, writer));
+            Assert.assertTrue(writer.writeGridLongList(ll));
 
-            Assert.assertEquals(HEADER_SIZE + 1 /* array */ + 1 /* index */, 
buf.position());
+            Assert.assertEquals(sz -= 8 /* array */, buf.position());
         }
 
         {
@@ -396,11 +213,13 @@ public class GridLongListSelfTest {
             for (int i = 0; i < 300; i++)
                 ll.add(i);
 
-            Assert.assertTrue(ll.writeTo(buf, writer));
+            Assert.assertTrue(writer.writeGridLongList(ll));
+
+            Assert.assertEquals(300 + initSz, ll.size());
 
-            Assert.assertEquals(300, ll.size());
+            sz += 8 * 300 + 1;
 
-            Assert.assertEquals(HEADER_SIZE + 2402 /* array */ + 2 /* index 
*/, buf.position());
+            Assert.assertEquals(sz /* array */, buf.position());
         }
 
         {
@@ -409,85 +228,50 @@ public class GridLongListSelfTest {
 
             ll.clear();
 
-            Assert.assertTrue(ll.writeTo(buf, writer));
+            Assert.assertTrue(writer.writeGridLongList(ll));
 
-            Assert.assertEquals(HEADER_SIZE + 1 /* array */ + 1 /* index */, 
buf.position());
+            Assert.assertEquals(1 /* array */, buf.position());
         }
     }
 
     /** */
     @Test
-    public void testSerializationCopyConstructor() {
+    public void testSerializationInsufficientBuffer() {
         MessageWriter writer = new DirectMessageWriter(null);
 
-        ByteBuffer buf = ByteBuffer.allocate(4096);
-
-        GridLongList ll = new GridLongList(new long[]{1L, 2L, 3L});
-
-        {
-            Assert.assertTrue(ll.writeTo(buf, writer));
-
-            Assert.assertEquals(HEADER_SIZE + 25 /* array */ + 1 /* index */, 
buf.position());
-        }
-
-        {
-            writer.reset();
-            buf.clear();
-
-            ll.add(2L);
-            ll.add(4L);
-
-            Assert.assertTrue(ll.writeTo(buf, writer));
-
-            Assert.assertEquals(HEADER_SIZE + 41 /* array */ + 1 /* index */, 
buf.position());
-        }
-
-        {
-            writer.reset();
-            buf.clear();
-
-            ll.remove();
-
-            Assert.assertTrue(ll.writeTo(buf, writer));
-
-            Assert.assertEquals(HEADER_SIZE + 33 /* array */ + 1 /* index */, 
buf.position());
-        }
-
-        {
-            writer.reset();
-            buf.clear();
-
-            for (int i = 0; i < 300; i++)
-                ll.add(i);
-
-            Assert.assertTrue(ll.writeTo(buf, writer));
-
-            Assert.assertEquals(HEADER_SIZE + 2434 /* array */ + 2 /* index 
*/, buf.position());
-        }
+        ByteBuffer buf = ByteBuffer.allocate(10);
 
-        {
-            writer.reset();
-            buf.clear();
+        writer.setBuffer(buf);
 
-            ll.clear();
+        GridLongList ll = asList(1L, 2L, 3L);
 
-            Assert.assertTrue(ll.writeTo(buf, writer));
+        Assert.assertFalse(writer.writeGridLongList(ll));
 
-            Assert.assertEquals(HEADER_SIZE + 1 /* array */ + 1 /* index */, 
buf.position());
-        }
+        Assert.assertEquals(10, buf.position());
     }
 
     /** */
     @Test
-    public void testSerializationInsufficientBuffer() {
+    public void testSerializationOfNullValue() {
         MessageWriter writer = new DirectMessageWriter(null);
 
-        ByteBuffer buf = ByteBuffer.allocate(10);
+        ByteBuffer buf = ByteBuffer.allocate(4096);
 
-        GridLongList ll = new GridLongList(new long[]{1L, 2L, 3L});
+        writer.setBuffer(buf);
 
-        Assert.assertFalse(ll.writeTo(buf, writer));
+        Assert.assertTrue(writer.writeGridLongList(null));
 
-        Assert.assertEquals(10, buf.position());
+        Assert.assertEquals(1, buf.position());
+    }
+
+    /**
+     * @param vals Values.
+     * @return List from values.
+     */
+    private static GridLongList asList(long... vals) {
+        if (F.isEmpty(vals))
+            return new GridLongList();
+
+        return new GridLongList(vals);
     }
 }
diff --git 
a/modules/core/src/test/resources/codegen/TestCollectionsMessage.java 
b/modules/core/src/test/resources/codegen/TestCollectionsMessage.java
index 597e61b0f02..c7c6ddc287d 100644
--- a/modules/core/src/test/resources/codegen/TestCollectionsMessage.java
+++ b/modules/core/src/test/resources/codegen/TestCollectionsMessage.java
@@ -22,6 +22,7 @@ import java.util.List;
 import java.util.UUID;
 import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion;
 import org.apache.ignite.internal.processors.cache.version.GridCacheVersion;
+import org.apache.ignite.internal.util.GridLongList;
 import org.apache.ignite.lang.IgniteUuid;
 import org.apache.ignite.plugin.extensions.communication.Message;
 
@@ -92,6 +93,9 @@ public class TestCollectionsMessage implements Message {
     @Order(21)
     private List<GridCacheVersion> messageList;
 
+    @Order(22)
+    private List<GridLongList> gridLongListList;
+
     public List<boolean[]> booleanArrayList() {
         return booleanArrayList;
     }
@@ -265,7 +269,15 @@ public class TestCollectionsMessage implements Message {
     }
 
     public void messageList(List<GridCacheVersion> messageList) {
-        messageList = messageList;
+        this.messageList = messageList;
+    }
+
+    public List<GridLongList> gridLongListList() {
+        return gridLongListList;
+    }
+
+    public void gridLongListList(List<GridLongList> gridLongListList) {
+        this.gridLongListList = gridLongListList;
     }
 
     public short directType() {
diff --git 
a/modules/core/src/test/resources/codegen/TestCollectionsMessageSerializer.java 
b/modules/core/src/test/resources/codegen/TestCollectionsMessageSerializer.java
index 96855ef1a97..ad88dec2e06 100644
--- 
a/modules/core/src/test/resources/codegen/TestCollectionsMessageSerializer.java
+++ 
b/modules/core/src/test/resources/codegen/TestCollectionsMessageSerializer.java
@@ -178,6 +178,12 @@ public class TestCollectionsMessageSerializer implements 
MessageSerializer {
 
                 writer.incrementState();
 
+            case 22:
+                if (!writer.writeCollection(msg.gridLongListList(), 
MessageCollectionItemType.GRID_LONG_LIST))
+                    return false;
+
+                writer.incrementState();
+
         }
 
         return true;
@@ -366,6 +372,14 @@ public class TestCollectionsMessageSerializer implements 
MessageSerializer {
 
                 reader.incrementState();
 
+            case 22:
+                
msg.gridLongListList(reader.readCollection(MessageCollectionItemType.GRID_LONG_LIST));
+
+                if (!reader.isLastRead())
+                    return false;
+
+                reader.incrementState();
+
         }
 
         return true;
diff --git a/modules/core/src/test/resources/codegen/TestMapMessage.java 
b/modules/core/src/test/resources/codegen/TestMapMessage.java
index 6b45de7e3fb..dfd99916a4b 100644
--- a/modules/core/src/test/resources/codegen/TestMapMessage.java
+++ b/modules/core/src/test/resources/codegen/TestMapMessage.java
@@ -22,6 +22,7 @@ import java.util.Map;
 import java.util.UUID;
 import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion;
 import org.apache.ignite.internal.processors.cache.version.GridCacheVersion;
+import org.apache.ignite.internal.util.GridLongList;
 import org.apache.ignite.lang.IgniteUuid;
 import org.apache.ignite.plugin.extensions.communication.Message;
 
@@ -92,6 +93,12 @@ public class TestMapMessage implements Message {
     @Order(21)
     private Map<GridCacheVersion, Double> messageBoxedDoubleMap;
 
+    @Order(22)
+    private Map<Integer, GridLongList> integerGridLongListMap;
+
+    @Order(23)
+    private Map<GridLongList, Integer> gridLongListIntegerMap;
+
     public Map<boolean[], Long> booleanArrayBoxedLongMap() {
         return booleanArrayBoxedLongMap;
     }
@@ -265,7 +272,23 @@ public class TestMapMessage implements Message {
     }
 
     public void messageBoxedDoubleMap(Map<GridCacheVersion, Double> 
messageBoxedDoubleMap) {
-        messageBoxedDoubleMap = messageBoxedDoubleMap;
+        this.messageBoxedDoubleMap = messageBoxedDoubleMap;
+    }
+
+    public Map<Integer, GridLongList> integerGridLongListMap() {
+        return integerGridLongListMap;
+    }
+
+    public void integerGridLongListMap(Map<Integer, GridLongList> 
integerGridLongListMap) {
+        this.integerGridLongListMap = integerGridLongListMap;
+    }
+
+    public Map<GridLongList, Integer> gridLongListIntegerMap() {
+        return gridLongListIntegerMap;
+    }
+
+    public void gridLongListIntegerMap(Map<GridLongList, Integer> 
gridLongListIntegerMap) {
+        this.gridLongListIntegerMap = gridLongListIntegerMap;
     }
 
     public short directType() {
diff --git 
a/modules/core/src/test/resources/codegen/TestMapMessageSerializer.java 
b/modules/core/src/test/resources/codegen/TestMapMessageSerializer.java
index d782b5088f1..b88f75d364f 100644
--- a/modules/core/src/test/resources/codegen/TestMapMessageSerializer.java
+++ b/modules/core/src/test/resources/codegen/TestMapMessageSerializer.java
@@ -178,6 +178,18 @@ public class TestMapMessageSerializer implements 
MessageSerializer {
 
                 writer.incrementState();
 
+            case 22:
+                if (!writer.writeMap(msg.integerGridLongListMap(), 
MessageCollectionItemType.INT, MessageCollectionItemType.GRID_LONG_LIST))
+                    return false;
+
+                writer.incrementState();
+
+            case 23:
+                if (!writer.writeMap(msg.gridLongListIntegerMap(), 
MessageCollectionItemType.GRID_LONG_LIST, MessageCollectionItemType.INT))
+                    return false;
+
+                writer.incrementState();
+
         }
 
         return true;
@@ -366,6 +378,22 @@ public class TestMapMessageSerializer implements 
MessageSerializer {
 
                 reader.incrementState();
 
+            case 22:
+                
msg.integerGridLongListMap(reader.readMap(MessageCollectionItemType.INT, 
MessageCollectionItemType.GRID_LONG_LIST, false));
+
+                if (!reader.isLastRead())
+                    return false;
+
+                reader.incrementState();
+
+            case 23:
+                
msg.gridLongListIntegerMap(reader.readMap(MessageCollectionItemType.GRID_LONG_LIST,
 MessageCollectionItemType.INT, false));
+
+                if (!reader.isLastRead())
+                    return false;
+
+                reader.incrementState();
+
         }
 
         return true;
diff --git a/modules/core/src/test/resources/codegen/TestMessage.java 
b/modules/core/src/test/resources/codegen/TestMessage.java
index ab501772c77..edc66e73e9b 100644
--- a/modules/core/src/test/resources/codegen/TestMessage.java
+++ b/modules/core/src/test/resources/codegen/TestMessage.java
@@ -20,15 +20,13 @@ package org.apache.ignite.internal;
 import java.lang.String;
 import java.util.UUID;
 import java.util.BitSet;
-import java.nio.ByteBuffer;
 import org.apache.ignite.internal.processors.cache.CacheObject;
 import org.apache.ignite.internal.processors.cache.KeyCacheObject;
 import org.apache.ignite.internal.processors.cache.version.GridCacheVersion;
 import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion;
+import org.apache.ignite.internal.util.GridLongList;
 import org.apache.ignite.lang.IgniteUuid;
 import org.apache.ignite.plugin.extensions.communication.Message;
-import org.apache.ignite.plugin.extensions.communication.MessageReader;
-import org.apache.ignite.plugin.extensions.communication.MessageWriter;
 
 public class TestMessage implements Message {
     @Order(0)
@@ -73,6 +71,9 @@ public class TestMessage implements Message {
     @Order(value = 13)
     private CacheObject cacheObject;
 
+    @Order(value = 14)
+    private GridLongList gridLongList;
+
     public int id() {
         return id;
     }
@@ -185,6 +186,15 @@ public class TestMessage implements Message {
         this.cacheObject = cacheObject;
     }
 
+    public GridLongList gridLongList() {
+        return gridLongList;
+    }
+
+    public void gridLongList(GridLongList gridLongList) {
+        this.gridLongList = gridLongList;
+    }
+
+
     public short directType() {
         return 0;
     }
diff --git a/modules/core/src/test/resources/codegen/TestMessageSerializer.java 
b/modules/core/src/test/resources/codegen/TestMessageSerializer.java
index 8ca1f2be5d6..b05b4a519c9 100644
--- a/modules/core/src/test/resources/codegen/TestMessageSerializer.java
+++ b/modules/core/src/test/resources/codegen/TestMessageSerializer.java
@@ -130,6 +130,12 @@ public class TestMessageSerializer implements 
MessageSerializer {
 
                 writer.incrementState();
 
+            case 14:
+                if (!writer.writeGridLongList(msg.gridLongList()))
+                    return false;
+
+                writer.incrementState();
+
         }
 
         return true;
@@ -249,6 +255,14 @@ public class TestMessageSerializer implements 
MessageSerializer {
             case 13:
                 msg.cacheObject(reader.readCacheObject());
 
+                if (!reader.isLastRead())
+                    return false;
+
+                reader.incrementState();
+
+            case 14:
+                msg.gridLongList(reader.readGridLongList());
+
                 if (!reader.isLastRead())
                     return false;
 

Reply via email to