You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by am...@apache.org on 2022/06/07 10:14:59 UTC
[ignite] 02/02: Fix wrong partition counter calculation for NOOP invoke operation on backup.
This is an automated email from the ASF dual-hosted git repository.
amashenkov pushed a commit to branch ignite-17123
in repository https://gitbox.apache.org/repos/asf/ignite.git
commit 4a0e017525d4281df4afe5d0bfb582d885ce0781
Author: Andrew Mashenkov <an...@gmail.com>
AuthorDate: Tue Jun 7 13:14:42 2022 +0300
Fix wrong partition counter calculation for NOOP invoke operation on backup.
---
.../distributed/dht/GridDhtTxPrepareFuture.java | 1 +
.../cache/transactions/IgniteTxEntry.java | 25 ++++++++++++++++++----
.../cache/transactions/IgniteTxHandler.java | 3 ++-
3 files changed, 24 insertions(+), 5 deletions(-)
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxPrepareFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxPrepareFuture.java
index 79fde4bd5d5..a20532bce11 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxPrepareFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxPrepareFuture.java
@@ -498,6 +498,7 @@ public final class GridDhtTxPrepareFuture extends GridCacheCompoundFuture<Ignite
}
txEntry.entryProcessorCalculatedValue(new T2<>(op, op == NOOP ? null : val));
+ txEntry.noop(op == NOOP);
if (retVal) {
if (err != null || procRes != null)
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxEntry.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxEntry.java
index ff23050390a..5b8ab389e9d 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxEntry.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxEntry.java
@@ -84,16 +84,19 @@ public class IgniteTxEntry implements GridPeerDeployAware, Message {
public static final GridCacheVersion GET_ENTRY_INVALID_VER_AFTER_GET = new GridCacheVersion(0, 0, 3);
/** Skip store flag bit mask. */
- private static final int TX_ENTRY_SKIP_STORE_FLAG_MASK = 0x01;
+ private static final int TX_ENTRY_SKIP_STORE_FLAG_MASK = 1;
/** Keep binary flag. */
- private static final int TX_ENTRY_KEEP_BINARY_FLAG_MASK = 0x02;
+ private static final int TX_ENTRY_KEEP_BINARY_FLAG_MASK = 1 << 1;
/** Flag indicating that old value for 'invoke' operation was non null on primary node. */
- private static final int TX_ENTRY_OLD_VAL_ON_PRIMARY = 0x04;
+ private static final int TX_ENTRY_OLD_VAL_ON_PRIMARY = 1 << 2;
/** Flag indicating that near cache is enabled on originating node and it should be added as reader. */
- private static final int TX_ENTRY_ADD_READER_FLAG_MASK = 0x08;
+ private static final int TX_ENTRY_ADD_READER_FLAG_MASK = 1 << 3;
+
+ /** Flag indicating that 'invoke' operation was no-op on primary. */
+ private static final int TX_ENTRY_NOOP_ON_PRIMARY = 1 << 4;
/** Prepared flag updater. */
private static final AtomicIntegerFieldUpdater<IgniteTxEntry> PREPARED_UPD =
@@ -559,6 +562,20 @@ public class IgniteTxEntry implements GridPeerDeployAware, Message {
return isFlag(TX_ENTRY_ADD_READER_FLAG_MASK);
}
+ /**
+ * @param noop Add no-op flag.
+ */
+ public void noop(boolean noop) {
+ setFlag(noop, TX_ENTRY_NOOP_ON_PRIMARY);
+ }
+
+ /**
+ * @return {@code true} if noop flag is set, {@code false} otherwise.
+ */
+ public boolean noop() {
+ return isFlag(TX_ENTRY_NOOP_ON_PRIMARY);
+ }
+
/**
* Sets flag mask.
*
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxHandler.java
index 9e6e0acbdb6..77bf58fa869 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxHandler.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxHandler.java
@@ -107,6 +107,7 @@ import org.jetbrains.annotations.Nullable;
import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC;
import static org.apache.ignite.internal.managers.communication.GridIoPolicy.SYSTEM_POOL;
import static org.apache.ignite.internal.managers.communication.GridIoPolicy.UTILITY_CACHE_POOL;
+import static org.apache.ignite.internal.processors.cache.GridCacheOperation.NOOP;
import static org.apache.ignite.internal.processors.cache.GridCacheOperation.TRANSFORM;
import static org.apache.ignite.internal.processors.cache.GridCacheUtils.isNearEnabled;
import static org.apache.ignite.internal.processors.cache.distributed.dht.topology.GridDhtPartitionState.RENTING;
@@ -1795,7 +1796,7 @@ public class IgniteTxHandler {
if (reserved) {
tx.addWrite(entry, ctx.deploy().globalLoader());
- if (txCounters != null) {
+ if (txCounters != null && entry.op() != NOOP && !(entry.op() == TRANSFORM && entry.noop())) {
Long cntr = txCounters.generateNextCounter(entry.cacheId(), part);
if (cntr != null) // Counter is null if entry is no-op.