You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sb...@apache.org on 2017/02/20 12:27:32 UTC

[30/32] ignite git commit: Merge remote-tracking branch 'remotes/origin/ignite-2.0' into ignite-4705

Merge remote-tracking branch 'remotes/origin/ignite-2.0' into ignite-4705

# Conflicts:
#	modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicAbstractUpdateFuture.java
#	modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java
#	modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicUpdateResponse.java
#	modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicSingleUpdateFuture.java
#	modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicUpdateFuture.java
#	modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicUpdateResponse.java


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/0ef89594
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/0ef89594
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/0ef89594

Branch: refs/heads/ignite-4705
Commit: 0ef895943c844572dea0dca11c47f612a64ed513
Parents: 7b97988 e1d8224
Author: sboikov <sb...@gridgain.com>
Authored: Mon Feb 20 15:04:39 2017 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Mon Feb 20 15:04:39 2017 +0300

----------------------------------------------------------------------
 examples/config/spark/example-shared-rdd.xml    |  83 +++
 examples/pom.xml                                |  27 +-
 .../examples/java8/spark/SharedRDDExample.java  | 110 ++++
 .../examples/spark/ScalarSharedRDDExample.scala |  89 +++
 .../examples/SharedRDDExampleSelfTest.java      |  36 ++
 .../IgniteExamplesJ8SelfTestSuite.java          |   3 +
 .../tests/examples/ScalarExamplesSelfTest.scala |   6 +
 .../java/org/apache/ignite/IgniteMessaging.java |  11 +-
 .../ignite/internal/GridKernalGatewayImpl.java  |  25 +-
 .../org/apache/ignite/internal/GridTopic.java   |   2 +-
 .../apache/ignite/internal/IgniteKernal.java    |  48 +-
 .../ignite/internal/IgniteMessagingImpl.java    |   6 +-
 .../internal/StripedExecutorMXBeanAdapter.java  |  90 +++
 .../client/util/GridClientConsistentHash.java   |  14 +-
 .../internal/managers/GridManagerAdapter.java   |   2 +-
 .../managers/communication/GridIoManager.java   |  84 +--
 .../discovery/GridDiscoveryManager.java         | 268 +++------
 .../eventstorage/GridEventStorageManager.java   |  34 +-
 .../affinity/GridAffinityAssignmentCache.java   |   8 +-
 .../cache/CacheAffinitySharedManager.java       |   2 +-
 .../cache/GridCacheEvictionManager.java         |  60 +-
 .../processors/cache/GridCacheGateway.java      |  48 +-
 .../processors/cache/GridCacheIoManager.java    |  19 +-
 .../processors/cache/GridCacheProcessor.java    |   5 +
 .../processors/cache/GridCacheUtils.java        |   6 +-
 .../cache/affinity/GridCacheAffinityImpl.java   |   2 +-
 .../dht/GridClientPartitionTopology.java        |  13 +-
 .../dht/GridDhtAssignmentFetchFuture.java       |   5 +-
 .../distributed/dht/GridDhtCacheAdapter.java    |  23 +-
 .../dht/GridDhtPartitionTopologyImpl.java       |  14 +-
 .../distributed/dht/GridDhtTxPrepareFuture.java |  35 +-
 .../GridDhtAtomicAbstractUpdateFuture.java      |   4 +-
 .../GridDhtAtomicAbstractUpdateRequest.java     |   2 +-
 .../dht/atomic/GridDhtAtomicCache.java          |  11 +-
 .../atomic/GridDhtAtomicSingleUpdateFuture.java |   6 +-
 .../GridDhtAtomicSingleUpdateRequest.java       |   5 +-
 .../dht/atomic/GridDhtAtomicUpdateFuture.java   |   6 +-
 .../dht/atomic/GridDhtAtomicUpdateRequest.java  |  10 +-
 .../dht/atomic/GridDhtAtomicUpdateResponse.java |  31 +-
 .../GridNearAtomicSingleUpdateFuture.java       |   2 +
 .../dht/atomic/GridNearAtomicUpdateFuture.java  |   4 +-
 .../atomic/GridNearAtomicUpdateResponse.java    |  15 +
 .../dht/preloader/GridDhtPreloader.java         |  39 +-
 .../near/GridNearSingleGetRequest.java          |   5 +
 .../cache/query/GridCacheQueryManager.java      |  97 ++--
 .../cache/transactions/IgniteTxHandler.java     |   4 +-
 .../cache/version/GridCacheVersion.java         |   2 +-
 .../cache/version/GridCacheVersionManager.java  |   2 +-
 .../clock/GridClockSyncProcessor.java           |   2 +-
 .../marshaller/ClientRequestFuture.java         |   2 +-
 .../processors/query/GridQueryIndexing.java     |  17 +-
 .../processors/query/GridQueryProcessor.java    |  32 +-
 .../processors/query/GridRunningQueryInfo.java  | 132 +++++
 .../ignite/internal/util/GridBusyLock.java      |   2 +-
 .../util/StripedCompositeReadWriteLock.java     |  50 +-
 .../ignite/internal/util/StripedExecutor.java   |  65 ++-
 .../nio/GridAbstractCommunicationClient.java    |  37 +-
 .../util/nio/GridCommunicationClient.java       |   5 -
 .../internal/visor/VisorMultiNodeTask.java      |   2 +-
 .../visor/cache/VisorCacheClearTask.java        |  88 +--
 .../visor/cache/VisorCacheTypeMetadata.java     |   6 +
 .../visor/compute/VisorGatewayTask.java         |  30 +-
 .../visor/query/VisorCancelQueriesTask.java     |  72 +++
 .../query/VisorCollectRunningQueriesTask.java   |  96 ++++
 .../internal/visor/query/VisorRunningQuery.java | 132 +++++
 .../ignite/mxbean/StripedExecutorMXBean.java    |  90 +++
 .../communication/tcp/TcpCommunicationSpi.java  |   9 +
 .../org/apache/ignite/thread/IgniteThread.java  |  26 +-
 .../communication/GridIoManagerSelfTest.java    |   6 +-
 .../GridDiscoveryManagerAliveCacheSelfTest.java |  55 --
 .../discovery/GridDiscoveryManagerSelfTest.java | 214 --------
 .../cache/GridCacheLifecycleAwareSelfTest.java  |  33 ++
 .../processors/cache/GridCacheOffHeapTest.java  | 274 ----------
 ...niteTopologyValidatorGridSplitCacheTest.java | 334 ++++++++++++
 ...niteMessagingConfigVariationFullApiTest.java | 195 +++++--
 .../internal/util/StripedExecutorTest.java      | 168 ++++++
 .../ignite/messaging/GridMessagingSelfTest.java | 114 +++-
 .../messaging/IgniteMessagingSendAsyncTest.java | 544 +++++++++++++++++++
 .../junits/multijvm/IgniteProcessProxy.java     |   5 +-
 .../ignite/testsuites/IgniteBasicTestSuite.java |   2 +
 .../testsuites/IgniteComputeGridTestSuite.java  |   2 +
 .../testsuites/IgniteKernalSelfTestSuite.java   |   5 +-
 .../IgniteTopologyValidatorTestSuit.java        |   1 +
 .../hadoop/shuffle/HadoopShuffle.java           |   2 +-
 .../cache/query/GridCacheTwoStepQuery.java      |  18 +-
 .../processors/query/h2/IgniteH2Indexing.java   |  81 ++-
 .../query/h2/sql/GridSqlQuerySplitter.java      |   4 +-
 .../h2/twostep/GridReduceQueryExecutor.java     |  60 +-
 .../cache/CacheSqlQueryValueCopySelfTest.java   | 208 ++++++-
 .../cache/GridCacheCrossCacheQuerySelfTest.java |   2 +-
 .../h2/GridIndexingSpiAbstractSelfTest.java     |   7 +
 modules/kubernetes/DEVNOTES.txt                 |  63 +++
 modules/kubernetes/README.txt                   |  33 ++
 modules/kubernetes/config/Dockerfile            |  45 ++
 modules/kubernetes/config/example-kube.xml      |  44 ++
 .../kubernetes/config/ignite-deployment.yaml    |  26 +
 modules/kubernetes/config/ignite-service.yaml   |  14 +
 modules/kubernetes/config/run.sh                |  50 ++
 modules/kubernetes/licenses/apache-2.0.txt      | 202 +++++++
 modules/kubernetes/pom.xml                      |  93 ++++
 .../TcpDiscoveryKubernetesIpFinder.java         | 317 +++++++++++
 .../tcp/ipfinder/kubernetes/package-info.java   |  22 +
 .../TcpDiscoveryKubernetesIpFinderSelfTest.java |  93 ++++
 .../tcp/ipfinder/kubernetes/package-info.java   |  22 +
 .../testsuites/IgniteKubernetesTestSuite.java   |  41 ++
 .../apache/ignite/spark/JavaIgniteContext.scala |   6 +
 .../ignite/tools/classgen/ClassesGenerator.java |   4 +-
 .../web-console/backend/routes/activities.js    |   7 -
 modules/web-console/backend/routes/profile.js   |   4 +-
 .../web-console/backend/services/activities.js  |  30 +-
 .../web-console/backend/services/sessions.js    |   6 +-
 modules/web-console/backend/services/users.js   |   7 +-
 .../backend/test/unit/ActivitiesService.test.js | 131 +++++
 modules/web-console/frontend/app/app.config.js  |   4 +
 .../activities-user-dialog.controller.js        |  39 +-
 .../activities-user-dialog.jade                 |   2 +-
 .../components/activities-user-dialog/index.js  |   5 +-
 .../form-field-datepicker.jade                  |   4 +-
 .../list-of-registered-users.column-defs.js     |  26 +-
 .../list-of-registered-users.controller.js      |  56 +-
 .../list-of-registered-users.jade               |  16 +-
 .../ui-grid-settings/ui-grid-settings.scss      |  39 +-
 .../app/core/activities/Activities.data.js      |   5 -
 modules/web-console/frontend/app/data/i18n.js   |   1 +
 .../ui-ace-pom/ui-ace-pom.controller.js         |   4 +-
 .../frontend/app/modules/agent/agent.module.js  |  15 -
 .../modules/configuration/Version.service.js    |  35 +-
 .../configuration/configuration.module.js       |   6 +-
 .../configuration/generator/Maven.service.js    |  10 +-
 .../configuration/summary/summary.worker.js     |  34 +-
 modules/web-console/frontend/package.json       | 182 +++----
 .../frontend/public/stylesheets/style.scss      |   8 -
 .../frontend/public/stylesheets/variables.scss  |   1 -
 .../frontend/test/unit/Version.test.js          |  26 +-
 .../views/templates/agent-download.jade         |  10 +-
 .../console/agent/handlers/RestListener.java    |   9 +-
 .../demo/service/DemoCachesLoadService.java     |   2 +-
 .../service/DemoRandomCacheLoadService.java     |   2 +-
 modules/yardstick/DEVNOTES-standalone.txt       |   5 +-
 modules/yardstick/README.txt                    |  85 +--
 .../config/benchmark-atomic-win.properties      |   2 +-
 .../config/benchmark-atomic.properties          |  35 +-
 .../config/benchmark-bin-identity.properties    |  16 +-
 .../config/benchmark-cache-load-win.properties  |   2 +-
 .../config/benchmark-cache-load.properties      |   4 +-
 .../config/benchmark-client-mode.properties     |  68 ++-
 .../config/benchmark-compute-win.properties     |   2 +-
 .../config/benchmark-compute.properties         |  30 +-
 .../config/benchmark-failover.properties        |   2 +-
 .../yardstick/config/benchmark-full.properties  |  62 +--
 .../config/benchmark-multicast.properties       | 107 ++--
 .../config/benchmark-put-indexed-val.properties |  23 +-
 .../benchmark-query-put-separated.properties    |   3 +-
 .../config/benchmark-query-win.properties       |   2 +-
 .../yardstick/config/benchmark-query.properties |  33 +-
 .../config/benchmark-remote-sample.properties   |  80 +++
 .../config/benchmark-remote.properties          | 119 ++++
 .../config/benchmark-sample.properties          |  22 +-
 .../config/benchmark-sql-dml.properties         |  36 +-
 .../yardstick/config/benchmark-store.properties |   3 +-
 .../config/benchmark-tx-win.properties          |   2 +-
 .../yardstick/config/benchmark-tx.properties    |  33 +-
 .../yardstick/config/benchmark-win.properties   |   2 +-
 modules/yardstick/config/benchmark.properties   |  76 ++-
 .../yardstick/config/ignite-remote-config.xml   |  47 ++
 .../test-max-int-values-offheap.properties      |   3 +-
 .../test-max-int-values-onheap.properties       |   3 +-
 .../config/test-max-int-values-swap.properties  |   3 +-
 modules/yardstick/pom-standalone.xml            |   2 +-
 modules/yardstick/pom.xml                       |   2 +-
 .../yardstick/IgniteBenchmarkArguments.java     |  28 +-
 .../org/apache/ignite/yardstick/IgniteNode.java |   2 +-
 .../IgniteCacheRandomOperationBenchmark.java    |  49 ++
 pom.xml                                         |   6 +-
 174 files changed, 5702 insertions(+), 1750 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/0ef89594/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/0ef89594/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheIoManager.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/0ef89594/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicAbstractUpdateFuture.java
