You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by es...@apache.org on 2019/01/09 21:25:28 UTC
[geode] branch develop updated: GEODE-6260: Do not cleanup
non-dirty entries in transactional set operation (#3060)
This is an automated email from the ASF dual-hosted git repository.
eshu11 pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode.git
The following commit(s) were added to refs/heads/develop by this push:
new 8a9d999 GEODE-6260: Do not cleanup non-dirty entries in transactional set operation (#3060)
8a9d999 is described below
commit 8a9d999dc8451a2310459cd657639808a9599f50
Author: pivotal-eshu <es...@pivotal.io>
AuthorDate: Wed Jan 9 13:25:18 2019 -0800
GEODE-6260: Do not cleanup non-dirty entries in transactional set operation (#3060)
---
.../java/org/apache/geode/internal/cache/TXState.java | 7 +++++++
.../org/apache/geode/internal/cache/TXStateTest.java | 18 ++++++++++++++++++
2 files changed, 25 insertions(+)
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/TXState.java b/geode-core/src/main/java/org/apache/geode/internal/cache/TXState.java
index d074857..3474a2d 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/TXState.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/TXState.java
@@ -1540,6 +1540,13 @@ public class TXState implements TXStateInterface {
txr = txWriteRegion(internalRegion, keyInfo);
}
result = dataReg.createReadEntry(txr, keyInfo, createIfAbsent);
+ if (result == null) {
+ // createReadEntry will only returns null if createIfAbsent is false.
+ // CreateIfAbsent will only be false when this method is called by set operations.
+ // In that case we do not want the TXState to have a TXEntryState.
+ assert !createIfAbsent;
+ return result;
+ }
}
if (result != null) {
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/TXStateTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/TXStateTest.java
index d65c361..2727ec9 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/TXStateTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/TXStateTest.java
@@ -179,4 +179,22 @@ public class TXStateTest {
assertThat(txState.getOriginatingMember()).isSameAs(txStateProxy.getOnBehalfOfClientMember());
}
+ @Test
+ public void txReadEntryDoesNotCleanupNonDirtyEntriesIfRegionCreateReadEntryReturnsNull() {
+ TXState txState = spy(new TXState(txStateProxy, true));
+ KeyInfo keyInfo = mock(KeyInfo.class);
+ Object key = new Object();
+ InternalRegion internalRegion = mock(InternalRegion.class);
+ InternalRegion dataRegion = mock(InternalRegion.class);
+ TXRegionState txRegionState = mock(TXRegionState.class);
+ when(internalRegion.getDataRegionForWrite(keyInfo)).thenReturn(dataRegion);
+ when(txState.txReadRegion(dataRegion)).thenReturn(txRegionState);
+ when(keyInfo.getKey()).thenReturn(key);
+ when(txRegionState.readEntry(key)).thenReturn(null);
+ when(dataRegion.createReadEntry(txRegionState, keyInfo, false)).thenReturn(null);
+
+ assertThat(txState.txReadEntry(keyInfo, internalRegion, true, null, false)).isNull();
+ verify(txRegionState, never()).cleanupNonDirtyEntries(dataRegion);
+ }
+
}