You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by vk...@apache.org on 2015/02/02 04:28:29 UTC

[37/52] [abbrv] incubator-ignite git commit: Merge branch 'sprint-1' of https://git-wip-us.apache.org/repos/asf/incubator-ignite into ignite-61

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/3dbb6acc/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearGetResponse.java
----------------------------------------------------------------------
diff --cc modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearGetResponse.java
index 0000000,9833165..77dd8f6
mode 000000,100644..100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearGetResponse.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearGetResponse.java
@@@ -1,0 -1,423 +1,413 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ 
+ package org.apache.ignite.internal.processors.cache.distributed.near;
+ 
+ import org.apache.ignite.*;
+ import org.apache.ignite.internal.*;
+ import org.apache.ignite.internal.processors.cache.*;
+ import org.apache.ignite.internal.processors.cache.version.*;
+ import org.apache.ignite.internal.util.*;
+ import org.apache.ignite.lang.*;
+ import org.apache.ignite.internal.util.direct.*;
+ import org.apache.ignite.internal.util.tostring.*;
+ import org.apache.ignite.internal.util.typedef.internal.*;
+ 
+ import java.io.*;
+ import java.nio.*;
+ import java.util.*;
+ 
+ /**
+  * Get response.
+  */
+ public class GridNearGetResponse<K, V> extends GridCacheMessage<K, V> implements GridCacheDeployable,
+     GridCacheVersionable {
+     /** */
+     private static final long serialVersionUID = 0L;
+ 
+     /** Future ID. */
+     private IgniteUuid futId;
+ 
+     /** Sub ID. */
+     private IgniteUuid miniId;
+ 
+     /** Version. */
+     private GridCacheVersion ver;
+ 
+     /** Result. */
+     @GridToStringInclude
+     @GridDirectTransient
+     private Collection<GridCacheEntryInfo<K, V>> entries;
+ 
+     /** */
+     private byte[] entriesBytes;
+ 
+     /** Keys to retry due to ownership shift. */
+     @GridToStringInclude
+     @GridDirectCollection(int.class)
+     private Collection<Integer> invalidParts = new GridLeanSet<>();
+ 
+     /** Topology version if invalid partitions is not empty. */
+     private long topVer;
+ 
+     /** Error. */
+     @GridDirectTransient
+     private Throwable err;
+ 
+     /** Serialized error. */
+     private byte[] errBytes;
+ 
+     /**
+      * Empty constructor required for {@link Externalizable}.
+      */
+     public GridNearGetResponse() {
+         // No-op.
+     }
+ 
+     /**
+      * @param cacheId Cache ID.
+      * @param futId Future ID.
+      * @param miniId Sub ID.
+      * @param ver Version.
+      */
+     public GridNearGetResponse(
+         int cacheId,
+         IgniteUuid futId,
+         IgniteUuid miniId,
+         GridCacheVersion ver
+     ) {
+         assert futId != null;
+         assert miniId != null;
+         assert ver != null;
+ 
+         this.cacheId = cacheId;
+         this.futId = futId;
+         this.miniId = miniId;
+         this.ver = ver;
+     }
+ 
+     /**
+      * @return Future ID.
+      */
+     public IgniteUuid futureId() {
+         return futId;
+     }
+ 
+     /**
+      * @return Sub ID.
+      */
+     public IgniteUuid miniId() {
+         return miniId;
+     }
+ 
+     /** {@inheritDoc} */
+     @Override public GridCacheVersion version() {
+         return ver;
+     }
+ 
+     /**
+      * @return Entries.
+      */
+     public Collection<GridCacheEntryInfo<K, V>> entries() {
+         return entries;
+     }
+ 
+     /**
+      * @param entries Entries.
+      */
+     public void entries(Collection<GridCacheEntryInfo<K, V>> entries) {
+         this.entries = entries;
+     }
+ 
+     /**
+      * @return Failed filter set.
+      */
+     public Collection<Integer> invalidPartitions() {
+         return invalidParts;
+     }
+ 
+     /**
+      * @param invalidParts Partitions to retry due to ownership shift.
+      * @param topVer Topology version.
+      */
+     public void invalidPartitions(Collection<Integer> invalidParts, long topVer) {
+         this.invalidParts = invalidParts;
+         this.topVer = topVer;
+     }
+ 
+     /**
+      * @return Topology version if this response has invalid partitions.
+      */
+     @Override public long topologyVersion() {
+         return topVer;
+     }
+ 
+     /**
+      * @return Error.
+      */
+     public Throwable error() {
+         return err;
+     }
+ 
+     /**
+      * @param err Error.
+      */
+     public void error(Throwable err) {
+         this.err = err;
+     }
+ 
+     /** {@inheritDoc}
+      * @param ctx*/
+     @Override public void prepareMarshal(GridCacheSharedContext<K, V> ctx) throws IgniteCheckedException {
+         super.prepareMarshal(ctx);
+ 
+         if (entries != null) {
+             marshalInfos(entries, ctx);
+ 
+             entriesBytes = ctx.marshaller().marshal(entries);
+         }
+ 
+         if (err != null)
+             errBytes = ctx.marshaller().marshal(err);
+     }
+ 
+     /** {@inheritDoc} */
+     @Override public void finishUnmarshal(GridCacheSharedContext<K, V> ctx, ClassLoader ldr) throws IgniteCheckedException {
+         super.finishUnmarshal(ctx, ldr);
+ 
+         if (entriesBytes != null) {
+             entries = ctx.marshaller().unmarshal(entriesBytes, ldr);
+ 
+             unmarshalInfos(entries, ctx.cacheContext(cacheId()), ldr);
+         }
+ 
+         if (errBytes != null)
+             err = ctx.marshaller().unmarshal(errBytes, ldr);
+     }
+ 
+     /** {@inheritDoc} */
+     @SuppressWarnings({"CloneDoesntCallSuperClone", "CloneCallsConstructors"})
+     @Override public GridTcpCommunicationMessageAdapter clone() {
+         GridNearGetResponse _clone = new GridNearGetResponse();
+ 
+         clone0(_clone);
+ 
+         return _clone;
+     }
+ 
+     /** {@inheritDoc} */
+     @Override protected void clone0(GridTcpCommunicationMessageAdapter _msg) {
+         super.clone0(_msg);
+ 
+         GridNearGetResponse _clone = (GridNearGetResponse)_msg;
+ 
+         _clone.futId = futId;
+         _clone.miniId = miniId;
+         _clone.ver = ver;
+         _clone.entries = entries;
+         _clone.entriesBytes = entriesBytes;
+         _clone.invalidParts = invalidParts;
+         _clone.topVer = topVer;
+         _clone.err = err;
+         _clone.errBytes = errBytes;
+     }
+ 
+     /** {@inheritDoc} */
+     @SuppressWarnings("all")
+     @Override public boolean writeTo(ByteBuffer buf) {
+         commState.setBuffer(buf);
+ 
+         if (!super.writeTo(buf))
+             return false;
+ 
+         if (!commState.typeWritten) {
 -            if (!commState.putByte(directType()))
++            if (!commState.putByte(null, directType()))
+                 return false;
+ 
+             commState.typeWritten = true;
+         }
+ 
+         switch (commState.idx) {
+             case 3:
 -                if (!commState.putByteArray(entriesBytes))
++                if (!commState.putByteArray("entriesBytes", entriesBytes))
+                     return false;
+ 
+                 commState.idx++;
+ 
+             case 4:
 -                if (!commState.putByteArray(errBytes))
++                if (!commState.putByteArray("errBytes", errBytes))
+                     return false;
+ 
+                 commState.idx++;
+ 
+             case 5:
 -                if (!commState.putGridUuid(futId))
++                if (!commState.putGridUuid("futId", futId))
+                     return false;
+ 
+                 commState.idx++;
+ 
+             case 6:
+                 if (invalidParts != null) {
+                     if (commState.it == null) {
 -                        if (!commState.putInt(invalidParts.size()))
++                        if (!commState.putInt(null, invalidParts.size()))
+                             return false;
+ 
+                         commState.it = invalidParts.iterator();
+                     }
+ 
+                     while (commState.it.hasNext() || commState.cur != NULL) {
+                         if (commState.cur == NULL)
+                             commState.cur = commState.it.next();
+ 
 -                        if (!commState.putInt((int)commState.cur))
++                        if (!commState.putInt(null, (int)commState.cur))
+                             return false;
+ 
+                         commState.cur = NULL;
+                     }
+ 
+                     commState.it = null;
+                 } else {
 -                    if (!commState.putInt(-1))
++                    if (!commState.putInt(null, -1))
+                         return false;
+                 }
+ 
+                 commState.idx++;
+ 
+             case 7:
 -                if (!commState.putGridUuid(miniId))
++                if (!commState.putGridUuid("miniId", miniId))
+                     return false;
+ 
+                 commState.idx++;
+ 
+             case 8:
 -                if (!commState.putLong(topVer))
++                if (!commState.putLong("topVer", topVer))
+                     return false;
+ 
+                 commState.idx++;
+ 
+             case 9:
 -                if (!commState.putCacheVersion(ver))
++                if (!commState.putCacheVersion("ver", ver))
+                     return false;
+ 
+                 commState.idx++;
+ 
+         }
+ 
+         return true;
+     }
+ 
+     /** {@inheritDoc} */
+     @SuppressWarnings("all")
+     @Override public boolean readFrom(ByteBuffer buf) {
+         commState.setBuffer(buf);
+ 
+         if (!super.readFrom(buf))
+             return false;
+ 
+         switch (commState.idx) {
+             case 3:
 -                byte[] entriesBytes0 = commState.getByteArray();
++                entriesBytes = commState.getByteArray("entriesBytes");
+ 
 -                if (entriesBytes0 == BYTE_ARR_NOT_READ)
++                if (!commState.lastRead())
+                     return false;
+ 
 -                entriesBytes = entriesBytes0;
 -
+                 commState.idx++;
+ 
+             case 4:
 -                byte[] errBytes0 = commState.getByteArray();
++                errBytes = commState.getByteArray("errBytes");
+ 
 -                if (errBytes0 == BYTE_ARR_NOT_READ)
++                if (!commState.lastRead())
+                     return false;
+ 
 -                errBytes = errBytes0;
 -
+                 commState.idx++;
+ 
+             case 5:
 -                IgniteUuid futId0 = commState.getGridUuid();
++                futId = commState.getGridUuid("futId");
+ 
 -                if (futId0 == GRID_UUID_NOT_READ)
++                if (!commState.lastRead())
+                     return false;
+ 
 -                futId = futId0;
 -
+                 commState.idx++;
+ 
+             case 6:
+                 if (commState.readSize == -1) {
 -                    if (buf.remaining() < 4)
 -                        return false;
++                    commState.readSize = commState.getInt(null);
+ 
 -                    commState.readSize = commState.getInt();
++                    if (!commState.lastRead())
++                        return false;
+                 }
+ 
+                 if (commState.readSize >= 0) {
+                     if (invalidParts == null)
+                         invalidParts = new ArrayList<>(commState.readSize);
+ 
+                     for (int i = commState.readItems; i < commState.readSize; i++) {
 -                        if (buf.remaining() < 4)
 -                            return false;
++                        int _val = commState.getInt(null);
+ 
 -                        int _val = commState.getInt();
++                        if (!commState.lastRead())
++                            return false;
+ 
+                         invalidParts.add((Integer)_val);
+ 
+                         commState.readItems++;
+                     }
+                 }
+ 
+                 commState.readSize = -1;
+                 commState.readItems = 0;
+ 
+                 commState.idx++;
+ 
+             case 7:
 -                IgniteUuid miniId0 = commState.getGridUuid();
++                miniId = commState.getGridUuid("miniId");
+ 
 -                if (miniId0 == GRID_UUID_NOT_READ)
++                if (!commState.lastRead())
+                     return false;
+ 
 -                miniId = miniId0;
 -
+                 commState.idx++;
+ 
+             case 8:
 -                if (buf.remaining() < 8)
 -                    return false;
++                topVer = commState.getLong("topVer");
+ 
 -                topVer = commState.getLong();
++                if (!commState.lastRead())
++                    return false;
+ 
+                 commState.idx++;
+ 
+             case 9:
 -                GridCacheVersion ver0 = commState.getCacheVersion();
++                ver = commState.getCacheVersion("ver");
+ 
 -                if (ver0 == CACHE_VER_NOT_READ)
++                if (!commState.lastRead())
+                     return false;
+ 
 -                ver = ver0;
 -
+                 commState.idx++;
+ 
+         }
+ 
+         return true;
+     }
+ 
+     /** {@inheritDoc} */
+     @Override public byte directType() {
+         return 49;
+     }
+ 
+     /** {@inheritDoc} */
+     @Override public String toString() {
+         return S.toString(GridNearGetResponse.class, this);
+     }
+ }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/3dbb6acc/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearLockRequest.java
----------------------------------------------------------------------
diff --cc modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearLockRequest.java
index 0000000,601bd82..2d8e08f
mode 000000,100644..100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearLockRequest.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearLockRequest.java
@@@ -1,0 -1,667 +1,666 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ 
+ package org.apache.ignite.internal.processors.cache.distributed.near;
+ 
+ import org.apache.ignite.*;
+ import org.apache.ignite.cache.*;
+ import org.apache.ignite.internal.*;
+ import org.apache.ignite.internal.processors.cache.*;
+ import org.apache.ignite.internal.processors.cache.distributed.*;
+ import org.apache.ignite.internal.processors.cache.version.*;
+ import org.apache.ignite.lang.*;
+ import org.apache.ignite.transactions.*;
+ import org.apache.ignite.internal.processors.cache.transactions.*;
+ import org.apache.ignite.internal.util.direct.*;
+ import org.apache.ignite.internal.util.tostring.*;
+ import org.apache.ignite.internal.util.typedef.internal.*;
+ import org.jetbrains.annotations.*;
+ 
+ import java.io.*;
+ import java.nio.*;
+ import java.util.*;
+ 
+ /**
+  * Near cache lock request.
+  */
+ public class GridNearLockRequest<K, V> extends GridDistributedLockRequest<K, V> {
+     /** */
+     private static final long serialVersionUID = 0L;
+ 
+     /** Topology version. */
+     private long topVer;
+ 
+     /** Mini future ID. */
+     private IgniteUuid miniId;
+ 
+     /** Filter. */
+     private byte[][] filterBytes;
+ 
+     /** Filter. */
+     @GridDirectTransient
+     private IgnitePredicate<CacheEntry<K, V>>[] filter;
+ 
+     /** Implicit flag. */
+     private boolean implicitTx;
+ 
+     /** Implicit transaction with one key flag. */
+     private boolean implicitSingleTx;
+ 
+     /** One phase commit flag. */
+     private boolean onePhaseCommit;
+ 
+     /** Array of mapped DHT versions for this entry. */
+     @GridToStringInclude
+     private GridCacheVersion[] dhtVers;
+ 
+     /** Subject ID. */
+     @GridDirectVersion(1)
+     private UUID subjId;
+ 
+     /** Task name hash. */
+     @GridDirectVersion(2)
+     private int taskNameHash;
+ 
+     /** Has transforms flag. */
+     @GridDirectVersion(3)
+     private boolean hasTransforms;
+ 
+     /** Sync commit flag. */
+     private boolean syncCommit;
+ 
+     /** TTL for read operation. */
+     private long accessTtl;
+ 
+     /**
+      * Empty constructor required for {@link Externalizable}.
+      */
+     public GridNearLockRequest() {
+         // No-op.
+     }
+ 
+     /**
+      * @param cacheId Cache ID.
+      * @param topVer Topology version.
+      * @param nodeId Node ID.
+      * @param threadId Thread ID.
+      * @param futId Future ID.
+      * @param lockVer Cache version.
+      * @param isInTx {@code True} if implicit transaction lock.
+      * @param implicitTx Flag to indicate that transaction is implicit.
+      * @param implicitSingleTx Implicit-transaction-with-one-key flag.
+      * @param isRead Indicates whether implicit lock is for read or write operation.
+      * @param isolation Transaction isolation.
+      * @param isInvalidate Invalidation flag.
+      * @param timeout Lock timeout.
+      * @param keyCnt Number of keys.
+      * @param txSize Expected transaction size.
+      * @param syncCommit Synchronous commit flag.
+      * @param grpLockKey Group lock key if this is a group-lock transaction.
+      * @param partLock If partition is locked.
+      * @param subjId Subject ID.
+      * @param taskNameHash Task name hash code.
+      * @param accessTtl TTL for read operation.
+      */
+     public GridNearLockRequest(
+         int cacheId,
+         long topVer,
+         UUID nodeId,
+         long threadId,
+         IgniteUuid futId,
+         GridCacheVersion lockVer,
+         boolean isInTx,
+         boolean implicitTx,
+         boolean implicitSingleTx,
+         boolean isRead,
+         IgniteTxIsolation isolation,
+         boolean isInvalidate,
+         long timeout,
+         int keyCnt,
+         int txSize,
+         boolean syncCommit,
+         @Nullable IgniteTxKey grpLockKey,
+         boolean partLock,
+         @Nullable UUID subjId,
+         int taskNameHash,
+         long accessTtl
+     ) {
+         super(
+             cacheId,
+             nodeId,
+             lockVer,
+             threadId,
+             futId,
+             lockVer,
+             isInTx,
+             isRead,
+             isolation,
+             isInvalidate,
+             timeout,
+             keyCnt,
+             txSize,
+             grpLockKey,
+             partLock);
+ 
+         assert topVer > 0;
+ 
+         this.topVer = topVer;
+         this.implicitTx = implicitTx;
+         this.implicitSingleTx = implicitSingleTx;
+         this.syncCommit = syncCommit;
+         this.subjId = subjId;
+         this.taskNameHash = taskNameHash;
+         this.accessTtl = accessTtl;
+ 
+         dhtVers = new GridCacheVersion[keyCnt];
+     }
+ 
+     /**
+      * @return Topology version.
+      */
+     @Override public long topologyVersion() {
+         return topVer;
+     }
+ 
+     /**
+      * @return Subject ID.
+      */
+     public UUID subjectId() {
+         return subjId;
+     }
+ 
+     /**
+      * @return Task name hash.q
+      */
+     public int taskNameHash() {
+         return taskNameHash;
+     }
+ 
+     /**
+      * @return Implicit transaction flag.
+      */
+     public boolean implicitTx() {
+         return implicitTx;
+     }
+ 
+     /**
+      * @return Implicit-transaction-with-one-key flag.
+      */
+     public boolean implicitSingleTx() {
+         return implicitSingleTx;
+     }
+ 
+     /**
+      * @return One phase commit flag.
+      */
+     public boolean onePhaseCommit() {
+         return onePhaseCommit;
+     }
+ 
+     /**
+      * @param onePhaseCommit One phase commit flag.
+      */
+     public void onePhaseCommit(boolean onePhaseCommit) {
+         this.onePhaseCommit = onePhaseCommit;
+     }
+ 
+     /**
+      * @return Sync commit flag.
+      */
+     public boolean syncCommit() {
+         return syncCommit;
+     }
+ 
+     /**
+      * @return Filter.
+      */
+     public IgnitePredicate<CacheEntry<K, V>>[] filter() {
+         return filter;
+     }
+ 
+     /**
+      * @param filter Filter.
+      * @param ctx Context.
+      * @throws IgniteCheckedException If failed.
+      */
+     public void filter(IgnitePredicate<CacheEntry<K, V>>[] filter, GridCacheContext<K, V> ctx)
+         throws IgniteCheckedException {
+         this.filter = filter;
+     }
+ 
+     /**
+      * @return Mini future ID.
+      */
+     public IgniteUuid miniId() {
+         return miniId;
+     }
+ 
+     /**
+      * @param miniId Mini future Id.
+      */
+     public void miniId(IgniteUuid miniId) {
+         this.miniId = miniId;
+     }
+ 
+     /**
+      * @param hasTransforms {@code True} if originating transaction has transform entries.
+      */
+     public void hasTransforms(boolean hasTransforms) {
+         this.hasTransforms = hasTransforms;
+     }
+ 
+     /**
+      * @return {@code True} if originating transaction has transform entries.
+      */
+     public boolean hasTransforms() {
+         return hasTransforms;
+     }
+ 
+     /**
+      * Adds a key.
+      *
+      * @param key Key.
+      * @param retVal Flag indicating whether value should be returned.
+      * @param keyBytes Key bytes.
+      * @param dhtVer DHT version.
+      * @param writeEntry Write entry if implicit transaction mapped on one node.
+      * @param drVer DR version.
+      * @param ctx Context.
+      * @throws IgniteCheckedException If failed.
+      */
+     public void addKeyBytes(
+         K key,
+         byte[] keyBytes,
+         boolean retVal,
+         @Nullable GridCacheVersion dhtVer,
+         @Nullable IgniteTxEntry<K, V> writeEntry,
+         @Nullable GridCacheVersion drVer,
+         GridCacheContext<K, V> ctx
+     ) throws IgniteCheckedException {
+         dhtVers[idx] = dhtVer;
+ 
+         // Delegate to super.
+         addKeyBytes(key, keyBytes, writeEntry, retVal, null, drVer, ctx);
+     }
+ 
+     /**
+      * @param idx Index of the key.
+      * @return DHT version for key at given index.
+      */
+     public GridCacheVersion dhtVersion(int idx) {
+         return dhtVers[idx];
+     }
+ 
+     /** {@inheritDoc} */
+     @Override protected boolean transferExpiryPolicy() {
+         return true;
+     }
+ 
+     /**
+      * @return TTL for read operation.
+      */
+     public long accessTtl() {
+         return accessTtl;
+     }
+ 
+     /** {@inheritDoc} */
+     @Override public void prepareMarshal(GridCacheSharedContext<K, V> ctx) throws IgniteCheckedException {
+         super.prepareMarshal(ctx);
+ 
+         if (filterBytes == null)
+             filterBytes = marshalFilter(filter, ctx);
+     }
+ 
+     /** {@inheritDoc} */
+     @Override public void finishUnmarshal(GridCacheSharedContext<K, V> ctx, ClassLoader ldr) throws IgniteCheckedException {
+         super.finishUnmarshal(ctx, ldr);
+ 
+         if (filter == null && filterBytes != null)
+             filter = unmarshalFilter(filterBytes, ctx, ldr);
+     }
+ 
+     /** {@inheritDoc} */
+     @SuppressWarnings({"CloneDoesntCallSuperClone", "CloneCallsConstructors"})
+     @Override public GridTcpCommunicationMessageAdapter clone() {
+         GridNearLockRequest _clone = new GridNearLockRequest();
+ 
+         clone0(_clone);
+ 
+         return _clone;
+     }
+ 
+     /** {@inheritDoc} */
+     @Override protected void clone0(GridTcpCommunicationMessageAdapter _msg) {
+         super.clone0(_msg);
+ 
+         GridNearLockRequest _clone = (GridNearLockRequest)_msg;
+ 
+         _clone.topVer = topVer;
+         _clone.miniId = miniId;
+         _clone.filterBytes = filterBytes;
+         _clone.filter = filter;
+         _clone.implicitTx = implicitTx;
+         _clone.implicitSingleTx = implicitSingleTx;
+         _clone.onePhaseCommit = onePhaseCommit;
+         _clone.dhtVers = dhtVers;
+         _clone.subjId = subjId;
+         _clone.taskNameHash = taskNameHash;
+         _clone.hasTransforms = hasTransforms;
+         _clone.syncCommit = syncCommit;
+         _clone.accessTtl = accessTtl;
+     }
+ 
+     /** {@inheritDoc} */
+     @SuppressWarnings("all")
+     @Override public boolean writeTo(ByteBuffer buf) {
+         commState.setBuffer(buf);
+ 
+         if (!super.writeTo(buf))
+             return false;
+ 
+         if (!commState.typeWritten) {
 -            if (!commState.putByte(directType()))
++            if (!commState.putByte(null, directType()))
+                 return false;
+ 
+             commState.typeWritten = true;
+         }
+ 
+         switch (commState.idx) {
+             case 24:
+                 if (dhtVers != null) {
+                     if (commState.it == null) {
 -                        if (!commState.putInt(dhtVers.length))
++                        if (!commState.putInt(null, dhtVers.length))
+                             return false;
+ 
+                         commState.it = arrayIterator(dhtVers);
+                     }
+ 
+                     while (commState.it.hasNext() || commState.cur != NULL) {
+                         if (commState.cur == NULL)
+                             commState.cur = commState.it.next();
+ 
 -                        if (!commState.putCacheVersion((GridCacheVersion)commState.cur))
++                        if (!commState.putCacheVersion(null, (GridCacheVersion)commState.cur))
+                             return false;
+ 
+                         commState.cur = NULL;
+                     }
+ 
+                     commState.it = null;
+                 } else {
 -                    if (!commState.putInt(-1))
++                    if (!commState.putInt(null, -1))
+                         return false;
+                 }
+ 
+                 commState.idx++;
+ 
+             case 25:
+                 if (filterBytes != null) {
+                     if (commState.it == null) {
 -                        if (!commState.putInt(filterBytes.length))
++                        if (!commState.putInt(null, filterBytes.length))
+                             return false;
+ 
+                         commState.it = arrayIterator(filterBytes);
+                     }
+ 
+                     while (commState.it.hasNext() || commState.cur != NULL) {
+                         if (commState.cur == NULL)
+                             commState.cur = commState.it.next();
+ 
 -                        if (!commState.putByteArray((byte[])commState.cur))
++                        if (!commState.putByteArray(null, (byte[])commState.cur))
+                             return false;
+ 
+                         commState.cur = NULL;
+                     }
+ 
+                     commState.it = null;
+                 } else {
 -                    if (!commState.putInt(-1))
++                    if (!commState.putInt(null, -1))
+                         return false;
+                 }
+ 
+                 commState.idx++;
+ 
+             case 26:
 -                if (!commState.putBoolean(implicitSingleTx))
++                if (!commState.putBoolean("implicitSingleTx", implicitSingleTx))
+                     return false;
+ 
+                 commState.idx++;
+ 
+             case 27:
 -                if (!commState.putBoolean(implicitTx))
++                if (!commState.putBoolean("implicitTx", implicitTx))
+                     return false;
+ 
+                 commState.idx++;
+ 
+             case 28:
 -                if (!commState.putGridUuid(miniId))
++                if (!commState.putGridUuid("miniId", miniId))
+                     return false;
+ 
+                 commState.idx++;
+ 
+             case 29:
 -                if (!commState.putBoolean(onePhaseCommit))
++                if (!commState.putBoolean("onePhaseCommit", onePhaseCommit))
+                     return false;
+ 
+                 commState.idx++;
+ 
+             case 30:
 -                if (!commState.putLong(topVer))
++                if (!commState.putBoolean("syncCommit", syncCommit))
+                     return false;
+ 
+                 commState.idx++;
+ 
+             case 31:
 -                if (!commState.putUuid(subjId))
++                if (!commState.putLong("topVer", topVer))
+                     return false;
+ 
+                 commState.idx++;
+ 
+             case 32:
 -                if (!commState.putInt(taskNameHash))
++                if (!commState.putUuid("subjId", subjId))
+                     return false;
+ 
+                 commState.idx++;
+ 
+             case 33:
 -                if (!commState.putBoolean(hasTransforms))
++                if (!commState.putInt("taskNameHash", taskNameHash))
+                     return false;
+ 
+                 commState.idx++;
+ 
+             case 34:
 -                if (!commState.putBoolean(syncCommit))
++                if (!commState.putBoolean("hasTransforms", hasTransforms))
+                     return false;
+ 
+                 commState.idx++;
+ 
+             case 35:
 -                if (!commState.putLong(accessTtl))
++                if (!commState.putLong("accessTtl", accessTtl))
+                     return false;
+ 
+                 commState.idx++;
+ 
+         }
+ 
+         return true;
+     }
+ 
+     /** {@inheritDoc} */
+     @SuppressWarnings("all")
+     @Override public boolean readFrom(ByteBuffer buf) {
+         commState.setBuffer(buf);
+ 
+         if (!super.readFrom(buf))
+             return false;
+ 
+         switch (commState.idx) {
+             case 24:
+                 if (commState.readSize == -1) {
 -                    if (buf.remaining() < 4)
 -                        return false;
++                    commState.readSize = commState.getInt(null);
+ 
 -                    commState.readSize = commState.getInt();
++                    if (!commState.lastRead())
++                        return false;
+                 }
+ 
+                 if (commState.readSize >= 0) {
+                     if (dhtVers == null)
+                         dhtVers = new GridCacheVersion[commState.readSize];
+ 
+                     for (int i = commState.readItems; i < commState.readSize; i++) {
 -                        GridCacheVersion _val = commState.getCacheVersion();
++                        GridCacheVersion _val = commState.getCacheVersion(null);
+ 
 -                        if (_val == CACHE_VER_NOT_READ)
++                        if (!commState.lastRead())
+                             return false;
+ 
+                         dhtVers[i] = (GridCacheVersion)_val;
+ 
+                         commState.readItems++;
+                     }
+                 }
+ 
+                 commState.readSize = -1;
+                 commState.readItems = 0;
+ 
+                 commState.idx++;
+ 
+             case 25:
+                 if (commState.readSize == -1) {
 -                    if (buf.remaining() < 4)
 -                        return false;
++                    commState.readSize = commState.getInt(null);
+ 
 -                    commState.readSize = commState.getInt();
++                    if (!commState.lastRead())
++                        return false;
+                 }
+ 
+                 if (commState.readSize >= 0) {
+                     if (filterBytes == null)
+                         filterBytes = new byte[commState.readSize][];
+ 
+                     for (int i = commState.readItems; i < commState.readSize; i++) {
 -                        byte[] _val = commState.getByteArray();
++                        byte[] _val = commState.getByteArray(null);
+ 
 -                        if (_val == BYTE_ARR_NOT_READ)
++                        if (!commState.lastRead())
+                             return false;
+ 
+                         filterBytes[i] = (byte[])_val;
+ 
+                         commState.readItems++;
+                     }
+                 }
+ 
+                 commState.readSize = -1;
+                 commState.readItems = 0;
+ 
+                 commState.idx++;
+ 
+             case 26:
 -                if (buf.remaining() < 1)
 -                    return false;
++                implicitSingleTx = commState.getBoolean("implicitSingleTx");
+ 
 -                implicitSingleTx = commState.getBoolean();
++                if (!commState.lastRead())
++                    return false;
+ 
+                 commState.idx++;
+ 
+             case 27:
 -                if (buf.remaining() < 1)
 -                    return false;
++                implicitTx = commState.getBoolean("implicitTx");
+ 
 -                implicitTx = commState.getBoolean();
++                if (!commState.lastRead())
++                    return false;
+ 
+                 commState.idx++;
+ 
+             case 28:
 -                IgniteUuid miniId0 = commState.getGridUuid();
++                miniId = commState.getGridUuid("miniId");
+ 
 -                if (miniId0 == GRID_UUID_NOT_READ)
++                if (!commState.lastRead())
+                     return false;
+ 
 -                miniId = miniId0;
 -
+                 commState.idx++;
+ 
+             case 29:
 -                if (buf.remaining() < 1)
 -                    return false;
++                onePhaseCommit = commState.getBoolean("onePhaseCommit");
+ 
 -                onePhaseCommit = commState.getBoolean();
++                if (!commState.lastRead())
++                    return false;
+ 
+                 commState.idx++;
+ 
+             case 30:
 -                if (buf.remaining() < 8)
 -                    return false;
++                syncCommit = commState.getBoolean("syncCommit");
+ 
 -                topVer = commState.getLong();
++                if (!commState.lastRead())
++                    return false;
+ 
+                 commState.idx++;
+ 
+             case 31:
 -                UUID subjId0 = commState.getUuid();
++                topVer = commState.getLong("topVer");
+ 
 -                if (subjId0 == UUID_NOT_READ)
++                if (!commState.lastRead())
+                     return false;
+ 
 -                subjId = subjId0;
 -
+                 commState.idx++;
+ 
+             case 32:
 -                if (buf.remaining() < 4)
 -                    return false;
++                subjId = commState.getUuid("subjId");
+ 
 -                taskNameHash = commState.getInt();
++                if (!commState.lastRead())
++                    return false;
+ 
+                 commState.idx++;
+ 
+             case 33:
 -                if (buf.remaining() < 1)
 -                    return false;
++                taskNameHash = commState.getInt("taskNameHash");
+ 
 -                hasTransforms = commState.getBoolean();
++                if (!commState.lastRead())
++                    return false;
+ 
+                 commState.idx++;
+ 
+             case 34:
 -                if (buf.remaining() < 1)
++                hasTransforms = commState.getBoolean("hasTransforms");
++
++                if (!commState.lastRead())
+                     return false;
+ 
 -                syncCommit = commState.getBoolean();
++                syncCommit = commState.getBoolean(null);
+ 
+                 commState.idx++;
+ 
+             case 35:
+                 if (buf.remaining() < 8)
+                     return false;
+ 
 -                accessTtl = commState.getLong();
++                accessTtl = commState.getLong(null);
+ 
+                 commState.idx++;
++
+         }
+ 
+         return true;
+     }
+ 
+     /** {@inheritDoc} */
+     @Override public byte directType() {
+         return 50;
+     }
+ 
+     /** {@inheritDoc} */
+     @Override public String toString() {
+         return S.toString(GridNearLockRequest.class, this, "filter", Arrays.toString(filter),
+             "super", super.toString());
+     }
+ }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/3dbb6acc/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearLockResponse.java
----------------------------------------------------------------------
diff --cc modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearLockResponse.java
index 0000000,392b19c..98cbe8e
mode 000000,100644..100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearLockResponse.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearLockResponse.java
@@@ -1,0 -1,450 +1,446 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ 
+ package org.apache.ignite.internal.processors.cache.distributed.near;
+ 
+ import org.apache.ignite.*;
+ import org.apache.ignite.internal.*;
+ import org.apache.ignite.internal.processors.cache.*;
+ import org.apache.ignite.internal.processors.cache.distributed.*;
+ import org.apache.ignite.internal.processors.cache.version.*;
+ import org.apache.ignite.lang.*;
+ import org.apache.ignite.internal.util.direct.*;
+ import org.apache.ignite.internal.util.tostring.*;
+ import org.apache.ignite.internal.util.typedef.internal.*;
+ import org.jetbrains.annotations.*;
+ 
+ import java.io.*;
+ import java.nio.*;
+ import java.util.*;
+ 
+ /**
+  * Near cache lock response.
+  */
+ public class GridNearLockResponse<K, V> extends GridDistributedLockResponse<K, V> {
+     /** */
+     private static final long serialVersionUID = 0L;
+ 
+     /** Collection of versions that are pending and less than lock version. */
+     @GridToStringInclude
+     @GridDirectCollection(GridCacheVersion.class)
+     private Collection<GridCacheVersion> pending;
+ 
+     /** */
+     private IgniteUuid miniId;
+ 
+     /** DHT versions. */
+     @GridToStringInclude
+     private GridCacheVersion[] dhtVers;
+ 
+     /** DHT candidate versions. */
+     @GridToStringInclude
+     private GridCacheVersion[] mappedVers;
+ 
+     /** Filter evaluation results for fast-commit transactions. */
+     private boolean[] filterRes;
+ 
+     /**
+      * Empty constructor (required by {@link Externalizable}).
+      */
+     public GridNearLockResponse() {
+         // No-op.
+     }
+ 
+     /**
+      * @param cacheId Cache ID.
+      * @param lockVer Lock ID.
+      * @param futId Future ID.
+      * @param miniId Mini future ID.
+      * @param filterRes {@code True} if need to allocate array for filter evaluation results.
+      * @param cnt Count.
+      * @param err Error.
+      */
+     public GridNearLockResponse(
+         int cacheId,
+         GridCacheVersion lockVer,
+         IgniteUuid futId,
+         IgniteUuid miniId,
+         boolean filterRes,
+         int cnt,
+         Throwable err
+     ) {
+         super(cacheId, lockVer, futId, cnt, err);
+ 
+         assert miniId != null;
+ 
+         this.miniId = miniId;
+ 
+         dhtVers = new GridCacheVersion[cnt];
+         mappedVers = new GridCacheVersion[cnt];
+ 
+         if (filterRes)
+             this.filterRes = new boolean[cnt];
+     }
+ 
+     /**
+      * Gets pending versions that are less than {@link #version()}.
+      *
+      * @return Pending versions.
+      */
+     public Collection<GridCacheVersion> pending() {
+         return pending;
+     }
+ 
+     /**
+      * Sets pending versions that are less than {@link #version()}.
+      *
+      * @param pending Pending versions.
+      */
+     public void pending(Collection<GridCacheVersion> pending) {
+         this.pending = pending;
+     }
+ 
+     /**
+      * @return Mini future ID.
+      */
+     public IgniteUuid miniId() {
+         return miniId;
+     }
+ 
+     /**
+      * @param idx Index.
+      * @return DHT version.
+      */
+     public GridCacheVersion dhtVersion(int idx) {
+         return dhtVers == null ? null : dhtVers[idx];
+     }
+ 
+     /**
+      * Returns DHT candidate version for acquired near lock on DHT node.
+      *
+      * @param idx Key index.
+      * @return DHT version.
+      */
+     public GridCacheVersion mappedVersion(int idx) {
+         return mappedVers == null ? null : mappedVers[idx];
+     }
+ 
+     /**
+      * Gets filter evaluation result for fast-commit transaction.
+      *
+      * @param idx Result index.
+      * @return {@code True} if filter passed on primary node, {@code false} otherwise.
+      */
+     public boolean filterResult(int idx) {
+         assert filterRes != null : "Should not call filterResult for non-fast-commit transactions.";
+ 
+         return filterRes[idx];
+     }
+ 
+     /**
+      * @param val Value.
+      * @param valBytes Value bytes (possibly {@code null}).
+      * @param filterPassed Boolean flag indicating whether filter passed for fast-commit transaction.
+      * @param dhtVer DHT version.
+      * @param mappedVer Mapped version.
+      * @param ctx Context.
+      * @throws IgniteCheckedException If failed.
+      */
+     public void addValueBytes(
+         @Nullable V val,
+         @Nullable byte[] valBytes,
+         boolean filterPassed,
+         @Nullable GridCacheVersion dhtVer,
+         @Nullable GridCacheVersion mappedVer,
+         GridCacheContext<K, V> ctx
+     ) throws IgniteCheckedException {
+         int idx = valuesSize();
+ 
+         dhtVers[idx] = dhtVer;
+         mappedVers[idx] = mappedVer;
+ 
+         if (filterRes != null)
+             filterRes[idx] = filterPassed;
+ 
+         // Delegate to super.
+         addValueBytes(val, valBytes, ctx);
+     }
+ 
+     /** {@inheritDoc} */
+     @SuppressWarnings({"CloneDoesntCallSuperClone", "CloneCallsConstructors"})
+     @Override public GridTcpCommunicationMessageAdapter clone() {
+         GridNearLockResponse _clone = new GridNearLockResponse();
+ 
+         clone0(_clone);
+ 
+         return _clone;
+     }
+ 
+     /** {@inheritDoc} */
+     @Override protected void clone0(GridTcpCommunicationMessageAdapter _msg) {
+         super.clone0(_msg);
+ 
+         GridNearLockResponse _clone = (GridNearLockResponse)_msg;
+ 
+         _clone.pending = pending;
+         _clone.miniId = miniId;
+         _clone.dhtVers = dhtVers;
+         _clone.mappedVers = mappedVers;
+         _clone.filterRes = filterRes;
+     }
+ 
+     /** {@inheritDoc} */
+     @SuppressWarnings("all")
+     @Override public boolean writeTo(ByteBuffer buf) {
+         commState.setBuffer(buf);
+ 
+         if (!super.writeTo(buf))
+             return false;
+ 
+         if (!commState.typeWritten) {
 -            if (!commState.putByte(directType()))
++            if (!commState.putByte(null, directType()))
+                 return false;
+ 
+             commState.typeWritten = true;
+         }
+ 
+         switch (commState.idx) {
+             case 11:
+                 if (dhtVers != null) {
+                     if (commState.it == null) {
 -                        if (!commState.putInt(dhtVers.length))
++                        if (!commState.putInt(null, dhtVers.length))
+                             return false;
+ 
+                         commState.it = arrayIterator(dhtVers);
+                     }
+ 
+                     while (commState.it.hasNext() || commState.cur != NULL) {
+                         if (commState.cur == NULL)
+                             commState.cur = commState.it.next();
+ 
 -                        if (!commState.putCacheVersion((GridCacheVersion)commState.cur))
++                        if (!commState.putCacheVersion(null, (GridCacheVersion)commState.cur))
+                             return false;
+ 
+                         commState.cur = NULL;
+                     }
+ 
+                     commState.it = null;
+                 } else {
 -                    if (!commState.putInt(-1))
++                    if (!commState.putInt(null, -1))
+                         return false;
+                 }
+ 
+                 commState.idx++;
+ 
+             case 12:
 -                if (!commState.putBooleanArray(filterRes))
++                if (!commState.putBooleanArray("filterRes", filterRes))
+                     return false;
+ 
+                 commState.idx++;
+ 
+             case 13:
+                 if (mappedVers != null) {
+                     if (commState.it == null) {
 -                        if (!commState.putInt(mappedVers.length))
++                        if (!commState.putInt(null, mappedVers.length))
+                             return false;
+ 
+                         commState.it = arrayIterator(mappedVers);
+                     }
+ 
+                     while (commState.it.hasNext() || commState.cur != NULL) {
+                         if (commState.cur == NULL)
+                             commState.cur = commState.it.next();
+ 
 -                        if (!commState.putCacheVersion((GridCacheVersion)commState.cur))
++                        if (!commState.putCacheVersion(null, (GridCacheVersion)commState.cur))
+                             return false;
+ 
+                         commState.cur = NULL;
+                     }
+ 
+                     commState.it = null;
+                 } else {
 -                    if (!commState.putInt(-1))
++                    if (!commState.putInt(null, -1))
+                         return false;
+                 }
+ 
+                 commState.idx++;
+ 
+             case 14:
 -                if (!commState.putGridUuid(miniId))
++                if (!commState.putGridUuid("miniId", miniId))
+                     return false;
+ 
+                 commState.idx++;
+ 
+             case 15:
+                 if (pending != null) {
+                     if (commState.it == null) {
 -                        if (!commState.putInt(pending.size()))
++                        if (!commState.putInt(null, pending.size()))
+                             return false;
+ 
+                         commState.it = pending.iterator();
+                     }
+ 
+                     while (commState.it.hasNext() || commState.cur != NULL) {
+                         if (commState.cur == NULL)
+                             commState.cur = commState.it.next();
+ 
 -                        if (!commState.putCacheVersion((GridCacheVersion)commState.cur))
++                        if (!commState.putCacheVersion(null, (GridCacheVersion)commState.cur))
+                             return false;
+ 
+                         commState.cur = NULL;
+                     }
+ 
+                     commState.it = null;
+                 } else {
 -                    if (!commState.putInt(-1))
++                    if (!commState.putInt(null, -1))
+                         return false;
+                 }
+ 
+                 commState.idx++;
+ 
+         }
+ 
+         return true;
+     }
+ 
+     /** {@inheritDoc} */
+     @SuppressWarnings("all")
+     @Override public boolean readFrom(ByteBuffer buf) {
+         commState.setBuffer(buf);
+ 
+         if (!super.readFrom(buf))
+             return false;
+ 
+         switch (commState.idx) {
+             case 11:
+                 if (commState.readSize == -1) {
 -                    if (buf.remaining() < 4)
 -                        return false;
++                    commState.readSize = commState.getInt(null);
+ 
 -                    commState.readSize = commState.getInt();
++                    if (!commState.lastRead())
++                        return false;
+                 }
+ 
+                 if (commState.readSize >= 0) {
+                     if (dhtVers == null)
+                         dhtVers = new GridCacheVersion[commState.readSize];
+ 
+                     for (int i = commState.readItems; i < commState.readSize; i++) {
 -                        GridCacheVersion _val = commState.getCacheVersion();
++                        GridCacheVersion _val = commState.getCacheVersion(null);
+ 
 -                        if (_val == CACHE_VER_NOT_READ)
++                        if (!commState.lastRead())
+                             return false;
+ 
+                         dhtVers[i] = (GridCacheVersion)_val;
+ 
+                         commState.readItems++;
+                     }
+                 }
+ 
+                 commState.readSize = -1;
+                 commState.readItems = 0;
+ 
+                 commState.idx++;
+ 
+             case 12:
 -                boolean[] filterRes0 = commState.getBooleanArray();
++                filterRes = commState.getBooleanArray("filterRes");
+ 
 -                if (filterRes0 == BOOLEAN_ARR_NOT_READ)
++                if (!commState.lastRead())
+                     return false;
+ 
 -                filterRes = filterRes0;
 -
+                 commState.idx++;
+ 
+             case 13:
+                 if (commState.readSize == -1) {
 -                    if (buf.remaining() < 4)
 -                        return false;
++                    commState.readSize = commState.getInt(null);
+ 
 -                    commState.readSize = commState.getInt();
++                    if (!commState.lastRead())
++                        return false;
+                 }
+ 
+                 if (commState.readSize >= 0) {
+                     if (mappedVers == null)
+                         mappedVers = new GridCacheVersion[commState.readSize];
+ 
+                     for (int i = commState.readItems; i < commState.readSize; i++) {
 -                        GridCacheVersion _val = commState.getCacheVersion();
++                        GridCacheVersion _val = commState.getCacheVersion(null);
+ 
 -                        if (_val == CACHE_VER_NOT_READ)
++                        if (!commState.lastRead())
+                             return false;
+ 
+                         mappedVers[i] = (GridCacheVersion)_val;
+ 
+                         commState.readItems++;
+                     }
+                 }
+ 
+                 commState.readSize = -1;
+                 commState.readItems = 0;
+ 
+                 commState.idx++;
+ 
+             case 14:
 -                IgniteUuid miniId0 = commState.getGridUuid();
++                miniId = commState.getGridUuid("miniId");
+ 
 -                if (miniId0 == GRID_UUID_NOT_READ)
++                if (!commState.lastRead())
+                     return false;
+ 
 -                miniId = miniId0;
 -
+                 commState.idx++;
+ 
+             case 15:
+                 if (commState.readSize == -1) {
 -                    if (buf.remaining() < 4)
 -                        return false;
++                    commState.readSize = commState.getInt(null);
+ 
 -                    commState.readSize = commState.getInt();
++                    if (!commState.lastRead())
++                        return false;
+                 }
+ 
+                 if (commState.readSize >= 0) {
+                     if (pending == null)
+                         pending = new ArrayList<>(commState.readSize);
+ 
+                     for (int i = commState.readItems; i < commState.readSize; i++) {
 -                        GridCacheVersion _val = commState.getCacheVersion();
++                        GridCacheVersion _val = commState.getCacheVersion(null);
+ 
 -                        if (_val == CACHE_VER_NOT_READ)
++                        if (!commState.lastRead())
+                             return false;
+ 
+                         pending.add((GridCacheVersion)_val);
+ 
+                         commState.readItems++;
+                     }
+                 }
+ 
+                 commState.readSize = -1;
+                 commState.readItems = 0;
+ 
+                 commState.idx++;
+ 
+         }
+ 
+         return true;
+     }
+ 
+     /** {@inheritDoc} */
+     @Override public byte directType() {
+         return 51;
+     }
+ 
+     /** {@inheritDoc} */
+     @Override public String toString() {
+         return S.toString(GridNearLockResponse.class, this, super.toString());
+     }
+ }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/3dbb6acc/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxFinishRequest.java
----------------------------------------------------------------------
diff --cc modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxFinishRequest.java
index 0000000,2e63a8c..f4cb518
mode 000000,100644..100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxFinishRequest.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxFinishRequest.java
@@@ -1,0 -1,317 +1,315 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ 
+ package org.apache.ignite.internal.processors.cache.distributed.near;
+ 
+ import org.apache.ignite.internal.*;
+ import org.apache.ignite.internal.processors.cache.distributed.*;
+ import org.apache.ignite.internal.processors.cache.version.*;
+ import org.apache.ignite.lang.*;
+ import org.apache.ignite.internal.processors.cache.transactions.*;
+ import org.apache.ignite.internal.util.direct.*;
+ import org.apache.ignite.internal.util.tostring.*;
+ import org.jetbrains.annotations.*;
+ 
+ import java.io.*;
+ import java.nio.*;
+ import java.util.*;
+ 
+ /**
+  * Near transaction finish request.
+  */
+ public class GridNearTxFinishRequest<K, V> extends GridDistributedTxFinishRequest<K, V> {
+     /** */
+     private static final long serialVersionUID = 0L;
+ 
+     /** Mini future ID. */
+     private IgniteUuid miniId;
+ 
+     /** Explicit lock flag. */
+     private boolean explicitLock;
+ 
+     /** Store enabled flag. */
+     private boolean storeEnabled;
+ 
+     /** Topology version. */
+     private long topVer;
+ 
+     /** Subject ID. */
+     @GridDirectVersion(1)
+     private UUID subjId;
+ 
+     /** Task name hash. */
+     @GridDirectVersion(2)
+     private int taskNameHash;
+ 
+     /**
+      * Empty constructor required for {@link Externalizable}.
+      */
+     public GridNearTxFinishRequest() {
+         // No-op.
+     }
+ 
+     /**
+      * @param futId Future ID.
+      * @param xidVer Transaction ID.
+      * @param threadId Thread ID.
+      * @param commit Commit flag.
+      * @param invalidate Invalidate flag.
+      * @param sys System flag.
+      * @param explicitLock Explicit lock flag.
+      * @param storeEnabled Store enabled flag.
+      * @param topVer Topology version.
+      * @param baseVer Base version.
+      * @param committedVers Committed versions.
+      * @param rolledbackVers Rolled back versions.
+      * @param txSize Expected transaction size.
+      * @param writeEntries Write entries.
+      * @param recoverEntries Recover entries.
+      */
+     public GridNearTxFinishRequest(
+         IgniteUuid futId,
+         GridCacheVersion xidVer,
+         long threadId,
+         boolean commit,
+         boolean invalidate,
+         boolean sys,
+         boolean syncCommit,
+         boolean syncRollback,
+         boolean explicitLock,
+         boolean storeEnabled,
+         long topVer,
+         GridCacheVersion baseVer,
+         Collection<GridCacheVersion> committedVers,
+         Collection<GridCacheVersion> rolledbackVers,
+         int txSize,
+         Collection<IgniteTxEntry<K, V>> writeEntries,
+         Collection<IgniteTxEntry<K, V>> recoverEntries,
+         @Nullable UUID subjId,
+         int taskNameHash) {
+         super(xidVer, futId, null, threadId, commit, invalidate, sys, syncCommit, syncRollback, baseVer, committedVers,
+             rolledbackVers, txSize, writeEntries, recoverEntries, null);
+ 
+         this.explicitLock = explicitLock;
+         this.storeEnabled = storeEnabled;
+         this.topVer = topVer;
+         this.subjId = subjId;
+         this.taskNameHash = taskNameHash;
+     }
+ 
+     /**
+      * @return Explicit lock flag.
+      */
+     public boolean explicitLock() {
+         return explicitLock;
+     }
+ 
+     /**
+      * @return Store enabled flag.
+      */
+     public boolean storeEnabled() {
+         return storeEnabled;
+     }
+ 
+     /**
+      * @return Mini future ID.
+      */
+     public IgniteUuid miniId() {
+         return miniId;
+     }
+ 
+     /**
+      * @param miniId Mini future ID.
+      */
+     public void miniId(IgniteUuid miniId) {
+         this.miniId = miniId;
+     }
+ 
+     /**
+      * @return Subject ID.
+      */
+     @Nullable public UUID subjectId() {
+         return subjId;
+     }
+ 
+     /**
+      * @return Task name hash.
+      */
+     public int taskNameHash() {
+         return taskNameHash;
+     }
+ 
+     /**
+      * @return Topology version.
+      */
+     @Override public long topologyVersion() {
+         return topVer;
+     }
+ 
+     /** {@inheritDoc} */
+     @SuppressWarnings({"CloneDoesntCallSuperClone", "CloneCallsConstructors"})
+     @Override public GridTcpCommunicationMessageAdapter clone() {
+         GridNearTxFinishRequest _clone = new GridNearTxFinishRequest();
+ 
+         clone0(_clone);
+ 
+         return _clone;
+     }
+ 
+     /** {@inheritDoc} */
+     @Override protected void clone0(GridTcpCommunicationMessageAdapter _msg) {
+         super.clone0(_msg);
+ 
+         GridNearTxFinishRequest _clone = (GridNearTxFinishRequest)_msg;
+ 
+         _clone.miniId = miniId;
+         _clone.explicitLock = explicitLock;
+         _clone.storeEnabled = storeEnabled;
+         _clone.topVer = topVer;
+         _clone.subjId = subjId;
+         _clone.taskNameHash = taskNameHash;
+     }
+ 
+     /** {@inheritDoc} */
+     @SuppressWarnings("all")
+     @Override public boolean writeTo(ByteBuffer buf) {
+         commState.setBuffer(buf);
+ 
+         if (!super.writeTo(buf))
+             return false;
+ 
+         if (!commState.typeWritten) {
 -            if (!commState.putByte(directType()))
++            if (!commState.putByte(null, directType()))
+                 return false;
+ 
+             commState.typeWritten = true;
+         }
+ 
+         switch (commState.idx) {
+             case 21:
 -                if (!commState.putBoolean(explicitLock))
++                if (!commState.putBoolean("explicitLock", explicitLock))
+                     return false;
+ 
+                 commState.idx++;
+ 
+             case 22:
 -                if (!commState.putGridUuid(miniId))
++                if (!commState.putGridUuid("miniId", miniId))
+                     return false;
+ 
+                 commState.idx++;
+ 
+             case 23:
 -                if (!commState.putLong(topVer))
++                if (!commState.putBoolean("storeEnabled", storeEnabled))
+                     return false;
+ 
+                 commState.idx++;
+ 
+             case 24:
 -                if (!commState.putUuid(subjId))
++                if (!commState.putLong("topVer", topVer))
+                     return false;
+ 
+                 commState.idx++;
+ 
+             case 25:
 -                if (!commState.putInt(taskNameHash))
++                if (!commState.putUuid("subjId", subjId))
+                     return false;
+ 
+                 commState.idx++;
+ 
+             case 26:
 -                if (!commState.putBoolean(storeEnabled))
++                if (!commState.putInt("taskNameHash", taskNameHash))
+                     return false;
+ 
+                 commState.idx++;
++
+         }
+ 
+         return true;
+     }
+ 
+     /** {@inheritDoc} */
+     @SuppressWarnings("all")
+     @Override public boolean readFrom(ByteBuffer buf) {
+         commState.setBuffer(buf);
+ 
+         if (!super.readFrom(buf))
+             return false;
+ 
+         switch (commState.idx) {
+             case 21:
 -                if (buf.remaining() < 1)
 -                    return false;
++                explicitLock = commState.getBoolean("explicitLock");
+ 
 -                explicitLock = commState.getBoolean();
++                if (!commState.lastRead())
++                    return false;
+ 
+                 commState.idx++;
+ 
+             case 22:
 -                IgniteUuid miniId0 = commState.getGridUuid();
++                miniId = commState.getGridUuid("miniId");
+ 
 -                if (miniId0 == GRID_UUID_NOT_READ)
++                if (!commState.lastRead())
+                     return false;
+ 
 -                miniId = miniId0;
 -
+                 commState.idx++;
+ 
+             case 23:
 -                if (buf.remaining() < 8)
 -                    return false;
++                storeEnabled = commState.getBoolean("storeEnabled");
+ 
 -                topVer = commState.getLong();
++                if (!commState.lastRead())
++                    return false;
+ 
+                 commState.idx++;
+ 
+             case 24:
 -                UUID subjId0 = commState.getUuid();
++                topVer = commState.getLong("topVer");
+ 
 -                if (subjId0 == UUID_NOT_READ)
++                if (!commState.lastRead())
+                     return false;
+ 
 -                subjId = subjId0;
 -
+                 commState.idx++;
+ 
+             case 25:
 -                if (buf.remaining() < 4)
 -                    return false;
++                subjId = commState.getUuid("subjId");
+ 
 -                taskNameHash = commState.getInt();
++                if (!commState.lastRead())
++                    return false;
+ 
+                 commState.idx++;
+ 
+             case 26:
 -                if (buf.remaining() < 1)
 -                    return false;
++                taskNameHash = commState.getInt("taskNameHash");
+ 
 -                storeEnabled = commState.getBoolean();
++                if (!commState.lastRead())
++                    return false;
+ 
+                 commState.idx++;
++
+         }
+ 
+         return true;
+     }
+ 
+     /** {@inheritDoc} */
+     @Override public byte directType() {
+         return 52;
+     }
+ 
+     /** {@inheritDoc} */
+     @Override public String toString() {
+         return GridToStringBuilder.toString(GridNearTxFinishRequest.class, this, "super", super.toString());
+     }
+ }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/3dbb6acc/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxFinishResponse.java
----------------------------------------------------------------------
diff --cc modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxFinishResponse.java
index 0000000,b61f2ef..22c68e9
mode 000000,100644..100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxFinishResponse.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxFinishResponse.java
@@@ -1,0 -1,228 +1,224 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ 
+ package org.apache.ignite.internal.processors.cache.distributed.near;
+ 
+ import org.apache.ignite.*;
+ import org.apache.ignite.internal.*;
+ import org.apache.ignite.internal.processors.cache.*;
+ import org.apache.ignite.internal.processors.cache.distributed.*;
+ import org.apache.ignite.internal.processors.cache.version.*;
+ import org.apache.ignite.lang.*;
+ import org.apache.ignite.internal.util.direct.*;
+ import org.apache.ignite.internal.util.typedef.internal.*;
+ import org.jetbrains.annotations.*;
+ 
+ import java.io.*;
+ import java.nio.*;
+ 
+ /**
+  * Reply for synchronous phase 2.
+  */
+ public class GridNearTxFinishResponse<K, V> extends GridDistributedTxFinishResponse<K, V> {
+     /** */
+     private static final long serialVersionUID = 0L;
+ 
+     /** Heuristic error. */
+     @GridDirectTransient
+     private Throwable err;
+ 
+     /** Serialized error. */
+     private byte[] errBytes;
+ 
+     /** Mini future ID. */
+     private IgniteUuid miniId;
+ 
+     /** Near tx thread ID. */
+     private long nearThreadId;
+ 
+     /**
+      * Empty constructor required by {@link Externalizable}.
+      */
+     public GridNearTxFinishResponse() {
+         // No-op.
+     }
+ 
+     /**
+      * @param xid Xid version.
+      * @param nearThreadId Near tx thread ID.
+      * @param futId Future ID.
+      * @param miniId Mini future Id.
+      * @param err Error.
+      */
+     public GridNearTxFinishResponse(GridCacheVersion xid, long nearThreadId, IgniteUuid futId, IgniteUuid miniId,
+         @Nullable Throwable err) {
+         super(xid, futId);
+ 
+         assert miniId != null;
+ 
+         this.nearThreadId = nearThreadId;
+         this.miniId = miniId;
+         this.err = err;
+     }
+ 
+     /**
+      * @return Error.
+      */
+     @Nullable public Throwable error() {
+         return err;
+     }
+ 
+     /**
+      * @return Mini future ID.
+      */
+     public IgniteUuid miniId() {
+         return miniId;
+     }
+ 
+     /**
+      * @return Near thread ID.
+      */
+     public long threadId() {
+         return nearThreadId;
+     }
+ 
+     /** {@inheritDoc}
+      * @param ctx*/
+     @Override public void prepareMarshal(GridCacheSharedContext<K, V> ctx) throws IgniteCheckedException {
+         super.prepareMarshal(ctx);
+ 
+         if (err != null)
+             errBytes = ctx.marshaller().marshal(err);
+     }
+ 
+     /** {@inheritDoc} */
+     @Override public void finishUnmarshal(GridCacheSharedContext<K, V> ctx, ClassLoader ldr) throws IgniteCheckedException {
+         super.finishUnmarshal(ctx, ldr);
+ 
+         if (errBytes != null)
+             err = ctx.marshaller().unmarshal(errBytes, ldr);
+     }
+ 
+     /** {@inheritDoc} */
+     @SuppressWarnings({"CloneDoesntCallSuperClone", "CloneCallsConstructors"})
+     @Override public GridTcpCommunicationMessageAdapter clone() {
+         GridNearTxFinishResponse _clone = new GridNearTxFinishResponse();
+ 
+         clone0(_clone);
+ 
+         return _clone;
+     }
+ 
+     /** {@inheritDoc} */
+     @Override protected void clone0(GridTcpCommunicationMessageAdapter _msg) {
+         super.clone0(_msg);
+ 
+         GridNearTxFinishResponse _clone = (GridNearTxFinishResponse)_msg;
+ 
+         _clone.err = err;
+         _clone.errBytes = errBytes;
+         _clone.miniId = miniId;
+         _clone.nearThreadId = nearThreadId;
+     }
+ 
+     /** {@inheritDoc} */
+     @SuppressWarnings("all")
+     @Override public boolean writeTo(ByteBuffer buf) {
+         commState.setBuffer(buf);
+ 
+         if (!super.writeTo(buf))
+             return false;
+ 
+         if (!commState.typeWritten) {
 -            if (!commState.putByte(directType()))
++            if (!commState.putByte(null, directType()))
+                 return false;
+ 
+             commState.typeWritten = true;
+         }
+ 
+         switch (commState.idx) {
+             case 5:
 -                if (!commState.putByteArray(errBytes))
++                if (!commState.putByteArray("errBytes", errBytes))
+                     return false;
+ 
+                 commState.idx++;
+ 
+             case 6:
 -                if (!commState.putGridUuid(miniId))
++                if (!commState.putGridUuid("miniId", miniId))
+                     return false;
+ 
+                 commState.idx++;
+ 
+             case 7:
 -                if (!commState.putLong(nearThreadId))
++                if (!commState.putLong("nearThreadId", nearThreadId))
+                     return false;
+ 
+                 commState.idx++;
+ 
+         }
+ 
+         return true;
+     }
+ 
+     /** {@inheritDoc} */
+     @SuppressWarnings("all")
+     @Override public boolean readFrom(ByteBuffer buf) {
+         commState.setBuffer(buf);
+ 
+         if (!super.readFrom(buf))
+             return false;
+ 
+         switch (commState.idx) {
+             case 5:
 -                byte[] errBytes0 = commState.getByteArray();
++                errBytes = commState.getByteArray("errBytes");
+ 
 -                if (errBytes0 == BYTE_ARR_NOT_READ)
++                if (!commState.lastRead())
+                     return false;
+ 
 -                errBytes = errBytes0;
 -
+                 commState.idx++;
+ 
+             case 6:
 -                IgniteUuid miniId0 = commState.getGridUuid();
++                miniId = commState.getGridUuid("miniId");
+ 
 -                if (miniId0 == GRID_UUID_NOT_READ)
++                if (!commState.lastRead())
+                     return false;
+ 
 -                miniId = miniId0;
 -
+                 commState.idx++;
+ 
+             case 7:
 -                if (buf.remaining() < 8)
 -                    return false;
++                nearThreadId = commState.getLong("nearThreadId");
+ 
 -                nearThreadId = commState.getLong();
++                if (!commState.lastRead())
++                    return false;
+ 
+                 commState.idx++;
+ 
+         }
+ 
+         return true;
+     }
+ 
+     /** {@inheritDoc} */
+     @Override public byte directType() {
+         return 53;
+     }
+ 
+     /** {@inheritDoc} */
+     @Override public String toString() {
+         return S.toString(GridNearTxFinishResponse.class, this, "super", super.toString());
+     }
+ }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/3dbb6acc/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxPrepareRequest.java
----------------------------------------------------------------------
diff --cc modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxPrepareRequest.java
index 0000000,8aecfe0..e0bc216
mode 000000,100644..100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxPrepareRequest.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxPrepareRequest.java
@@@ -1,0 -1,449 +1,444 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ 
+ package org.apache.ignite.internal.processors.cache.distributed.near;
+ 
+ import org.apache.ignite.internal.*;
+ import org.apache.ignite.internal.processors.cache.*;
+ import org.apache.ignite.internal.processors.cache.distributed.*;
+ import org.apache.ignite.lang.*;
+ import org.apache.ignite.internal.processors.cache.transactions.*;
+ import org.apache.ignite.internal.util.direct.*;
+ import org.apache.ignite.internal.util.typedef.*;
+ import org.apache.ignite.internal.util.typedef.internal.*;
+ import org.jetbrains.annotations.*;
+ 
+ import java.io.*;
+ import java.nio.*;
+ import java.util.*;
+ 
+ /**
+  * Near transaction prepare request.
+  */
+ public class GridNearTxPrepareRequest<K, V> extends GridDistributedTxPrepareRequest<K, V> {
+     /** */
+     private static final long serialVersionUID = 0L;
+ 
+     /** Future ID. */
+     private IgniteUuid futId;
+ 
+     /** Mini future ID. */
+     private IgniteUuid miniId;
+ 
+     /** Near mapping flag. */
+     private boolean near;
+ 
+     /** Topology version. */
+     private long topVer;
+ 
+     /** {@code True} if this last prepare request for node. */
+     private boolean last;
+ 
+     /** IDs of backup nodes receiving last prepare request during this prepare. */
+     @GridDirectCollection(UUID.class)
+     private Collection<UUID> lastBackups;
+ 
+     /** Subject ID. */
+     @GridDirectVersion(1)
+     private UUID subjId;
+ 
+     /** Task name hash. */
+     @GridDirectVersion(2)
+     private int taskNameHash;
+ 
+     /**
+      * Empty constructor required for {@link Externalizable}.
+      */
+     public GridNearTxPrepareRequest() {
+         // No-op.
+     }
+ 
+     /**
+      * @param futId Future ID.
+      * @param topVer Topology version.
+      * @param tx Transaction.
+      * @param reads Read entries.
+      * @param writes Write entries.
+      * @param grpLockKey Group lock key if preparing group-lock transaction.
+      * @param partLock {@code True} if preparing group-lock transaction with partition lock.
+      * @param near {@code True} if mapping is for near caches.
+      * @param txNodes Transaction nodes mapping.
+      * @param last {@code True} if this last prepare request for node.
+      * @param lastBackups IDs of backup nodes receiving last prepare request during this prepare.
+      * @param subjId Subject ID.
+      * @param taskNameHash Task name hash.
+      */
+     public GridNearTxPrepareRequest(
+         IgniteUuid futId,
+         long topVer,
+         IgniteTxEx<K, V> tx,
+         Collection<IgniteTxEntry<K, V>> reads,
+         Collection<IgniteTxEntry<K, V>> writes,
+         IgniteTxKey grpLockKey,
+         boolean partLock,
+         boolean near,
+         Map<UUID, Collection<UUID>> txNodes,
+         boolean last,
+         Collection<UUID> lastBackups,
+         @Nullable UUID subjId,
+         int taskNameHash
+     ) {
+         super(tx, reads, writes, grpLockKey, partLock, txNodes);
+ 
+         assert futId != null;
+ 
+         this.futId = futId;
+         this.topVer = topVer;
+         this.near = near;
+         this.last = last;
+         this.lastBackups = lastBackups;
+         this.subjId = subjId;
+         this.taskNameHash = taskNameHash;
+     }
+ 
+     /**
+      * @return IDs of backup nodes receiving last prepare request during this prepare.
+      */
+     public Collection<UUID> lastBackups() {
+         return lastBackups;
+     }
+ 
+     /**
+      * @return {@code True} if this last prepare request for node.
+      */
+     public boolean last() {
+         return last;
+     }
+ 
+     /**
+      * @return {@code True} if mapping is for near-enabled caches.
+      */
+     public boolean near() {
+         return near;
+     }
+ 
+     /**
+      * @return Future ID.
+      */
+     public IgniteUuid futureId() {
+         return futId;
+     }
+ 
+     /**
+      * @return Mini future ID.
+      */
+     public IgniteUuid miniId() {
+         return miniId;
+     }
+ 
+     /**
+      * @param miniId Mini future ID.
+      */
+     public void miniId(IgniteUuid miniId) {
+         this.miniId = miniId;
+     }
+ 
+     /**
+      * @return Subject ID.
+      */
+     @Nullable public UUID subjectId() {
+         return subjId;
+     }
+ 
+     /**
+      * @return Task name hash.
+      */
+     public int taskNameHash() {
+         return taskNameHash;
+     }
+ 
+     /**
+      * @return Topology version.
+      */
+     @Override public long topologyVersion() {
+         return topVer;
+     }
+ 
+     /**
+      *
+      */
+     public void cloneEntries() {
+         reads(cloneEntries(reads()));
+         writes(cloneEntries(writes()));
+     }
+ 
+     /**
+      * Clones entries so that tx entries with initialized near entries are not passed to DHT transaction.
+      * Used only when local part of prepare is invoked.
+      *
+      * @param c Collection of entries to clone.
+      * @return Cloned collection.
+      */
+     private Collection<IgniteTxEntry<K, V>> cloneEntries(Collection<IgniteTxEntry<K, V>> c) {
+         if (F.isEmpty(c))
+             return c;
+ 
+         Collection<IgniteTxEntry<K, V>> cp = new ArrayList<>(c.size());
+ 
+         for (IgniteTxEntry<K, V> e : c) {
+             GridCacheContext<K, V> cacheCtx = e.context();
+ 
+             // Clone only if it is a near cache.
+             if (cacheCtx.isNear())
+                 cp.add(e.cleanCopy(cacheCtx.nearTx().dht().context()));
+             else
+                 cp.add(e);
+         }
+ 
+         return cp;
+     }
+ 
+     /** {@inheritDoc} */
+     @Override protected boolean transferExpiryPolicy() {
+         return true;
+     }
+ 
+     /** {@inheritDoc} */
+     @SuppressWarnings({"CloneDoesntCallSuperClone", "CloneCallsConstructors"})
+     @Override public GridTcpCommunicationMessageAdapter clone() {
+         GridNearTxPrepareRequest _clone = new GridNearTxPrepareRequest();
+ 
+         clone0(_clone);
+ 
+         return _clone;
+     }
+ 
+     /** {@inheritDoc} */
+     @Override protected void clone0(GridTcpCommunicationMessageAdapter _msg) {
+         super.clone0(_msg);
+ 
+         GridNearTxPrepareRequest _clone = (GridNearTxPrepareRequest)_msg;
+ 
+         _clone.futId = futId;
+         _clone.miniId = miniId;
++        _clone.near = near;
+         _clone.topVer = topVer;
+         _clone.last = last;
+         _clone.lastBackups = lastBackups;
+         _clone.subjId = subjId;
+         _clone.taskNameHash = taskNameHash;
+     }
+ 
+     /** {@inheritDoc} */
+     @SuppressWarnings("all")
+     @Override public boolean writeTo(ByteBuffer buf) {
+         commState.setBuffer(buf);
+ 
+         if (!super.writeTo(buf))
+             return false;
+ 
+         if (!commState.typeWritten) {
 -            if (!commState.putByte(directType()))
++            if (!commState.putByte(null, directType()))
+                 return false;
+ 
+             commState.typeWritten = true;
+         }
+ 
+         switch (commState.idx) {
+             case 22:
 -                if (!commState.putGridUuid(futId))
++                if (!commState.putGridUuid("futId", futId))
+                     return false;
+ 
+                 commState.idx++;
+ 
+             case 23:
 -                if (!commState.putBoolean(last))
++                if (!commState.putBoolean("last", last))
+                     return false;
+ 
+                 commState.idx++;
+ 
+             case 24:
+                 if (lastBackups != null) {
+                     if (commState.it == null) {
 -                        if (!commState.putInt(lastBackups.size()))
++                        if (!commState.putInt(null, lastBackups.size()))
+                             return false;
+ 
+                         commState.it = lastBackups.iterator();
+                     }
+ 
+                     while (commState.it.hasNext() || commState.cur != NULL) {
+                         if (commState.cur == NULL)
+                             commState.cur = commState.it.next();
+ 
 -                        if (!commState.putUuid((UUID)commState.cur))
++                        if (!commState.putUuid(null, (UUID)commState.cur))
+                             return false;
+ 
+                         commState.cur = NULL;
+                     }
+ 
+                     commState.it = null;
+                 } else {
 -                    if (!commState.putInt(-1))
++                    if (!commState.putInt(null, -1))
+                         return false;
+                 }
+ 
+                 commState.idx++;
+ 
+             case 25:
 -                if (!commState.putGridUuid(miniId))
++                if (!commState.putGridUuid("miniId", miniId))
+                     return false;
+ 
+                 commState.idx++;
+ 
+             case 26:
 -                if (!commState.putBoolean(near))
++                if (!commState.putBoolean("near", near))
+                     return false;
+ 
+                 commState.idx++;
+ 
+             case 27:
 -                if (!commState.putLong(topVer))
++                if (!commState.putLong("topVer", topVer))
+                     return false;
+ 
+                 commState.idx++;
+ 
+             case 28:
 -                if (!commState.putUuid(subjId))
++                if (!commState.putUuid("subjId", subjId))
+                     return false;
+ 
+                 commState.idx++;
+ 
+             case 29:
 -                if (!commState.putInt(taskNameHash))
++                if (!commState.putInt("taskNameHash", taskNameHash))
+                     return false;
+ 
+                 commState.idx++;
+ 
+         }
+ 
+         return true;
+     }
+ 
+     /** {@inheritDoc} */
+     @SuppressWarnings("all")
+     @Override public boolean readFrom(ByteBuffer buf) {
+         commState.setBuffer(buf);
+ 
+         if (!super.readFrom(buf))
+             return false;
+ 
+         switch (commState.idx) {
+             case 22:
 -                IgniteUuid futId0 = commState.getGridUuid();
++                futId = commState.getGridUuid("futId");
+ 
 -                if (futId0 == GRID_UUID_NOT_READ)
++                if (!commState.lastRead())
+                     return false;
+ 
 -                futId = futId0;
 -
+                 commState.idx++;
+ 
+             case 23:
 -                if (buf.remaining() < 1)
 -                    return false;
++                last = commState.getBoolean("last");
+ 
 -                last = commState.getBoolean();
++                if (!commState.lastRead())
++                    return false;
+ 
+                 commState.idx++;
+ 
+             case 24:
+                 if (commState.readSize == -1) {
 -                    if (buf.remaining() < 4)
 -                        return false;
++                    commState.readSize = commState.getInt(null);
+ 
 -                    commState.readSize = commState.getInt();
++                    if (!commState.lastRead())
++                        return false;
+                 }
+ 
+                 if (commState.readSize >= 0) {
+                     if (lastBackups == null)
+                         lastBackups = new ArrayList<>(commState.readSize);
+ 
+                     for (int i = commState.readItems; i < commState.readSize; i++) {
 -                        UUID _val = commState.getUuid();
++                        UUID _val = commState.getUuid(null);
+ 
 -                        if (_val == UUID_NOT_READ)
++                        if (!commState.lastRead())
+                             return false;
+ 
+                         lastBackups.add((UUID)_val);
+ 
+                         commState.readItems++;
+                     }
+                 }
+ 
+                 commState.readSize = -1;
+                 commState.readItems = 0;
+ 
+                 commState.idx++;
+ 
+             case 25:
 -                IgniteUuid miniId0 = commState.getGridUuid();
++                miniId = commState.getGridUuid("miniId");
+ 
 -                if (miniId0 == GRID_UUID_NOT_READ)
++                if (!commState.lastRead())
+                     return false;
+ 
 -                miniId = miniId0;
 -
+                 commState.idx++;
+ 
+             case 26:
 -                if (buf.remaining() < 1)
 -                    return false;
++                near = commState.getBoolean("near");
+ 
 -                near = commState.getBoolean();
++                if (!commState.lastRead())
++                    return false;
+ 
+                 commState.idx++;
+ 
+             case 27:
 -                if (buf.remaining() < 8)
 -                    return false;
++                topVer = commState.getLong("topVer");
+ 
 -                topVer = commState.getLong();
++                if (!commState.lastRead())
++                    return false;
+ 
+                 commState.idx++;
+ 
+             case 28:
 -                UUID subjId0 = commState.getUuid();
++                subjId = commState.getUuid("subjId");
+ 
 -                if (subjId0 == UUID_NOT_READ)
++                if (!commState.lastRead())
+                     return false;
+ 
 -                subjId = subjId0;
 -
+                 commState.idx++;
+ 
+             case 29:
 -                if (buf.remaining() < 4)
 -                    return false;
++                taskNameHash = commState.getInt("taskNameHash");
+ 
 -                taskNameHash = commState.getInt();
++                if (!commState.lastRead())
++                    return false;
+ 
+                 commState.idx++;
+ 
+         }
+ 
+         return true;
+     }
+ 
+     /** {@inheritDoc} */
+     @Override public byte directType() {
+         return 54;
+     }
+ 
+     /** {@inheritDoc} */
+     @Override public String toString() {
+         return S.toString(GridNearTxPrepareRequest.class, this, super.toString());
+     }
+ }