----------------------------------------------------------------------
diff --cc modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicAbstractUpdateFuture.java
index b512bdc,4cb113e..96bfcb4
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicAbstractUpdateFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicAbstractUpdateFuture.java
@@@ -109,11 -108,16 +109,13 @@@ public abstract class GridDhtAtomicAbst
       */
      protected GridDhtAtomicAbstractUpdateFuture(
          GridCacheContext cctx,
 -        CI2<GridNearAtomicAbstractUpdateRequest, GridNearAtomicUpdateResponse> completionCb,
 +        GridDhtAtomicCache.UpdateReplyClosure completionCb,
          GridCacheVersion writeVer,
          GridNearAtomicAbstractUpdateRequest updateReq,
-         GridNearAtomicUpdateResponse updateRes) {
+         GridNearAtomicUpdateResponse updateRes
+     ) {
          this.cctx = cctx;
+ 
 -        this.futVer = cctx.isLocalNode(updateRes.nodeId()) ?
 -            cctx.versions().next(updateReq.topologyVersion()) : // Generate new if request mapped to local.
 -            updateReq.futureVersion();
          this.updateReq = updateReq;
          this.completionCb = completionCb;
          this.updateRes = updateRes;

http://git-wip-us.apache.org/repos/asf/ignite/blob/0ef89594/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicAbstractUpdateRequest.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/0ef89594/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java
----------------------------------------------------------------------
diff --cc modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java
index 73a5acb,4745ff7..eb44414
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java
@@@ -1793,11 -1769,13 +1792,13 @@@ public class GridDhtAtomicCache<K, V> e
      private void updateAllAsyncInternal0(
          UUID nodeId,
          GridNearAtomicAbstractUpdateRequest req,
 -        CI2<GridNearAtomicAbstractUpdateRequest, GridNearAtomicUpdateResponse> completionCb
 +        UpdateReplyClosure completionCb
      ) {
 -        GridNearAtomicUpdateResponse res = new GridNearAtomicUpdateResponse(ctx.cacheId(), nodeId, req.futureVersion(),
 +        GridNearAtomicUpdateResponse res = new GridNearAtomicUpdateResponse(ctx.cacheId(), nodeId, req.futureId(),
              ctx.deploymentEnabled());
  
+         res.partition(req.partition());
+ 
          assert !req.returnValue() || (req.operation() == TRANSFORM || req.size() == 1);
  
          GridDhtAtomicAbstractUpdateFuture dhtFut = null;
@@@ -3330,95 -3307,26 +3331,97 @@@
              }
          }
  
 -        if (isNearEnabled(cacheCfg))
 -            ((GridNearAtomicCache<K, V>)near()).processDhtAtomicUpdateRequest(nodeId, req, res);
 +        GridDhtAtomicUpdateResponse dhtRes = null;
  
 +        if (isNearEnabled(cacheCfg)) {
 +            List<KeyCacheObject> nearEvicted =
 +                ((GridNearAtomicCache<K, V>)near()).processDhtAtomicUpdateRequest(nodeId, req, nearRes);
 +
 +            dhtRes = new GridDhtAtomicUpdateResponse(ctx.cacheId(), req.futureId(), ctx.deploymentEnabled());
 +
 +            dhtRes.nearEvicted(nearEvicted);
++
++            dhtRes.partition(req.partition());
 +        }
 +
 +        final boolean RES_AFTER_ACK = false;
 +
 +        if (nearRes != null) {
 +            if (RES_AFTER_ACK)
 +                sendDhtNearResponse(nodeId, req, nearRes);
 +            else {
 +                sendDhtNearResponse(null, req, nearRes);
 +
 +                sendDeferredUpdateResponse(nodeId, req.futureId());
 +            }
 +        }
 +        else
 +            sendDeferredUpdateResponse(nodeId, req.futureId());
 +
 +        if (dhtRes != null)
 +            sendDhtPrimaryResponse(nodeId, req, dhtRes);
 +    }
 +
 +    /**
 +     * @param nodeId Primary node ID.
 +     * @param req Request.
 +     * @param dhtRes Response to send.
 +     */
 +    private void sendDhtPrimaryResponse(UUID nodeId,
 +        GridDhtAtomicAbstractUpdateRequest req,
 +        GridDhtAtomicUpdateResponse dhtRes) {
          try {
 -            if (res.failedKeys() != null || res.nearEvicted() != null || req.writeSynchronizationMode() == FULL_SYNC) {
 -                ctx.io().send(nodeId, res, ctx.ioPolicy());
 +            ctx.io().send(nodeId, dhtRes, ctx.ioPolicy());
  
 -                if (msgLog.isDebugEnabled()) {
 -                    msgLog.debug("Sent DHT atomic update response [futId=" + req.futureVersion() +
 -                        ", writeVer=" + req.writeVersion() + ", node=" + nodeId + ']');
 -                }
 +            if (msgLog.isDebugEnabled()) {
 +                msgLog.debug("Sent DHT response [futId=" + req.futureId() +
 +                    ", nearFutId=" + req.nearFutureId() +
 +                    ", writeVer=" + req.writeVersion() +
 +                    ", node=" + nodeId + ']');
              }
 -            else {
 -                if (msgLog.isDebugEnabled()) {
 -                    msgLog.debug("Will send deferred DHT atomic update response [futId=" + req.futureVersion() +
 -                        ", writeVer=" + req.writeVersion() + ", node=" + nodeId + ']');
 -                }
 +        }
 +        catch (ClusterTopologyCheckedException ignored) {
 +            U.warn(msgLog, "Failed to send DHT response, node left [futId=" + req.futureId() +
 +                ", nearFutId=" + req.nearFutureId() +
 +                ", node=" + nodeId + ']');
 +        }
 +        catch (IgniteCheckedException e) {
 +            U.error(msgLog, "Failed to send DHT near response [futId=" + req.futureId() +
 +                ", nearFutId=" + req.nearFutureId() +
 +                ", node=" + nodeId +
 +                ", res=" + dhtRes + ']', e);
 +        }
 +    }
 +
 +    /**
 +     * @param primaryId Primary node ID.
 +     * @param req Request.
 +     * @param nearRes Response to send.
 +     */
 +    private void sendDhtNearResponse(final UUID primaryId,
 +        final GridDhtAtomicAbstractUpdateRequest req,
 +        GridDhtAtomicNearResponse nearRes) {
 +        try {
 +            ClusterNode node = ctx.discovery().node(req.nearNodeId());
 +
 +            if (node == null)
 +                throw new ClusterTopologyCheckedException("Node left: " + req.nearNodeId());
 +
 +            if (primaryId != null) {
 +                ctx.gridIO().send(node, TOPIC_CACHE, nearRes, ctx.ioPolicy(), new IgniteInClosure<IgniteException>() {
 +                    @Override public void apply(IgniteException e) {
 +                        sendDeferredUpdateResponse(primaryId, req.futureId());
 +                    }
 +                });
 +            }
 +            else
 +                ctx.gridIO().send(node, TOPIC_CACHE, nearRes, ctx.ioPolicy());
  
 -                // No failed keys and sync mode is not FULL_SYNC, thus sending deferred response.
 -                sendDeferredUpdateResponse(nodeId, req.futureVersion());
 +            if (msgLog.isDebugEnabled()) {
 +                msgLog.debug("Sent DHT near response [futId=" + req.futureId() +
 +                    ", nearFutId=" + req.nearFutureId() +
 +                    ", writeVer=" + req.writeVersion() +
 +                    ", node=" + req.nearNodeId() + ']');
              }
          }
          catch (ClusterTopologyCheckedException ignored) {

http://git-wip-us.apache.org/repos/asf/ignite/blob/0ef89594/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicSingleUpdateFuture.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/0ef89594/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicSingleUpdateRequest.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/0ef89594/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicUpdateFuture.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/0ef89594/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicUpdateRequest.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/0ef89594/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicUpdateResponse.java
----------------------------------------------------------------------
diff --cc modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicUpdateResponse.java
index c803d1a,c3d3ca9..6990409
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicUpdateResponse.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicUpdateResponse.java
@@@ -157,12 -161,17 +160,24 @@@ public class GridDhtAtomicUpdateRespons
      }
  
      /**
 +     * @param nearEvicted Evicted near cache keys.
 +     */
 +    void nearEvicted(List<KeyCacheObject> nearEvicted) {
 +        this.nearEvicted = nearEvicted;
 +    }
 +
++    /**
+      * @param partId Partition ID to set.
+      */
+     public void partition(int partId) {
+         this.partId = partId;
+     }
+ 
+     /** {@inheritDoc} */
+     @Override public int partition() {
+         return partId;
+     }
+ 
      /** {@inheritDoc} */
      @Override public void prepareMarshal(GridCacheSharedContext ctx) throws IgniteCheckedException {
          super.prepareMarshal(ctx);

http://git-wip-us.apache.org/repos/asf/ignite/blob/0ef89594/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicSingleUpdateFuture.java
----------------------------------------------------------------------
diff --cc modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicSingleUpdateFuture.java
index 8bfbe72,0a816a7..adb6a1c
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicSingleUpdateFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicSingleUpdateFuture.java
@@@ -473,13 -379,11 +473,15 @@@ public class GridNearAtomicSingleUpdate
  
      /** {@inheritDoc} */
      @Override protected void mapOnTopology() {
 +        // TODO IGNITE-4705: primary should block topology change, so it seem read lock is not needed.
 +        cache.topology().readLock();
 +
          AffinityTopologyVersion topVer;
 -        GridCacheVersion futVer;
 +
 +        Long futId;
  
+         cache.topology().readLock();
+ 
          try {
              if (cache.topology().stopping()) {
                  onDone(new IgniteCheckedException("Failed to perform cache operation (cache is stopped): " +

http://git-wip-us.apache.org/repos/asf/ignite/blob/0ef89594/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicUpdateFuture.java
----------------------------------------------------------------------
diff --cc modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicUpdateFuture.java
index e135000,f182ecb..4167fab
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicUpdateFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicUpdateFuture.java
@@@ -496,12 -488,11 +496,12 @@@ public class GridNearAtomicUpdateFutur
  
      /** {@inheritDoc} */
      @Override protected void mapOnTopology() {
-         cache.topology().readLock();
- 
          AffinityTopologyVersion topVer;
 -        GridCacheVersion futVer;
 +
 +        Long futId;
  
+         cache.topology().readLock();
+ 
          try {
              if (cache.topology().stopping()) {
                  onDone(new IgniteCheckedException("Failed to perform cache operation (cache is stopped): " +

http://git-wip-us.apache.org/repos/asf/ignite/blob/0ef89594/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicUpdateResponse.java
----------------------------------------------------------------------
diff --cc modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicUpdateResponse.java
index f6c2a2e,22e01ae..ecb5e1e
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicUpdateResponse.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicUpdateResponse.java
@@@ -105,10 -105,9 +105,13 @@@ public class GridNearAtomicUpdateRespon
      /** Near expire times. */
      private GridLongList nearExpireTimes;
  
 +    /** */
 +    @GridDirectCollection(UUID.class)
 +    private List<UUID> mapping;
 +
+     /** Partition ID. */
+     private int partId = -1;
+ 
      /**
       * Empty constructor required by {@link Externalizable}.
       */