From 1c707f563cc39f5ce1a45b151890efe92aad2957 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Mon, 26 Jun 2023 21:12:39 +0300 Subject: [PATCH 1/5] WIP --- .../GridDistributedTxRemoteAdapter.java | 1 - .../cache/distributed/dht/GridDhtTxLocal.java | 2 - .../distributed/near/GridNearTxLocal.java | 2 - .../cache/transactions/IgniteTxAdapter.java | 118 +++++++----------- 4 files changed, 46 insertions(+), 77 deletions(-) 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 4274eb52b3179..ce1e953bedd5f 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 @@ -162,7 +162,6 @@ public GridDistributedTxRemoteAdapter( ctx, nodeId, xidVer, - null, Thread.currentThread().getId(), sys, plc, diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxLocal.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxLocal.java index 5b86c8c521ade..891ba0b907707 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxLocal.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxLocal.java @@ -557,8 +557,6 @@ public void rollbackDhtLocal() throws IgniteCheckedException { public IgniteInternalFuture rollbackDhtLocalAsync() { final GridDhtTxFinishFuture fut = new GridDhtTxFinishFuture<>(cctx, this, false); - rollbackFuture(fut); - cctx.mvcc().addFuture(fut, fut.futureId()); GridDhtTxPrepareFuture prepFut = this.prepFut; 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 352791bf50194..d498204161c11 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 @@ -4098,8 +4098,6 @@ public IgniteInternalFuture rollbackNearTxLocalAsync(final boo if (!FINISH_FUT_UPD.compareAndSet(this, null, fut = finishFuture(fastFinish = clearThreadMap && fastFinish(), false))) return chainFinishFuture(finishFut, false, clearThreadMap, onTimeout); - rollbackFuture(fut); - if (!fastFinish) { if (prepFut == null || prepFut.isDone()) { try { 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 ec846abaf8291..04b851f42171d 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 @@ -136,23 +136,23 @@ public abstract class IgniteTxAdapter extends GridMetadataAwareAdapter implement AtomicReferenceFieldUpdater.newUpdater(IgniteTxAdapter.class, TxCounters.class, "txCounters"); /** Logger. */ - protected static IgniteLogger log; + protected final IgniteLogger log; /** Transaction ID. */ @GridToStringInclude - protected GridCacheVersion xidVer; + protected final GridCacheVersion xidVer; /** Entries write version. */ @GridToStringInclude - protected GridCacheVersion writeVer; + private GridCacheVersion writeVer; /** Implicit flag. */ @GridToStringInclude - protected boolean implicit; + protected final boolean implicit; /** Local flag. */ @GridToStringInclude - protected boolean loc; + private final boolean loc; /** Thread ID. */ @GridToStringInclude @@ -160,37 +160,37 @@ public abstract class IgniteTxAdapter extends GridMetadataAwareAdapter implement /** Transaction start time. */ @GridToStringInclude - protected long startTime = U.currentTimeMillis(); + protected final long startTime = U.currentTimeMillis(); /** Transaction start time in nanoseconds to measure duration. */ - protected long startTimeNanos; + private final long startTimeNanos; /** Node ID. */ @GridToStringInclude - protected UUID nodeId; + protected final UUID nodeId; /** Cache registry. */ @GridToStringExclude - protected GridCacheSharedContext cctx; + protected final GridCacheSharedContext cctx; /** Need return value. */ protected boolean needRetVal; /** Isolation. */ @GridToStringInclude - protected TransactionIsolation isolation = READ_COMMITTED; + protected final TransactionIsolation isolation; /** Concurrency. */ @GridToStringInclude - protected TransactionConcurrency concurrency = PESSIMISTIC; + protected final TransactionConcurrency concurrency; /** Transaction timeout. */ @GridToStringInclude - protected long timeout; + private long timeout; /** Deployment class loader id which will be used for deserialization of entries on a distributed task. */ @GridToStringExclude - protected IgniteUuid deploymentLdrId; + protected final IgniteUuid deploymentLdrId; /** Invalidate flag. */ protected volatile boolean invalidate; @@ -199,13 +199,13 @@ public abstract class IgniteTxAdapter extends GridMetadataAwareAdapter implement private boolean sysInvalidate; /** Internal flag. */ - protected boolean internal; + private boolean internal; /** System transaction flag. */ - private boolean sys; + private final boolean sys; /** IO policy. */ - private byte plc; + private final byte plc; /** One phase commit flag. */ protected boolean onePhaseCommit; @@ -235,7 +235,7 @@ public abstract class IgniteTxAdapter extends GridMetadataAwareAdapter implement private volatile boolean timedOut; /** */ - protected int txSize; + protected final int txSize; /** */ @GridToStringExclude @@ -249,10 +249,10 @@ public abstract class IgniteTxAdapter extends GridMetadataAwareAdapter implement protected Map> txNodes; /** Subject ID initiated this transaction. */ - protected UUID subjId; + private final UUID subjId; /** Task name hash code. */ - protected int taskNameHash; + private final int taskNameHash; /** Task name. */ protected final String taskName; @@ -261,7 +261,7 @@ public abstract class IgniteTxAdapter extends GridMetadataAwareAdapter implement protected boolean storeEnabled = true; /** UUID to consistent id mapper. */ - protected ConsistentIdMapper consistentIdMapper; + protected final ConsistentIdMapper consistentIdMapper; /** Mvcc tx update snapshot. */ @GridToStringInclude @@ -270,23 +270,9 @@ public abstract class IgniteTxAdapter extends GridMetadataAwareAdapter implement /** Incremental snapshot ID. */ private @Nullable UUID incSnpId; - /** {@inheritDoc} */ - @Override public UUID incrementalSnapshotId() { - return incSnpId; - } - - /** {@inheritDoc} */ - @Override public void incrementalSnapshotId(UUID id) { - incSnpId = id; - } - /** {@code True} if tx should skip adding itself to completed version map on finish. */ private boolean skipCompletedVers; - /** Rollback finish future. */ - @GridToStringExclude - private volatile IgniteInternalFuture rollbackFut; - /** */ @SuppressWarnings("unused") @GridToStringExclude @@ -348,26 +334,23 @@ protected IgniteTxAdapter( threadId = Thread.currentThread().getId(); - if (log == null) - log = U.logger(cctx.kernalContext(), logRef, this); + log = U.logger(cctx.kernalContext(), logRef, this); consistentIdMapper = new ConsistentIdMapper(cctx.discovery()); boolean needTaskName = cctx.gridEvents().isRecordable(EVT_CACHE_OBJECT_READ) || - cctx.gridEvents().isRecordable(EVT_CACHE_OBJECT_PUT) || - cctx.gridEvents().isRecordable(EVT_CACHE_OBJECT_REMOVED); + cctx.gridEvents().isRecordable(EVT_CACHE_OBJECT_PUT) || + cctx.gridEvents().isRecordable(EVT_CACHE_OBJECT_REMOVED); taskName = needTaskName ? cctx.kernalContext().task().resolveTaskName(taskNameHash) : null; - if (cctx.kernalContext().performanceStatistics().enabled()) - startTimeNanos = System.nanoTime(); + startTimeNanos = cctx.kernalContext().performanceStatistics().enabled() ? System.nanoTime() : -1; } /** * @param cctx Cache registry. * @param nodeId Node ID. * @param xidVer Transaction ID. - * @param startVer Start version mark. * @param threadId Thread ID. * @param sys System transaction flag. * @param plc IO policy. @@ -380,7 +363,6 @@ protected IgniteTxAdapter( GridCacheSharedContext cctx, UUID nodeId, GridCacheVersion xidVer, - GridCacheVersion startVer, long threadId, boolean sys, byte plc, @@ -403,12 +385,12 @@ protected IgniteTxAdapter( this.txSize = txSize; this.subjId = subjId; this.taskNameHash = taskNameHash; + this.deploymentLdrId = null; implicit = false; loc = false; - if (log == null) - log = U.logger(cctx.kernalContext(), logRef, this); + log = U.logger(cctx.kernalContext(), logRef, this); consistentIdMapper = new ConsistentIdMapper(cctx.discovery()); @@ -418,8 +400,17 @@ protected IgniteTxAdapter( taskName = needTaskName ? cctx.kernalContext().task().resolveTaskName(taskNameHash) : null; - if (cctx.kernalContext().performanceStatistics().enabled()) - startTimeNanos = System.nanoTime(); + startTimeNanos = cctx.kernalContext().performanceStatistics().enabled() ? System.nanoTime() : -1; + } + + /** {@inheritDoc} */ + @Override public UUID incrementalSnapshotId() { + return incSnpId; + } + + /** {@inheritDoc} */ + @Override public void incrementalSnapshotId(UUID id) { + incSnpId = id; } /** @@ -707,7 +698,7 @@ public boolean remote() { /** {@inheritDoc} */ @Override public Map> invalidPartitions() { - return invalidParts == null ? Collections.>emptyMap() : invalidParts; + return invalidParts == null ? Collections.emptyMap() : invalidParts; } /** {@inheritDoc} */ @@ -759,20 +750,6 @@ public void needReturnValue(boolean needRetVal) { this.needRetVal = needRetVal; } - /** - * @return Rollback future. - */ - public IgniteInternalFuture rollbackFuture() { - return rollbackFut; - } - - /** - * @param fut Rollback future. - */ - public void rollbackFuture(IgniteInternalFuture fut) { - rollbackFut = fut; - } - /** * Gets remaining allowed transaction time. * @@ -1154,16 +1131,20 @@ protected final boolean state(TransactionState state, boolean timedOut) { break; } + + case SUSPENDED: case PREPARING: { valid = prev == ACTIVE; break; } + case PREPARED: { valid = prev == PREPARING; break; } + case COMMITTING: { valid = prev == PREPARED; @@ -1209,12 +1190,6 @@ protected final boolean state(TransactionState state, boolean timedOut) { break; } - - case SUSPENDED: { - valid = prev == ACTIVE; - - break; - } } if (valid) { @@ -1920,8 +1895,7 @@ protected boolean evictNearEntry(IgniteTxEntry e, boolean primaryOnly) { if (log.isDebugEnabled()) log.debug("Evicting dht-local entry from near cache [entry=" + cached + ", tx=" + this + ']'); - if (cached != null && cached.markObsolete(xidVer)) - return true; + return cached.markObsolete(xidVer); } return false; @@ -2345,7 +2319,7 @@ private static class TxShadow implements IgniteInternalTx { } /** {@inheritDoc} */ - @Override public boolean ownsLock(GridCacheEntryEx entry) throws GridCacheEntryRemovedException { + @Override public boolean ownsLock(GridCacheEntryEx entry) { return false; } @@ -2562,7 +2536,7 @@ private static class TxShadow implements IgniteInternalTx { } /** {@inheritDoc} */ - @Override public long remainingTime() throws IgniteTxTimeoutCheckedException { + @Override public long remainingTime() { return 0; } @@ -2613,7 +2587,7 @@ private static class TxShadow implements IgniteInternalTx { private static class TxFinishFuture extends GridFutureAdapter { /** */ @GridToStringInclude - private IgniteTxAdapter tx; + private final IgniteTxAdapter tx; /** */ private volatile long completionTime; From 70a788c8a83151da45bb6d3a9f08df5e97962e3a Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Wed, 28 Jun 2023 15:35:57 +0300 Subject: [PATCH 2/5] WIP --- .../GridTransactionsSystemUserTimeMetricsTest.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridTransactionsSystemUserTimeMetricsTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridTransactionsSystemUserTimeMetricsTest.java index 0b9994d449e01..8fce14a694a5c 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridTransactionsSystemUserTimeMetricsTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridTransactionsSystemUserTimeMetricsTest.java @@ -25,6 +25,7 @@ import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicReference; import java.util.stream.LongStream; import javax.management.AttributeNotFoundException; import javax.management.DynamicMBean; @@ -179,14 +180,18 @@ public class GridTransactionsSystemUserTimeMetricsTest extends GridCommonAbstrac @Override protected void beforeTestsStarted() throws Exception { super.beforeTestsStarted(); - oldLog = GridTestUtils.getFieldValue(IgniteTxAdapter.class, "log"); + AtomicReference logRef = GridTestUtils.getFieldValue(IgniteTxAdapter.class, "logRef"); - GridTestUtils.setFieldValue(IgniteTxAdapter.class, "log", testLog); + oldLog = logRef.get(); + + logRef.set(testLog); } /** */ @Override protected void afterTestsStopped() throws Exception { - GridTestUtils.setFieldValue(IgniteTxAdapter.class, "log", oldLog); + AtomicReference logRef = GridTestUtils.getFieldValue(IgniteTxAdapter.class, "logRef"); + + logRef.set(oldLog); oldLog = null; From 4d29ffe7528f27863952198342a60b85e117e466 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Wed, 28 Jun 2023 15:43:41 +0300 Subject: [PATCH 3/5] WIP --- .../cache/transactions/IgniteTxAdapter.java | 8 +++++--- .../GridTransactionsSystemUserTimeMetricsTest.java | 11 +++-------- 2 files changed, 8 insertions(+), 11 deletions(-) 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 04b851f42171d..2077f59933441 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 @@ -136,7 +136,7 @@ public abstract class IgniteTxAdapter extends GridMetadataAwareAdapter implement AtomicReferenceFieldUpdater.newUpdater(IgniteTxAdapter.class, TxCounters.class, "txCounters"); /** Logger. */ - protected final IgniteLogger log; + protected static IgniteLogger log; /** Transaction ID. */ @GridToStringInclude @@ -334,7 +334,8 @@ protected IgniteTxAdapter( threadId = Thread.currentThread().getId(); - log = U.logger(cctx.kernalContext(), logRef, this); + if (log == null) + log = U.logger(cctx.kernalContext(), logRef, this); consistentIdMapper = new ConsistentIdMapper(cctx.discovery()); @@ -390,7 +391,8 @@ protected IgniteTxAdapter( implicit = false; loc = false; - log = U.logger(cctx.kernalContext(), logRef, this); + if (log == null) + log = U.logger(cctx.kernalContext(), logRef, this); consistentIdMapper = new ConsistentIdMapper(cctx.discovery()); diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridTransactionsSystemUserTimeMetricsTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridTransactionsSystemUserTimeMetricsTest.java index 8fce14a694a5c..0b9994d449e01 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridTransactionsSystemUserTimeMetricsTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridTransactionsSystemUserTimeMetricsTest.java @@ -25,7 +25,6 @@ import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; -import java.util.concurrent.atomic.AtomicReference; import java.util.stream.LongStream; import javax.management.AttributeNotFoundException; import javax.management.DynamicMBean; @@ -180,18 +179,14 @@ public class GridTransactionsSystemUserTimeMetricsTest extends GridCommonAbstrac @Override protected void beforeTestsStarted() throws Exception { super.beforeTestsStarted(); - AtomicReference logRef = GridTestUtils.getFieldValue(IgniteTxAdapter.class, "logRef"); + oldLog = GridTestUtils.getFieldValue(IgniteTxAdapter.class, "log"); - oldLog = logRef.get(); - - logRef.set(testLog); + GridTestUtils.setFieldValue(IgniteTxAdapter.class, "log", testLog); } /** */ @Override protected void afterTestsStopped() throws Exception { - AtomicReference logRef = GridTestUtils.getFieldValue(IgniteTxAdapter.class, "logRef"); - - logRef.set(oldLog); + GridTestUtils.setFieldValue(IgniteTxAdapter.class, "log", oldLog); oldLog = null; From 0e1264c53f9203c47d484ea2aae50c80118a0a68 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Fri, 30 Jun 2023 13:32:36 +0300 Subject: [PATCH 4/5] WIP --- .../internal/processors/cache/transactions/IgniteTxAdapter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 231c48d24029c..099696754d9ce 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 @@ -256,7 +256,7 @@ public abstract class IgniteTxAdapter extends GridMetadataAwareAdapter implement protected final String taskName; /** Store used flag. */ - protected boolean storeEnabled = true; + private boolean storeEnabled = true; /** UUID to consistent id mapper. */ protected final ConsistentIdMapper consistentIdMapper; From 91894182551275a5a58816e98f35129eb0737041 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Fri, 30 Jun 2023 13:38:30 +0300 Subject: [PATCH 5/5] WIP --- .../internal/processors/cache/transactions/IgniteTxAdapter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 099696754d9ce..0bd7e0028b276 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 @@ -172,7 +172,7 @@ public abstract class IgniteTxAdapter extends GridMetadataAwareAdapter implement protected final GridCacheSharedContext cctx; /** Need return value. */ - protected boolean needRetVal; + private boolean needRetVal; /** Isolation. */ @GridToStringInclude