Merge branch 'master' into ignite-2004
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/194455ad Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/194455ad Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/194455ad Branch: refs/heads/ignite-2004 Commit: 194455ad08adb9017bb11803e09b5cdf3f6e7200 Parents: 80b134e fcfbf2c Author: Tikhonov Nikolay <[email protected]> Authored: Wed Apr 6 11:00:23 2016 +0300 Committer: Tikhonov Nikolay <[email protected]> Committed: Wed Apr 6 11:00:23 2016 +0300 ---------------------------------------------------------------------- .../ClientAbstractMultiNodeSelfTest.java | 8 +- .../ignite/cache/affinity/AffinityFunction.java | 2 + .../configuration/IgniteConfiguration.java | 50 + .../apache/ignite/internal/IgniteKernal.java | 2 + .../ignite/internal/IgniteNodeAttributes.java | 3 + .../internal/binary/BinaryObjectImpl.java | 52 +- .../binary/BinaryObjectOffheapImpl.java | 40 +- .../internal/binary/BinaryReaderExImpl.java | 62 +- .../ignite/internal/binary/BinaryTypeImpl.java | 8 + .../ignite/internal/binary/BinaryUtils.java | 4 +- .../internal/binary/GridBinaryMarshaller.java | 4 +- .../binary/builder/BinaryBuilderReader.java | 11 +- .../communication/GridIoMessageFactory.java | 4 +- .../discovery/GridDiscoveryManager.java | 70 +- .../affinity/GridAffinityAssignment.java | 49 +- .../affinity/GridAffinityAssignmentCache.java | 246 +- .../affinity/GridAffinityProcessor.java | 2 +- .../processors/affinity/GridAffinityUtils.java | 3 +- .../cache/CacheAffinityChangeMessage.java | 160 ++ .../cache/CacheAffinitySharedManager.java | 1805 ++++++++++++ .../cache/DynamicCacheChangeRequest.java | 17 + .../cache/DynamicCacheDescriptor.java | 49 + .../processors/cache/GridCacheAdapter.java | 276 +- .../cache/GridCacheAffinityManager.java | 125 +- .../cache/GridCacheClearAllRunnable.java | 1 - .../processors/cache/GridCacheContext.java | 2 +- .../cache/GridCacheEvictionManager.java | 18 +- .../processors/cache/GridCacheIoManager.java | 29 +- .../processors/cache/GridCacheMapEntry.java | 1 - .../cache/GridCacheMvccCandidate.java | 16 +- .../GridCachePartitionExchangeManager.java | 161 +- .../processors/cache/GridCachePreloader.java | 18 +- .../cache/GridCachePreloaderAdapter.java | 12 +- .../processors/cache/GridCacheProcessor.java | 216 +- .../processors/cache/GridCacheProxyImpl.java | 13 + .../cache/GridCacheSharedContext.java | 18 +- .../processors/cache/GridCacheUtils.java | 122 - .../processors/cache/IgniteInternalCache.java | 5 + .../cache/affinity/GridCacheAffinityImpl.java | 2 +- .../CacheDataStructuresManager.java | 4 +- .../distributed/GridCacheCommittedTxInfo.java | 1 + .../GridDistributedCacheAdapter.java | 2 +- .../GridDistributedLockResponse.java | 8 - .../GridDistributedTxFinishRequest.java | 2 + .../GridDistributedTxRemoteAdapter.java | 9 +- .../dht/CacheDistributedGetFutureAdapter.java | 3 - .../dht/GridClientPartitionTopology.java | 10 +- .../dht/GridDhtAffinityAssignmentResponse.java | 198 +- .../dht/GridDhtAssignmentFetchFuture.java | 80 +- .../distributed/dht/GridDhtCacheAdapter.java | 56 +- .../cache/distributed/dht/GridDhtGetFuture.java | 2 + .../distributed/dht/GridDhtGetSingleFuture.java | 2 + .../distributed/dht/GridDhtLockFuture.java | 7 - .../dht/GridDhtPartitionTopology.java | 10 +- .../dht/GridDhtPartitionTopologyImpl.java | 328 ++- .../dht/GridDhtTransactionalCacheAdapter.java | 5 +- .../distributed/dht/GridDhtTxFinishFuture.java | 29 +- .../cache/distributed/dht/GridDhtTxLocal.java | 210 +- .../distributed/dht/GridDhtTxLocalAdapter.java | 4 +- .../distributed/dht/GridDhtTxPrepareFuture.java | 16 +- .../cache/distributed/dht/GridDhtTxRemote.java | 9 +- .../dht/GridPartitionedGetFuture.java | 8 +- .../dht/GridPartitionedSingleGetFuture.java | 8 +- .../dht/atomic/GridDhtAtomicCache.java | 1 + .../dht/atomic/GridNearAtomicUpdateFuture.java | 2 +- .../dht/colocated/GridDhtColocatedCache.java | 6 +- .../colocated/GridDhtColocatedLockFuture.java | 17 +- .../dht/preloader/GridDhtPartitionDemander.java | 19 +- .../dht/preloader/GridDhtPartitionMap2.java | 4 +- .../dht/preloader/GridDhtPartitionSupplier.java | 29 +- .../GridDhtPartitionsExchangeFuture.java | 1547 +++++----- .../dht/preloader/GridDhtPreloader.java | 103 +- .../distributed/near/GridNearCacheAdapter.java | 2 +- .../distributed/near/GridNearCacheEntry.java | 118 +- .../distributed/near/GridNearGetFuture.java | 26 +- .../distributed/near/GridNearLockFuture.java | 10 +- ...arOptimisticSerializableTxPrepareFuture.java | 5 +- .../near/GridNearOptimisticTxPrepareFuture.java | 34 +- ...ridNearOptimisticTxPrepareFutureAdapter.java | 16 +- .../near/GridNearTransactionalCache.java | 7 +- .../near/GridNearTxFinishFuture.java | 123 +- .../near/GridNearTxFinishRequest.java | 46 +- .../cache/distributed/near/GridNearTxLocal.java | 50 +- .../near/GridNearTxPrepareFutureAdapter.java | 2 +- .../distributed/near/GridNearTxRemote.java | 24 +- .../processors/cache/dr/GridCacheDrManager.java | 4 +- .../cache/dr/GridOsCacheDrManager.java | 2 +- .../cache/local/GridLocalCacheEntry.java | 27 - .../cache/local/GridLocalLockFuture.java | 15 - .../cache/query/GridCacheQueryManager.java | 15 - .../continuous/CacheContinuousQueryHandler.java | 3 +- .../cache/transactions/IgniteInternalTx.java | 30 +- .../cache/transactions/IgniteTxAdapter.java | 82 +- .../cache/transactions/IgniteTxEntry.java | 8 +- .../cache/transactions/IgniteTxHandler.java | 33 +- .../IgniteTxImplicitSingleStateImpl.java | 7 +- .../transactions/IgniteTxLocalAdapter.java | 97 +- .../cache/transactions/IgniteTxLocalEx.java | 13 +- .../cache/transactions/IgniteTxManager.java | 93 +- .../IgniteTxRemoteStateAdapter.java | 7 +- .../cache/transactions/IgniteTxState.java | 5 +- .../cache/transactions/IgniteTxStateImpl.java | 28 +- .../cache/version/GridCacheVersion.java | 14 +- .../cache/version/GridCacheVersionEx.java | 9 + .../cache/version/GridCacheVersionManager.java | 21 +- .../continuous/GridContinuousProcessor.java | 1 - .../datastructures/DataStructuresProcessor.java | 4 +- .../processors/odbc/OdbcMessageParser.java | 2 +- .../platform/PlatformContextImpl.java | 1 + .../service/GridServiceProcessor.java | 64 +- .../ignite/internal/util/IgniteUtils.java | 16 + .../internal/util/future/GridFutureAdapter.java | 3 +- .../apache/ignite/marshaller/Marshaller.java | 6 +- .../ignite/spi/discovery/tcp/ServerImpl.java | 127 +- .../spi/discovery/tcp/TcpDiscoverySpi.java | 1 + .../GridCacheAffinityBackupsSelfTest.java | 2 +- .../affinity/AffinityClientNodeSelfTest.java | 4 +- .../fair/FairAffinityFunctionNodesSelfTest.java | 2 + .../ignite/internal/GridAffinitySelfTest.java | 5 +- .../GridTaskFailoverAffinityRunTest.java | 6 +- .../IgniteClientReconnectAbstractTest.java | 8 +- .../IgniteClientReconnectAtomicsTest.java | 8 +- .../IgniteClientReconnectCollectionsTest.java | 4 +- .../IgniteClientReconnectComputeTest.java | 6 +- .../IgniteClientReconnectFailoverTest.java | 2 + .../IgniteClientReconnectServicesTest.java | 4 +- .../IgniteClientReconnectStreamerTest.java | 2 +- .../internal/TestRecordingCommunicationSpi.java | 65 +- .../cache/CacheAffinityCallSelfTest.java | 45 +- .../processors/cache/CacheNamesSelfTest.java | 16 +- ...cheNearUpdateTopologyChangeAbstractTest.java | 2 + .../cache/CacheReadThroughRestartSelfTest.java | 2 + .../GridCacheAbstractRemoveFailureTest.java | 10 +- .../cache/GridCacheDeploymentSelfTest.java | 2 + .../cache/GridCacheEntryVersionSelfTest.java | 2 +- ...ridCacheStoreManagerDeserializationTest.java | 40 +- ...acheTcpClientDiscoveryMultiThreadedTest.java | 2 +- .../GridCacheVersionTopologyChangeTest.java | 246 ++ .../IgniteCacheEntryProcessorNodeJoinTest.java | 147 +- .../cache/IgniteCacheIncrementTxTest.java | 299 ++ .../cache/IgniteCacheNearLockValueSelfTest.java | 2 +- .../IgniteCacheP2pUnmarshallingErrorTest.java | 1 - ...CacheP2pUnmarshallingRebalanceErrorTest.java | 36 +- .../IgniteCacheP2pUnmarshallingTxErrorTest.java | 2 + .../IgniteCacheReadThroughEvictionSelfTest.java | 352 +++ .../IgniteClientAffinityAssignmentSelfTest.java | 2 +- ...niteDynamicCacheStartStopConcurrentTest.java | 6 +- .../cache/IgniteTxReentryAbstractSelfTest.java | 2 +- ...eAbstractDataStructuresFailoverSelfTest.java | 12 +- .../CacheGetInsideLockChangingTopologyTest.java | 6 + ...eLateAffinityAssignmentFairAffinityTest.java | 32 + .../CacheLateAffinityAssignmentTest.java | 2688 ++++++++++++++++++ .../GridCacheAbstractJobExecutionTest.java | 6 +- .../GridCacheTransformEventSelfTest.java | 2 +- ...niteCacheClientNodeChangingTopologyTest.java | 28 +- ...teCacheClientNodePartitionsExchangeTest.java | 85 +- .../IgniteCacheClientReconnectTest.java | 2 + .../distributed/IgniteCacheGetRestartTest.java | 4 + .../IgniteCacheNearRestartRollbackSelfTest.java | 28 +- .../distributed/IgniteCachePrimarySyncTest.java | 45 +- .../IgniteCacheReadFromBackupTest.java | 12 +- .../IgniteCacheSingleGetMessageTest.java | 8 +- .../IgniteTxCachePrimarySyncTest.java | 1114 ++++++++ ...teSynchronizationModesMultithreadedTest.java | 422 +++ .../GridCacheDhtPreloadMessageCountTest.java | 6 +- ...idCachePartitionedPreloadEventsSelfTest.java | 11 + ...ridCachePartitionedUnloadEventsSelfTest.java | 2 + .../dht/GridCacheTxNodeFailureSelfTest.java | 10 +- .../IgniteCachePutRetryAbstractSelfTest.java | 4 +- ...imaryWriteOrderMultiNodeFullApiSelfTest.java | 35 + .../near/GridCacheNearJobExecutionSelfTest.java | 2 - .../near/GridCacheNearMultiNodeSelfTest.java | 4 +- .../near/GridCacheNearReadersSelfTest.java | 2 + .../near/GridCacheNearTxForceKeyTest.java | 6 +- ...LateAffDisabledMultiNodeFullApiSelfTest.java | 34 + ...achePartitionedMultiNodeCounterSelfTest.java | 43 +- ...achePartitionedMultiNodeFullApiSelfTest.java | 2 + ...idCacheRendezvousAffinityClientSelfTest.java | 2 + .../GridCacheRebalancingSyncSelfTest.java | 83 +- .../GridCacheReplicatedJobExecutionTest.java | 2 - ...acheContinuousQueryExecuteInPrimaryTest.java | 306 ++ ...ContinuousQueryFailoverAbstractSelfTest.java | 36 +- ...BehindStorePartitionedMultiNodeSelfTest.java | 11 +- .../loadtests/hashmap/GridCacheTestContext.java | 2 + .../testframework/junits/GridAbstractTest.java | 3 +- .../junits/common/GridCommonAbstractTest.java | 116 +- .../IgniteCacheFullApiSelfTestSuite.java | 6 + .../testsuites/IgniteCacheTestSuite2.java | 4 + .../testsuites/IgniteCacheTestSuite3.java | 2 + .../testsuites/IgniteCacheTestSuite4.java | 6 + .../testsuites/IgniteCacheTestSuite5.java | 5 + .../processors/hadoop/HadoopContext.java | 3 +- .../child/HadoopChildProcessRunner.java | 2 +- .../HadoopIgfs20FileSystemAbstractSelfTest.java | 2 + .../IgniteHadoopFileSystemAbstractSelfTest.java | 2 + .../h2/twostep/GridReduceQueryExecutor.java | 4 +- .../cache/IgniteClientReconnectQueriesTest.java | 4 +- .../IgniteCacheQueryNodeRestartSelfTest2.java | 3 + .../IgniteCacheQuerySelfTestSuite3.java | 2 + .../Continuous/ContinuousQueryAbstractTest.cs | 25 +- .../Apache.Ignite.Core.Tests/ExceptionsTest.cs | 5 + 201 files changed, 11483 insertions(+), 2768 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/194455ad/modules/core/src/main/java/org/apache/ignite/configuration/IgniteConfiguration.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/194455ad/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/194455ad/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/194455ad/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/194455ad/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryHandler.java ---------------------------------------------------------------------- diff --cc modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryHandler.java index fff8a92,767697a..4bf22e7 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryHandler.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryHandler.java @@@ -1251,275 -1258,6 +1251,276 @@@ public class CacheContinuousQueryHandle } /** + * + */ + private class ContinuousQueryClosureImpl implements CacheContinuousQueryClosure { + /** */ + private final IgniteCache cache; + + /** */ + private final IgniteLogger log; + + /** */ + private final boolean fireEvent; + + /** */ + private CacheContinuousQueryEvent<K, V> evt; + + /** */ + private CacheEntryEventFilter filter; + + /** */ + private final GridCacheContext<K, V> cctx; + + /** */ + private boolean primary; + + /** */ + private boolean loc; + + /** */ + private GridKernalContext ctx; + + /** */ + private UUID nodeId; + + /** */ + private UUID routineId; + + /** */ + private boolean recordIgniteEvt; + + /** */ + private final String taskName; + + /** */ + private boolean notify; + + /** */ + private boolean backup; + + /** */ + private final CountDownLatch latch = new CountDownLatch(1); + + /** + * @param taskName Task name. + * @param recordIgniteEvt Fired event. + * @param routineId Routine id. + * @param nodeId Node id. + * @param ctx Kernal context. + * @param loc Local. + * @param primary Primary flag. + * @param cctx Cache context. + * @param filter Filter. + * @param evt Event. + * @param fireEvent Immediately fire event. + * @param cache Cache. + */ + ContinuousQueryClosureImpl(String taskName, + boolean recordIgniteEvt, + UUID routineId, + UUID nodeId, + GridKernalContext ctx, + boolean loc, + boolean primary, + GridCacheContext<K, V> cctx, + CacheEntryEventFilter filter, + CacheContinuousQueryEvent<K, V> evt, + boolean fireEvent, IgniteCache cache) { + this.taskName = taskName; + this.recordIgniteEvt = recordIgniteEvt; + this.routineId = routineId; + this.nodeId = nodeId; + this.ctx = ctx; + this.loc = loc; + this.primary = primary; + this.cctx = cctx; + this.filter = filter; + this.evt = evt; + this.cache = cache; + this.fireEvent = fireEvent; + + log = ctx.log(CacheContinuousQueryHandler.class); + } + + /** {@inheritDoc} */ + @Override public void run() { + filter(); + + if (fireEvent || waitIfAsync()) + onEntryUpdate0(); + } + + /** + * @return {@code True} if event fired on this node. + */ + private boolean primary() { + return primary || skipPrimaryCheck; + } + + /** + * @return {@code False} if filter sync. + */ + private boolean waitIfAsync() { + if (backup) + return false; + + try { + U.await(latch); + } + catch (IgniteInterruptedCheckedException e) { + log.error("Failed to wait latch."); + } + + return true; + } + + /** {@inheritDoc} */ + @Override public void skipEvent() { + if (evt != null && evt.entry() != null) + evt.entry().markFiltered(); + + onEntryUpdate(); + } + + /** {@inheritDoc} */ + @Override public void onEntryUpdate() { + if (backup) + return; + + if (!fireEvent && asyncCallback) { + latch.countDown(); + + return; + } + + onEntryUpdate0(); + } + + /** + * + */ + private void onEntryUpdate0() { + try { + final CacheContinuousQueryEntry entry = evt.entry(); + + if (loc) { + if (!locCache) { + T2<Collection<CacheContinuousQueryEntry>, PartitionRecovery> events = + handleEvent(ctx, entry, asyncCallback); + + try { + Collection<CacheContinuousQueryEntry> entries = events.get1(); + + if (!entries.isEmpty()) { + Iterable<CacheEntryEvent<? extends K, ? extends V>> evts = F.viewReadOnly(entries, + new C1<CacheContinuousQueryEntry, CacheEntryEvent<? extends K, ? extends V>>() { + @Override public CacheEntryEvent<? extends K, ? extends V> apply( + CacheContinuousQueryEntry e) { + return new CacheContinuousQueryEvent<>(cache, cctx, e); + } + }, + new IgnitePredicate<CacheContinuousQueryEntry>() { + @Override public boolean apply(CacheContinuousQueryEntry entry) { + return !entry.isFiltered(); + } + } + ); + - locLsnr.onUpdated(evts); ++ if (!F.isEmpty(evts)) ++ locLsnr.onUpdated(evts); + + if (!internal && !skipPrimaryCheck) + sendBackupAcknowledge(ackBuf.onAcknowledged(entry), routineId, ctx); + } + } + finally { + if (events.get2() != null) + events.get2().unlock(); + } + } + else { + if (!entry.isFiltered()) + locLsnr.onUpdated(F.<CacheEntryEvent<? extends K, ? extends V>>asList(evt)); + } + } + else { + if (!entry.isFiltered()) + prepareEntry(cctx, nodeId, entry); + + CacheContinuousQueryEntry e = handleEntry(entry); + + if (e != null) + ctx.continuous().addNotification(nodeId, routineId, entry, topic, sync, true); + } + } + catch (ClusterTopologyCheckedException ex) { + if (log.isDebugEnabled()) + log.debug("Failed to send event notification to node, node left cluster " + + "[node=" + nodeId + ", err=" + ex + ']'); + } + catch (IgniteCheckedException ex) { + U.error(ctx.log(getClass()), "Failed to send event notification to node: " + nodeId, ex); + } + + if (recordIgniteEvt && notify) { + ctx.event().record(new CacheQueryReadEvent<>( + ctx.discovery().localNode(), + "Continuous query executed.", + EVT_CACHE_QUERY_OBJECT_READ, + CacheQueryType.CONTINUOUS.name(), + cacheName, + null, + null, + null, + filter instanceof CacheEntryEventSerializableFilter ? + (CacheEntryEventSerializableFilter)filter : null, + null, + nodeId, + taskName, + evt.getKey(), + evt.getValue(), + evt.getOldValue(), + null + )); + } + } + + /** + * + */ + public void filter() { + CacheContinuousQueryEntry entry = evt.entry(); + + notify = !entry.isFiltered(); + + try { + if (notify && filter != null) + notify = filter.evaluate(evt); + } + catch (Exception e) { + U.error(log, "CacheEntryEventFilter failed: " + e); + } + + if (!notify) + entry.markFiltered(); + + if (!primary()) { + if (!internal) { + // Skip init query and expire entries. + if (entry.updateCounter() != -1L) { + entry.markBackup(); + + backupQueue.add(entry); + } + } + + backup = true; + } + } + } + + /** * Deployable object. */ protected static class DeployableObject implements Externalizable { http://git-wip-us.apache.org/repos/asf/ignite/blob/194455ad/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteCacheQuerySelfTestSuite3.java ---------------------------------------------------------------------- diff --cc modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteCacheQuerySelfTestSuite3.java index b7d9daf,fbb3091..0b43613 --- a/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteCacheQuerySelfTestSuite3.java +++ b/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteCacheQuerySelfTestSuite3.java @@@ -20,12 -20,9 +20,13 @@@ package org.apache.ignite.testsuites import junit.framework.TestSuite; import org.apache.ignite.internal.processors.cache.query.continuous.CacheContinuousBatchAckTest; import org.apache.ignite.internal.processors.cache.query.continuous.CacheContinuousBatchForceServerModeAckTest; +import org.apache.ignite.internal.processors.cache.query.continuous.CacheContinuousQueryAsyncFilterListenerTest; +import org.apache.ignite.internal.processors.cache.query.continuous.CacheContinuousQueryDeadlockTest; +import org.apache.ignite.internal.processors.cache.query.continuous.CacheContinuousQueryFactoryAsyncFilterRandomOperationTest; +import org.apache.ignite.internal.processors.cache.query.continuous.CacheContinuousQueryFactoryFilterRandomOperationTest; + import org.apache.ignite.internal.processors.cache.query.continuous.CacheContinuousQueryExecuteInPrimaryTest; -import org.apache.ignite.internal.processors.cache.query.continuous.CacheContinuousQueryFactoryFilterTest; import org.apache.ignite.internal.processors.cache.query.continuous.CacheContinuousQueryOperationP2PTest; +import org.apache.ignite.internal.processors.cache.query.continuous.CacheContinuousQueryOrderingEventTest; import org.apache.ignite.internal.processors.cache.query.continuous.CacheContinuousQueryRandomOperationsTest; import org.apache.ignite.internal.processors.cache.query.continuous.CacheContinuousQueryRandomOperationsTwoNodesTest; import org.apache.ignite.internal.processors.cache.query.continuous.GridCacheContinuousQueryAtomicNearEnabledSelfTest;
