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 2022/01/21 01:04:00 UTC

[GitHub] [geode] DonalEvans opened a new pull request #7295: GEODE-9922: Move Redis cross-slot checking to RegionProvider

DonalEvans opened a new pull request #7295:
URL: https://github.com/apache/geode/pull/7295


    - Move duplicated logic for determining if Keys are in different slots
    from various Executors to RegionProvider
    - Removed manual checks for if the key is local, as this is performed
    as part of locking the primary bucket
    - Created RedisCrossSlotException class
    - Added unit tests for new method in RegionProvider
    - Refactor SetOpExecutor to also lock the destination key for *STORE
    commands
    - Add missing test cases for cross-slot errors
    - Correct some tests for cross-slot behaviour that were inadvertently
    testing the Jedis client's response rather than the Geode for Redis
    server
    - Changed name format for constants in AbstractSMoveIntegrationTest
   
   <!-- 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:
   - [x] Is there a JIRA ticket associated with this PR? Is it referenced in the commit message?
   
   - [x] Has your PR been rebased against the latest commit within the target branch (typically `develop`)?
   
   - [x] Is your initial contribution a single, squashed commit?
   
   - [x] Does `gradlew build` run cleanly?
   
   - [x] Have you written or updated unit tests to verify your changes?
   
   - [N/A] 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.

To unsubscribe, e-mail: notifications-unsubscribe@geode.apache.org

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



[GitHub] [geode] DonalEvans commented on a change in pull request #7295: GEODE-9922: Move Redis cross-slot checking to RegionProvider

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



##########
File path: geode-for-redis/src/main/java/org/apache/geode/redis/internal/services/RegionProvider.java
##########
@@ -155,6 +160,18 @@ public String getRedisRegionName() {
     }
   }
 
+  @VisibleForTesting
+  static boolean areKeysCrossSlots(List<RedisKey> keysToLock) {
+    int slot = keysToLock.get(0).getSlot();
+    for (int i = 1, keysToLockSize = keysToLock.size(); i < keysToLockSize; i++) {

Review comment:
       You're correct. I was originally iterating the whole list using a foreach loop, but since there wasn't any reason to compare the first key's slot to itself, I used IntelliJ's automatic refactor to turn it into an "optimized indexed for loop" which is what this is. I think the reason it's formatted like that with `keysToLockSize` defined in the for expression is so that we only call `keysToLock.size()` once to initialize it, rather than calling it every time the loop executes.
   
   Given the cost of comparing the first key's slot to itself is negligible, I might just put it back to how I originally had it, since it makes the code a bit clearer.




-- 
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.

To unsubscribe, e-mail: notifications-unsubscribe@geode.apache.org

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



[GitHub] [geode] DonalEvans merged pull request #7295: GEODE-9922: Move Redis cross-slot checking to RegionProvider

Posted by GitBox <gi...@apache.org>.
DonalEvans merged pull request #7295:
URL: https://github.com/apache/geode/pull/7295


   


-- 
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.

To unsubscribe, e-mail: notifications-unsubscribe@geode.apache.org

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



[GitHub] [geode] dschneider-pivotal commented on a change in pull request #7295: GEODE-9922: Move Redis cross-slot checking to RegionProvider

Posted by GitBox <gi...@apache.org>.
dschneider-pivotal commented on a change in pull request #7295:
URL: https://github.com/apache/geode/pull/7295#discussion_r789890912



##########
File path: geode-for-redis/src/main/java/org/apache/geode/redis/internal/services/RegionProvider.java
##########
@@ -155,6 +160,18 @@ public String getRedisRegionName() {
     }
   }
 
+  @VisibleForTesting
+  static boolean areKeysCrossSlots(List<RedisKey> keysToLock) {
+    int slot = keysToLock.get(0).getSlot();
+    for (int i = 1, keysToLockSize = keysToLock.size(); i < keysToLockSize; i++) {

Review comment:
       I think this just iterates over all the elements in keysToLock with the exception of element 0. If this is correct, I think the code would be cleaner if you got a sublist from keysToLock and iterated over it. Declaring "keysToLockSize" in the "for" expression makes it look like something that might change in the loop but I think it never does.




-- 
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.

To unsubscribe, e-mail: notifications-unsubscribe@geode.apache.org

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