From 526de89b3ceebdef2592dbdc0c0ae293cfd83921 Mon Sep 17 00:00:00 2001 From: Dmitriy Govorukhin Date: Wed, 7 Nov 2018 02:41:25 +0300 Subject: [PATCH 1/2] - replace direct Thread.currentThread().getId() to static call - custom threadLocal Signed-off-by: Dmitriy Govorukhin --- .../apache/ignite/igfs/IgfsUserContext.java | 3 +- .../ignite/internal/AsyncSupportAdapter.java | 3 +- .../internal/GridKernalContextImpl.java | 9 +- .../ignite/internal/GridLoggerProxy.java | 3 +- .../internal/IgniteDiagnosticMessage.java | 3 +- .../apache/ignite/internal/IgnitionEx.java | 5 +- .../binary/BinaryThreadLocalContext.java | 5 +- .../internal/binary/GridBinaryMarshaller.java | 7 +- .../binary/streams/BinaryMemoryAllocator.java | 4 +- .../client/impl/GridClientComputeImpl.java | 3 +- .../cluster/ClusterNodeLocalMapImpl.java | 5 +- .../internal/igfs/common/IgfsLogger.java | 3 +- .../internal/jdbc/thin/JdbcThinResultSet.java | 3 +- .../ignite/internal/jdbc2/JdbcResultSet.java | 3 +- .../managers/communication/GridIoManager.java | 3 +- .../GridDeploymentCommunication.java | 3 +- .../OptimizedObjectStreamRegistry.java | 3 +- .../authentication/AuthorizationContext.java | 4 +- .../cache/CacheAffinitySharedManager.java | 3 +- .../processors/cache/GridCacheAdapter.java | 7 +- .../processors/cache/GridCacheContext.java | 9 +- .../cache/GridCacheDeploymentManager.java | 3 +- .../processors/cache/GridCacheLogger.java | 3 +- .../processors/cache/GridCacheMapEntry.java | 3 +- .../processors/cache/GridCacheMvcc.java | 3 +- .../cache/GridCacheMvccManager.java | 7 +- .../processors/cache/GridCacheProcessor.java | 1 + .../cache/GridCacheSharedContext.java | 3 +- .../GridDistributedTxRemoteAdapter.java | 3 +- .../distributed/dht/GridDhtCacheAdapter.java | 3 +- .../dht/GridDhtTxLocalAdapter.java | 3 +- .../dht/atomic/GridDhtAtomicCache.java | 9 +- .../dht/colocated/GridDhtColocatedCache.java | 7 +- .../colocated/GridDhtColocatedLockFuture.java | 5 +- .../distributed/near/GridNearCacheEntry.java | 3 +- .../distributed/near/GridNearLockFuture.java | 5 +- ...dNearOptimisticTxPrepareFutureAdapter.java | 3 +- .../near/GridNearTransactionalCache.java | 5 +- .../near/GridNearTxAbstractEnlistFuture.java | 3 +- .../distributed/near/GridNearTxLocal.java | 5 +- .../near/TxTopologyVersionFuture.java | 3 +- .../cache/local/GridLocalCacheEntry.java | 3 +- .../cache/local/GridLocalLockFuture.java | 3 +- .../GridCacheDatabaseSharedManager.java | 5 +- .../cache/persistence/RecoveryDebug.java | 3 +- .../persistence/file/AsyncFileIOFactory.java | 3 +- .../DelayedPageReplacementTracker.java | 6 +- .../pagemem/PagesWriteSpeedBasedThrottle.java | 3 +- .../wal/FileWriteAheadLogManager.java | 3 +- .../FsyncModeFileWriteAheadLogManager.java | 5 +- .../cache/persistence/wal/crc/FastCrc.java | 3 +- .../wal/serializer/RecordV1Serializer.java | 10 +- .../wal/serializer/RecordV2Serializer.java | 3 +- .../store/GridCacheStoreManagerAdapter.java | 3 +- .../cache/transactions/IgniteTxAdapter.java | 5 +- .../cache/transactions/IgniteTxManager.java | 18 +-- .../datastreamer/DataStreamerImpl.java | 3 +- .../GridCacheAtomicLongImpl.java | 5 +- .../GridCacheAtomicReferenceImpl.java | 5 +- .../GridCacheAtomicSequenceImpl.java | 5 +- .../GridCacheAtomicStampedImpl.java | 3 +- .../GridCacheCountDownLatchImpl.java | 5 +- .../datastructures/GridCacheLockImpl.java | 12 +- .../datastructures/GridCacheQueueProxy.java | 3 +- .../GridCacheSemaphoreImpl.java | 5 +- .../datastructures/GridCacheSetProxy.java | 3 +- .../processors/job/GridJobProcessor.java | 9 +- .../processors/job/GridJobWorker.java | 3 +- .../PlatformAffinityFunctionTarget.java | 6 +- .../memory/PlatformMemoryManagerImpl.java | 3 +- .../processors/query/GridQueryProcessor.java | 5 +- .../security/SecurityContextHolder.java | 3 +- .../processors/security/SecurityUtils.java | 3 +- .../service/GridServiceProcessor.java | 3 +- .../processors/task/GridTaskProcessor.java | 5 +- .../internal/util/GridSpinReadWriteLock.java | 21 +-- .../util/GridStringBuilderFactory.java | 3 +- .../util/GridStripedSpinBusyLock.java | 3 +- .../util/IgniteExceptionRegistry.java | 2 +- .../ignite/internal/util/IgniteUtils.java | 5 +- .../util/StripedCompositeReadWriteLock.java | 3 +- .../ignite/internal/util/ThreadResolver.java | 112 ++++++++++++++++ .../util/nio/GridNioBackPressureControl.java | 3 +- .../util/tostring/GridToStringBuilder.java | 5 +- .../internal/visor/util/VisorTaskUtils.java | 3 +- .../logger/java/JavaLoggerFormatter.java | 3 +- .../ignite/marshaller/MarshallerUtils.java | 5 +- .../tcp/TcpCommunicationMetricsListener.java | 4 +- .../tcp/TcpCommunicationSpi.java | 3 +- .../keystore/KeystoreEncryptionSpi.java | 7 +- ...ezvousAffinityFunctionSimpleBenchmark.java | 26 ++-- .../internal/GridTaskTimeoutSelfTest.java | 3 +- .../SensitiveInfoTestLoggerProxy.java | 5 +- .../cache/GridCacheTestEntryEx.java | 3 +- ...CacheValueConsistencyAbstractSelfTest.java | 3 +- .../CacheDiscoveryDataConcurrentJoinTest.java | 3 +- .../distributed/CacheExchangeMergeTest.java | 3 +- ...acheGetInsideLockChangingTopologyTest.java | 3 +- .../IgniteCacheGetRestartTest.java | 3 +- .../dht/GridCacheColocatedDebugTest.java | 3 +- ...achePartitionedTopologyChangeSelfTest.java | 5 +- .../GridCacheLocalMultithreadedSelfTest.java | 3 +- ...entAffinityAssignmentWithBaselineTest.java | 7 +- .../transactions/MultiTxInOneThreadTest.java | 124 ++++++++++++++++++ .../database/BPlusTreeReuseSelfTest.java | 5 +- .../database/BPlusTreeSelfTest.java | 3 +- .../util/IgniteExceptionRegistrySelfTest.java | 2 +- .../ignite/lang/GridBasicPerformanceTest.java | 8 +- .../lang/GridSystemCurrentTimeMillisTest.java | 4 +- .../hashmap/GridCacheTestContext.java | 3 +- .../loadtests/util/GridLoadTestArgs.java | 3 +- .../session/GridThreadSerialNumber.java | 4 +- .../TcpClientDiscoverySpiMulticastTest.java | 5 +- .../tcp/TcpDiscoveryMultiThreadedTest.java | 5 +- .../discovery/tcp/TcpDiscoverySelfTest.java | 3 +- .../ignite/testframework/GridTestThread.java | 3 +- .../ignite/testframework/IgniteTestSuite.java | 14 +- .../cache/TestThreadLocalCacheSession.java | 3 +- .../file/LinuxNativeIoPluginProvider.java | 3 +- 119 files changed, 566 insertions(+), 214 deletions(-) create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/util/ThreadResolver.java create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/MultiTxInOneThreadTest.java diff --git a/modules/core/src/main/java/org/apache/ignite/igfs/IgfsUserContext.java b/modules/core/src/main/java/org/apache/ignite/igfs/IgfsUserContext.java index 1e1cd3171f170..9d6ef491550ed 100644 --- a/modules/core/src/main/java/org/apache/ignite/igfs/IgfsUserContext.java +++ b/modules/core/src/main/java/org/apache/ignite/igfs/IgfsUserContext.java @@ -18,6 +18,7 @@ package org.apache.ignite.igfs; import java.util.concurrent.Callable; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.util.typedef.F; import org.apache.ignite.lang.IgniteOutClosure; import org.jetbrains.annotations.Nullable; @@ -27,7 +28,7 @@ */ public abstract class IgfsUserContext { /** Thread local to hold the current user context. */ - private static final ThreadLocal userStackThreadLocal = new ThreadLocal<>(); + private static final ThreadLocal userStackThreadLocal = new ThreadLocalExtra<>(); /** * Executes given callable in the given user context. diff --git a/modules/core/src/main/java/org/apache/ignite/internal/AsyncSupportAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/AsyncSupportAdapter.java index 409a3d29a51fc..cc86e2cc3d310 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/AsyncSupportAdapter.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/AsyncSupportAdapter.java @@ -18,6 +18,7 @@ package org.apache.ignite.internal; import org.apache.ignite.IgniteCheckedException; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.util.future.IgniteFutureImpl; import org.apache.ignite.lang.IgniteAsyncSupport; import org.apache.ignite.lang.IgniteFuture; @@ -41,7 +42,7 @@ public AsyncSupportAdapter() { */ public AsyncSupportAdapter(boolean async) { if (async) - curFut = new ThreadLocal<>(); + curFut = new ThreadLocalExtra<>(); } /** {@inheritDoc} */ diff --git a/modules/core/src/main/java/org/apache/ignite/internal/GridKernalContextImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/GridKernalContextImpl.java index 8a42664cc1a84..99e8d8333f7ff 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/GridKernalContextImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/GridKernalContextImpl.java @@ -38,23 +38,23 @@ import org.apache.ignite.cluster.ClusterNode; import org.apache.ignite.configuration.IgniteConfiguration; import org.apache.ignite.failure.FailureType; -import org.apache.ignite.internal.managers.encryption.GridEncryptionManager; import org.apache.ignite.internal.managers.checkpoint.GridCheckpointManager; import org.apache.ignite.internal.managers.collision.GridCollisionManager; import org.apache.ignite.internal.managers.communication.GridIoManager; import org.apache.ignite.internal.managers.deployment.GridDeploymentManager; import org.apache.ignite.internal.managers.discovery.GridDiscoveryManager; +import org.apache.ignite.internal.managers.encryption.GridEncryptionManager; import org.apache.ignite.internal.managers.eventstorage.GridEventStorageManager; import org.apache.ignite.internal.managers.failover.GridFailoverManager; import org.apache.ignite.internal.managers.indexing.GridIndexingManager; import org.apache.ignite.internal.managers.loadbalancer.GridLoadBalancerManager; -import org.apache.ignite.internal.processors.cache.mvcc.MvccProcessor; -import org.apache.ignite.internal.worker.WorkersRegistry; import org.apache.ignite.internal.processors.affinity.GridAffinityProcessor; import org.apache.ignite.internal.processors.authentication.IgniteAuthenticationProcessor; import org.apache.ignite.internal.processors.cache.CacheConflictResolutionManager; import org.apache.ignite.internal.processors.cache.GridCacheProcessor; import org.apache.ignite.internal.processors.cache.binary.CacheObjectBinaryProcessorImpl; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; +import org.apache.ignite.internal.processors.cache.mvcc.MvccProcessor; import org.apache.ignite.internal.processors.cache.persistence.filename.PdsFoldersResolver; import org.apache.ignite.internal.processors.cacheobject.IgniteCacheObjectProcessor; import org.apache.ignite.internal.processors.closure.GridClosureProcessor; @@ -98,6 +98,7 @@ import org.apache.ignite.internal.util.typedef.X; import org.apache.ignite.internal.util.typedef.internal.S; import org.apache.ignite.internal.util.typedef.internal.U; +import org.apache.ignite.internal.worker.WorkersRegistry; import org.apache.ignite.lang.IgnitePredicate; import org.apache.ignite.plugin.PluginNotFoundException; import org.apache.ignite.plugin.PluginProvider; @@ -116,7 +117,7 @@ public class GridKernalContextImpl implements GridKernalContext, Externalizable private static final long serialVersionUID = 0L; /** */ - private static final ThreadLocal stash = new ThreadLocal<>(); + private static final ThreadLocal stash = new ThreadLocalExtra<>(); /* * Managers. diff --git a/modules/core/src/main/java/org/apache/ignite/internal/GridLoggerProxy.java b/modules/core/src/main/java/org/apache/ignite/internal/GridLoggerProxy.java index fb59da99118ba..3f385fd1ace7b 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/GridLoggerProxy.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/GridLoggerProxy.java @@ -25,6 +25,7 @@ import java.io.ObjectStreamException; import java.util.Collections; import org.apache.ignite.IgniteLogger; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.util.tostring.GridToStringExclude; import org.apache.ignite.internal.util.typedef.internal.S; import org.apache.ignite.internal.util.typedef.internal.U; @@ -43,7 +44,7 @@ public class GridLoggerProxy implements IgniteLogger, LifecycleAware, Externaliz private static final long serialVersionUID = 0L; /** */ - private static ThreadLocal> stash = new ThreadLocal>() { + private static ThreadLocal> stash = new ThreadLocalExtra>() { @Override protected IgniteBiTuple initialValue() { return new IgniteBiTuple<>(); } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/IgniteDiagnosticMessage.java b/modules/core/src/main/java/org/apache/ignite/internal/IgniteDiagnosticMessage.java index dc78b4eb89ee8..bd606726438db 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/IgniteDiagnosticMessage.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/IgniteDiagnosticMessage.java @@ -35,6 +35,7 @@ import org.apache.ignite.internal.processors.cache.GridCachePartitionExchangeManager; import org.apache.ignite.internal.processors.cache.KeyCacheObject; import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTopologyFuture; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture; import org.apache.ignite.internal.processors.cache.transactions.IgniteInternalTx; import org.apache.ignite.internal.processors.cache.version.GridCacheVersion; @@ -63,7 +64,7 @@ public class IgniteDiagnosticMessage implements Message { private static final int REQUEST_FLAG_MASK = 0x01; /** */ - private static final ThreadLocal dateFormat = new ThreadLocal() { + private static final ThreadLocal dateFormat = new ThreadLocalExtra() { @Override protected DateFormat initialValue() { return new SimpleDateFormat("HH:mm:ss.SSS"); } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java b/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java index adc0068f58f7b..700411013dbdc 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java @@ -77,6 +77,7 @@ import org.apache.ignite.internal.binary.BinaryMarshaller; import org.apache.ignite.internal.managers.communication.GridIoPolicy; import org.apache.ignite.internal.managers.discovery.GridDiscoveryManager; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.processors.datastructures.DataStructuresProcessor; import org.apache.ignite.internal.processors.igfs.IgfsThreadFactory; import org.apache.ignite.internal.processors.igfs.IgfsUtils; @@ -191,14 +192,14 @@ public class IgnitionEx { private static final Collection lsnrs = new GridConcurrentHashSet<>(4); /** */ - private static ThreadLocal daemon = new ThreadLocal() { + private static ThreadLocal daemon = new ThreadLocalExtra() { @Override protected Boolean initialValue() { return false; } }; /** */ - private static ThreadLocal clientMode = new ThreadLocal<>(); + private static ThreadLocal clientMode = new ThreadLocalExtra<>(); /* * Checks runtime version to be 1.7.x or 1.8.x. diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryThreadLocalContext.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryThreadLocalContext.java index 0ddd58169f65e..55ab9827a9b3e 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryThreadLocalContext.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryThreadLocalContext.java @@ -17,15 +17,16 @@ package org.apache.ignite.internal.binary; -import org.apache.ignite.internal.binary.streams.BinaryMemoryAllocatorChunk; import org.apache.ignite.internal.binary.streams.BinaryMemoryAllocator; +import org.apache.ignite.internal.binary.streams.BinaryMemoryAllocatorChunk; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; /** * Contains thread-local data for binary marshalling. */ public class BinaryThreadLocalContext { /** Thread-local instance. */ - private static final ThreadLocal CTX = new ThreadLocal() { + private static final ThreadLocal CTX = new ThreadLocalExtra() { @Override protected BinaryThreadLocalContext initialValue() { return new BinaryThreadLocalContext(); } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/GridBinaryMarshaller.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/GridBinaryMarshaller.java index 743958932f21b..ff6d92244054d 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/binary/GridBinaryMarshaller.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/GridBinaryMarshaller.java @@ -18,13 +18,14 @@ package org.apache.ignite.internal.binary; import org.apache.ignite.IgniteIllegalStateException; +import org.apache.ignite.binary.BinaryObjectException; import org.apache.ignite.internal.IgniteKernal; import org.apache.ignite.internal.IgnitionEx; import org.apache.ignite.internal.binary.streams.BinaryHeapInputStream; import org.apache.ignite.internal.binary.streams.BinaryInputStream; import org.apache.ignite.internal.binary.streams.BinaryOutputStream; -import org.apache.ignite.binary.BinaryObjectException; import org.apache.ignite.internal.processors.cache.binary.CacheObjectBinaryProcessorImpl; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.processors.cacheobject.IgniteCacheObjectProcessor; import org.jetbrains.annotations.Nullable; @@ -33,14 +34,14 @@ */ public class GridBinaryMarshaller { /** */ - public static final ThreadLocal KEEP_BINARIES = new ThreadLocal() { + public static final ThreadLocal KEEP_BINARIES = new ThreadLocalExtra() { @Override protected Boolean initialValue() { return true; } }; /** Binary context in TLS store. */ - private static final ThreadLocal BINARY_CTX = new ThreadLocal<>(); + private static final ThreadLocal BINARY_CTX = new ThreadLocalExtra<>(); /** */ public static final byte OPTM_MARSH = -2; diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryMemoryAllocator.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryMemoryAllocator.java index 5471bc59a9d47..15d8920ae9963 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryMemoryAllocator.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryMemoryAllocator.java @@ -17,6 +17,8 @@ package org.apache.ignite.internal.binary.streams; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; + /** * Thread-local memory allocator. */ @@ -25,7 +27,7 @@ public final class BinaryMemoryAllocator { public static final BinaryMemoryAllocator INSTANCE = new BinaryMemoryAllocator(); /** Holders. */ - private static final ThreadLocal holders = new ThreadLocal<>(); + private static final ThreadLocal holders = new ThreadLocalExtra<>(); /** * Ensures singleton. diff --git a/modules/core/src/main/java/org/apache/ignite/internal/client/impl/GridClientComputeImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/client/impl/GridClientComputeImpl.java index 463a07410a243..2ccd143d347bc 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/client/impl/GridClientComputeImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/client/impl/GridClientComputeImpl.java @@ -30,6 +30,7 @@ import org.apache.ignite.internal.client.balancer.GridClientLoadBalancer; import org.apache.ignite.internal.client.impl.connection.GridClientConnection; import org.apache.ignite.internal.client.impl.connection.GridClientConnectionResetException; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.util.typedef.internal.A; import org.jetbrains.annotations.Nullable; @@ -41,7 +42,7 @@ */ class GridClientComputeImpl extends GridClientAbstractProjection implements GridClientCompute { /** */ - private static final ThreadLocal KEEP_BINARIES = new ThreadLocal() { + private static final ThreadLocal KEEP_BINARIES = new ThreadLocalExtra() { @Override protected Boolean initialValue() { return false; } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cluster/ClusterNodeLocalMapImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/cluster/ClusterNodeLocalMapImpl.java index 86b690a320b3f..76433e8c48a47 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/cluster/ClusterNodeLocalMapImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/cluster/ClusterNodeLocalMapImpl.java @@ -23,13 +23,14 @@ import java.io.ObjectInput; import java.io.ObjectOutput; import java.io.ObjectStreamException; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import org.apache.ignite.IgniteCluster; import org.apache.ignite.internal.GridKernalContext; import org.apache.ignite.internal.IgnitionEx; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.util.typedef.internal.S; import org.apache.ignite.internal.util.typedef.internal.U; -import java.util.concurrent.ConcurrentHashMap; /** * Implementation for node-local storage. @@ -49,7 +50,7 @@ public class ClusterNodeLocalMapImpl extends ConcurrentHashMap imple private static final long serialVersionUID = 0L; /** */ - private static final ThreadLocal stash = new ThreadLocal<>(); + private static final ThreadLocal stash = new ThreadLocalExtra<>(); /** */ private GridKernalContext ctx; diff --git a/modules/core/src/main/java/org/apache/ignite/internal/igfs/common/IgfsLogger.java b/modules/core/src/main/java/org/apache/ignite/internal/igfs/common/IgfsLogger.java index 816fa8e01f894..1f1c74a431139 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/igfs/common/IgfsLogger.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/igfs/common/IgfsLogger.java @@ -35,6 +35,7 @@ import java.util.concurrent.locks.ReentrantReadWriteLock; import org.apache.ignite.igfs.IgfsPath; import org.apache.ignite.internal.IgniteInterruptedCheckedException; +import org.apache.ignite.internal.util.ThreadResolver; import org.apache.ignite.internal.util.typedef.internal.A; import org.apache.ignite.internal.util.typedef.internal.SB; import org.apache.ignite.internal.util.typedef.internal.U; @@ -583,7 +584,7 @@ private class Entry { Boolean overwrite, Integer replication, Long blockSize, Long pos, Integer readLen, Long skipCnt, Long readLimit, Long userTime, Long sysTime, Long total, String destPath, Boolean recursive, String[] list) { - threadId = Thread.currentThread().getId(); + threadId = ThreadResolver.threadId(); ts = U.currentTimeMillis(); this.type = type; diff --git a/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinResultSet.java b/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinResultSet.java index 26c61d58ec359..e5d3c1823b989 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinResultSet.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinResultSet.java @@ -46,6 +46,7 @@ import java.util.Iterator; import java.util.List; import java.util.Map; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.processors.odbc.SqlStateCode; import org.apache.ignite.internal.processors.odbc.jdbc.JdbcColumnMeta; import org.apache.ignite.internal.processors.odbc.jdbc.JdbcQueryCloseRequest; @@ -59,7 +60,7 @@ */ public class JdbcThinResultSet implements ResultSet { /** Decimal format to convert streing to decimal. */ - private static final ThreadLocal decimalFormat = new ThreadLocal() { + private static final ThreadLocal decimalFormat = new ThreadLocalExtra() { /** {@inheritDoc} */ @Override protected DecimalFormat initialValue() { DecimalFormatSymbols symbols = new DecimalFormatSymbols(); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcResultSet.java b/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcResultSet.java index 43fb755f23c4c..220881794bc12 100755 --- a/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcResultSet.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcResultSet.java @@ -49,6 +49,7 @@ import java.util.Map; import java.util.UUID; import org.apache.ignite.Ignite; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.processors.odbc.SqlStateCode; import org.apache.ignite.internal.util.typedef.F; import org.jetbrains.annotations.Nullable; @@ -60,7 +61,7 @@ */ public class JdbcResultSet implements ResultSet { /** Decimal format to convert streing to decimal. */ - private static final ThreadLocal decimalFormat = new ThreadLocal() { + private static final ThreadLocal decimalFormat = new ThreadLocalExtra() { /** {@inheritDoc} */ @Override protected DecimalFormat initialValue() { DecimalFormatSymbols symbols = new DecimalFormatSymbols(); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoManager.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoManager.java index ecf99f13539cc..555bba98498b6 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoManager.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoManager.java @@ -67,6 +67,7 @@ import org.apache.ignite.internal.managers.deployment.GridDeployment; import org.apache.ignite.internal.managers.eventstorage.GridEventStorageManager; import org.apache.ignite.internal.managers.eventstorage.GridLocalEventListener; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.processors.cache.mvcc.msg.MvccMessage; import org.apache.ignite.internal.processors.platform.message.PlatformMessageFilter; import org.apache.ignite.internal.processors.pool.PoolProcessor; @@ -138,7 +139,7 @@ public class GridIoManager extends GridManagerAdapter CUR_PLC = new ThreadLocal<>(); + private static final ThreadLocal CUR_PLC = new ThreadLocalExtra<>(); /** Listeners by topic. */ private final ConcurrentMap lsnrMap = new ConcurrentHashMap<>(); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeploymentCommunication.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeploymentCommunication.java index fdbe9b9e36d96..9c345f37705ba 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeploymentCommunication.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeploymentCommunication.java @@ -32,6 +32,7 @@ import org.apache.ignite.internal.managers.communication.GridIoPolicy; import org.apache.ignite.internal.managers.communication.GridMessageListener; import org.apache.ignite.internal.managers.eventstorage.GridLocalEventListener; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.util.GridBusyLock; import org.apache.ignite.internal.util.GridByteArrayList; import org.apache.ignite.internal.util.lang.GridTuple; @@ -62,7 +63,7 @@ class GridDeploymentCommunication { private final GridMessageListener peerLsnr; /** */ - private final ThreadLocal> activeReqNodeIds = new ThreadLocal<>(); + private final ThreadLocal> activeReqNodeIds = new ThreadLocalExtra<>(); /** */ private final GridBusyLock busyLock = new GridBusyLock(); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectStreamRegistry.java b/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectStreamRegistry.java index f02297395f505..a29368e431151 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectStreamRegistry.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectStreamRegistry.java @@ -22,6 +22,7 @@ import java.util.concurrent.LinkedBlockingQueue; import org.apache.ignite.IgniteException; import org.apache.ignite.internal.IgniteInterruptedCheckedException; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.util.io.GridUnsafeDataInput; import org.apache.ignite.internal.util.io.GridUnsafeDataOutput; import org.apache.ignite.internal.util.typedef.internal.U; @@ -31,7 +32,7 @@ */ class OptimizedObjectStreamRegistry { /** Holders. */ - private static final ThreadLocal holders = new ThreadLocal<>(); + private static final ThreadLocalExtra holders = new ThreadLocalExtra<>(); /** Output streams pool. */ private static BlockingQueue outPool; diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/authentication/AuthorizationContext.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/authentication/AuthorizationContext.java index 8f2215861cc96..0efc5e26b5ebc 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/authentication/AuthorizationContext.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/authentication/AuthorizationContext.java @@ -17,6 +17,8 @@ package org.apache.ignite.internal.processors.authentication; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; + /** * Ignite authentication context. */ @@ -25,7 +27,7 @@ public class AuthorizationContext { private final User user; /** Current authorization context. */ - private static ThreadLocal actx = new ThreadLocal<>(); + private static ThreadLocal actx = new ThreadLocalExtra<>(); /** * Creates authentication context. diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheAffinitySharedManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheAffinitySharedManager.java index 1283696393a87..50d871d44a4a3 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheAffinitySharedManager.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheAffinitySharedManager.java @@ -53,6 +53,7 @@ import org.apache.ignite.internal.processors.cache.distributed.dht.ClientCacheDhtTopologyFuture; import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtAffinityAssignmentResponse; import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtAssignmentFetchFuture; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.CacheGroupAffinityMessage; import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionFullMap; import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionMap; @@ -127,7 +128,7 @@ public class CacheAffinitySharedManager extends GridCacheSharedManagerAdap new ConcurrentHashMap<>(); /** */ - private final ThreadLocal clientCacheChanges = new ThreadLocal<>(); + private final ThreadLocal clientCacheChanges = new ThreadLocalExtra<>(); /** Discovery listener. */ private final GridLocalEventListener discoLsnr = new GridLocalEventListener() { diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java index 8ae34500d74ee..088f10e7e42ab 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java @@ -87,9 +87,10 @@ import org.apache.ignite.internal.processors.cache.affinity.GridCacheAffinityImpl; import org.apache.ignite.internal.processors.cache.distributed.IgniteExternalizableExpiryPolicy; import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtCacheAdapter; -import org.apache.ignite.internal.processors.cache.distributed.dht.topology.GridDhtInvalidPartitionException; import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTopologyFuture; import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTxLocalAdapter; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; +import org.apache.ignite.internal.processors.cache.distributed.dht.topology.GridDhtInvalidPartitionException; import org.apache.ignite.internal.processors.cache.distributed.dht.topology.GridDhtLocalPartition; import org.apache.ignite.internal.processors.cache.distributed.dht.topology.GridDhtPartitionTopology; import org.apache.ignite.internal.processors.cache.distributed.near.GridNearTxLocal; @@ -189,7 +190,7 @@ public abstract class GridCacheAdapter implements IgniteInternalCache> stash = new ThreadLocal> stash = new ThreadLocalExtra>() { @Override protected IgniteBiTuple initialValue() { return new IgniteBiTuple<>(); @@ -240,7 +241,7 @@ public abstract class GridCacheAdapter implements IgniteInternalCache lastFut = new ThreadLocal() { + protected ThreadLocal lastFut = new ThreadLocalExtra() { @Override protected FutureHolder initialValue() { return new FutureHolder(); } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContext.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContext.java index 44d067c39c01a..d6103fbbb24a7 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContext.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContext.java @@ -65,11 +65,12 @@ import org.apache.ignite.internal.processors.cache.datastructures.CacheDataStructuresManager; import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtCacheAdapter; import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtCacheEntry; -import org.apache.ignite.internal.processors.cache.distributed.dht.topology.GridDhtLocalPartition; -import org.apache.ignite.internal.processors.cache.distributed.dht.topology.GridDhtPartitionTopology; import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTopologyFuture; import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTransactionalCacheAdapter; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.processors.cache.distributed.dht.colocated.GridDhtColocatedCache; +import org.apache.ignite.internal.processors.cache.distributed.dht.topology.GridDhtLocalPartition; +import org.apache.ignite.internal.processors.cache.distributed.dht.topology.GridDhtPartitionTopology; import org.apache.ignite.internal.processors.cache.distributed.near.GridNearCacheAdapter; import org.apache.ignite.internal.processors.cache.distributed.near.GridNearTransactionalCache; import org.apache.ignite.internal.processors.cache.dr.GridCacheDrManager; @@ -129,7 +130,7 @@ public class GridCacheContext implements Externalizable { private static final long serialVersionUID = 0L; /** Deserialization stash. */ - private static final ThreadLocal> stash = new ThreadLocal>() { + private static final ThreadLocal> stash = new ThreadLocalExtra>() { @Override protected IgniteBiTuple initialValue() { return new IgniteBiTuple<>(); } @@ -202,7 +203,7 @@ public class GridCacheContext implements Externalizable { * Thread local operation context. If it's set it means that method call was initiated * by child cache of initial cache. */ - private ThreadLocal opCtxPerCall = new ThreadLocal<>(); + private ThreadLocal opCtxPerCall = new ThreadLocalExtra<>(); /** Cache name. */ private String cacheName; diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheDeploymentManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheDeploymentManager.java index 4e9f2f8430829..c629a0640ff8c 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheDeploymentManager.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheDeploymentManager.java @@ -39,6 +39,7 @@ import org.apache.ignite.internal.managers.deployment.GridDeploymentInfo; import org.apache.ignite.internal.managers.deployment.GridDeploymentInfoBean; import org.apache.ignite.internal.managers.eventstorage.GridLocalEventListener; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.processors.cache.distributed.near.GridNearCacheAdapter; import org.apache.ignite.internal.util.IgniteUtils; import org.apache.ignite.internal.util.lang.GridPeerDeployAware; @@ -83,7 +84,7 @@ public class GridCacheDeploymentManager extends GridCacheSharedManagerAdap private final AtomicReference locDep = new AtomicReference<>(); /** */ - private final ThreadLocal ignoreOwnership = new ThreadLocal() { + private final ThreadLocal ignoreOwnership = new ThreadLocalExtra() { @Override protected Boolean initialValue() { return false; } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheLogger.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheLogger.java index 960fb55c0cdd7..e75b7da91af98 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheLogger.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheLogger.java @@ -24,6 +24,7 @@ import java.io.ObjectOutput; import java.io.ObjectStreamException; import org.apache.ignite.IgniteLogger; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.util.tostring.GridToStringExclude; import org.apache.ignite.internal.util.typedef.internal.S; import org.apache.ignite.internal.util.typedef.internal.U; @@ -40,7 +41,7 @@ class GridCacheLogger implements IgniteLogger, Externalizable { /** */ private static ThreadLocal> stash = - new ThreadLocal>() { + new ThreadLocalExtra>() { @Override protected IgniteBiTuple initialValue() { return new IgniteBiTuple<>(); } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java index cc0a78e8792a7..67ffc18911b53 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java @@ -46,6 +46,7 @@ import org.apache.ignite.internal.processors.cache.GridCacheUpdateAtomicResult.UpdateOutcome; import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtCacheEntry; import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTxLocalAdapter; +import org.apache.ignite.internal.util.ThreadResolver; import org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicAbstractUpdateFuture; import org.apache.ignite.internal.processors.cache.distributed.dht.topology.GridDhtLocalPartition; import org.apache.ignite.internal.processors.cache.distributed.near.GridNearCacheEntry; @@ -3704,7 +3705,7 @@ private GridCacheVersion nextVersion() { /** {@inheritDoc} */ @Override public boolean lockedByThread() throws GridCacheEntryRemovedException { - return lockedByThread(Thread.currentThread().getId()); + return lockedByThread(ThreadResolver.threadId()); } /** {@inheritDoc} */ diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMvcc.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMvcc.java index 28cc8fbf80e59..0ecd1195ac757 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMvcc.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMvcc.java @@ -29,6 +29,7 @@ import java.util.UUID; import java.util.concurrent.atomic.AtomicReference; import org.apache.ignite.IgniteLogger; +import org.apache.ignite.internal.util.ThreadResolver; import org.apache.ignite.internal.processors.cache.transactions.IgniteInternalTx; import org.apache.ignite.internal.processors.cache.version.GridCacheVersion; import org.apache.ignite.internal.processors.cache.version.GridCacheVersionManager; @@ -1188,7 +1189,7 @@ else if (cand.serializable()) { * @return Removed candidate. */ @Nullable public GridCacheMvccCandidate releaseLocal() { - return releaseLocal(Thread.currentThread().getId()); + return releaseLocal(ThreadResolver.threadId()); } /** diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMvccManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMvccManager.java index a512a82dc025d..c542dfabaea65 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMvccManager.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMvccManager.java @@ -45,6 +45,7 @@ import org.apache.ignite.internal.processors.cache.distributed.GridCacheMappedVersion; import org.apache.ignite.internal.processors.cache.distributed.GridDistributedCacheEntry; import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTxFinishFuture; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.processors.cache.transactions.IgniteInternalTx; import org.apache.ignite.internal.processors.cache.transactions.IgniteTxKey; import org.apache.ignite.internal.processors.cache.version.GridCacheVersion; @@ -90,7 +91,7 @@ public class GridCacheMvccManager extends GridCacheSharedManagerAdapter { private static final int MAX_NESTED_LSNR_CALLS = getInteger(IGNITE_MAX_NESTED_LISTENER_CALLS, 5); /** Pending locks per thread. */ - private final ThreadLocal> pending = new ThreadLocal<>(); + private final ThreadLocal> pending = new ThreadLocalExtra<>(); /** Pending near local locks and topology version per thread. */ private ConcurrentMap pendingExplicit; @@ -127,7 +128,7 @@ public class GridCacheMvccManager extends GridCacheSharedManagerAdapter { private final FastSizeDeque finishFuts = new FastSizeDeque<>(new ConcurrentLinkedDeque<>()); /** Nested listener calls. */ - private final ThreadLocal nestedLsnrCalls = new ThreadLocal() { + private final ThreadLocal nestedLsnrCalls = new ThreadLocalExtra() { @Override protected Integer initialValue() { return 0; } @@ -144,7 +145,7 @@ public class GridCacheMvccManager extends GridCacheSharedManagerAdapter { protected final AtomicLong globalAtomicCnt = new AtomicLong(); /** Per thread atomic id counter. */ - private final ThreadLocal threadAtomicCnt = new ThreadLocal() { + private final ThreadLocal threadAtomicCnt = new ThreadLocalExtra() { @Override protected LongWrapper initialValue() { return new LongWrapper(globalAtomicCnt.getAndAdd(THREAD_RESERVE_SIZE)); } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java index 317378bb2c314..13540e5a38ae2 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java @@ -85,6 +85,7 @@ import org.apache.ignite.internal.processors.cache.datastructures.CacheDataStructuresManager; import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtCache; import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtCacheAdapter; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache; import org.apache.ignite.internal.processors.cache.distributed.dht.colocated.GridDhtColocatedCache; import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.StopCachesOnClientReconnectExchangeTask; diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheSharedContext.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheSharedContext.java index 6c7216917aafd..1361991aaccb4 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheSharedContext.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheSharedContext.java @@ -42,6 +42,7 @@ import org.apache.ignite.internal.pagemem.store.IgnitePageStoreManager; import org.apache.ignite.internal.pagemem.wal.IgniteWriteAheadLogManager; import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion; +import org.apache.ignite.internal.util.ThreadResolver; import org.apache.ignite.internal.processors.cache.distributed.dht.topology.GridDhtPartitionTopology; import org.apache.ignite.internal.processors.cache.distributed.dht.topology.PartitionsEvictManager; import org.apache.ignite.internal.processors.cache.distributed.near.GridNearTxLocal; @@ -983,7 +984,7 @@ public IgniteInternalFuture nextAffinityReadyFuture(AffinityTopologyVersion c * @return Not null topology version if current thread holds lock preventing topology change. */ @Nullable public AffinityTopologyVersion lockedTopologyVersion(IgniteInternalTx ignore) { - long threadId = Thread.currentThread().getId(); + long threadId = ThreadResolver.threadId(); AffinityTopologyVersion topVer = txMgr.lockedTopologyVersion(threadId, ignore); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedTxRemoteAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedTxRemoteAdapter.java index 69230806dcc2f..239cf9b8ae898 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedTxRemoteAdapter.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedTxRemoteAdapter.java @@ -50,6 +50,7 @@ import org.apache.ignite.internal.processors.cache.GridCacheSharedContext; import org.apache.ignite.internal.processors.cache.GridCacheUpdateTxResult; import org.apache.ignite.internal.processors.cache.KeyCacheObject; +import org.apache.ignite.internal.util.ThreadResolver; import org.apache.ignite.internal.processors.cache.distributed.near.GridNearCacheEntry; import org.apache.ignite.internal.processors.cache.transactions.IgniteInternalTx; import org.apache.ignite.internal.processors.cache.transactions.IgniteTxAdapter; @@ -166,7 +167,7 @@ public GridDistributedTxRemoteAdapter( nodeId, xidVer, ctx.versions().last(), - Thread.currentThread().getId(), + ThreadResolver.threadId(), sys, plc, concurrency, diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtCacheAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtCacheAdapter.java index 562823047593a..ac3e9ccc2565e 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtCacheAdapter.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtCacheAdapter.java @@ -58,6 +58,7 @@ import org.apache.ignite.internal.processors.cache.distributed.GridCacheTtlUpdateRequest; import org.apache.ignite.internal.processors.cache.distributed.GridDistributedCacheAdapter; import org.apache.ignite.internal.processors.cache.distributed.GridDistributedCacheEntry; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.processors.cache.distributed.dht.colocated.GridDhtDetachedCacheEntry; import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtForceKeysFuture; import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtForceKeysRequest; @@ -106,7 +107,7 @@ public abstract class GridDhtCacheAdapter extends GridDistributedCacheAdap private static final long serialVersionUID = 0L; /** Multi tx future holder. */ - private ThreadLocal> multiTxHolder = new ThreadLocal<>(); + private ThreadLocal> multiTxHolder = new ThreadLocalExtra<>(); /** Multi tx futures. */ private ConcurrentMap multiTxFuts = new ConcurrentHashMap<>(); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxLocalAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxLocalAdapter.java index 6ef9000b05e39..f1fcab849e8bb 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxLocalAdapter.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxLocalAdapter.java @@ -47,6 +47,7 @@ import org.apache.ignite.internal.util.F0; import org.apache.ignite.internal.util.GridLeanMap; import org.apache.ignite.internal.util.GridLeanSet; +import org.apache.ignite.internal.util.ThreadResolver; import org.apache.ignite.internal.util.future.GridEmbeddedFuture; import org.apache.ignite.internal.util.future.GridFinishedFuture; import org.apache.ignite.internal.util.future.GridFutureAdapter; @@ -168,7 +169,7 @@ protected GridDhtTxLocalAdapter( this.explicitLock = explicitLock; - threadId = Thread.currentThread().getId(); + threadId = ThreadResolver.threadId(); } /** diff --git 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 index 686aace32b3f6..628f5ceb994a7 100644 --- 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 @@ -41,7 +41,6 @@ import org.apache.ignite.internal.UnregisteredClassException; import org.apache.ignite.internal.cluster.ClusterTopologyCheckedException; import org.apache.ignite.internal.mem.IgniteOutOfMemoryException; -import org.apache.ignite.internal.processors.cache.persistence.StorageException; import org.apache.ignite.internal.processors.affinity.AffinityAssignment; import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion; import org.apache.ignite.internal.processors.cache.CacheEntryPredicate; @@ -68,12 +67,13 @@ import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtCacheAdapter; import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtCacheEntry; import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtFuture; -import org.apache.ignite.internal.processors.cache.distributed.dht.topology.GridDhtInvalidPartitionException; -import org.apache.ignite.internal.processors.cache.distributed.dht.topology.GridDhtPartitionTopology; import org.apache.ignite.internal.processors.cache.distributed.dht.GridPartitionedGetFuture; import org.apache.ignite.internal.processors.cache.distributed.dht.GridPartitionedSingleGetFuture; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtForceKeysRequest; import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtForceKeysResponse; +import org.apache.ignite.internal.processors.cache.distributed.dht.topology.GridDhtInvalidPartitionException; +import org.apache.ignite.internal.processors.cache.distributed.dht.topology.GridDhtPartitionTopology; import org.apache.ignite.internal.processors.cache.distributed.near.GridNearAtomicCache; import org.apache.ignite.internal.processors.cache.distributed.near.GridNearCacheAdapter; import org.apache.ignite.internal.processors.cache.distributed.near.GridNearGetRequest; @@ -83,6 +83,7 @@ import org.apache.ignite.internal.processors.cache.dr.GridCacheDrExpirationInfo; import org.apache.ignite.internal.processors.cache.dr.GridCacheDrInfo; import org.apache.ignite.internal.processors.cache.persistence.CacheDataRow; +import org.apache.ignite.internal.processors.cache.persistence.StorageException; import org.apache.ignite.internal.processors.cache.transactions.IgniteTxLocalEx; import org.apache.ignite.internal.processors.cache.version.GridCacheVersion; import org.apache.ignite.internal.processors.cache.version.GridCacheVersionConflictContext; @@ -146,7 +147,7 @@ public class GridDhtAtomicCache extends GridDhtCacheAdapter { /** */ private final ThreadLocal> defRes = - new ThreadLocal>() { + new ThreadLocalExtra>() { @Override protected Map initialValue() { return new HashMap<>(); } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/colocated/GridDhtColocatedCache.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/colocated/GridDhtColocatedCache.java index bbfb502c37521..07ce5d265eb79 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/colocated/GridDhtColocatedCache.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/colocated/GridDhtColocatedCache.java @@ -48,6 +48,7 @@ import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtCacheEntry; import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtEmbeddedFuture; import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtFinishedFuture; +import org.apache.ignite.internal.util.ThreadResolver; import org.apache.ignite.internal.processors.cache.distributed.dht.topology.GridDhtInvalidPartitionException; import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtLockFuture; import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTransactionalCacheAdapter; @@ -172,7 +173,7 @@ public GridDistributedCacheEntry entryExx( @Override public boolean isLockedByThread(K key) { KeyCacheObject cacheKey = ctx.toCacheKeyObject(key); - return ctx.mvcc().isLockedByThread(ctx.txKey(cacheKey), Thread.currentThread().getId()); + return ctx.mvcc().isLockedByThread(ctx.txKey(cacheKey), ThreadResolver.threadId()); } /** {@inheritDoc} */ @@ -725,7 +726,7 @@ else if (!skipVals && ctx.statisticsEnabled()) GridDistributedCacheEntry entry = peekExx(cacheKey); GridCacheMvccCandidate lock = - ctx.mvcc().removeExplicitLock(Thread.currentThread().getId(), txKey, null); + ctx.mvcc().removeExplicitLock(ThreadResolver.threadId(), txKey, null); if (lock != null) { final AffinityTopologyVersion topVer = lock.topologyVersion(); @@ -780,7 +781,7 @@ else if (!skipVals && ctx.statisticsEnabled()) } else if (log.isDebugEnabled()) log.debug("Current thread still owns lock (or there are no other nodes)" + - " [lock=" + lock + ", curThreadId=" + Thread.currentThread().getId() + ']'); + " [lock=" + lock + ", curThreadId=" + ThreadResolver.threadId() + ']'); } } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/colocated/GridDhtColocatedLockFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/colocated/GridDhtColocatedLockFuture.java index f372769e31b25..f6a6f03a7eb86 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/colocated/GridDhtColocatedLockFuture.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/colocated/GridDhtColocatedLockFuture.java @@ -52,6 +52,7 @@ import org.apache.ignite.internal.processors.cache.distributed.GridDistributedCacheEntry; import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtCacheEntry; import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTopologyFuture; +import org.apache.ignite.internal.util.ThreadResolver; import org.apache.ignite.internal.processors.cache.distributed.near.GridNearLockMapping; import org.apache.ignite.internal.processors.cache.distributed.near.GridNearLockRequest; import org.apache.ignite.internal.processors.cache.distributed.near.GridNearLockResponse; @@ -226,7 +227,7 @@ public GridDhtColocatedLockFuture( ignoreInterrupts(); - threadId = tx == null ? Thread.currentThread().getId() : tx.threadId(); + threadId = tx == null ? ThreadResolver.threadId() : tx.threadId(); lockVer = tx != null ? tx.xidVersion() : cctx.versions().next(); @@ -766,7 +767,7 @@ void map() { // If there is another system transaction in progress, use it's topology version to prevent deadlock. if (topVer == null && tx != null && tx.system()) - topVer = cctx.tm().lockedTopologyVersion(Thread.currentThread().getId(), tx); + topVer = cctx.tm().lockedTopologyVersion(ThreadResolver.threadId(), tx); if (topVer != null && tx != null) tx.topologyVersion(topVer); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearCacheEntry.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearCacheEntry.java index a52e23e478cdb..1d2b9483d7cb9 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearCacheEntry.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearCacheEntry.java @@ -33,6 +33,7 @@ import org.apache.ignite.internal.processors.cache.KeyCacheObject; import org.apache.ignite.internal.processors.cache.distributed.GridDistributedCacheEntry; import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtCacheEntry; +import org.apache.ignite.internal.util.ThreadResolver; import org.apache.ignite.internal.processors.cache.persistence.CacheDataRow; import org.apache.ignite.internal.processors.cache.transactions.IgniteInternalTx; import org.apache.ignite.internal.processors.cache.version.GridCacheVersion; @@ -654,7 +655,7 @@ public boolean loadedValue(@Nullable IgniteInternalTx tx, boolean emptyBefore = mvcc.isEmpty(); - cand = mvcc.localCandidate(locId, Thread.currentThread().getId()); + cand = mvcc.localCandidate(locId, ThreadResolver.threadId()); assert cand == null || cand.nearLocal(); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearLockFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearLockFuture.java index 2b3b5eaf234ae..cca649779ab52 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearLockFuture.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearLockFuture.java @@ -52,6 +52,7 @@ import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtCacheEntry; import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTopologyFuture; import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTransactionalCacheAdapter; +import org.apache.ignite.internal.util.ThreadResolver; import org.apache.ignite.internal.processors.cache.transactions.IgniteTxEntry; import org.apache.ignite.internal.processors.cache.transactions.IgniteTxKey; import org.apache.ignite.internal.processors.cache.transactions.TxDeadlock; @@ -225,7 +226,7 @@ public GridNearLockFuture( ignoreInterrupts(); - threadId = tx == null ? Thread.currentThread().getId() : tx.threadId(); + threadId = tx == null ? ThreadResolver.threadId() : tx.threadId(); lockVer = tx != null ? tx.xidVersion() : cctx.versions().next(); @@ -828,7 +829,7 @@ void map() { assert added : this; // Obtain the topology version to use. - long threadId = Thread.currentThread().getId(); + long threadId = ThreadResolver.threadId(); AffinityTopologyVersion topVer = cctx.mvcc().lastExplicitLockTopologyVersion(threadId); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticTxPrepareFutureAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticTxPrepareFutureAdapter.java index 6f541d330b5a1..5470454f30c46 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticTxPrepareFutureAdapter.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticTxPrepareFutureAdapter.java @@ -25,6 +25,7 @@ import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion; import org.apache.ignite.internal.processors.cache.GridCacheSharedContext; import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTopologyFuture; +import org.apache.ignite.internal.util.ThreadResolver; import org.apache.ignite.internal.processors.cache.mvcc.MvccSnapshot; import org.apache.ignite.internal.processors.cache.mvcc.MvccSnapshotResponseListener; import org.apache.ignite.internal.processors.cache.transactions.IgniteTxEntry; @@ -102,7 +103,7 @@ protected GridNearOptimisticTxPrepareFutureAdapter(GridCacheSharedContext cctx, /** {@inheritDoc} */ @Override public final void prepare() { // Obtain the topology version to use. - long threadId = Thread.currentThread().getId(); + long threadId = ThreadResolver.threadId(); AffinityTopologyVersion topVer = cctx.mvcc().lastExplicitLockTopologyVersion(threadId); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTransactionalCache.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTransactionalCache.java index 3f7e48ae30610..7e7bb861e17e2 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTransactionalCache.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTransactionalCache.java @@ -42,6 +42,7 @@ import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtCache; import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtLockRequest; import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtUnlockRequest; +import org.apache.ignite.internal.util.ThreadResolver; import org.apache.ignite.internal.processors.cache.transactions.IgniteTxKey; import org.apache.ignite.internal.processors.cache.transactions.IgniteTxLocalEx; import org.apache.ignite.internal.processors.cache.version.GridCacheVersion; @@ -522,7 +523,7 @@ protected boolean evictNearEntry(GridCacheEntryEx e, GridCacheVersion obsoleteVe break; // While. try { - GridCacheMvccCandidate cand = entry.candidate(ctx.nodeId(), Thread.currentThread().getId()); + GridCacheMvccCandidate cand = entry.candidate(ctx.nodeId(), ThreadResolver.threadId()); AffinityTopologyVersion topVer = AffinityTopologyVersion.NONE; @@ -585,7 +586,7 @@ protected boolean evictNearEntry(GridCacheEntryEx e, GridCacheVersion obsoleteVe } else if (log.isDebugEnabled()) log.debug("Current thread still owns lock (or there are no other nodes)" + - " [lock=" + rmv + ", curThreadId=" + Thread.currentThread().getId() + ']'); + " [lock=" + rmv + ", curThreadId=" + ThreadResolver.threadId() + ']'); } } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxAbstractEnlistFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxAbstractEnlistFuture.java index bd094242a5f46..bbae1196396ed 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxAbstractEnlistFuture.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxAbstractEnlistFuture.java @@ -36,6 +36,7 @@ import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTopologyFuture; import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTxAbstractEnlistFuture; import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTxLocalAdapter; +import org.apache.ignite.internal.util.ThreadResolver; import org.apache.ignite.internal.processors.cache.mvcc.MvccSnapshot; import org.apache.ignite.internal.processors.cache.version.GridCacheVersion; import org.apache.ignite.internal.processors.timeout.GridTimeoutObjectAdapter; @@ -206,7 +207,7 @@ else if (tx.updateLockFuture(null, this)) cctx.time().addTimeoutObject(timeoutObj); // Obtain the topology version to use. - long threadId = Thread.currentThread().getId(); + long threadId = ThreadResolver.threadId(); AffinityTopologyVersion topVer = cctx.mvcc().lastExplicitLockTopologyVersion(threadId); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxLocal.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxLocal.java index d4e6ca40ddce4..55e28767ff4f6 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxLocal.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxLocal.java @@ -60,6 +60,7 @@ import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTxLocalAdapter; import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTxPrepareFuture; import org.apache.ignite.internal.processors.cache.distributed.dht.GridInvokeValue; +import org.apache.ignite.internal.util.ThreadResolver; import org.apache.ignite.internal.processors.cache.distributed.dht.colocated.GridDhtDetachedCacheEntry; import org.apache.ignite.internal.processors.cache.dr.GridCacheDrInfo; import org.apache.ignite.internal.processors.cache.mvcc.MvccQueryTracker; @@ -3423,7 +3424,7 @@ public void suspend() throws IgniteCheckedException { if (pessimistic()) throw new UnsupportedOperationException("Suspension is not supported for pessimistic transactions."); - if (threadId() != Thread.currentThread().getId()) + if (threadId() != ThreadResolver.threadId()) throw new IgniteCheckedException("Only thread started transaction can suspend it."); synchronized (this) { @@ -3439,7 +3440,7 @@ public void suspend() throws IgniteCheckedException { * @throws IgniteCheckedException If the transaction is in an incorrect state, or timed out. */ public void resume() throws IgniteCheckedException { - resume(true, Thread.currentThread().getId()); + resume(true, ThreadResolver.threadId()); } /** diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/TxTopologyVersionFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/TxTopologyVersionFuture.java index b5e38839b75b4..448d8095b0fe6 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/TxTopologyVersionFuture.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/TxTopologyVersionFuture.java @@ -23,6 +23,7 @@ import org.apache.ignite.internal.processors.cache.CacheStoppedException; import org.apache.ignite.internal.processors.cache.GridCacheContext; import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTopologyFuture; +import org.apache.ignite.internal.util.ThreadResolver; import org.apache.ignite.internal.util.future.GridFutureAdapter; import org.apache.ignite.internal.util.typedef.CI1; @@ -53,7 +54,7 @@ public TxTopologyVersionFuture(GridNearTxLocal tx, GridCacheContext cctx) { /** */ private void init() { // Obtain the topology version to use. - long threadId = Thread.currentThread().getId(); + long threadId = ThreadResolver.threadId(); AffinityTopologyVersion topVer = cctx.mvcc().lastExplicitLockTopologyVersion(threadId); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/GridLocalCacheEntry.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/GridLocalCacheEntry.java index e26174a2adef5..2af5ada004cce 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/GridLocalCacheEntry.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/GridLocalCacheEntry.java @@ -25,6 +25,7 @@ import org.apache.ignite.internal.processors.cache.GridCacheMvcc; import org.apache.ignite.internal.processors.cache.GridCacheMvccCandidate; import org.apache.ignite.internal.processors.cache.KeyCacheObject; +import org.apache.ignite.internal.util.ThreadResolver; import org.apache.ignite.internal.processors.cache.transactions.IgniteInternalTx; import org.apache.ignite.internal.processors.cache.version.GridCacheVersion; import org.apache.ignite.internal.util.typedef.internal.S; @@ -261,7 +262,7 @@ public void recheck() { * Releases local lock. */ void releaseLocal() { - releaseLocal(Thread.currentThread().getId()); + releaseLocal(ThreadResolver.threadId()); } /** diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/GridLocalLockFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/GridLocalLockFuture.java index c1bd8583feb83..05d2f5e075ba7 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/GridLocalLockFuture.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/GridLocalLockFuture.java @@ -36,6 +36,7 @@ import org.apache.ignite.internal.processors.cache.GridCacheMvccCandidate; import org.apache.ignite.internal.processors.cache.GridCacheVersionedFuture; import org.apache.ignite.internal.processors.cache.KeyCacheObject; +import org.apache.ignite.internal.util.ThreadResolver; import org.apache.ignite.internal.processors.cache.distributed.near.GridNearTxLocal; import org.apache.ignite.internal.processors.cache.transactions.IgniteTxKey; import org.apache.ignite.internal.processors.cache.transactions.IgniteTxLocalEx; @@ -145,7 +146,7 @@ public final class GridLocalLockFuture extends GridCacheFutureAdapter CHECKPOINT_LOCK_HOLD_COUNT = new ThreadLocal() { + private static final ThreadLocal CHECKPOINT_LOCK_HOLD_COUNT = new ThreadLocalExtra() { @Override protected Integer initialValue() { return 0; } @@ -464,7 +465,7 @@ private DataRegionConfiguration createMetastoreDataRegionConfig(DataStorageConfi @Override protected void start0() throws IgniteCheckedException { super.start0(); - threadBuf = new ThreadLocal() { + threadBuf = new ThreadLocalExtra() { /** {@inheritDoc} */ @Override protected ByteBuffer initialValue() { ByteBuffer tmpWriteBuf = ByteBuffer.allocateDirect(pageSize()); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/RecoveryDebug.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/RecoveryDebug.java index 54017b4ce1919..6dd540eb850e5 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/RecoveryDebug.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/RecoveryDebug.java @@ -31,6 +31,7 @@ import org.apache.ignite.internal.pagemem.wal.record.DataEntry; import org.apache.ignite.internal.pagemem.wal.record.DataRecord; import org.apache.ignite.internal.pagemem.wal.record.TxRecord; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.processors.cache.version.GridCacheVersion; import org.apache.ignite.internal.util.typedef.internal.U; import org.jetbrains.annotations.Nullable; @@ -44,7 +45,7 @@ */ public class RecoveryDebug implements AutoCloseable { /** */ - private static final ThreadLocal sdf = new ThreadLocal() { + private static final ThreadLocal sdf = new ThreadLocalExtra() { /** {@inheritDoc} */ @Override protected SimpleDateFormat initialValue() { SimpleDateFormat f = new SimpleDateFormat("dd-MM-yyyy-HH-mm-ss-SSS"); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/file/AsyncFileIOFactory.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/file/AsyncFileIOFactory.java index e0c545b8a87c0..f6cfdac2f5e4a 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/file/AsyncFileIOFactory.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/file/AsyncFileIOFactory.java @@ -21,6 +21,7 @@ import java.io.IOException; import java.nio.channels.AsynchronousFileChannel; import java.nio.file.OpenOption; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; /** * File I/O factory which uses {@link AsynchronousFileChannel} based implementation of FileIO. @@ -48,7 +49,7 @@ public class AsyncFileIOFactory implements FileIOFactory { * Initializes thread local channel future holder. */ private ThreadLocal initHolder() { - return new ThreadLocal() { + return new ThreadLocalExtra() { @Override protected AsyncFileIO.ChannelOpFuture initialValue() { return new AsyncFileIO.ChannelOpFuture(); } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/DelayedPageReplacementTracker.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/DelayedPageReplacementTracker.java index aa1b06161c042..4977f1c363658 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/DelayedPageReplacementTracker.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/DelayedPageReplacementTracker.java @@ -26,6 +26,8 @@ import org.apache.ignite.IgniteInterruptedException; import org.apache.ignite.IgniteLogger; import org.apache.ignite.internal.pagemem.FullPageId; +import org.apache.ignite.internal.util.ThreadResolver; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; /** * Delayed page writes tracker. Provides delayed write implementations and allows to check if page is actually being @@ -46,7 +48,7 @@ public class DelayedPageReplacementTracker { /** Byte buffer thread local. */ private final ThreadLocal byteBufThreadLoc - = new ThreadLocal() { + = new ThreadLocalExtra() { @Override protected ByteBuffer initialValue() { ByteBuffer buf = ByteBuffer.allocateDirect(pageSize); @@ -84,7 +86,7 @@ public DelayedPageReplacementTracker(int pageSize, ReplacedPageWriter flushDirty * @return delayed page write implementation, finish method to be called to actually write page. */ public DelayedDirtyPageWrite delayedPageWrite() { - return delayedPageWriteThreadLocMap.computeIfAbsent(Thread.currentThread().getId(), + return delayedPageWriteThreadLocMap.computeIfAbsent(ThreadResolver.threadId(), id -> new DelayedDirtyPageWrite(flushDirtyPage, byteBufThreadLoc, pageSize, this)); } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/PagesWriteSpeedBasedThrottle.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/PagesWriteSpeedBasedThrottle.java index 2dd81275d108e..91e3b59152918 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/PagesWriteSpeedBasedThrottle.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/PagesWriteSpeedBasedThrottle.java @@ -21,6 +21,7 @@ import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.locks.LockSupport; import org.apache.ignite.IgniteLogger; +import org.apache.ignite.internal.util.ThreadResolver; import org.apache.ignite.internal.processors.cache.persistence.CheckpointLockStateChecker; import org.apache.ignite.internal.processors.cache.persistence.CheckpointWriteProgressSupplier; import org.apache.ignite.internal.util.GridConcurrentHashSet; @@ -153,7 +154,7 @@ public PagesWriteSpeedBasedThrottle( long curCpWriteSpeed = speedCpWrite.getSpeedOpsPerSec(curNanoTime); - threadIds.add(Thread.currentThread().getId()); + threadIds.add(ThreadResolver.threadId()); ThrottleMode level = ThrottleMode.NO; //should apply delay (throttling) for current page modification diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/FileWriteAheadLogManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/FileWriteAheadLogManager.java index fbc4f6c5e059a..74afd89d7a459 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/FileWriteAheadLogManager.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/FileWriteAheadLogManager.java @@ -90,6 +90,7 @@ import org.apache.ignite.internal.processors.cache.GridCacheSharedContext; import org.apache.ignite.internal.processors.cache.GridCacheSharedManagerAdapter; import org.apache.ignite.internal.processors.cache.WalStateManager.WALDisableContext; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.processors.cache.persistence.DataStorageMetricsImpl; import org.apache.ignite.internal.processors.cache.persistence.GridCacheDatabaseSharedManager; import org.apache.ignite.internal.processors.cache.persistence.StorageException; @@ -345,7 +346,7 @@ public class FileWriteAheadLogManager extends GridCacheSharedManagerAdapter impl private volatile FileDecompressor decompressor; /** */ - private final ThreadLocal lastWALPtr = new ThreadLocal<>(); + private final ThreadLocal lastWALPtr = new ThreadLocalExtra<>(); /** Current log segment handle */ private volatile FileWriteHandle currHnd; diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/FsyncModeFileWriteAheadLogManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/FsyncModeFileWriteAheadLogManager.java index c9919f57e5498..d4d19401db6d8 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/FsyncModeFileWriteAheadLogManager.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/FsyncModeFileWriteAheadLogManager.java @@ -85,6 +85,7 @@ import org.apache.ignite.internal.processors.cache.GridCacheSharedContext; import org.apache.ignite.internal.processors.cache.GridCacheSharedManagerAdapter; import org.apache.ignite.internal.processors.cache.WalStateManager.WALDisableContext; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.processors.cache.persistence.DataStorageMetricsImpl; import org.apache.ignite.internal.processors.cache.persistence.GridCacheDatabaseSharedManager; import org.apache.ignite.internal.processors.cache.persistence.StorageException; @@ -279,7 +280,7 @@ public class FsyncModeFileWriteAheadLogManager extends GridCacheSharedManagerAda * Introduced to decrease number of buffers allocation. * Used only for record itself is shorter than {@link #tlbSize}. */ - private final ThreadLocal tlb = new ThreadLocal() { + private final ThreadLocal tlb = new ThreadLocalExtra() { @Override protected ByteBuffer initialValue() { ByteBuffer buf = ByteBuffer.allocateDirect(tlbSize); @@ -299,7 +300,7 @@ public class FsyncModeFileWriteAheadLogManager extends GridCacheSharedManagerAda private volatile FileDecompressor decompressor; /** */ - private final ThreadLocal lastWALPtr = new ThreadLocal<>(); + private final ThreadLocal lastWALPtr = new ThreadLocalExtra<>(); /** Current log segment handle */ private volatile FileWriteHandle currentHnd; diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/crc/FastCrc.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/crc/FastCrc.java index 0dcbafdb9c978..27285169f09e9 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/crc/FastCrc.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/crc/FastCrc.java @@ -19,13 +19,14 @@ import java.nio.ByteBuffer; import java.util.zip.CRC32; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; /** * This CRC calculation implementation workf much faster then {@link PureJavaCrc32} */ public final class FastCrc { /** CRC algo. */ - private static final ThreadLocal CRC = ThreadLocal.withInitial(CRC32::new); + private static final ThreadLocal CRC = ThreadLocalExtra.withInitial(CRC32::new); /** */ private final CRC32 crc = new CRC32(); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/serializer/RecordV1Serializer.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/serializer/RecordV1Serializer.java index ee5a1e269d534..849af7486fd74 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/serializer/RecordV1Serializer.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/serializer/RecordV1Serializer.java @@ -22,7 +22,6 @@ import java.io.IOException; import java.nio.ByteBuffer; import java.nio.ByteOrder; - import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.IgniteSystemProperties; import org.apache.ignite.internal.pagemem.wal.WALPointer; @@ -30,17 +29,18 @@ import org.apache.ignite.internal.pagemem.wal.record.MarshalledRecord; import org.apache.ignite.internal.pagemem.wal.record.WALRecord; import org.apache.ignite.internal.pagemem.wal.record.WALRecord.RecordType; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.processors.cache.persistence.tree.io.CacheVersionIO; import org.apache.ignite.internal.processors.cache.persistence.wal.ByteBufferBackedDataInput; import org.apache.ignite.internal.processors.cache.persistence.wal.ByteBufferExpander; +import org.apache.ignite.internal.processors.cache.persistence.wal.FileWALPointer; +import org.apache.ignite.internal.processors.cache.persistence.wal.SegmentEofException; +import org.apache.ignite.internal.processors.cache.persistence.wal.WalSegmentTailReachedException; import org.apache.ignite.internal.processors.cache.persistence.wal.crc.FastCrc; import org.apache.ignite.internal.processors.cache.persistence.wal.io.FileInput; import org.apache.ignite.internal.processors.cache.persistence.wal.io.SegmentFileInputFactory; -import org.apache.ignite.internal.processors.cache.persistence.wal.FileWALPointer; -import org.apache.ignite.internal.processors.cache.persistence.wal.SegmentEofException; import org.apache.ignite.internal.processors.cache.persistence.wal.io.SegmentIO; import org.apache.ignite.internal.processors.cache.persistence.wal.io.SimpleFileInput; -import org.apache.ignite.internal.processors.cache.persistence.wal.WalSegmentTailReachedException; import org.apache.ignite.internal.processors.cache.persistence.wal.record.HeaderRecord; import org.apache.ignite.internal.processors.cache.persistence.wal.serializer.io.RecordIO; import org.apache.ignite.internal.processors.cache.version.GridCacheVersion; @@ -100,7 +100,7 @@ public class RecordV1Serializer implements RecordSerializer { private final boolean marshalledMode; /** Thread-local heap byte buffer. */ - private final ThreadLocal heapTlb = new ThreadLocal() { + private final ThreadLocal heapTlb = new ThreadLocalExtra() { @Override protected ByteBuffer initialValue() { ByteBuffer buf = ByteBuffer.allocate(4096); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/serializer/RecordV2Serializer.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/serializer/RecordV2Serializer.java index d27a331141e32..b3eaa8a914552 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/serializer/RecordV2Serializer.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/serializer/RecordV2Serializer.java @@ -27,6 +27,7 @@ import org.apache.ignite.internal.pagemem.wal.record.FilteredRecord; import org.apache.ignite.internal.pagemem.wal.record.MarshalledRecord; import org.apache.ignite.internal.pagemem.wal.record.WALRecord; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.processors.cache.persistence.wal.ByteBufferBackedDataInput; import org.apache.ignite.internal.processors.cache.persistence.wal.io.FileInput; import org.apache.ignite.internal.processors.cache.persistence.wal.FileWALPointer; @@ -73,7 +74,7 @@ public class RecordV2Serializer implements RecordSerializer { private final boolean skipPositionCheck; /** Thread-local heap byte buffer. */ - private final ThreadLocal heapTlb = new ThreadLocal() { + private final ThreadLocal heapTlb = new ThreadLocalExtra() { @Override protected ByteBuffer initialValue() { ByteBuffer buf = ByteBuffer.allocate(4096); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/store/GridCacheStoreManagerAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/store/GridCacheStoreManagerAdapter.java index 2f7b02bb7acdb..b746ecf5d1eea 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/store/GridCacheStoreManagerAdapter.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/store/GridCacheStoreManagerAdapter.java @@ -46,6 +46,7 @@ import org.apache.ignite.internal.processors.cache.GridCacheInternal; import org.apache.ignite.internal.processors.cache.GridCacheManagerAdapter; import org.apache.ignite.internal.processors.cache.KeyCacheObject; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.processors.cache.transactions.IgniteInternalTx; import org.apache.ignite.internal.processors.cache.version.GridCacheVersion; import org.apache.ignite.internal.util.GridEmptyIterator; @@ -140,7 +141,7 @@ public abstract class GridCacheStoreManagerAdapter extends GridCacheManagerAdapt sesHolder0 = ((Map)sesHolders).get(cfgStore); if (sesHolder0 == null) { - sesHolder0 = new ThreadLocal<>(); + sesHolder0 = new ThreadLocalExtra<>(); locSes = new ThreadLocalSession(sesHolder0); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxAdapter.java index 8d2d50b3fd8f5..93a3fece786b9 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxAdapter.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxAdapter.java @@ -63,6 +63,7 @@ import org.apache.ignite.internal.processors.cache.GridCacheReturn; import org.apache.ignite.internal.processors.cache.GridCacheSharedContext; import org.apache.ignite.internal.processors.cache.KeyCacheObject; +import org.apache.ignite.internal.util.ThreadResolver; import org.apache.ignite.internal.processors.cache.distributed.dht.topology.GridDhtLocalPartition; import org.apache.ignite.internal.processors.cache.distributed.dht.topology.GridDhtPartitionTopology; import org.apache.ignite.internal.processors.cache.distributed.near.GridNearCacheEntry; @@ -343,7 +344,7 @@ protected IgniteTxAdapter( nodeId = cctx.discovery().localNode().id(); - threadId = Thread.currentThread().getId(); + threadId = ThreadResolver.threadId(); if (log == null) log = U.logger(cctx.kernalContext(), logRef, this); @@ -524,7 +525,7 @@ protected void uncommit() { if (res == null || res.equals(AffinityTopologyVersion.NONE)) { if (system()) { - AffinityTopologyVersion topVer = cctx.tm().lockedTopologyVersion(Thread.currentThread().getId(), this); + AffinityTopologyVersion topVer = cctx.tm().lockedTopologyVersion(ThreadResolver.threadId(), this); if (topVer != null) return topVer; diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxManager.java index bb4ad5dd38d56..8bfea2d6f667b 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxManager.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxManager.java @@ -62,6 +62,8 @@ import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTxLocal; import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTxOnePhaseCommitAckRequest; import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTxRemote; +import org.apache.ignite.internal.util.ThreadResolver; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.processors.cache.distributed.dht.colocated.GridDhtColocatedLockFuture; import org.apache.ignite.internal.processors.cache.distributed.dht.topology.GridDhtInvalidPartitionException; import org.apache.ignite.internal.processors.cache.distributed.near.GridNearCacheAdapter; @@ -151,10 +153,10 @@ public class IgniteTxManager extends GridCacheSharedManagerAdapter { IgniteSystemProperties.getInteger(IGNITE_TX_DEADLOCK_DETECTION_MAX_ITERS, 1000); /** Committing transactions. */ - private final ThreadLocal threadCtx = new ThreadLocal<>(); + private final ThreadLocal threadCtx = new ThreadLocalExtra<>(); /** Topology version should be used when mapping internal tx. */ - private final ThreadLocal txTop = new ThreadLocal<>(); + private final ThreadLocal txTop = new ThreadLocalExtra<>(); /** Per-thread transaction map. */ private final ConcurrentMap threadMap = newMap(); @@ -508,7 +510,7 @@ public GridNearTxLocal newTx( lb); if (tx.system()) { - AffinityTopologyVersion topVer = cctx.tm().lockedTopologyVersion(Thread.currentThread().getId(), tx); + AffinityTopologyVersion topVer = cctx.tm().lockedTopologyVersion(ThreadResolver.threadId(), tx); // If there is another system transaction in progress, use it's topology version to prevent deadlock. if (topVer != null) @@ -719,7 +721,7 @@ public void addAlternateVersion(GridCacheVersion ver, IgniteInternalTx tx) { * @return Transaction for current thread. */ public GridNearTxLocal threadLocalTx(GridCacheContext cctx) { - IgniteInternalTx tx = tx(cctx, Thread.currentThread().getId()); + IgniteInternalTx tx = tx(cctx, ThreadResolver.threadId()); if (tx != null && tx.local() && (!tx.dht() || tx.colocated()) && !tx.implicit()) { assert tx instanceof GridNearTxLocal : tx; @@ -737,7 +739,7 @@ public GridNearTxLocal threadLocalTx(GridCacheContext cctx) { public T tx() { IgniteInternalTx tx = txContext(); - return tx != null ? (T)tx : (T)tx(null, Thread.currentThread().getId()); + return tx != null ? (T)tx : (T)tx(null, ThreadResolver.threadId()); } /** @@ -801,7 +803,7 @@ public boolean setTxTopologyHint(@Nullable AffinityTopologyVersion topVer) { if (activeUserTx(tx)) return (GridNearTxLocal)tx; - tx = tx(null, Thread.currentThread().getId()); + tx = tx(null, ThreadResolver.threadId()); if (activeUserTx(tx)) return (GridNearTxLocal)tx; @@ -814,7 +816,7 @@ public boolean setTxTopologyHint(@Nullable AffinityTopologyVersion topVer) { * @return User transaction for current thread. */ @Nullable GridNearTxLocal userTx(GridCacheContext cctx) { - IgniteInternalTx tx = tx(cctx, Thread.currentThread().getId()); + IgniteInternalTx tx = tx(cctx, ThreadResolver.threadId()); if (activeUserTx(tx)) return (GridNearTxLocal)tx; @@ -2381,7 +2383,7 @@ public void resumeTx(GridNearTxLocal tx, long threadId) throws IgniteCheckedExce assert !threadMap.containsValue(tx) : tx; assert !transactionMap(tx).containsValue(tx) : tx; - assert !haveSystemTxForThread(Thread.currentThread().getId()); + assert !haveSystemTxForThread(ThreadResolver.threadId()); if (threadMap.putIfAbsent(threadId, tx) != null) throw new IgniteCheckedException("Thread already has started a transaction."); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/datastreamer/DataStreamerImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/datastreamer/DataStreamerImpl.java index 4253fb28a3317..4790aa6427e70 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/datastreamer/DataStreamerImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/datastreamer/DataStreamerImpl.java @@ -86,6 +86,7 @@ import org.apache.ignite.internal.processors.cache.IgniteCacheProxy; import org.apache.ignite.internal.processors.cache.KeyCacheObject; import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTopologyFuture; +import org.apache.ignite.internal.util.ThreadResolver; import org.apache.ignite.internal.processors.cache.distributed.dht.topology.GridDhtInvalidPartitionException; import org.apache.ignite.internal.processors.cache.distributed.dht.topology.GridDhtLocalPartition; import org.apache.ignite.internal.processors.cache.distributed.dht.topology.GridDhtPartitionState; @@ -643,7 +644,7 @@ public IgniteFuture addDataInternal(Collection e lock(false); try { - long threadId = Thread.currentThread().getId(); + long threadId = ThreadResolver.threadId(); if (useThreadBuffer) { ThreadBuffer threadBuf = threadBufMap.get(threadId); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheAtomicLongImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheAtomicLongImpl.java index 822989ec7c73a..dacbcb9f88045 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheAtomicLongImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheAtomicLongImpl.java @@ -31,9 +31,10 @@ import org.apache.ignite.cache.CacheEntryProcessor; import org.apache.ignite.internal.GridKernalContext; import org.apache.ignite.internal.processors.cache.IgniteInternalCache; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; +import org.apache.ignite.internal.processors.cluster.IgniteChangeGlobalStateSupport; import org.apache.ignite.internal.util.typedef.internal.S; import org.apache.ignite.internal.util.typedef.internal.U; -import org.apache.ignite.internal.processors.cluster.IgniteChangeGlobalStateSupport; import org.apache.ignite.lang.IgniteBiTuple; /** @@ -46,7 +47,7 @@ public final class GridCacheAtomicLongImpl extends AtomicDataStructureProxy> stash = - new ThreadLocal>() { + new ThreadLocalExtra>() { @Override protected IgniteBiTuple initialValue() { return new IgniteBiTuple<>(); } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheAtomicReferenceImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheAtomicReferenceImpl.java index 0c98ba1c90e07..1f5bbff587185 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheAtomicReferenceImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheAtomicReferenceImpl.java @@ -32,6 +32,7 @@ import org.apache.ignite.cache.CacheEntryProcessor; import org.apache.ignite.internal.GridKernalContext; import org.apache.ignite.internal.processors.cache.IgniteInternalCache; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.processors.cache.distributed.near.GridNearTxLocal; import org.apache.ignite.internal.processors.cluster.IgniteChangeGlobalStateSupport; import org.apache.ignite.internal.util.typedef.F; @@ -52,8 +53,8 @@ public final class GridCacheAtomicReferenceImpl extends AtomicDataStructurePr private static final long serialVersionUID = 0L; /** Deserialization stash. */ - private static final ThreadLocal> stash = - new ThreadLocal>() { + private static final ThreadLocalExtra> stash = + new ThreadLocalExtra>() { @Override protected IgniteBiTuple initialValue() { return new IgniteBiTuple<>(); } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheAtomicSequenceImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheAtomicSequenceImpl.java index be2efa379cb73..de05884907b62 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheAtomicSequenceImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheAtomicSequenceImpl.java @@ -32,14 +32,15 @@ import org.apache.ignite.internal.cluster.ClusterTopologyCheckedException; import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion; import org.apache.ignite.internal.processors.cache.IgniteInternalCache; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.processors.cache.distributed.near.GridNearTxLocal; +import org.apache.ignite.internal.processors.cluster.IgniteChangeGlobalStateSupport; import org.apache.ignite.internal.util.tostring.GridToStringInclude; import org.apache.ignite.internal.util.typedef.X; import org.apache.ignite.internal.util.typedef.internal.A; import org.apache.ignite.internal.util.typedef.internal.CU; import org.apache.ignite.internal.util.typedef.internal.S; import org.apache.ignite.internal.util.typedef.internal.U; -import org.apache.ignite.internal.processors.cluster.IgniteChangeGlobalStateSupport; import org.apache.ignite.lang.IgniteBiTuple; import org.jetbrains.annotations.Nullable; @@ -56,7 +57,7 @@ public final class GridCacheAtomicSequenceImpl extends AtomicDataStructureProxy< /** De-serialization stash. */ private static final ThreadLocal> stash = - new ThreadLocal>() { + new ThreadLocalExtra>() { @Override protected IgniteBiTuple initialValue() { return new IgniteBiTuple<>(); } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheAtomicStampedImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheAtomicStampedImpl.java index c19391881072f..69860d118349a 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheAtomicStampedImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheAtomicStampedImpl.java @@ -32,6 +32,7 @@ import org.apache.ignite.cache.CacheEntryProcessor; import org.apache.ignite.internal.GridKernalContext; import org.apache.ignite.internal.processors.cache.IgniteInternalCache; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.processors.cache.distributed.near.GridNearTxLocal; import org.apache.ignite.internal.processors.cluster.IgniteChangeGlobalStateSupport; import org.apache.ignite.internal.util.tostring.GridToStringBuilder; @@ -53,7 +54,7 @@ public final class GridCacheAtomicStampedImpl extends AtomicDataStructureP /** Deserialization stash. */ private static final ThreadLocal> stash = - new ThreadLocal>() { + new ThreadLocalExtra>() { @Override protected IgniteBiTuple initialValue() { return new IgniteBiTuple<>(); } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheCountDownLatchImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheCountDownLatchImpl.java index 7662acfddcb09..af6d40144dceb 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheCountDownLatchImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheCountDownLatchImpl.java @@ -30,12 +30,13 @@ import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.internal.GridKernalContext; import org.apache.ignite.internal.processors.cache.IgniteInternalCache; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.processors.cache.distributed.near.GridNearTxLocal; +import org.apache.ignite.internal.processors.cluster.IgniteChangeGlobalStateSupport; import org.apache.ignite.internal.util.typedef.internal.A; import org.apache.ignite.internal.util.typedef.internal.CU; import org.apache.ignite.internal.util.typedef.internal.S; import org.apache.ignite.internal.util.typedef.internal.U; -import org.apache.ignite.internal.processors.cluster.IgniteChangeGlobalStateSupport; import org.apache.ignite.lang.IgniteBiTuple; import static org.apache.ignite.internal.util.typedef.internal.CU.retryTopologySafe; @@ -61,7 +62,7 @@ public final class GridCacheCountDownLatchImpl extends AtomicDataStructureProxy< /** Deserialization stash. */ private static final ThreadLocal> stash = - new ThreadLocal>() { + new ThreadLocalExtra>() { @Override protected IgniteBiTuple initialValue() { return new IgniteBiTuple<>(); } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheLockImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheLockImpl.java index 0a59e1f083d20..a04fb81bb3dcd 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheLockImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheLockImpl.java @@ -47,6 +47,8 @@ import org.apache.ignite.IgniteLock; import org.apache.ignite.internal.IgnitionEx; import org.apache.ignite.internal.processors.cache.IgniteInternalCache; +import org.apache.ignite.internal.util.ThreadResolver; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.processors.cache.distributed.near.GridNearTxLocal; import org.apache.ignite.internal.util.typedef.X; import org.apache.ignite.internal.util.typedef.internal.CU; @@ -70,7 +72,7 @@ public final class GridCacheLockImpl extends AtomicDataStructureProxy stash = new ThreadLocal<>(); + private static final ThreadLocal stash = new ThreadLocalExtra<>(); /** Initialization guard. */ private final AtomicBoolean initGuard = new AtomicBoolean(); @@ -219,7 +221,7 @@ private synchronized void interruptAll() { setCurrentOwnerNode(thisNode); - currentOwnerThreadId = Thread.currentThread().getId(); + currentOwnerThreadId = ThreadResolver.threadId(); for (Condition c : conditionMap.values()) c.signalAll(); @@ -440,7 +442,7 @@ final void lock() { if (!isHeldExclusively()) { log.error("Lock.unlock() is called in illegal state [callerNodeId=" + thisNode + ", ownerNodeId=" - + currentOwnerNode + ", callerThreadId=" + Thread.currentThread().getId() + ", ownerThreadId=" + + currentOwnerNode + ", callerThreadId=" + ThreadResolver.threadId() + ", ownerThreadId=" + currentOwnerThreadId + ", lockState=" + getState() + "]"); throw new IllegalMonitorStateException(); @@ -468,7 +470,7 @@ final void lock() { // While we must in general read state before owner, // we don't need to do so to check if current thread is owner - return currentOwnerThreadId == Thread.currentThread().getId() && thisNode.equals(currentOwnerNode); + return currentOwnerThreadId == ThreadResolver.threadId() && thisNode.equals(currentOwnerNode); } /** @@ -829,7 +831,7 @@ synchronized boolean checkIncomingSignals(GridCacheLockState state) { setExclusiveOwnerThread(Thread.currentThread()); - currentOwnerThreadId = Thread.currentThread().getId(); + currentOwnerThreadId = ThreadResolver.threadId(); for (String signal: signals) conditionMap.get(signal).signal(); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheQueueProxy.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheQueueProxy.java index 627f8ec458d12..a290d40ebf339 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheQueueProxy.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheQueueProxy.java @@ -31,6 +31,7 @@ import org.apache.ignite.internal.GridKernalContext; import org.apache.ignite.internal.processors.cache.GridCacheContext; import org.apache.ignite.internal.processors.cache.GridCacheGateway; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.util.typedef.T3; import org.apache.ignite.internal.util.typedef.internal.U; import org.apache.ignite.lang.IgniteCallable; @@ -46,7 +47,7 @@ public class GridCacheQueueProxy implements IgniteQueue, Externalizable { /** Deserialization stash. */ private static final ThreadLocal> stash = - new ThreadLocal>() { + new ThreadLocalExtra>() { @Override protected T3 initialValue() { return new T3<>(); } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheSemaphoreImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheSemaphoreImpl.java index b7e20c418933c..969c3d4426b89 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheSemaphoreImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheSemaphoreImpl.java @@ -38,12 +38,13 @@ import org.apache.ignite.internal.IgniteInterruptedCheckedException; import org.apache.ignite.internal.IgnitionEx; import org.apache.ignite.internal.processors.cache.IgniteInternalCache; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.processors.cache.distributed.near.GridNearTxLocal; +import org.apache.ignite.internal.processors.cluster.IgniteChangeGlobalStateSupport; import org.apache.ignite.internal.util.typedef.internal.A; import org.apache.ignite.internal.util.typedef.internal.CU; import org.apache.ignite.internal.util.typedef.internal.S; import org.apache.ignite.internal.util.typedef.internal.U; -import org.apache.ignite.internal.processors.cluster.IgniteChangeGlobalStateSupport; import org.apache.ignite.lang.IgniteBiTuple; import static org.apache.ignite.internal.processors.cache.GridCacheUtils.retryTopologySafe; @@ -64,7 +65,7 @@ public final class GridCacheSemaphoreImpl extends AtomicDataStructureProxy> stash = - new ThreadLocal>() { + new ThreadLocalExtra>() { @Override protected IgniteBiTuple initialValue() { return new IgniteBiTuple<>(); } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheSetProxy.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheSetProxy.java index 729f6ebdb6c4e..ff15edd27a8aa 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheSetProxy.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheSetProxy.java @@ -31,6 +31,7 @@ import org.apache.ignite.internal.IgniteInternalFuture; import org.apache.ignite.internal.processors.cache.GridCacheContext; import org.apache.ignite.internal.processors.cache.GridCacheGateway; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.util.GridSpinBusyLock; import org.apache.ignite.internal.util.future.GridFutureAdapter; import org.apache.ignite.internal.util.future.IgniteFutureImpl; @@ -50,7 +51,7 @@ public class GridCacheSetProxy implements IgniteSet, Externalizable { /** Deserialization stash. */ private static final ThreadLocal> stash = - new ThreadLocal>() { + new ThreadLocalExtra>() { @Override protected T3 initialValue() { return new T3<>(); } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/job/GridJobProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/job/GridJobProcessor.java index 7cad8930ab4c4..50fe28ca68ebe 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/job/GridJobProcessor.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/job/GridJobProcessor.java @@ -66,8 +66,9 @@ import org.apache.ignite.internal.processors.GridProcessorAdapter; import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion; import org.apache.ignite.internal.processors.cache.GridCacheContext; -import org.apache.ignite.internal.processors.cache.distributed.dht.topology.GridDhtLocalPartition; import org.apache.ignite.internal.processors.cache.distributed.dht.GridReservable; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; +import org.apache.ignite.internal.processors.cache.distributed.dht.topology.GridDhtLocalPartition; import org.apache.ignite.internal.processors.jobmetrics.GridJobMetricsSnapshot; import org.apache.ignite.internal.util.GridAtomicLong; import org.apache.ignite.internal.util.GridBoundedConcurrentLinkedHashMap; @@ -195,21 +196,21 @@ public class GridJobProcessor extends GridProcessorAdapter { private final GridJobHoldListener holdLsnr = new JobHoldListener(); /** */ - private final ThreadLocal handlingCollision = new ThreadLocal() { + private final ThreadLocal handlingCollision = new ThreadLocalExtra() { @Override protected Boolean initialValue() { return false; } }; /** Internal task flag. */ - private final ThreadLocal internal = new ThreadLocal() { + private final ThreadLocal internal = new ThreadLocalExtra() { @Override protected Boolean initialValue() { return false; } }; /** Current session. */ - private final ThreadLocal currSess = new ThreadLocal<>(); + private final ThreadLocal currSess = new ThreadLocalExtra<>(); /** * @param ctx Kernal context. diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/job/GridJobWorker.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/job/GridJobWorker.java index f7c07f516f413..32bab8dc1f3aa 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/job/GridJobWorker.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/job/GridJobWorker.java @@ -49,6 +49,7 @@ import org.apache.ignite.internal.managers.deployment.GridDeployment; import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion; import org.apache.ignite.internal.processors.cache.distributed.dht.GridReservable; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.processors.query.GridQueryProcessor; import org.apache.ignite.internal.processors.service.GridServiceNotFoundException; import org.apache.ignite.internal.processors.task.GridInternal; @@ -83,7 +84,7 @@ */ public class GridJobWorker extends GridWorker implements GridTimeoutObject { /** Per-thread held flag. */ - private static final ThreadLocal HOLD = new ThreadLocal() { + private static final ThreadLocal HOLD = new ThreadLocalExtra() { @Override protected Boolean initialValue() { return false; } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/cache/affinity/PlatformAffinityFunctionTarget.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/cache/affinity/PlatformAffinityFunctionTarget.java index 342e726f51e31..816287864cd5d 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/cache/affinity/PlatformAffinityFunctionTarget.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/cache/affinity/PlatformAffinityFunctionTarget.java @@ -17,6 +17,7 @@ package org.apache.ignite.internal.processors.platform.cache.affinity; +import java.util.List; import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.IgniteException; import org.apache.ignite.cache.affinity.AffinityFunction; @@ -24,12 +25,11 @@ import org.apache.ignite.cluster.ClusterNode; import org.apache.ignite.internal.binary.BinaryRawReaderEx; import org.apache.ignite.internal.binary.BinaryRawWriterEx; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.processors.platform.PlatformAbstractTarget; import org.apache.ignite.internal.processors.platform.PlatformContext; import org.apache.ignite.internal.util.typedef.internal.U; -import java.util.List; - /** * Platform affinity function target: * to be invoked when Platform function calls base implementation of one of the AffinityFunction methods. @@ -48,7 +48,7 @@ public class PlatformAffinityFunctionTarget extends PlatformAbstractTarget { private final AffinityFunction baseFunc; /** Thread local to hold the current affinity function context. */ - private static final ThreadLocal currentAffCtx = new ThreadLocal<>(); + private static final ThreadLocal currentAffCtx = new ThreadLocalExtra<>(); /** * Constructor. diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/memory/PlatformMemoryManagerImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/memory/PlatformMemoryManagerImpl.java index 036e5c027d073..0b42af4ebe0fa 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/memory/PlatformMemoryManagerImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/memory/PlatformMemoryManagerImpl.java @@ -17,6 +17,7 @@ package org.apache.ignite.internal.processors.platform.memory; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.processors.platform.callback.PlatformCallbackGateway; import org.jetbrains.annotations.Nullable; @@ -35,7 +36,7 @@ public class PlatformMemoryManagerImpl implements PlatformMemoryManager { private final int dfltCap; /** Thread-local pool. */ - private final ThreadLocal threadLocPool = new ThreadLocal<>(); + private final ThreadLocal threadLocPool = new ThreadLocalExtra<>(); /** * Constructor. diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java index 7650fcea22e38..f26d10391f921 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java @@ -66,6 +66,7 @@ import org.apache.ignite.internal.processors.cache.GridCacheAdapter; import org.apache.ignite.internal.processors.cache.GridCacheContext; import org.apache.ignite.internal.processors.cache.KeyCacheObject; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.processors.cache.mvcc.MvccSnapshot; import org.apache.ignite.internal.processors.cache.persistence.CacheDataRow; import org.apache.ignite.internal.processors.cache.query.CacheQueryFuture; @@ -131,7 +132,7 @@ public class GridQueryProcessor extends GridProcessorAdapter { private static final int QRY_DETAIL_METRICS_EVICTION_FREQ = 3_000; /** */ - private static final ThreadLocal requestTopVer = new ThreadLocal<>(); + private static final ThreadLocal requestTopVer = new ThreadLocalExtra<>(); /** For tests. */ public static Class idxCls; @@ -193,7 +194,7 @@ public class GridQueryProcessor extends GridProcessorAdapter { private final LinkedList pendingMsgs = new LinkedList<>(); /** Current cache that has a query running on it. */ - private final ThreadLocal curCache = new ThreadLocal<>(); + private final ThreadLocal curCache = new ThreadLocalExtra<>(); /** Disconnected flag. */ private boolean disconnected; diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/security/SecurityContextHolder.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/security/SecurityContextHolder.java index d01071166ea73..3026bdd9dfb4b 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/security/SecurityContextHolder.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/security/SecurityContextHolder.java @@ -17,6 +17,7 @@ package org.apache.ignite.internal.processors.security; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.jetbrains.annotations.Nullable; /** @@ -24,7 +25,7 @@ */ public class SecurityContextHolder { /** Context. */ - private static final ThreadLocal CTX = new ThreadLocal<>(); + private static final ThreadLocal CTX = new ThreadLocalExtra<>(); /** * Get security context. diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/security/SecurityUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/security/SecurityUtils.java index 1cd6719d9fa5c..2fbb988804e57 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/security/SecurityUtils.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/security/SecurityUtils.java @@ -22,6 +22,7 @@ import java.util.HashMap; import java.util.Map; import org.apache.ignite.IgniteSystemProperties; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.lang.IgniteProductVersion; import org.apache.ignite.plugin.security.SecurityPermission; @@ -36,7 +37,7 @@ public class SecurityUtils { private static final int DFLT_SERIALIZE_VERSION = isSecurityCompatibilityMode() ? 1 : 2; /** Current serialization version. */ - private static final ThreadLocal SERIALIZE_VERSION = new ThreadLocal(){ + private static final ThreadLocal SERIALIZE_VERSION = new ThreadLocalExtra(){ @Override protected Integer initialValue() { return DFLT_SERIALIZE_VERSION; } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProcessor.java index 271204cbc4a54..c70333c35a4ea 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProcessor.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProcessor.java @@ -69,6 +69,7 @@ import org.apache.ignite.internal.processors.cache.IgniteInternalCache; import org.apache.ignite.internal.processors.cache.binary.MetadataUpdateAcceptedMessage; import org.apache.ignite.internal.processors.cache.binary.MetadataUpdateProposedMessage; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.processors.cache.distributed.near.GridNearTxLocal; import org.apache.ignite.internal.processors.cache.query.CacheQuery; import org.apache.ignite.internal.processors.cache.query.GridCacheQueryManager; @@ -164,7 +165,7 @@ public class GridServiceProcessor extends GridProcessorAdapter implements Ignite oomeHnd); /** Thread local for service name. */ - private ThreadLocal svcName = new ThreadLocal<>(); + private ThreadLocal svcName = new ThreadLocalExtra<>(); /** Service cache. */ private volatile IgniteInternalCache serviceCache; diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/task/GridTaskProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/task/GridTaskProcessor.java index 9e0caf94d124e..baee11267e0a0 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/task/GridTaskProcessor.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/task/GridTaskProcessor.java @@ -64,6 +64,7 @@ import org.apache.ignite.internal.managers.eventstorage.GridLocalEventListener; import org.apache.ignite.internal.processors.GridProcessorAdapter; import org.apache.ignite.internal.processors.cache.IgniteInternalCache; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.processors.cluster.IgniteChangeGlobalStateSupport; import org.apache.ignite.internal.util.GridConcurrentFactory; import org.apache.ignite.internal.util.GridSpinReadWriteLock; @@ -81,10 +82,10 @@ import org.apache.ignite.plugin.security.SecurityPermission; import org.jetbrains.annotations.Nullable; +import static org.apache.ignite.events.EventType.EVT_MANAGEMENT_TASK_STARTED; import static org.apache.ignite.events.EventType.EVT_NODE_FAILED; import static org.apache.ignite.events.EventType.EVT_NODE_LEFT; import static org.apache.ignite.events.EventType.EVT_TASK_SESSION_ATTR_SET; -import static org.apache.ignite.events.EventType.EVT_MANAGEMENT_TASK_STARTED; import static org.apache.ignite.internal.GridTopic.TOPIC_JOB_SIBLINGS; import static org.apache.ignite.internal.GridTopic.TOPIC_TASK; import static org.apache.ignite.internal.GridTopic.TOPIC_TASK_CANCEL; @@ -126,7 +127,7 @@ public class GridTaskProcessor extends GridProcessorAdapter implements IgniteCha private final LongAdder execTasks = new LongAdder(); /** */ - private final ThreadLocal> thCtx = new ThreadLocal<>(); + private final ThreadLocal> thCtx = new ThreadLocalExtra<>(); /** */ private final GridSpinReadWriteLock lock = new GridSpinReadWriteLock(); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/GridSpinReadWriteLock.java b/modules/core/src/main/java/org/apache/ignite/internal/util/GridSpinReadWriteLock.java index 37fb54edfc841..56780e012304f 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/util/GridSpinReadWriteLock.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/util/GridSpinReadWriteLock.java @@ -18,6 +18,7 @@ package org.apache.ignite.internal.util; import java.util.concurrent.TimeUnit; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.util.tostring.GridToStringExclude; import org.apache.ignite.internal.util.typedef.internal.S; import org.apache.ignite.internal.util.typedef.internal.U; @@ -49,7 +50,7 @@ public class GridSpinReadWriteLock { } /** */ - private final ThreadLocal readLockEntryCnt = new ThreadLocal() { + private final ThreadLocal readLockEntryCnt = new ThreadLocalExtra() { @Override protected Integer initialValue() { return 0; } @@ -75,7 +76,7 @@ public void readLock() { int cnt = readLockEntryCnt.get(); // Read lock reentry or acquiring read lock while holding write lock. - if (cnt > 0 || Thread.currentThread().getId() == writeLockOwner) { + if (cnt > 0 || ThreadResolver.threadId() == writeLockOwner) { assert state > 0 || state == -1; readLockEntryCnt.set(cnt + 1); @@ -121,7 +122,7 @@ public boolean tryReadLock() { int cnt = readLockEntryCnt.get(); // Read lock reentry or acquiring read lock while holding write lock. - if (cnt > 0 || Thread.currentThread().getId() == writeLockOwner) { + if (cnt > 0 || ThreadResolver.threadId() == writeLockOwner) { assert state > 0 || state == -1; readLockEntryCnt.set(cnt + 1); @@ -153,7 +154,7 @@ public void readUnlock() { throw new IllegalMonitorStateException(); // Read unlock when holding write lock is performed here. - if (cnt > 1 || Thread.currentThread().getId() == writeLockOwner) { + if (cnt > 1 || ThreadResolver.threadId() == writeLockOwner) { assert state > 0 || state == -1; readLockEntryCnt.set(cnt - 1); @@ -179,7 +180,7 @@ public void readUnlock() { */ @SuppressWarnings("BusyWait") public void writeLock() { - long threadId = Thread.currentThread().getId(); + long threadId = ThreadResolver.threadId(); if (threadId == writeLockOwner) { assert state == -1; @@ -231,7 +232,7 @@ public void writeLock() { * Acquires write lock without sleeping between unsuccessful attempts. */ public void writeLock0() { - long threadId = Thread.currentThread().getId(); + long threadId = ThreadResolver.threadId(); if (threadId == writeLockOwner) { assert state == -1; @@ -274,7 +275,7 @@ public void writeLock0() { * @return {@code True} if blocked by current thread. */ public boolean writeLockedByCurrentThread() { - return writeLockOwner == Thread.currentThread().getId(); + return writeLockOwner == ThreadResolver.threadId(); } /** @@ -283,7 +284,7 @@ public boolean writeLockedByCurrentThread() { * @return {@code True} if write lock has been acquired. */ public boolean tryWriteLock() { - long threadId = Thread.currentThread().getId(); + long threadId = ThreadResolver.threadId(); if (threadId == writeLockOwner) { assert state == -1; @@ -313,7 +314,7 @@ public boolean tryWriteLock() { */ @SuppressWarnings("BusyWait") public boolean tryWriteLock(long timeout, TimeUnit unit) throws InterruptedException { - long threadId = Thread.currentThread().getId(); + long threadId = ThreadResolver.threadId(); if (threadId == writeLockOwner) { assert state == -1; @@ -367,7 +368,7 @@ public boolean tryWriteLock(long timeout, TimeUnit unit) throws InterruptedExcep * Releases write lock. */ public void writeUnlock() { - long threadId = Thread.currentThread().getId(); + long threadId = ThreadResolver.threadId(); if (threadId != writeLockOwner) throw new IllegalMonitorStateException(); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/GridStringBuilderFactory.java b/modules/core/src/main/java/org/apache/ignite/internal/util/GridStringBuilderFactory.java index 0f3403a94051f..7c46e689424c5 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/util/GridStringBuilderFactory.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/util/GridStringBuilderFactory.java @@ -17,6 +17,7 @@ package org.apache.ignite.internal.util; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.util.typedef.internal.SB; /** @@ -24,7 +25,7 @@ */ public final class GridStringBuilderFactory { /** Cache string builders per thread for better performance. */ - private static ThreadLocal builders = new ThreadLocal() { + private static ThreadLocal builders = new ThreadLocalExtra() { @Override protected CachedBuilder initialValue() { return new CachedBuilder(); } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/GridStripedSpinBusyLock.java b/modules/core/src/main/java/org/apache/ignite/internal/util/GridStripedSpinBusyLock.java index b8b9017811673..a0c3ebaa15c84 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/util/GridStripedSpinBusyLock.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/util/GridStripedSpinBusyLock.java @@ -19,6 +19,7 @@ import java.util.Random; import java.util.concurrent.atomic.AtomicInteger; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; /** * Striped spin busy lock. Aimed to provide efficient "read" lock semantics while still maintaining safety when @@ -32,7 +33,7 @@ public class GridStripedSpinBusyLock { private static final int DFLT_STRIPE_CNT = Runtime.getRuntime().availableProcessors() * 4; /** Thread index. */ - private static ThreadLocal THREAD_IDX = new ThreadLocal() { + private static ThreadLocal THREAD_IDX = new ThreadLocalExtra() { @Override protected Integer initialValue() { return new Random().nextInt(Integer.MAX_VALUE); } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteExceptionRegistry.java b/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteExceptionRegistry.java index 0ae7b19c2f2a4..a43a54b91f209 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteExceptionRegistry.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteExceptionRegistry.java @@ -79,7 +79,7 @@ public void onException(String msg, Throwable e) { errCnt.incrementAndGet(), e, msg, - Thread.currentThread().getId(), + ThreadResolver.threadId(), Thread.currentThread().getName(), U.currentTimeMillis())); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java index 68219e604eb88..418115bfca205 100755 --- a/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java @@ -205,6 +205,7 @@ import org.apache.ignite.internal.processors.cache.GridCacheAttributes; import org.apache.ignite.internal.processors.cache.GridCacheContext; import org.apache.ignite.internal.processors.cache.GridCacheSharedContext; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.processors.cluster.BaselineTopology; import org.apache.ignite.internal.transactions.IgniteTxHeuristicCheckedException; import org.apache.ignite.internal.transactions.IgniteTxOptimisticCheckedException; @@ -217,6 +218,7 @@ import org.apache.ignite.internal.util.lang.GridClosureException; import org.apache.ignite.internal.util.lang.GridPeerDeployAware; import org.apache.ignite.internal.util.lang.GridTuple; +import org.apache.ignite.internal.util.lang.IgniteThrowableConsumer; import org.apache.ignite.internal.util.typedef.C1; import org.apache.ignite.internal.util.typedef.CI1; import org.apache.ignite.internal.util.typedef.F; @@ -234,7 +236,6 @@ import org.apache.ignite.lang.IgniteOutClosure; import org.apache.ignite.lang.IgnitePredicate; import org.apache.ignite.lang.IgniteProductVersion; -import org.apache.ignite.internal.util.lang.IgniteThrowableConsumer; import org.apache.ignite.lang.IgniteUuid; import org.apache.ignite.lifecycle.LifecycleAware; import org.apache.ignite.marshaller.Marshaller; @@ -538,7 +539,7 @@ public abstract class IgniteUtils { public static final String LOC_IGNITE_NAME_EMPTY = new String(); /** Local Ignite name thread local. */ - private static final ThreadLocal LOC_IGNITE_NAME = new ThreadLocal() { + private static final ThreadLocal LOC_IGNITE_NAME = new ThreadLocalExtra() { @Override protected String initialValue() { return LOC_IGNITE_NAME_EMPTY; } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/StripedCompositeReadWriteLock.java b/modules/core/src/main/java/org/apache/ignite/internal/util/StripedCompositeReadWriteLock.java index 42ec39772ac72..236c07a3129e8 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/util/StripedCompositeReadWriteLock.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/util/StripedCompositeReadWriteLock.java @@ -23,6 +23,7 @@ import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.thread.IgniteThread; import org.jetbrains.annotations.NotNull; @@ -37,7 +38,7 @@ public class StripedCompositeReadWriteLock implements ReadWriteLock { private static final AtomicInteger IDX_GEN = new AtomicInteger(); /** Index. */ - private static final ThreadLocal IDX = new ThreadLocal() { + private static final ThreadLocal IDX = new ThreadLocalExtra() { @Override protected Integer initialValue() { return IDX_GEN.incrementAndGet(); } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/ThreadResolver.java b/modules/core/src/main/java/org/apache/ignite/internal/util/ThreadResolver.java new file mode 100644 index 0000000000000..b543d4528c735 --- /dev/null +++ b/modules/core/src/main/java/org/apache/ignite/internal/util/ThreadResolver.java @@ -0,0 +1,112 @@ +/* + * 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.util; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Supplier; + +/** + * + */ +public class ThreadResolver { + /** */ + private static final ThreadLocalExtra THREAD_ID = ThreadLocalExtra.withInitial(() -> -1L); + + /** + * @param threadId Thread ID. + */ + public static void setThreadId(long threadId) { + THREAD_ID.set(threadId); + } + + /** + * Reset thread ID previous value. + */ + public static void reset() { + THREAD_ID.set(-1L); + } + + /** + * @return Thread ID. + */ + public static long threadId() { + long id = THREAD_ID.get(); + + if (id == -1L) + THREAD_ID.set(id = Thread.currentThread().getId()); + + return id; + } + + /** + * + */ + public static class ThreadLocalExtra extends ThreadLocal { + /** */ + private final Map threadMap = new ConcurrentHashMap<>(); + /** */ + private static final Object NULL_VALUE = new Object(); + + /** {@inheritDoc} */ + @Override protected T initialValue() { + return super.initialValue(); + } + + /** {@inheritDoc} */ + @Override public void set(T value) { + threadMap.put(threadId(), value != null ? value : (T)NULL_VALUE); + } + + /** {@inheritDoc} */ + @Override public T get() { + T t = threadMap.get(threadId()); + + if (t == null) { + t = initialValue(); + if (t != null) + set(t); + } + + return t == NULL_VALUE ? null : t; + } + + /** {@inheritDoc} */ + @Override public void remove() { + threadMap.remove(threadId()); + } + + /** + * @param supplier Initil value. + * + * @return Thread local. + */ + public static ThreadLocalExtra withInitial(Supplier supplier) { + return new ThreadLocalExtra() { + @Override public T get() { + T prev = super.get(); + + if (prev == null) + set(prev = supplier.get()); + + return prev; + } + }; + } + } +} diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioBackPressureControl.java b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioBackPressureControl.java index 37d985f7ff100..dd9fb9b28a4f0 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioBackPressureControl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioBackPressureControl.java @@ -17,6 +17,7 @@ package org.apache.ignite.internal.util.nio; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.lang.IgniteRunnable; import org.jetbrains.annotations.Nullable; @@ -25,7 +26,7 @@ */ public class GridNioBackPressureControl { /** Thread local flag indicating that thread is processing message. */ - private static ThreadLocal threadProcMsg = new ThreadLocal() { + private static ThreadLocal threadProcMsg = new ThreadLocalExtra() { @Override protected Holder initialValue() { return new Holder(); } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/tostring/GridToStringBuilder.java b/modules/core/src/main/java/org/apache/ignite/internal/util/tostring/GridToStringBuilder.java index 5394e3bc57c79..47894bf8f4f79 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/util/tostring/GridToStringBuilder.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/util/tostring/GridToStringBuilder.java @@ -38,6 +38,7 @@ import java.util.concurrent.locks.ReadWriteLock; import org.apache.ignite.IgniteException; import org.apache.ignite.IgniteSystemProperties; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.util.typedef.internal.SB; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -99,7 +100,7 @@ public class GridToStringBuilder { IgniteSystemProperties.getInteger(IGNITE_TO_STRING_COLLECTION_LIMIT, 100); /** Every thread has its own string builder. */ - private static ThreadLocal threadLocSB = new ThreadLocal() { + private static ThreadLocal threadLocSB = new ThreadLocalExtra() { @Override protected SBLimitedLength initialValue() { SBLimitedLength sb = new SBLimitedLength(256); @@ -116,7 +117,7 @@ public class GridToStringBuilder { * have to keep a map of this objects pointed to the position of previous occurrence * and remove/add them in each {@code toString()} apply. */ - private static ThreadLocal> savedObjects = new ThreadLocal>() { + private static ThreadLocal> savedObjects = new ThreadLocalExtra>() { @Override protected IdentityHashMap initialValue() { return new IdentityHashMap<>(); } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/util/VisorTaskUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/util/VisorTaskUtils.java index fda9ba199bc0f..8cc543bec2640 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/visor/util/VisorTaskUtils.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/util/VisorTaskUtils.java @@ -58,6 +58,7 @@ import org.apache.ignite.cache.eviction.AbstractEvictionPolicyFactory; import org.apache.ignite.cluster.ClusterNode; import org.apache.ignite.events.Event; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.processors.igfs.IgfsEx; import org.apache.ignite.internal.util.typedef.F; import org.apache.ignite.internal.util.typedef.X; @@ -148,7 +149,7 @@ public class VisorTaskUtils { }; /** Debug date format. */ - private static final ThreadLocal DEBUG_DATE_FMT = new ThreadLocal() { + private static final ThreadLocal DEBUG_DATE_FMT = new ThreadLocalExtra() { /** {@inheritDoc} */ @Override protected SimpleDateFormat initialValue() { return new SimpleDateFormat("HH:mm:ss,SSS"); diff --git a/modules/core/src/main/java/org/apache/ignite/logger/java/JavaLoggerFormatter.java b/modules/core/src/main/java/org/apache/ignite/logger/java/JavaLoggerFormatter.java index cfef38b974f58..2bb907711cd76 100644 --- a/modules/core/src/main/java/org/apache/ignite/logger/java/JavaLoggerFormatter.java +++ b/modules/core/src/main/java/org/apache/ignite/logger/java/JavaLoggerFormatter.java @@ -23,6 +23,7 @@ import java.util.Date; import java.util.logging.Formatter; import java.util.logging.LogRecord; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.util.typedef.internal.S; /** @@ -33,7 +34,7 @@ public class JavaLoggerFormatter extends Formatter { public static final String ANONYMOUS_LOGGER_NAME = "UNKNOWN"; /** */ - private static final ThreadLocal DATE_FORMATTER = new ThreadLocal() { + private static final ThreadLocal DATE_FORMATTER = new ThreadLocalExtra() { /** {@inheritDoc} */ @Override protected SimpleDateFormat initialValue() { return new SimpleDateFormat("HH:mm:ss,SSS"); diff --git a/modules/core/src/main/java/org/apache/ignite/marshaller/MarshallerUtils.java b/modules/core/src/main/java/org/apache/ignite/marshaller/MarshallerUtils.java index d5cf3865b595c..55da6423090f1 100644 --- a/modules/core/src/main/java/org/apache/ignite/marshaller/MarshallerUtils.java +++ b/modules/core/src/main/java/org/apache/ignite/marshaller/MarshallerUtils.java @@ -27,6 +27,7 @@ import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.IgniteSystemProperties; import org.apache.ignite.internal.ClassSet; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.lang.IgnitePredicate; import org.apache.ignite.lang.IgniteProductVersion; import org.apache.ignite.marshaller.jdk.JdkMarshaller; @@ -43,10 +44,10 @@ public class MarshallerUtils { public static final String CLS_NAMES_FILE = "META-INF/classnames.properties"; /** Job sender node version. */ - private static final ThreadLocal JOB_SND_NODE_VER = new ThreadLocal<>(); + private static final ThreadLocal JOB_SND_NODE_VER = new ThreadLocalExtra<>(); /** Job sender node version. */ - private static final ThreadLocal JOB_RCV_NODE_VER = new ThreadLocal<>(); + private static final ThreadLocal JOB_RCV_NODE_VER = new ThreadLocalExtra<>(); /** * Set node name to marshaller context if possible. diff --git a/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationMetricsListener.java b/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationMetricsListener.java index 838ee006861cc..4960295d3f9a0 100644 --- a/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationMetricsListener.java +++ b/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationMetricsListener.java @@ -25,8 +25,8 @@ import java.util.concurrent.Callable; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.LongAdder; - import org.apache.ignite.internal.managers.communication.GridIoMessage; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.util.nio.GridNioMetricsListener; import org.apache.ignite.internal.util.typedef.F; import org.apache.ignite.plugin.extensions.communication.Message; @@ -52,7 +52,7 @@ public class TcpCommunicationMetricsListener implements GridNioMetricsListener{ private final Set allMetrics = Collections.newSetFromMap(new ConcurrentHashMap<>()); /** Thread-local metrics. */ - private final ThreadLocal threadMetrics = new ThreadLocal() { + private final ThreadLocal threadMetrics = new ThreadLocalExtra() { @Override protected ThreadMetrics initialValue() { ThreadMetrics metrics = new ThreadMetrics(); diff --git a/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.java b/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.java index 427db0865eb7b..81ccada663e12 100755 --- a/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.java +++ b/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.java @@ -73,6 +73,7 @@ import org.apache.ignite.internal.managers.discovery.IgniteDiscoverySpi; import org.apache.ignite.internal.managers.eventstorage.GridLocalEventListener; import org.apache.ignite.internal.managers.eventstorage.HighPriorityListener; +import org.apache.ignite.internal.util.ThreadResolver; import org.apache.ignite.internal.util.GridConcurrentFactory; import org.apache.ignite.internal.util.GridSpinReadWriteLock; import org.apache.ignite.internal.util.future.GridFinishedFuture; @@ -4804,7 +4805,7 @@ private static class FirstConnectionPolicy implements ConnectionPolicy { private class RoundRobinConnectionPolicy implements ConnectionPolicy { /** {@inheritDoc} */ @Override public int connectionIndex() { - return (int)(U.safeAbs(Thread.currentThread().getId()) % connectionsPerNode); + return (int)(U.safeAbs(ThreadResolver.threadId()) % connectionsPerNode); } } diff --git a/modules/core/src/main/java/org/apache/ignite/spi/encryption/keystore/KeystoreEncryptionSpi.java b/modules/core/src/main/java/org/apache/ignite/spi/encryption/keystore/KeystoreEncryptionSpi.java index beba0158f7717..08fcd34ae8bfe 100644 --- a/modules/core/src/main/java/org/apache/ignite/spi/encryption/keystore/KeystoreEncryptionSpi.java +++ b/modules/core/src/main/java/org/apache/ignite/spi/encryption/keystore/KeystoreEncryptionSpi.java @@ -44,13 +44,14 @@ import org.apache.ignite.Ignite; import org.apache.ignite.IgniteException; import org.apache.ignite.IgniteLogger; -import org.apache.ignite.spi.encryption.EncryptionSpi; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.util.typedef.F; import org.apache.ignite.internal.util.typedef.internal.U; import org.apache.ignite.resources.IgniteInstanceResource; import org.apache.ignite.resources.LoggerResource; import org.apache.ignite.spi.IgniteSpiAdapter; import org.apache.ignite.spi.IgniteSpiException; +import org.apache.ignite.spi.encryption.EncryptionSpi; import org.jetbrains.annotations.Nullable; import static javax.crypto.Cipher.DECRYPT_MODE; @@ -132,7 +133,7 @@ public class KeystoreEncryptionSpi extends IgniteSpiAdapter implements Encryptio protected Ignite ignite; /** */ - private ThreadLocal aesWithPadding = ThreadLocal.withInitial(() -> { + private ThreadLocal aesWithPadding = ThreadLocalExtra.withInitial(() -> { try { return Cipher.getInstance(AES_WITH_PADDING); } @@ -142,7 +143,7 @@ public class KeystoreEncryptionSpi extends IgniteSpiAdapter implements Encryptio }); /** */ - private ThreadLocal aesWithoutPadding = ThreadLocal.withInitial(() -> { + private ThreadLocal aesWithoutPadding = ThreadLocalExtra.withInitial(() -> { try { return Cipher.getInstance(AES_WITHOUT_PADDING); } diff --git a/modules/core/src/test/java/org/apache/ignite/cache/affinity/rendezvous/RendezvousAffinityFunctionSimpleBenchmark.java b/modules/core/src/test/java/org/apache/ignite/cache/affinity/rendezvous/RendezvousAffinityFunctionSimpleBenchmark.java index c680a68f58c71..eb5871b01cf5e 100644 --- a/modules/core/src/test/java/org/apache/ignite/cache/affinity/rendezvous/RendezvousAffinityFunctionSimpleBenchmark.java +++ b/modules/core/src/test/java/org/apache/ignite/cache/affinity/rendezvous/RendezvousAffinityFunctionSimpleBenchmark.java @@ -18,14 +18,25 @@ package org.apache.ignite.cache.affinity.rendezvous; import java.io.Externalizable; +import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectOutput; +import java.io.PrintStream; import java.io.Serializable; +import java.nio.file.FileSystems; +import java.nio.file.Files; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; +import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Comparator; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.atomic.AtomicInteger; import org.apache.ignite.Ignite; import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.IgniteException; @@ -40,6 +51,7 @@ import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion; import org.apache.ignite.internal.processors.affinity.GridAffinityFunctionContextImpl; import org.apache.ignite.internal.processors.cache.GridCacheUtils; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.util.typedef.F; import org.apache.ignite.internal.util.typedef.internal.A; import org.apache.ignite.internal.util.typedef.internal.LT; @@ -51,18 +63,6 @@ import org.apache.ignite.testframework.GridTestNode; import org.apache.ignite.testframework.GridTestUtils; import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest; - -import java.io.IOException; -import java.io.PrintStream; -import java.nio.file.FileSystems; -import java.nio.file.Files; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.UUID; -import java.util.concurrent.atomic.AtomicInteger; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -616,7 +616,7 @@ private static class RendezvousAffinityFunctionOld implements AffinityFunction, private static final Comparator> COMPARATOR = new HashComparator(); /** Thread local message digest. */ - private ThreadLocal digest = new ThreadLocal() { + private ThreadLocal digest = new ThreadLocalExtra() { @Override protected MessageDigest initialValue() { try { return MessageDigest.getInstance("MD5"); diff --git a/modules/core/src/test/java/org/apache/ignite/internal/GridTaskTimeoutSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/GridTaskTimeoutSelfTest.java index c8b549155b1dd..3ec76ef237db4 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/GridTaskTimeoutSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/GridTaskTimeoutSelfTest.java @@ -35,6 +35,7 @@ import org.apache.ignite.compute.ComputeTaskTimeoutException; import org.apache.ignite.events.Event; import org.apache.ignite.events.TaskEvent; +import org.apache.ignite.internal.util.ThreadResolver; import org.apache.ignite.internal.util.typedef.G; import org.apache.ignite.internal.util.typedef.PE; import org.apache.ignite.lang.IgniteUuid; @@ -175,7 +176,7 @@ public void testSynchronousTimeoutMultithreaded() throws Exception { } } - info("Thread " + Thread.currentThread().getId() + " finishing."); + info("Thread " + ThreadResolver.threadId() + " finishing."); finishLatch.countDown(); } diff --git a/modules/core/src/test/java/org/apache/ignite/internal/SensitiveInfoTestLoggerProxy.java b/modules/core/src/test/java/org/apache/ignite/internal/SensitiveInfoTestLoggerProxy.java index 48b0dd6fff709..b753511eaaebf 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/SensitiveInfoTestLoggerProxy.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/SensitiveInfoTestLoggerProxy.java @@ -34,6 +34,7 @@ import java.util.regex.Pattern; import org.apache.ignite.IgniteLogger; import org.apache.ignite.IgniteSystemProperties; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.util.tostring.GridToStringInclude; import org.apache.ignite.internal.util.typedef.internal.S; import org.apache.ignite.internal.util.typedef.internal.U; @@ -88,14 +89,14 @@ public class SensitiveInfoTestLoggerProxy implements IgniteLogger, LifecycleAwar private static final Pattern EXCLUDE_CATEGORY_P = Pattern.compile("Test(Task|Job)?($|\\$)|\\.tests?\\."); /** */ - private static ThreadLocal> stash = new ThreadLocal>() { + private static ThreadLocal> stash = new ThreadLocalExtra>() { @Override protected IgniteBiTuple initialValue() { return new IgniteBiTuple<>(); } }; /** */ - private static ThreadLocal sbLoc = new ThreadLocal() { + private static ThreadLocal sbLoc = new ThreadLocalExtra() { @Override protected StringBuilder initialValue() { return new StringBuilder(SENSITIVE_PREFIX); } diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheTestEntryEx.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheTestEntryEx.java index cc634fae5daca..5350b094fa91e 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheTestEntryEx.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheTestEntryEx.java @@ -29,6 +29,7 @@ import org.apache.ignite.cache.eviction.EvictableEntry; import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion; import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTxLocalAdapter; +import org.apache.ignite.internal.util.ThreadResolver; import org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicAbstractUpdateFuture; import org.apache.ignite.internal.processors.cache.mvcc.MvccSnapshot; import org.apache.ignite.internal.processors.cache.mvcc.MvccVersion; @@ -734,7 +735,7 @@ void recheckLock() { /** @inheritDoc */ @Override public boolean lockedByThread() { - return lockedByThread(Thread.currentThread().getId()); + return lockedByThread(ThreadResolver.threadId()); } /** @inheritDoc */ diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheValueConsistencyAbstractSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheValueConsistencyAbstractSelfTest.java index 19f98ff8ab373..311799428b207 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheValueConsistencyAbstractSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheValueConsistencyAbstractSelfTest.java @@ -26,6 +26,7 @@ import org.apache.ignite.cluster.ClusterNode; import org.apache.ignite.configuration.CacheConfiguration; import org.apache.ignite.configuration.NearCacheConfiguration; +import org.apache.ignite.internal.util.ThreadResolver; import static org.apache.ignite.IgniteSystemProperties.IGNITE_ATOMIC_CACHE_DELETE_HISTORY_SIZE; import static org.apache.ignite.cache.CacheMode.PARTITIONED; @@ -314,7 +315,7 @@ private void putRemoveConsistencyMultithreaded() throws Exception { boolean rmv = rnd.nextBoolean(); if (!rmv) - cache.put(k, Thread.currentThread().getId()); + cache.put(k, ThreadResolver.threadId()); else cache.remove(k); diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheDiscoveryDataConcurrentJoinTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheDiscoveryDataConcurrentJoinTest.java index 44e04ebdf48d6..a4112f6970563 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheDiscoveryDataConcurrentJoinTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheDiscoveryDataConcurrentJoinTest.java @@ -29,6 +29,7 @@ import org.apache.ignite.configuration.CacheConfiguration; import org.apache.ignite.configuration.IgniteConfiguration; import org.apache.ignite.internal.IgniteKernal; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.util.GridAtomicInteger; import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi; import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder; @@ -54,7 +55,7 @@ public class CacheDiscoveryDataConcurrentJoinTest extends GridCommonAbstractTest private boolean client; /** */ - private ThreadLocal staticCaches = new ThreadLocal<>(); + private ThreadLocal staticCaches = new ThreadLocalExtra<>(); /** */ private boolean withCacheGrp; diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheExchangeMergeTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheExchangeMergeTest.java index 2e89922b71231..ef85507746e72 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheExchangeMergeTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheExchangeMergeTest.java @@ -54,6 +54,7 @@ import org.apache.ignite.internal.processors.cache.CacheGroupContext; import org.apache.ignite.internal.processors.cache.GridCachePartitionExchangeManager; import org.apache.ignite.internal.processors.cache.IgniteInternalCache; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsAbstractMessage; import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture; import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsFullMessage; @@ -96,7 +97,7 @@ public class CacheExchangeMergeTest extends GridCommonAbstractTest { private static final long WAIT_SECONDS = 45; /** */ - private ThreadLocal client = new ThreadLocal<>(); + private ThreadLocal client = new ThreadLocalExtra<>(); /** */ private boolean testSpi; diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheGetInsideLockChangingTopologyTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheGetInsideLockChangingTopologyTest.java index 80aa9eee5d006..cc89e8f5221e0 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheGetInsideLockChangingTopologyTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheGetInsideLockChangingTopologyTest.java @@ -35,6 +35,7 @@ import org.apache.ignite.configuration.NearCacheConfiguration; import org.apache.ignite.internal.IgniteInternalFuture; import org.apache.ignite.internal.processors.cache.GridCacheAlwaysEvictionPolicy; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.util.typedef.internal.U; import org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi; import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi; @@ -61,7 +62,7 @@ public class CacheGetInsideLockChangingTopologyTest extends GridCommonAbstractTe private static final TcpDiscoveryIpFinder IP_FINDER = new TcpDiscoveryVmIpFinder(true); /** */ - private static ThreadLocal client = new ThreadLocal<>(); + private static ThreadLocal client = new ThreadLocalExtra<>(); /** */ private static final int SRVS = 3; diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCacheGetRestartTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCacheGetRestartTest.java index e194e2820bbac..161283a21be3d 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCacheGetRestartTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCacheGetRestartTest.java @@ -33,6 +33,7 @@ import org.apache.ignite.configuration.NearCacheConfiguration; import org.apache.ignite.internal.IgniteInternalFuture; import org.apache.ignite.internal.processors.cache.IgniteCacheProxy; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.util.typedef.internal.U; import org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi; import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi; @@ -66,7 +67,7 @@ public class IgniteCacheGetRestartTest extends GridCommonAbstractTest { private static final int KEYS = 100_000; /** */ - private ThreadLocal client = new ThreadLocal<>(); + private ThreadLocal client = new ThreadLocalExtra<>(); /** {@inheritDoc} */ @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception { diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridCacheColocatedDebugTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridCacheColocatedDebugTest.java index 92ea733c2fff4..7f3d45d3f27bd 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridCacheColocatedDebugTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridCacheColocatedDebugTest.java @@ -40,6 +40,7 @@ import org.apache.ignite.internal.processors.cache.GridCacheEntryEx; import org.apache.ignite.internal.processors.cache.GridCacheMvccCandidate; import org.apache.ignite.internal.processors.cache.GridCacheTestStore; +import org.apache.ignite.internal.util.ThreadResolver; import org.apache.ignite.internal.util.typedef.F; import org.apache.ignite.internal.util.typedef.internal.U; import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi; @@ -298,7 +299,7 @@ public void checkPutsMultithreaded(boolean loc, boolean remote, final long maxIt // Make thread-local copy to shuffle keys. List threadKeys = new ArrayList<>(keys); - long threadId = Thread.currentThread().getId(); + long threadId = ThreadResolver.threadId(); long itNum; diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridCachePartitionedTopologyChangeSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridCachePartitionedTopologyChangeSelfTest.java index 2051616e85f3b..a4260e29d45e1 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridCachePartitionedTopologyChangeSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridCachePartitionedTopologyChangeSelfTest.java @@ -39,6 +39,7 @@ import org.apache.ignite.internal.IgniteInternalFuture; import org.apache.ignite.internal.IgniteKernal; import org.apache.ignite.internal.processors.cache.GridCacheContext; +import org.apache.ignite.internal.util.ThreadResolver; import org.apache.ignite.internal.util.typedef.internal.U; import org.apache.ignite.lang.IgnitePredicate; import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi; @@ -344,7 +345,7 @@ private void checkTxNodeJoined(int nodeType) throws Exception { @Override public void run() { IgniteCache cache = g.cache(DEFAULT_CACHE_NAME); - int key = (int)Thread.currentThread().getId(); + int key = (int)ThreadResolver.threadId(); try { try (Transaction tx = g.transactions().txStart(PESSIMISTIC, REPEATABLE_READ)) { @@ -480,7 +481,7 @@ private void checkTxNodeLeft(int nodeType) throws Exception { @Override public void run() { IgniteCache cache = g.cache(DEFAULT_CACHE_NAME); - int key = (int)Thread.currentThread().getId(); + int key = (int)ThreadResolver.threadId(); try { try (Transaction tx = g.transactions().txStart(PESSIMISTIC, REPEATABLE_READ)) { diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalMultithreadedSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalMultithreadedSelfTest.java index f6dc5351892a5..c1469c87379fd 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalMultithreadedSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalMultithreadedSelfTest.java @@ -30,6 +30,7 @@ import org.apache.ignite.IgniteCache; import org.apache.ignite.configuration.CacheConfiguration; import org.apache.ignite.configuration.IgniteConfiguration; +import org.apache.ignite.internal.util.ThreadResolver; import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi; import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder; import org.apache.ignite.testframework.GridTestThread; @@ -348,6 +349,6 @@ public void testMultiLockTimeout() throws Exception { * @return Formatted string for current thread. */ private String thread() { - return "Thread [id=" + Thread.currentThread().getId() + ", name=" + Thread.currentThread().getName() + ']'; + return "Thread [id=" + ThreadResolver.threadId() + ", name=" + Thread.currentThread().getName() + ']'; } } \ No newline at end of file diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/baseline/ClientAffinityAssignmentWithBaselineTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/baseline/ClientAffinityAssignmentWithBaselineTest.java index 13a98e4a7ae8c..78bf0095fd8eb 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/baseline/ClientAffinityAssignmentWithBaselineTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/baseline/ClientAffinityAssignmentWithBaselineTest.java @@ -46,6 +46,7 @@ import org.apache.ignite.configuration.IgniteConfiguration; import org.apache.ignite.internal.IgniteEx; import org.apache.ignite.internal.IgniteNodeAttributes; +import org.apache.ignite.internal.util.ThreadResolver; import org.apache.ignite.internal.util.typedef.internal.U; import org.apache.ignite.lang.IgnitePredicate; import org.apache.ignite.testframework.GridTestUtils; @@ -743,7 +744,7 @@ private void startSimpleLoadThread( break; } - threadProgressTracker.compute(Thread.currentThread().getId(), + threadProgressTracker.compute(ThreadResolver.threadId(), (tId, ops) -> ops == null ? 1 : ops + 1); } catch (CacheException e) { @@ -816,7 +817,7 @@ private void startTxLoadThread( else tx.commit(); - threadProgressTracker.compute(Thread.currentThread().getId(), + threadProgressTracker.compute(ThreadResolver.threadId(), (tId, ops) -> ops == null ? 1 : ops + 1); } catch (CacheException e) { @@ -892,7 +893,7 @@ private void startCrossCacheTxLoadThread( else tx.commit(); - threadProgressTracker.compute(Thread.currentThread().getId(), + threadProgressTracker.compute(ThreadResolver.threadId(), (tId, ops) -> ops == null ? 1 : ops + 1); } catch (CacheException e) { diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/MultiTxInOneThreadTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/MultiTxInOneThreadTest.java new file mode 100644 index 0000000000000..7e06b308a6f95 --- /dev/null +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/MultiTxInOneThreadTest.java @@ -0,0 +1,124 @@ +package org.apache.ignite.internal.processors.cache.transactions; + +import org.apache.ignite.IgniteCache; +import org.apache.ignite.cache.CacheAtomicityMode; +import org.apache.ignite.cache.CacheMode; +import org.apache.ignite.cache.CacheWriteSynchronizationMode; +import org.apache.ignite.configuration.CacheConfiguration; +import org.apache.ignite.configuration.IgniteConfiguration; +import org.apache.ignite.internal.IgniteEx; +import org.apache.ignite.internal.util.ThreadResolver; +import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi; +import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder; +import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest; +import org.apache.ignite.transactions.Transaction; +import org.junit.Assert; + +public class MultiTxInOneThreadTest extends GridCommonAbstractTest { + + private static final TcpDiscoveryVmIpFinder IP_FINDER = new TcpDiscoveryVmIpFinder(true); + + private boolean client; + + /** {@inheritDoc} */ + @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception { + IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName); + + cfg.setClientMode(client); + + cfg.setDiscoverySpi(new TcpDiscoverySpi().setIpFinder(IP_FINDER)); + + cfg.setCacheConfiguration(new CacheConfiguration(DEFAULT_CACHE_NAME). + setCacheMode(CacheMode.PARTITIONED). + setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL). + setBackups(1). + setWriteSynchronizationMode(CacheWriteSynchronizationMode.FULL_SYNC)); + + return cfg; + } + + public void test() throws Exception { + startGrids(4); + + client = true; + + IgniteEx client = startGrid(4); + + IgniteCache cache = client.cache(DEFAULT_CACHE_NAME); + + cache.put(1L, 0L); + cache.put(2L, 0L); + cache.put(3L, 0L); + cache.put(4L, 0L); + + long threadId1 = 1L; + long threadId2 = 2L; + + long realThreadId = ThreadResolver.threadId(); + + ThreadResolver.setThreadId(threadId1); + + Transaction tx1 = client.transactions().txStart(); + + ThreadResolver.reset(); + + ThreadResolver.setThreadId(threadId2); + + Transaction tx2 = client.transactions().txStart(); + + ThreadResolver.reset(); + + ThreadResolver.setThreadId(threadId1); + + Long val1 = cache.get(1L); + Long val2 = cache.get(2L); + + ThreadResolver.reset(); + + ThreadResolver.setThreadId(threadId2); + + Long val3 = cache.get(3L); + Long val4 = cache.get(4L); + + ThreadResolver.reset(); + + ThreadResolver.setThreadId(threadId1); + + cache.put(1L, val1 + 1); + cache.put(2L, val2 + 1); + + ThreadResolver.reset(); + + ThreadResolver.setThreadId(threadId2); + + cache.put(3L, val3 + 1); + cache.put(4L, val4 + 1); + + ThreadResolver.reset(); + + ThreadResolver.setThreadId(threadId1); + + tx1.commit(); + + tx1.close(); + + ThreadResolver.reset(); + + ThreadResolver.setThreadId(threadId2); + + tx2.commit(); + + tx2.close(); + + ThreadResolver.reset(); + + Assert.assertEquals(1L, (long)cache.get(1L)); + Assert.assertEquals(1L, (long)cache.get(2L)); + Assert.assertEquals(1L, (long)cache.get(3L)); + Assert.assertEquals(1L, (long)cache.get(4L)); + + Assert.assertEquals(realThreadId, ThreadResolver.threadId()); + + stopAllGrids(false); + } +} diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/database/BPlusTreeReuseSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/database/BPlusTreeReuseSelfTest.java index d12c92fd8102f..28e910d39191a 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/database/BPlusTreeReuseSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/database/BPlusTreeReuseSelfTest.java @@ -22,6 +22,7 @@ import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.internal.pagemem.PageMemory; import org.apache.ignite.internal.pagemem.wal.IgniteWriteAheadLogManager; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.processors.cache.persistence.tree.io.PageIO; import org.apache.ignite.internal.processors.cache.persistence.tree.reuse.ReuseList; import org.apache.ignite.internal.processors.cache.persistence.tree.reuse.ReuseListImpl; @@ -50,14 +51,14 @@ public class BPlusTreeReuseSelfTest extends BPlusTreeSelfTest { */ private static class TestReuseList extends ReuseListImpl { /** */ - private static ThreadLocal> readLocks = new ThreadLocal>() { + private static ThreadLocal> readLocks = new ThreadLocalExtra>() { @Override protected Set initialValue() { return new HashSet<>(); } }; /** */ - private static ThreadLocal> writeLocks = new ThreadLocal>() { + private static ThreadLocal> writeLocks = new ThreadLocalExtra>() { @Override protected Set initialValue() { return new HashSet<>(); } diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/database/BPlusTreeSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/database/BPlusTreeSelfTest.java index fa729788125a5..c2d715f1a96c8 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/database/BPlusTreeSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/database/BPlusTreeSelfTest.java @@ -55,6 +55,7 @@ import org.apache.ignite.internal.pagemem.PageMemory; import org.apache.ignite.internal.pagemem.PageUtils; import org.apache.ignite.internal.pagemem.impl.PageMemoryNoStoreImpl; +import org.apache.ignite.internal.util.ThreadResolver; import org.apache.ignite.internal.processors.cache.persistence.DataStructure; import org.apache.ignite.internal.processors.cache.persistence.DataRegionMetricsImpl; import org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree; @@ -2679,7 +2680,7 @@ public TestTree(ReuseList reuseList, boolean canGetRow, int cacheId, PageMemory * @return Thread ID. */ private static Object threadId() { - return Thread.currentThread().getId(); //.getName(); + return ThreadResolver.threadId(); //.getName(); } /** diff --git a/modules/core/src/test/java/org/apache/ignite/internal/util/IgniteExceptionRegistrySelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/util/IgniteExceptionRegistrySelfTest.java index 81b7522014960..5961c528514a6 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/util/IgniteExceptionRegistrySelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/util/IgniteExceptionRegistrySelfTest.java @@ -80,7 +80,7 @@ public void testOnException() throws Exception { for (IgniteExceptionRegistry.ExceptionInfo e : errors) { assertNotNull(e); assertEquals(e.message(), "Test " + i); - assertEquals(e.threadId(), Thread.currentThread().getId()); + assertEquals(e.threadId(), ThreadResolver.threadId()); assertEquals(e.threadName(), Thread.currentThread().getName()); --i; diff --git a/modules/core/src/test/java/org/apache/ignite/lang/GridBasicPerformanceTest.java b/modules/core/src/test/java/org/apache/ignite/lang/GridBasicPerformanceTest.java index 97b8d2a06eb49..aa8f01b6531d4 100644 --- a/modules/core/src/test/java/org/apache/ignite/lang/GridBasicPerformanceTest.java +++ b/modules/core/src/test/java/org/apache/ignite/lang/GridBasicPerformanceTest.java @@ -40,6 +40,8 @@ import java.util.concurrent.locks.ReentrantLock; import java.util.concurrent.locks.ReentrantReadWriteLock; import org.apache.ignite.internal.IgniteInternalFuture; +import org.apache.ignite.internal.util.ThreadResolver; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.util.GridLeanMap; import org.apache.ignite.internal.util.GridTimer; import org.apache.ignite.internal.util.GridUnsafe; @@ -86,7 +88,7 @@ public class GridBasicPerformanceTest { private static final int ARR_SIZE = 50000; /** Thread local variable. */ - private static ThreadLocal> t = new ThreadLocal>() { + private static ThreadLocal> t = new ThreadLocalExtra>() { @Override protected GridTuple initialValue() { return new GridTuple<>(0); } @@ -100,7 +102,7 @@ public class GridBasicPerformanceTest { * Initialize per-thread map. */ static { - map.put(Thread.currentThread().getId(), new GridTuple<>(0)); + map.put(ThreadResolver.threadId(), new GridTuple<>(0)); } /** @@ -388,7 +390,7 @@ private static void testThreadMap() { long start = System.currentTimeMillis(); for (long i = 0; i < MAX; i++) { - GridTuple v = map.get(Thread.currentThread().getId()); + GridTuple v = map.get(ThreadResolver.threadId()); v.set(v.get() + 2); } diff --git a/modules/core/src/test/java/org/apache/ignite/lang/GridSystemCurrentTimeMillisTest.java b/modules/core/src/test/java/org/apache/ignite/lang/GridSystemCurrentTimeMillisTest.java index 97d2f10d35316..49f5e2a37c5bf 100644 --- a/modules/core/src/test/java/org/apache/ignite/lang/GridSystemCurrentTimeMillisTest.java +++ b/modules/core/src/test/java/org/apache/ignite/lang/GridSystemCurrentTimeMillisTest.java @@ -17,6 +17,8 @@ package org.apache.ignite.lang; +import org.apache.ignite.internal.util.ThreadResolver; + /** * */ @@ -92,7 +94,7 @@ private static class Client implements Runnable { lastVal = time0; if (readsCnt % 500 == 0) - System.out.println("Stats [thread=" + Thread.currentThread().getId() + ", reads=" + readsCnt + + System.out.println("Stats [thread=" + ThreadResolver.threadId() + ", reads=" + readsCnt + ", staleReadsCnt=" + staleReadsCnt + ']'); try { diff --git a/modules/core/src/test/java/org/apache/ignite/loadtests/hashmap/GridCacheTestContext.java b/modules/core/src/test/java/org/apache/ignite/loadtests/hashmap/GridCacheTestContext.java index 8ac72f7df9d99..7d015213d1e5e 100644 --- a/modules/core/src/test/java/org/apache/ignite/loadtests/hashmap/GridCacheTestContext.java +++ b/modules/core/src/test/java/org/apache/ignite/loadtests/hashmap/GridCacheTestContext.java @@ -18,7 +18,6 @@ package org.apache.ignite.loadtests.hashmap; import java.util.IdentityHashMap; -import org.apache.ignite.cache.store.CacheStore; import org.apache.ignite.configuration.CacheConfiguration; import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion; import org.apache.ignite.internal.processors.cache.CacheAffinitySharedManager; @@ -103,6 +102,6 @@ public GridCacheTestContext(GridTestKernalContext ctx) throws Exception { new GridCacheAffinityManager() ); - store().initialize(null, new IdentityHashMap()); + store().initialize(null, new IdentityHashMap<>()); } } \ No newline at end of file diff --git a/modules/core/src/test/java/org/apache/ignite/loadtests/util/GridLoadTestArgs.java b/modules/core/src/test/java/org/apache/ignite/loadtests/util/GridLoadTestArgs.java index aa2202d1edbbf..151302458e561 100644 --- a/modules/core/src/test/java/org/apache/ignite/loadtests/util/GridLoadTestArgs.java +++ b/modules/core/src/test/java/org/apache/ignite/loadtests/util/GridLoadTestArgs.java @@ -21,6 +21,7 @@ import java.util.HashMap; import java.util.Map; import org.apache.ignite.IgniteCheckedException; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.lang.IgniteClosure; import org.jetbrains.annotations.Nullable; @@ -43,7 +44,7 @@ public class GridLoadTestArgs { public static final String VALUE_SIZE = "IGNITE_VALUE_SIZE"; /** Properties map for dumping. */ - private static ThreadLocal> props = new ThreadLocal>() { + private static ThreadLocal> props = new ThreadLocalExtra>() { @Override protected Map initialValue() { return new HashMap<>(); } diff --git a/modules/core/src/test/java/org/apache/ignite/session/GridThreadSerialNumber.java b/modules/core/src/test/java/org/apache/ignite/session/GridThreadSerialNumber.java index 346ef9fbb0466..f6b83150540c2 100644 --- a/modules/core/src/test/java/org/apache/ignite/session/GridThreadSerialNumber.java +++ b/modules/core/src/test/java/org/apache/ignite/session/GridThreadSerialNumber.java @@ -17,6 +17,8 @@ package org.apache.ignite.session; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; + /** * Thread serial number. */ @@ -25,7 +27,7 @@ class GridThreadSerialNumber { private int nextSerialNum = 0; /** */ - private ThreadLocal serialNum = new ThreadLocal() { + private ThreadLocal serialNum = new ThreadLocalExtra() { @Override protected synchronized Integer initialValue() { return nextSerialNum++; } diff --git a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoverySpiMulticastTest.java b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoverySpiMulticastTest.java index e19b121aebdb7..2aec156c06bf5 100644 --- a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoverySpiMulticastTest.java +++ b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoverySpiMulticastTest.java @@ -24,6 +24,7 @@ import org.apache.ignite.configuration.IgniteConfiguration; import org.apache.ignite.events.Event; import org.apache.ignite.internal.IgniteInternalFuture; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.util.typedef.internal.U; import org.apache.ignite.lang.IgnitePredicate; import org.apache.ignite.spi.discovery.DiscoverySpi; @@ -43,10 +44,10 @@ public class TcpClientDiscoverySpiMulticastTest extends GridCommonAbstractTest { private boolean forceSrv; /** */ - private ThreadLocal client = new ThreadLocal<>(); + private ThreadLocal client = new ThreadLocalExtra<>(); /** */ - private ThreadLocal discoPort = new ThreadLocal<>(); + private ThreadLocal discoPort = new ThreadLocalExtra<>(); /** {@inheritDoc} */ @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception { diff --git a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoveryMultiThreadedTest.java b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoveryMultiThreadedTest.java index 8f3ce0ad1bd5f..cefe03d5a8225 100644 --- a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoveryMultiThreadedTest.java +++ b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoveryMultiThreadedTest.java @@ -47,6 +47,7 @@ import org.apache.ignite.internal.IgniteKernal; import org.apache.ignite.internal.client.util.GridConcurrentHashSet; import org.apache.ignite.internal.cluster.ClusterTopologyCheckedException; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.util.typedef.G; import org.apache.ignite.internal.util.typedef.X; import org.apache.ignite.internal.util.typedef.internal.U; @@ -76,10 +77,10 @@ public class TcpDiscoveryMultiThreadedTest extends GridCommonAbstractTest { private static final int CLIENT_GRID_CNT = 5; /** */ - private static final ThreadLocal clientFlagPerThread = new ThreadLocal<>(); + private static final ThreadLocal clientFlagPerThread = new ThreadLocalExtra<>(); /** */ - private static final ThreadLocal nodeId = new ThreadLocal<>(); + private static final ThreadLocal nodeId = new ThreadLocalExtra<>(); /** */ private static volatile boolean clientFlagGlobal; diff --git a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySelfTest.java b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySelfTest.java index 1aae8fbc3133a..8f7e5a768d40b 100644 --- a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySelfTest.java @@ -56,6 +56,7 @@ import org.apache.ignite.internal.IgniteInterruptedCheckedException; import org.apache.ignite.internal.IgniteKernal; import org.apache.ignite.internal.managers.discovery.DiscoveryCustomMessage; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.processors.continuous.StartRoutineAckDiscoveryMessage; import org.apache.ignite.internal.processors.port.GridPortRecord; import org.apache.ignite.internal.util.lang.GridAbsPredicate; @@ -119,7 +120,7 @@ public class TcpDiscoverySelfTest extends GridCommonAbstractTest { private UUID nodeId; /** */ - private static ThreadLocal nodeSpi = new ThreadLocal<>(); + private static ThreadLocal nodeSpi = new ThreadLocalExtra<>(); /** */ private GridStringLogger strLog; diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/GridTestThread.java b/modules/core/src/test/java/org/apache/ignite/testframework/GridTestThread.java index f2cec0f78509e..4be3be3308ecb 100644 --- a/modules/core/src/test/java/org/apache/ignite/testframework/GridTestThread.java +++ b/modules/core/src/test/java/org/apache/ignite/testframework/GridTestThread.java @@ -18,6 +18,7 @@ package org.apache.ignite.testframework; import java.util.concurrent.Callable; +import org.apache.ignite.internal.util.ThreadResolver; /** * Test thread that has convenience failure checks. @@ -140,6 +141,6 @@ public void checkError() throws Exception { * @return Formatted string for current thread. */ private String name0() { - return "Thread [id=" + Thread.currentThread().getId() + ", name=" + Thread.currentThread().getName() + ']'; + return "Thread [id=" + ThreadResolver.threadId() + ", name=" + Thread.currentThread().getName() + ']'; } } \ No newline at end of file diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/IgniteTestSuite.java b/modules/core/src/test/java/org/apache/ignite/testframework/IgniteTestSuite.java index 861c1392e374e..3f028cea17cd5 100644 --- a/modules/core/src/test/java/org/apache/ignite/testframework/IgniteTestSuite.java +++ b/modules/core/src/test/java/org/apache/ignite/testframework/IgniteTestSuite.java @@ -17,28 +17,28 @@ package org.apache.ignite.testframework; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.util.typedef.F; import org.apache.ignite.testframework.junits.GridAbstractTest; import org.apache.ignite.testsuites.IgniteIgnore; import org.jetbrains.annotations.Nullable; import org.junit.internal.MethodSorter; -import java.lang.reflect.Method; -import java.lang.reflect.Modifier; -import java.util.ArrayList; -import java.util.LinkedList; -import java.util.List; - /** * Base class for run junit tests. * Test methods marked with @Ignored annotation won't be executed. */ public class IgniteTestSuite extends TestSuite { /** Ignore default flag thread local. */ - private static final ThreadLocal IGNORE_DFLT = new ThreadLocal() { + private static final ThreadLocal IGNORE_DFLT = new ThreadLocalExtra() { @Override protected Boolean initialValue() { return false; } diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/junits/cache/TestThreadLocalCacheSession.java b/modules/core/src/test/java/org/apache/ignite/testframework/junits/cache/TestThreadLocalCacheSession.java index 8e0ae2d66cf25..bfbd758c6f4ca 100644 --- a/modules/core/src/test/java/org/apache/ignite/testframework/junits/cache/TestThreadLocalCacheSession.java +++ b/modules/core/src/test/java/org/apache/ignite/testframework/junits/cache/TestThreadLocalCacheSession.java @@ -19,6 +19,7 @@ import java.util.Map; import org.apache.ignite.cache.store.CacheStoreSession; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.transactions.Transaction; import org.jetbrains.annotations.Nullable; @@ -27,7 +28,7 @@ */ public class TestThreadLocalCacheSession implements CacheStoreSession { /** */ - private final ThreadLocal sesHolder = new ThreadLocal<>(); + private final ThreadLocal sesHolder = new ThreadLocalExtra<>(); /** * @param tx Transaction. diff --git a/modules/direct-io/src/main/java/org/apache/ignite/internal/processors/cache/persistence/file/LinuxNativeIoPluginProvider.java b/modules/direct-io/src/main/java/org/apache/ignite/internal/processors/cache/persistence/file/LinuxNativeIoPluginProvider.java index 3aabc8bf59303..10800f9ea17b8 100644 --- a/modules/direct-io/src/main/java/org/apache/ignite/internal/processors/cache/persistence/file/LinuxNativeIoPluginProvider.java +++ b/modules/direct-io/src/main/java/org/apache/ignite/internal/processors/cache/persistence/file/LinuxNativeIoPluginProvider.java @@ -31,6 +31,7 @@ import org.apache.ignite.internal.pagemem.store.IgnitePageStoreManager; import org.apache.ignite.internal.pagemem.wal.IgniteWriteAheadLogManager; import org.apache.ignite.internal.processors.cache.GridCacheSharedContext; +import org.apache.ignite.internal.util.ThreadResolver.ThreadLocalExtra; import org.apache.ignite.internal.processors.cache.persistence.GridCacheDatabaseSharedManager; import org.apache.ignite.internal.processors.cache.persistence.wal.FileWriteAheadLogManager; import org.apache.ignite.internal.util.typedef.internal.U; @@ -194,7 +195,7 @@ private void freeDirectBuffers() { GridCacheDatabaseSharedManager db = (GridCacheDatabaseSharedManager)cacheCtx.database(); - db.setThreadBuf(new ThreadLocal() { + db.setThreadBuf(new ThreadLocalExtra() { @Override protected ByteBuffer initialValue() { return factory.createManagedBuffer(pageStore.pageSize()); } From ffdd73d835e2e4b9fe2c3df123c9a2feacb00ab8 Mon Sep 17 00:00:00 2001 From: Dmitriy Govorukhin Date: Wed, 7 Nov 2018 02:44:45 +0300 Subject: [PATCH 2/2] fix stackOverFlow + test cleanup Signed-off-by: Dmitriy Govorukhin --- .../ignite/internal/util/ThreadResolver.java | 2 +- .../cache/transactions/MultiTxInOneThreadTest.java | 14 -------------- 2 files changed, 1 insertion(+), 15 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/ThreadResolver.java b/modules/core/src/main/java/org/apache/ignite/internal/util/ThreadResolver.java index b543d4528c735..209fd35150f81 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/util/ThreadResolver.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/util/ThreadResolver.java @@ -26,7 +26,7 @@ */ public class ThreadResolver { /** */ - private static final ThreadLocalExtra THREAD_ID = ThreadLocalExtra.withInitial(() -> -1L); + private static final ThreadLocal THREAD_ID = ThreadLocal.withInitial(() -> -1L); /** * @param threadId Thread ID. diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/MultiTxInOneThreadTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/MultiTxInOneThreadTest.java index 7e06b308a6f95..1a7913b551a8e 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/MultiTxInOneThreadTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/MultiTxInOneThreadTest.java @@ -60,50 +60,36 @@ public void test() throws Exception { Transaction tx1 = client.transactions().txStart(); - ThreadResolver.reset(); - ThreadResolver.setThreadId(threadId2); Transaction tx2 = client.transactions().txStart(); - ThreadResolver.reset(); - ThreadResolver.setThreadId(threadId1); Long val1 = cache.get(1L); Long val2 = cache.get(2L); - ThreadResolver.reset(); - ThreadResolver.setThreadId(threadId2); Long val3 = cache.get(3L); Long val4 = cache.get(4L); - ThreadResolver.reset(); - ThreadResolver.setThreadId(threadId1); cache.put(1L, val1 + 1); cache.put(2L, val2 + 1); - ThreadResolver.reset(); - ThreadResolver.setThreadId(threadId2); cache.put(3L, val3 + 1); cache.put(4L, val4 + 1); - ThreadResolver.reset(); - ThreadResolver.setThreadId(threadId1); tx1.commit(); tx1.close(); - ThreadResolver.reset(); - ThreadResolver.setThreadId(threadId2); tx2.commit();