DonalEvans commented on a change in pull request #7257:
URL: https://github.com/apache/geode/pull/7257#discussion_r782654454
##########
File path:
geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/RedisSet.java
##########
@@ -108,21 +104,18 @@ public static int sdiffstore(RegionProvider
regionProvider, RedisKey destination
private static MemberSet calculateDiff(RegionProvider regionProvider,
List<RedisKey> keys,
boolean updateStats) {
RedisSet firstSet = regionProvider.getTypedRedisData(REDIS_SET,
keys.get(0), updateStats);
+ MemberSet diff = new MemberSet();
if (firstSet.scard() == 0) {
- return null;
+ return diff;
}
- MemberSet diff = new MemberSet(firstSet.members);
+ diff = new MemberSet(firstSet.members);
for (int i = 1; i < keys.size(); i++) {
Review comment:
This early return causes incorrect behaviour if the first set key does
not exist. The following test passes with native Redis but fails with
geode-for-redis:
```
@Test
public void
sdiff_withNonSetKeyAsThirdKeyAndNonExistentSetAsFirstKey_returnsWrongTypeError()
{
String stringKey = "{tag1}ding";
jedis.set(stringKey, "dong");
String secondSetKey = "{tag1}secondKey";
jedis.sadd(secondSetKey, "member");
assertThatThrownBy(() -> jedis.sdiff("{tag1}emptyKey", secondSetKey,
stringKey))
.hasMessageContaining(ERROR_WRONG_TYPE);
}
```
To fix the issue, this block should be:
```
RedisSet firstSet = regionProvider.getTypedRedisData(REDIS_SET,
keys.get(0), updateStats);
MemberSet diff = new MemberSet(firstSet.members);
for (int i = 1; i < keys.size(); i++) {
```
--
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: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]