You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@geode.apache.org by GitBox <gi...@apache.org> on 2021/02/24 22:57:30 UTC

[GitHub] [geode] luissson opened a new pull request #6053: GEODE-8964: Entry created via TX putIfAbsent with null value can write incorrect data to cache

luissson opened a new pull request #6053:
URL: https://github.com/apache/geode/pull/6053


   …e incorrect data to cache (#6046)
   
   - Modifies TXCommitMessage.firePendingCallbacks to check if an Entry
   Event is an Update with a null value, if so callbacks are invoked using
   an AFTER_CREATE and not AFTER_UPDATE. This handles a situation that
   can occur when a transactional create with null value is interrupted by a GII on the
   same key, resulting in a AFTER_UPDATE event being distributed instead of a
   AFTER_CREATE.
   
   Thank you for submitting a contribution to Apache Geode.
   
   In order to streamline the review of the contribution we ask you
   to ensure the following steps have been taken:
   
   ### For all changes:
   - [ ] Is there a JIRA ticket associated with this PR? Is it referenced in the commit message?
   
   - [ ] Has your PR been rebased against the latest commit within the target branch (typically `develop`)?
   
   - [ ] Is your initial contribution a single, squashed commit?
   
   - [ ] Does `gradlew build` run cleanly?
   
   - [ ] Have you written or updated unit tests to verify your changes?
   
   - [ ] If adding new dependencies to the code, are these dependencies licensed in a way that is compatible for inclusion under [ASF 2.0](http://www.apache.org/legal/resolved.html#category-a)?
   
   ### Note:
   Please ensure that once the PR is submitted, check Concourse for build issues and
   submit an update to your PR as soon as possible. If you need help, please send an
   email to dev@geode.apache.org.
   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [geode] DonalEvans commented on a change in pull request #6053: GEODE-8964: Entry created via TX putIfAbsent with null value can write incorrect data to cache

Posted by GitBox <gi...@apache.org>.
DonalEvans commented on a change in pull request #6053:
URL: https://github.com/apache/geode/pull/6053#discussion_r583301238



##########
File path: geode-core/src/main/java/org/apache/geode/internal/cache/TXCommitMessage.java
##########
@@ -754,8 +754,14 @@ void firePendingCallbacks(List<EntryEventImpl> callbacks) {
           ee.getRegion().invokeTXCallbacks(EnumListenerEvent.AFTER_CREATE, ee, true,
               isLastTransactionEvent);
         } else {
-          ee.getRegion().invokeTXCallbacks(EnumListenerEvent.AFTER_UPDATE, ee, true,
-              isLastTransactionEvent);
+          if (ee.getNewValue() == null) { // GEODE-8964, fixes GII and TX create conflict that

Review comment:
       Small nitpick, but could the comment here be put on its own line? 

##########
File path: geode-core/src/test/java/org/apache/geode/internal/cache/TXCommitMessageTest.java
##########
@@ -80,4 +81,48 @@ public void firePendingCallbacksSetsChangeAppliedToCacheInEventLocalFilterInfo()
     verify(filterInfo2).setChangeAppliedToCache(true);
   }
 
+  @Test
+  public void firePendingCallbacksSendsAFTER_CREATECallbackIfUpdateEntryEventHasNullNewValue() {
+    TXCommitMessage message = spy(new TXCommitMessage());
+    LocalRegion region = mock(LocalRegion.class, RETURNS_DEEP_STUBS);
+    EntryEventImpl updateEvent = mock(EntryEventImpl.class, RETURNS_DEEP_STUBS);
+    EntryEventImpl lastTxEvent = mock(EntryEventImpl.class, RETURNS_DEEP_STUBS);
+
+    List<EntryEventImpl> callbacks = new ArrayList<>();
+    callbacks.add(updateEvent);
+    callbacks.add(lastTxEvent);
+
+    when(updateEvent.getLocalFilterInfo()).thenReturn(null);
+    when(updateEvent.getNewValue()).thenReturn(null);
+    when(updateEvent.getRegion()).thenReturn(region);
+
+    doReturn(lastTxEvent).when(message).getLastTransactionEvent(callbacks);
+
+    message.firePendingCallbacks(callbacks);
+
+    verify(region).invokeTXCallbacks(EnumListenerEvent.AFTER_CREATE, updateEvent, true, false);

Review comment:
       The two test cases here can be condensed to one if this line is changed to `verify(region, only()).invokeTXCallbacks(EnumListenerEvent.AFTER_CREATE, updateEvent, true, false);` which will validate both that `invokeTXCallbacks()` is called with the correct arguments and that it is *only* called with those arguments, removing the need for a separate test to confirm that it's not called with the `AFTER_UPDATE` argument.




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [geode] luissson commented on pull request #6053: GEODE-8964: Entry created via TX putIfAbsent with null value can write incorrect data to cache

Posted by GitBox <gi...@apache.org>.
luissson commented on pull request #6053:
URL: https://github.com/apache/geode/pull/6053#issuecomment-786768794


   only() was on the :nose:, thanks for the feedback!


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [geode] pivotal-eshu merged pull request #6053: GEODE-8964: Entry created via TX putIfAbsent with null value can write incorrect data to cache

Posted by GitBox <gi...@apache.org>.
pivotal-eshu merged pull request #6053:
URL: https://github.com/apache/geode/pull/6053


   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org