You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by do...@apache.org on 2022/02/01 21:02:02 UTC
[geode] branch support/1.15 updated: GEODE-9993: Make SMOVE transactional (#7321)
This is an automated email from the ASF dual-hosted git repository.
donalevans pushed a commit to branch support/1.15
in repository https://gitbox.apache.org/repos/asf/geode.git
The following commit(s) were added to refs/heads/support/1.15 by this push:
new f790596 GEODE-9993: Make SMOVE transactional (#7321)
f790596 is described below
commit f7905968b7b89db08c3edf180b91b3fdadfe45b7
Author: Donal Evans <do...@vmware.com>
AuthorDate: Tue Feb 1 12:47:03 2022 -0800
GEODE-9993: Make SMOVE transactional (#7321)
- Use lockedExecuteInTransaction method in SMoveExecutor
- Refactor RedisSet.sadd and RedisSet.srem to not modify the list of members passed to them
- Do not use Delta in AbstractRedisData.storeChanges() if operation is using a transaction
Authored-by: Donal Evans <do...@vmware.com>
(cherry picked from commit c0eb58e055a16fd5bc5bb22ad97d88739d55ae02)
---
.../commands/executor/set/SMoveExecutor.java | 2 +-
.../redis/internal/data/AbstractRedisData.java | 18 ++++-
.../apache/geode/redis/internal/data/RedisSet.java | 48 +++++++------
.../redis/internal/data/delta/AddByteArrays.java | 9 +++
.../geode/redis/internal/data/RedisHashTest.java | 19 ++---
.../geode/redis/internal/data/RedisSetTest.java | 80 +++++++++++++++++++---
.../redis/internal/data/RedisSortedSetTest.java | 37 +++++-----
.../internal/data/RedisStringQuickCheckTest.java | 3 +-
.../geode/redis/internal/data/RedisStringTest.java | 53 +++++++-------
9 files changed, 185 insertions(+), 84 deletions(-)
diff --git a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/commands/executor/set/SMoveExecutor.java b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/commands/executor/set/SMoveExecutor.java
index 42647ba..487ab6b 100755
--- a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/commands/executor/set/SMoveExecutor.java
+++ b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/commands/executor/set/SMoveExecutor.java
@@ -36,7 +36,7 @@ public class SMoveExecutor implements CommandExecutor {
byte[] member = commandElems.get(3);
RegionProvider regionProvider = context.getRegionProvider();
- int removed = context.lockedExecute(sourceKey, Arrays.asList(sourceKey, destKey),
+ int removed = context.lockedExecuteInTransaction(sourceKey, Arrays.asList(sourceKey, destKey),
() -> smove(sourceKey, destKey, member, regionProvider));
return RedisResponse.integer(removed);
diff --git a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/AbstractRedisData.java b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/AbstractRedisData.java
index 349bcd7..4f7586c 100644
--- a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/AbstractRedisData.java
+++ b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/AbstractRedisData.java
@@ -17,6 +17,7 @@
package org.apache.geode.redis.internal.data;
import static org.apache.geode.DataSerializer.readEnum;
+import static org.apache.geode.internal.cache.TXManagerImpl.NOTX;
import static org.apache.geode.redis.internal.RedisConstants.ERROR_KEY_EXISTS;
import static org.apache.geode.redis.internal.data.delta.DeltaType.ADD_BYTE_ARRAYS;
import static org.apache.geode.redis.internal.data.delta.DeltaType.ADD_BYTE_ARRAY_DOUBLE_PAIRS;
@@ -44,6 +45,9 @@ import org.apache.geode.cache.EntryExistsException;
import org.apache.geode.cache.EntryNotFoundException;
import org.apache.geode.cache.Region;
import org.apache.geode.internal.cache.BucketRegion;
+import org.apache.geode.internal.cache.LocalDataSet;
+import org.apache.geode.internal.cache.PartitionedRegion;
+import org.apache.geode.internal.cache.TXId;
import org.apache.geode.internal.serialization.DeserializationContext;
import org.apache.geode.internal.serialization.KnownVersion;
import org.apache.geode.internal.serialization.SerializationContext;
@@ -335,7 +339,9 @@ public abstract class AbstractRedisData implements RedisData {
if (removeFromRegion()) {
region.remove(key);
} else {
- setDelta(deltaInfo);
+ if (!txActive(region)) {
+ setDelta(deltaInfo);
+ }
try {
region.put(key, this);
} finally {
@@ -345,6 +351,16 @@ public abstract class AbstractRedisData implements RedisData {
}
}
+ private boolean txActive(Region<RedisKey, RedisData> region) {
+ TXId txId;
+ if (region instanceof LocalDataSet) {
+ txId = ((LocalDataSet) region).getProxy().getTXId();
+ } else {
+ txId = ((PartitionedRegion) region).getTXId();
+ }
+ return txId != null && txId.getUniqId() != NOTX;
+ }
+
protected abstract boolean removeFromRegion();
@Override
diff --git a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/RedisSet.java b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/RedisSet.java
index 3fd6352..23dfd0d 100644
--- a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/RedisSet.java
+++ b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/RedisSet.java
@@ -76,18 +76,14 @@ public class RedisSet extends AbstractRedisData {
public static int smove(RedisKey sourceKey, RedisKey destKey, byte[] member,
RegionProvider regionProvider) {
- Region<RedisKey, RedisData> region = regionProvider.getDataRegion();
-
RedisSet source = regionProvider.getTypedRedisData(REDIS_SET, sourceKey, false);
RedisSet destination = regionProvider.getTypedRedisData(REDIS_SET, destKey, false);
- if (source.members.isEmpty() || !source.members.contains(member)) {
+ List<byte[]> memberList = new ArrayList<>();
+ memberList.add(member);
+ if (source.srem(memberList, regionProvider.getDataRegion(), sourceKey) == 0) {
return 0;
}
-
- List<byte[]> movedMember = new ArrayList<>();
- movedMember.add(member);
- source.srem(movedMember, region, sourceKey);
- destination.sadd(movedMember, region, destKey);
+ destination.sadd(memberList, regionProvider.getDataRegion(), destKey);
return 1;
}
@@ -383,34 +379,46 @@ public class RedisSet extends AbstractRedisData {
}
/**
- * @param membersToAdd members to add to this set; NOTE this list may by
- * modified by this call
+ * @param membersToAdd members to add to this set
* @param region the region this instance is stored in
* @param key the name of the set to add to
* @return the number of members actually added
*/
public long sadd(List<byte[]> membersToAdd, Region<RedisKey, RedisData> region, RedisKey key) {
- membersToAdd.removeIf(memberToAdd -> !membersAdd(memberToAdd));
- int membersAdded = membersToAdd.size();
- if (membersAdded != 0) {
- storeChanges(region, key, new AddByteArrays(membersToAdd));
+ AddByteArrays delta = new AddByteArrays();
+ int membersAdded = 0;
+ for (byte[] member : membersToAdd) {
+ if (membersAdd(member)) {
+ delta.add(member);
+ membersAdded++;
+ }
+ }
+ if (membersAdded == 0) {
+ return 0;
}
+ storeChanges(region, key, delta);
return membersAdded;
}
/**
- * @param membersToRemove members to remove from this set; NOTE this list may by
- * modified by this call
+ * @param membersToRemove members to remove from this set
* @param region the region this instance is stored in
* @param key the name of the set to remove from
* @return the number of members actually removed
*/
public long srem(List<byte[]> membersToRemove, Region<RedisKey, RedisData> region, RedisKey key) {
- membersToRemove.removeIf(memberToRemove -> !membersRemove(memberToRemove));
- int membersRemoved = membersToRemove.size();
- if (membersRemoved != 0) {
- storeChanges(region, key, new RemoveByteArrays(membersToRemove));
+ RemoveByteArrays delta = new RemoveByteArrays();
+ int membersRemoved = 0;
+ for (byte[] member : membersToRemove) {
+ if (membersRemove(member)) {
+ delta.add(member);
+ membersRemoved++;
+ }
+ }
+ if (membersRemoved == 0) {
+ return 0;
}
+ storeChanges(region, key, delta);
return membersRemoved;
}
diff --git a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/delta/AddByteArrays.java b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/delta/AddByteArrays.java
index 91a9ae6..9f34797 100644
--- a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/delta/AddByteArrays.java
+++ b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/delta/AddByteArrays.java
@@ -23,6 +23,7 @@ import static org.apache.geode.redis.internal.data.delta.DeltaType.ADD_BYTE_ARRA
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
+import java.util.ArrayList;
import java.util.List;
import org.apache.geode.DataSerializer;
@@ -32,10 +33,18 @@ import org.apache.geode.redis.internal.data.AbstractRedisData;
public class AddByteArrays implements DeltaInfo {
private final List<byte[]> byteArrays;
+ public AddByteArrays() {
+ byteArrays = new ArrayList<>();
+ }
+
public AddByteArrays(List<byte[]> deltas) {
this.byteArrays = deltas;
}
+ public void add(byte[] delta) {
+ byteArrays.add(delta);
+ }
+
public void serializeTo(DataOutput out) throws IOException {
DataSerializer.writeEnum(ADD_BYTE_ARRAYS, out);
InternalDataSerializer.writeArrayLength(byteArrays.size(), out);
diff --git a/geode-for-redis/src/test/java/org/apache/geode/redis/internal/data/RedisHashTest.java b/geode-for-redis/src/test/java/org/apache/geode/redis/internal/data/RedisHashTest.java
index 3c17d10..0d46161 100644
--- a/geode-for-redis/src/test/java/org/apache/geode/redis/internal/data/RedisHashTest.java
+++ b/geode-for-redis/src/test/java/org/apache/geode/redis/internal/data/RedisHashTest.java
@@ -45,6 +45,7 @@ import org.mockito.invocation.InvocationOnMock;
import org.apache.geode.DataSerializer;
import org.apache.geode.cache.Region;
import org.apache.geode.internal.HeapDataOutputStream;
+import org.apache.geode.internal.cache.PartitionedRegion;
import org.apache.geode.internal.serialization.ByteArrayDataInput;
import org.apache.geode.internal.serialization.SerializationContext;
import org.apache.geode.internal.size.ReflectionObjectSizer;
@@ -114,7 +115,7 @@ public class RedisHashTest {
@SuppressWarnings("unchecked")
@Test
public void hset_stores_delta_that_is_stable() {
- Region<RedisKey, RedisData> region = Mockito.mock(Region.class);
+ Region<RedisKey, RedisData> region = Mockito.mock(PartitionedRegion.class);
when(region.put(any(), any())).thenAnswer(this::validateDeltaSerialization);
RedisHash o1 = createRedisHash("k1", "v1", "k2", "v2");
@@ -146,7 +147,7 @@ public class RedisHashTest {
@SuppressWarnings("unchecked")
@Test
public void hdel_stores_delta_that_is_stable() {
- Region<RedisKey, RedisData> region = mock(Region.class);
+ Region<RedisKey, RedisData> region = mock(PartitionedRegion.class);
when(region.put(any(), any())).thenAnswer(this::validateDeltaSerialization);
RedisHash o1 = createRedisHash("k1", "v1", "k2", "v2");
@@ -164,7 +165,7 @@ public class RedisHashTest {
@SuppressWarnings("unchecked")
@Test
public void setExpirationTimestamp_stores_delta_that_is_stable() {
- Region<RedisKey, RedisData> region = mock(Region.class);
+ Region<RedisKey, RedisData> region = mock(PartitionedRegion.class);
when(region.put(any(), any())).thenAnswer(this::validateDeltaSerialization);
RedisHash o1 = createRedisHash("k1", "v1", "k2", "v2");
@@ -279,7 +280,7 @@ public class RedisHashTest {
final String baseField = "field";
final String baseValue = "value";
- final Region<RedisKey, RedisData> region = uncheckedCast(mock(Region.class));
+ final Region<RedisKey, RedisData> region = uncheckedCast(mock(PartitionedRegion.class));
final RedisData returnData = mock(RedisData.class);
when(region.put(any(), any())).thenReturn(returnData);
@@ -328,7 +329,7 @@ public class RedisHashTest {
public void testThatSizeIsUpdatedWhenUpdatingValue(final RedisKey key, final String field,
final String initialValue, final String finalValue) {
- final Region<RedisKey, RedisData> region = uncheckedCast(mock(Region.class));
+ final Region<RedisKey, RedisData> region = uncheckedCast(mock(PartitionedRegion.class));
final RedisData returnData = mock(RedisData.class);
when(region.put(any(RedisKey.class), any(RedisData.class))).thenReturn(returnData);
@@ -363,7 +364,7 @@ public class RedisHashTest {
final String baseField = "field";
final String baseValue = "value";
- final Region<RedisKey, RedisData> region = uncheckedCast(mock(Region.class));
+ final Region<RedisKey, RedisData> region = uncheckedCast(mock(PartitionedRegion.class));
final RedisData returnData = mock(RedisData.class);
when(region.put(any(RedisKey.class), any(RedisData.class))).thenReturn(returnData);
@@ -386,7 +387,7 @@ public class RedisHashTest {
final String baseField = "field";
final String baseValue = "value";
- final Region<RedisKey, RedisData> region = uncheckedCast(mock(Region.class));
+ final Region<RedisKey, RedisData> region = uncheckedCast(mock(PartitionedRegion.class));
final RedisData returnData = mock(RedisData.class);
when(region.put(any(RedisKey.class), any(RedisData.class))).thenReturn(returnData);
@@ -413,7 +414,7 @@ public class RedisHashTest {
final String initialBaseValue = "value";
final String finalBaseValue = "longerValue";
- final Region<RedisKey, RedisData> region = uncheckedCast(mock(Region.class));
+ final Region<RedisKey, RedisData> region = uncheckedCast(mock(PartitionedRegion.class));
final RedisData returnData = mock(RedisData.class);
when(region.put(any(RedisKey.class), any(RedisData.class))).thenReturn(returnData);
@@ -445,7 +446,7 @@ public class RedisHashTest {
final RedisKey key = new RedisKey(stringToBytes("key"));
final String baseField = "field";
final String baseValue = "value";
- final Region<RedisKey, RedisData> region = uncheckedCast(mock(Region.class));
+ final Region<RedisKey, RedisData> region = uncheckedCast(mock(PartitionedRegion.class));
final RedisData returnData = mock(RedisData.class);
when(region.put(any(RedisKey.class), any(RedisData.class))).thenReturn(returnData);
diff --git a/geode-for-redis/src/test/java/org/apache/geode/redis/internal/data/RedisSetTest.java b/geode-for-redis/src/test/java/org/apache/geode/redis/internal/data/RedisSetTest.java
index 5978c9b..b7f365d 100644
--- a/geode-for-redis/src/test/java/org/apache/geode/redis/internal/data/RedisSetTest.java
+++ b/geode-for-redis/src/test/java/org/apache/geode/redis/internal/data/RedisSetTest.java
@@ -16,6 +16,7 @@
package org.apache.geode.redis.internal.data;
+import static org.apache.geode.internal.cache.TXManagerImpl.NOTX;
import static org.apache.geode.redis.internal.data.AbstractRedisData.NO_EXPIRATION;
import static org.apache.geode.redis.internal.data.NullRedisDataStructures.NULL_REDIS_SET;
import static org.apache.geode.redis.internal.data.RedisDataType.REDIS_SET;
@@ -50,6 +51,8 @@ import org.mockito.invocation.InvocationOnMock;
import org.apache.geode.DataSerializer;
import org.apache.geode.cache.Region;
import org.apache.geode.internal.HeapDataOutputStream;
+import org.apache.geode.internal.cache.PartitionedRegion;
+import org.apache.geode.internal.cache.TXId;
import org.apache.geode.internal.serialization.ByteArrayDataInput;
import org.apache.geode.internal.serialization.SerializationContext;
import org.apache.geode.internal.size.ReflectionObjectSizer;
@@ -131,8 +134,69 @@ public class RedisSetTest {
}
@Test
+ public void storeChangesDoesNotStoreDeltaIfTransactionIsInProgress() {
+ Region<RedisKey, RedisData> region = uncheckedCast(mock(PartitionedRegion.class));
+ when(region.put(any(), any())).thenAnswer(invocation -> {
+ assertThat(invocation.getArgument(1, RedisSet.class).hasDelta()).isFalse();
+ return null;
+ });
+
+ TXId txId = mock(TXId.class);
+ when(txId.getUniqId()).thenReturn(5);
+ when(((PartitionedRegion) region).getTXId()).thenReturn(txId);
+
+ RedisSet set = createRedisSet(1, 2);
+ List<byte[]> membersToAdd = Collections.singletonList(new byte[] {3});
+
+ set.sadd(membersToAdd, region, null);
+
+ verify(region).put(any(), any());
+ assertThat(set.hasDelta()).isFalse();
+ }
+
+ @Test
+ public void storeChangesStoresDeltaIfTransactionIsNOTX() {
+ Region<RedisKey, RedisData> region = uncheckedCast(mock(PartitionedRegion.class));
+ when(region.put(any(), any())).thenAnswer(invocation -> {
+ assertThat(invocation.getArgument(1, RedisSet.class).hasDelta()).isTrue();
+ return null;
+ });
+
+ TXId txId = mock(TXId.class);
+ when(txId.getUniqId()).thenReturn(NOTX);
+ when(((PartitionedRegion) region).getTXId()).thenReturn(txId);
+
+ RedisSet set = createRedisSet(1, 2);
+ List<byte[]> membersToAdd = Collections.singletonList(new byte[] {3});
+
+ set.sadd(membersToAdd, region, null);
+
+ verify(region).put(any(), any());
+ assertThat(set.hasDelta()).isFalse();
+ }
+
+ @Test
+ public void storeChangesStoresDeltaIfTransactionIsNull() {
+ Region<RedisKey, RedisData> region = uncheckedCast(mock(PartitionedRegion.class));
+ when(region.put(any(), any())).thenAnswer(invocation -> {
+ assertThat(invocation.getArgument(1, RedisSet.class).hasDelta()).isTrue();
+ return null;
+ });
+
+ when(((PartitionedRegion) region).getTXId()).thenReturn(null);
+
+ RedisSet set = createRedisSet(1, 2);
+ List<byte[]> membersToAdd = Collections.singletonList(new byte[] {3});
+
+ set.sadd(membersToAdd, region, null);
+
+ verify(region).put(any(), any());
+ assertThat(set.hasDelta()).isFalse();
+ }
+
+ @Test
public void sadd_stores_delta_that_is_stable() {
- Region<RedisKey, RedisData> region = uncheckedCast(mock(Region.class));
+ Region<RedisKey, RedisData> region = uncheckedCast(mock(PartitionedRegion.class));
when(region.put(any(), any())).thenAnswer(this::validateDeltaSerialization);
RedisSet set1 = createRedisSet(1, 2);
@@ -148,7 +212,7 @@ public class RedisSetTest {
@Test
public void srem_stores_delta_that_is_stable() {
- Region<RedisKey, RedisData> region = uncheckedCast(mock(Region.class));
+ Region<RedisKey, RedisData> region = uncheckedCast(mock(PartitionedRegion.class));
when(region.put(any(), any())).thenAnswer(this::validateDeltaSerialization);
RedisSet set1 = createRedisSet(1, 2);
@@ -165,7 +229,7 @@ public class RedisSetTest {
@Test
public void sdiffstore_stores_delta_that_is_stable() {
RegionProvider regionProvider = uncheckedCast(mock(RegionProvider.class));
- Region<RedisKey, RedisData> dataRegion = uncheckedCast(mock(Region.class));
+ Region<RedisKey, RedisData> dataRegion = uncheckedCast(mock(PartitionedRegion.class));
RedisSet setDest = createRedisSet(1, 2);
@@ -184,7 +248,7 @@ public class RedisSetTest {
@Test
public void sdiffstore_sets_expiration_time_to_zero() {
RegionProvider regionProvider = uncheckedCast(mock(RegionProvider.class));
- Region<RedisKey, RedisData> dataRegion = uncheckedCast(mock(Region.class));
+ Region<RedisKey, RedisData> dataRegion = uncheckedCast(mock(PartitionedRegion.class));
RedisSet setDest = createRedisSet(1, 2);
setDest.setExpirationTimestamp(dataRegion, null, 100);
@@ -203,7 +267,7 @@ public class RedisSetTest {
@Test
public void setExpirationTimestamp_stores_delta_that_is_stable() {
- Region<RedisKey, RedisData> region = uncheckedCast(mock(Region.class));
+ Region<RedisKey, RedisData> region = uncheckedCast(mock(PartitionedRegion.class));
when(region.put(any(), any())).thenAnswer(this::validateDeltaSerialization);
RedisSet set1 = createRedisSet(1, 2);
@@ -270,7 +334,7 @@ public class RedisSetTest {
@Test
public void bytesInUse_sadd_withOneMember() {
RedisSet set = new RedisSet(new ArrayList<>());
- Region<RedisKey, RedisData> region = uncheckedCast(mock(Region.class));
+ Region<RedisKey, RedisData> region = uncheckedCast(mock(PartitionedRegion.class));
final RedisData returnData = mock(RedisData.class);
when(region.put(any(RedisKey.class), any(RedisData.class))).thenReturn(returnData);
final RedisKey key = new RedisKey(stringToBytes("key"));
@@ -288,7 +352,7 @@ public class RedisSetTest {
@Test
public void bytesInUse_sadd_withMultipleMembers() {
RedisSet set = new RedisSet(new ArrayList<>());
- Region<RedisKey, RedisData> region = uncheckedCast(mock(Region.class));
+ Region<RedisKey, RedisData> region = uncheckedCast(mock(PartitionedRegion.class));
final RedisData returnData = mock(RedisData.class);
when(region.put(any(RedisKey.class), any(RedisData.class))).thenReturn(returnData);
final RedisKey key = new RedisKey(stringToBytes("key"));
@@ -311,7 +375,7 @@ public class RedisSetTest {
/******* remove *******/
@Test
public void size_shouldDecrease_WhenValueIsRemoved() {
- Region<RedisKey, RedisData> region = uncheckedCast(mock(Region.class));
+ Region<RedisKey, RedisData> region = uncheckedCast(mock(PartitionedRegion.class));
final RedisData returnData = mock(RedisData.class);
when(region.put(any(RedisKey.class), any(RedisData.class))).thenReturn(returnData);
final RedisKey key = new RedisKey(stringToBytes("key"));
diff --git a/geode-for-redis/src/test/java/org/apache/geode/redis/internal/data/RedisSortedSetTest.java b/geode-for-redis/src/test/java/org/apache/geode/redis/internal/data/RedisSortedSetTest.java
index 0d20d15..03a68f8 100644
--- a/geode-for-redis/src/test/java/org/apache/geode/redis/internal/data/RedisSortedSetTest.java
+++ b/geode-for-redis/src/test/java/org/apache/geode/redis/internal/data/RedisSortedSetTest.java
@@ -59,6 +59,7 @@ import org.mockito.invocation.InvocationOnMock;
import org.apache.geode.DataSerializer;
import org.apache.geode.cache.Region;
import org.apache.geode.internal.HeapDataOutputStream;
+import org.apache.geode.internal.cache.PartitionedRegion;
import org.apache.geode.internal.serialization.ByteArrayDataInput;
import org.apache.geode.internal.serialization.SerializationContext;
import org.apache.geode.internal.size.ReflectionObjectSizer;
@@ -144,7 +145,7 @@ public class RedisSortedSetTest {
@Test
public void zadd_stores_delta_that_is_stable() {
- Region<RedisKey, RedisData> region = uncheckedCast(mock(Region.class));
+ Region<RedisKey, RedisData> region = uncheckedCast(mock(PartitionedRegion.class));
when(region.put(any(), any())).thenAnswer(this::validateDeltaSerialization);
RedisSortedSet sortedSet1 = createRedisSortedSet("3.14159", "v1", "2.71828", "v2");
List<byte[]> members = singletonList(stringToBytes("v3"));
@@ -160,7 +161,7 @@ public class RedisSortedSetTest {
@Test
public void sortedSetOpStoreResult_stores_delta_that_is_stable() {
RegionProvider regionProvider = uncheckedCast(mock(RegionProvider.class));
- Region<RedisKey, RedisData> dataRegion = uncheckedCast(mock(Region.class));
+ Region<RedisKey, RedisData> dataRegion = uncheckedCast(mock(PartitionedRegion.class));
RedisSortedSet sortedSet1 = createRedisSortedSet("3.14159", "v1", "2.71828", "v2");
when(regionProvider.getTypedRedisDataElseRemove(REDIS_SORTED_SET, null, false))
@@ -185,7 +186,7 @@ public class RedisSortedSetTest {
@Test
public void sortedSetOpStoreResult_sets_expiration_time_to_zero() {
RegionProvider regionProvider = uncheckedCast(mock(RegionProvider.class));
- Region<RedisKey, RedisData> dataRegion = uncheckedCast(mock(Region.class));
+ Region<RedisKey, RedisData> dataRegion = uncheckedCast(mock(PartitionedRegion.class));
RedisSortedSet setDest = createRedisSortedSet("3.14159", "v1", "2.71828", "v2");
setDest.setExpirationTimestamp(dataRegion, null, 100);
@@ -224,7 +225,7 @@ public class RedisSortedSetTest {
@Test
public void setExpirationTimestamp_stores_delta_that_is_stable() {
- Region<RedisKey, RedisData> region = uncheckedCast(mock(Region.class));
+ Region<RedisKey, RedisData> region = uncheckedCast(mock(PartitionedRegion.class));
when(region.put(any(), any())).thenAnswer(this::validateDeltaSerialization);
RedisSortedSet sortedSet1 = createRedisSortedSet("3.14159", "v1", "2.71828", "v2");
@@ -240,7 +241,7 @@ public class RedisSortedSetTest {
String score3 = "998955255.66361191";
RedisSortedSet sortedSet =
spy(createRedisSortedSet(score1, member1, score2, member2, score3, member3));
- Region<RedisKey, RedisData> region = uncheckedCast(mock(Region.class));
+ Region<RedisKey, RedisData> region = uncheckedCast(mock(PartitionedRegion.class));
RedisKey key = new RedisKey();
ArrayList<byte[]> membersToRemove = new ArrayList<>();
membersToRemove.add(stringToBytes("nonExisting"));
@@ -632,7 +633,7 @@ public class RedisSortedSetTest {
public void zpopminRemovesMemberWithLowestScore() {
int originalSize = rangeSortedSet.getSortedSetSize();
RedisSortedSet sortedSet = spy(rangeSortedSet);
- Region<RedisKey, RedisData> region = uncheckedCast(mock(Region.class));
+ Region<RedisKey, RedisData> region = uncheckedCast(mock(PartitionedRegion.class));
RedisKey key = new RedisKey();
int count = 1;
@@ -650,7 +651,7 @@ public class RedisSortedSetTest {
public void zpopminRemovesMembersWithLowestScores_whenCountIsGreaterThanOne() {
int originalSize = rangeSortedSet.getSortedSetSize();
RedisSortedSet sortedSet = spy(rangeSortedSet);
- Region<RedisKey, RedisData> region = uncheckedCast(mock(Region.class));
+ Region<RedisKey, RedisData> region = uncheckedCast(mock(PartitionedRegion.class));
RedisKey key = new RedisKey();
int count = 3;
@@ -669,7 +670,7 @@ public class RedisSortedSetTest {
@Test
public void zpopminRemovesRegionEntryWhenSetBecomesEmpty() {
RedisSortedSet sortedSet = spy(createRedisSortedSet(score1, member1));
- Region<RedisKey, RedisData> region = uncheckedCast(mock(Region.class));
+ Region<RedisKey, RedisData> region = uncheckedCast(mock(PartitionedRegion.class));
RedisKey key = new RedisKey();
List<byte[]> result = sortedSet.zpopmin(region, key, 1);
@@ -687,7 +688,7 @@ public class RedisSortedSetTest {
"1.1", "member3",
"1.1", "member2",
"1.1", "member1"));
- Region<RedisKey, RedisData> region = uncheckedCast(mock(Region.class));
+ Region<RedisKey, RedisData> region = uncheckedCast(mock(PartitionedRegion.class));
RedisKey key = new RedisKey();
List<byte[]> result = sortedSet.zpopmin(region, key, 1);
@@ -698,7 +699,7 @@ public class RedisSortedSetTest {
public void zpopmaxRemovesMemberWithHighestScore() {
int originalSize = rangeSortedSet.getSortedSetSize();
RedisSortedSet sortedSet = spy(rangeSortedSet);
- Region<RedisKey, RedisData> region = uncheckedCast(mock(Region.class));
+ Region<RedisKey, RedisData> region = uncheckedCast(mock(PartitionedRegion.class));
RedisKey key = new RedisKey();
int count = 1;
@@ -716,7 +717,7 @@ public class RedisSortedSetTest {
public void zpopmaxRemovesMembersWithHighestScores_whenCountIsGreaterThanOne() {
int originalSize = rangeSortedSet.getSortedSetSize();
RedisSortedSet sortedSet = spy(rangeSortedSet);
- Region<RedisKey, RedisData> region = uncheckedCast(mock(Region.class));
+ Region<RedisKey, RedisData> region = uncheckedCast(mock(PartitionedRegion.class));
RedisKey key = new RedisKey();
int count = 3;
@@ -735,7 +736,7 @@ public class RedisSortedSetTest {
@Test
public void zpopmaxRemovesRegionEntryWhenSetBecomesEmpty() {
RedisSortedSet sortedSet = spy(createRedisSortedSet(score1, member1));
- Region<RedisKey, RedisData> region = uncheckedCast(mock(Region.class));
+ Region<RedisKey, RedisData> region = uncheckedCast(mock(PartitionedRegion.class));
RedisKey key = new RedisKey();
List<byte[]> result = sortedSet.zpopmax(region, key, 1);
@@ -753,7 +754,7 @@ public class RedisSortedSetTest {
"1.1", "member3",
"1.1", "member2",
"1.1", "member1"));
- Region<RedisKey, RedisData> region = uncheckedCast(mock(Region.class));
+ Region<RedisKey, RedisData> region = uncheckedCast(mock(PartitionedRegion.class));
RedisKey key = new RedisKey();
List<byte[]> result = sortedSet.zpopmax(region, key, 1);
@@ -792,7 +793,7 @@ public class RedisSortedSetTest {
@Test
public void redisSortedSetGetSizeInBytes_isAccurateForAdds() {
- Region<RedisKey, RedisData> mockRegion = uncheckedCast(mock(Region.class));
+ Region<RedisKey, RedisData> mockRegion = uncheckedCast(mock(PartitionedRegion.class));
RedisKey mockKey = mock(RedisKey.class);
ZAddOptions options = new ZAddOptions(ZAddOptions.Exists.NONE, false, false);
RedisSortedSet sortedSet = new RedisSortedSet(Collections.emptyList(), new double[0]);
@@ -815,7 +816,7 @@ public class RedisSortedSetTest {
@Test
public void redisSortedSetGetSizeInBytes_isAccurateForUpdates() {
- Region<RedisKey, RedisData> mockRegion = uncheckedCast(mock(Region.class));
+ Region<RedisKey, RedisData> mockRegion = uncheckedCast(mock(PartitionedRegion.class));
RedisKey mockKey = mock(RedisKey.class);
ZAddOptions options = new ZAddOptions(ZAddOptions.Exists.NONE, false, false);
RedisSortedSet sortedSet = new RedisSortedSet(Collections.emptyList(), new double[0]);
@@ -840,7 +841,7 @@ public class RedisSortedSetTest {
@Test
public void redisSortedSetGetSizeInBytes_isAccurateForRemoves() {
- Region<RedisKey, RedisData> mockRegion = uncheckedCast(mock(Region.class));
+ Region<RedisKey, RedisData> mockRegion = uncheckedCast(mock(PartitionedRegion.class));
RedisKey mockKey = mock(RedisKey.class);
ZAddOptions options = new ZAddOptions(ZAddOptions.Exists.NONE, false, false);
RedisSortedSet sortedSet = new RedisSortedSet(Collections.emptyList(), new double[0]);
@@ -864,7 +865,7 @@ public class RedisSortedSetTest {
@Test
public void redisSortedSetGetSizeInBytes_isAccurateForZpopmax() {
- Region<RedisKey, RedisData> mockRegion = uncheckedCast(mock(Region.class));
+ Region<RedisKey, RedisData> mockRegion = uncheckedCast(mock(PartitionedRegion.class));
RedisKey mockKey = mock(RedisKey.class);
ZAddOptions options = new ZAddOptions(ZAddOptions.Exists.NONE, false, false);
RedisSortedSet sortedSet = new RedisSortedSet(Collections.emptyList(), new double[0]);
@@ -887,7 +888,7 @@ public class RedisSortedSetTest {
@Test
public void redisSortedSetGetSizeInBytes_isAccurateForZpopmin() {
- Region<RedisKey, RedisData> mockRegion = uncheckedCast(mock(Region.class));
+ Region<RedisKey, RedisData> mockRegion = uncheckedCast(mock(PartitionedRegion.class));
RedisKey mockKey = mock(RedisKey.class);
ZAddOptions options = new ZAddOptions(ZAddOptions.Exists.NONE, false, false);
RedisSortedSet sortedSet = new RedisSortedSet(Collections.emptyList(), new double[0]);
diff --git a/geode-for-redis/src/test/java/org/apache/geode/redis/internal/data/RedisStringQuickCheckTest.java b/geode-for-redis/src/test/java/org/apache/geode/redis/internal/data/RedisStringQuickCheckTest.java
index f9c0ffd..903d438 100644
--- a/geode-for-redis/src/test/java/org/apache/geode/redis/internal/data/RedisStringQuickCheckTest.java
+++ b/geode-for-redis/src/test/java/org/apache/geode/redis/internal/data/RedisStringQuickCheckTest.java
@@ -30,6 +30,7 @@ import com.pholser.junit.quickcheck.runner.JUnitQuickcheck;
import org.junit.runner.RunWith;
import org.apache.geode.cache.Region;
+import org.apache.geode.internal.cache.PartitionedRegion;
/**
* Property testing of RedisString.
@@ -41,7 +42,7 @@ public class RedisStringQuickCheckTest {
public void setrangePrefixSuffix(@Size(min = 10, max = 50) ArrayList<Byte> existingByteArray,
@Size(min = 0, max = 10) ArrayList<Byte> valueToAddArray,
@InRange(minInt = 0, maxInt = 60) int offset) {
- Region<RedisKey, RedisData> region = uncheckedCast(mock(Region.class));
+ Region<RedisKey, RedisData> region = uncheckedCast(mock(PartitionedRegion.class));
byte[] existingBytes = Bytes.toArray(existingByteArray);
byte[] valueToAdd = Bytes.toArray(valueToAddArray);
diff --git a/geode-for-redis/src/test/java/org/apache/geode/redis/internal/data/RedisStringTest.java b/geode-for-redis/src/test/java/org/apache/geode/redis/internal/data/RedisStringTest.java
index 95261a1..7c13a74 100644
--- a/geode-for-redis/src/test/java/org/apache/geode/redis/internal/data/RedisStringTest.java
+++ b/geode-for-redis/src/test/java/org/apache/geode/redis/internal/data/RedisStringTest.java
@@ -38,6 +38,7 @@ import org.mockito.invocation.InvocationOnMock;
import org.apache.geode.DataSerializer;
import org.apache.geode.cache.Region;
import org.apache.geode.internal.HeapDataOutputStream;
+import org.apache.geode.internal.cache.PartitionedRegion;
import org.apache.geode.internal.serialization.ByteArrayDataInput;
import org.apache.geode.internal.serialization.SerializationContext;
import org.apache.geode.internal.size.ReflectionObjectSizer;
@@ -75,7 +76,7 @@ public class RedisStringTest {
@Test
public void getsetSetsValueAndReturnsOldValue() {
- Region<RedisKey, RedisData> region = uncheckedCast(mock(Region.class));
+ Region<RedisKey, RedisData> region = uncheckedCast(mock(PartitionedRegion.class));
byte[] oldBytes = {0, 1};
byte[] newBytes = {0, 1, 2};
RedisString string = new RedisString(oldBytes);
@@ -88,7 +89,7 @@ public class RedisStringTest {
@Test
public void appendResizesByteArray() {
- Region<RedisKey, RedisData> region = uncheckedCast(mock(Region.class));
+ Region<RedisKey, RedisData> region = uncheckedCast(mock(PartitionedRegion.class));
RedisString redisString = new RedisString(new byte[] {0, 1});
int redisStringSize = redisString.strlen();
byte[] bytesToAppend = {2, 3, 4, 5};
@@ -99,7 +100,7 @@ public class RedisStringTest {
@Test
public void appendStoresStableDelta() {
- Region<RedisKey, RedisData> region = uncheckedCast(mock(Region.class));
+ Region<RedisKey, RedisData> region = uncheckedCast(mock(PartitionedRegion.class));
final byte[] baseBytes = {'0', '1'};
final byte[] bytesToAppend = {'2', '3'};
@@ -115,7 +116,7 @@ public class RedisStringTest {
@Test
public void setStoresStableDelta() {
- Region<RedisKey, RedisData> region = uncheckedCast(mock(Region.class));
+ Region<RedisKey, RedisData> region = uncheckedCast(mock(PartitionedRegion.class));
final byte[] baseBytes = {'0', '1'};
final byte[] bytesToSet = {'2', '3'};
@@ -131,7 +132,7 @@ public class RedisStringTest {
@Test
public void incrStoresStableDelta() {
- Region<RedisKey, RedisData> region = uncheckedCast(mock(Region.class));
+ Region<RedisKey, RedisData> region = uncheckedCast(mock(PartitionedRegion.class));
final byte[] baseBytes = {'1'};
when(region.put(any(), any()))
@@ -146,7 +147,7 @@ public class RedisStringTest {
@Test
public void incrbyStoresStableDelta() {
- Region<RedisKey, RedisData> region = uncheckedCast(mock(Region.class));
+ Region<RedisKey, RedisData> region = uncheckedCast(mock(PartitionedRegion.class));
final byte[] baseBytes = {'1'};
when(region.put(any(), any()))
@@ -161,7 +162,7 @@ public class RedisStringTest {
@Test
public void incrbyfloatStoresStableDelta() {
- Region<RedisKey, RedisData> region = uncheckedCast(mock(Region.class));
+ Region<RedisKey, RedisData> region = uncheckedCast(mock(PartitionedRegion.class));
final byte[] baseBytes = {'1'};
when(region.put(any(), any()))
@@ -176,7 +177,7 @@ public class RedisStringTest {
@Test
public void setbitStoresStableDelta() {
- Region<RedisKey, RedisData> region = uncheckedCast(mock(Region.class));
+ Region<RedisKey, RedisData> region = uncheckedCast(mock(PartitionedRegion.class));
final byte[] baseBytes = {'0', '1'};
when(region.put(any(), any()))
@@ -206,7 +207,7 @@ public class RedisStringTest {
@Test
public void decrStoresStableDelta() {
- Region<RedisKey, RedisData> region = uncheckedCast(mock(Region.class));
+ Region<RedisKey, RedisData> region = uncheckedCast(mock(PartitionedRegion.class));
final byte[] baseBytes = {'1'};
when(region.put(any(), any()))
@@ -221,7 +222,7 @@ public class RedisStringTest {
@Test
public void decrbyStoresStableDelta() {
- Region<RedisKey, RedisData> region = uncheckedCast(mock(Region.class));
+ Region<RedisKey, RedisData> region = uncheckedCast(mock(PartitionedRegion.class));
final byte[] baseBytes = {'1'};
when(region.put(any(), any()))
@@ -236,7 +237,7 @@ public class RedisStringTest {
@Test
public void decrbyfloatStoresStableDelta() {
- Region<RedisKey, RedisData> region = uncheckedCast(mock(Region.class));
+ Region<RedisKey, RedisData> region = uncheckedCast(mock(PartitionedRegion.class));
final byte[] baseBytes = {'1'};
when(region.put(any(), any()))
@@ -259,7 +260,7 @@ public class RedisStringTest {
@Test
public void incrThrowsArithmeticErrorWhenNotALong() {
- Region<RedisKey, RedisData> region = uncheckedCast(mock(Region.class));
+ Region<RedisKey, RedisData> region = uncheckedCast(mock(PartitionedRegion.class));
byte[] bytes = stringToBytes("10 1");
RedisString string = new RedisString(bytes);
assertThatThrownBy(() -> string.incr(region, null)).isInstanceOf(NumberFormatException.class);
@@ -267,7 +268,7 @@ public class RedisStringTest {
@Test
public void incrErrorsWhenValueOverflows() {
- Region<RedisKey, RedisData> region = uncheckedCast(mock(Region.class));
+ Region<RedisKey, RedisData> region = uncheckedCast(mock(PartitionedRegion.class));
byte[] bytes = longToBytes(Long.MAX_VALUE);
RedisString string = new RedisString(bytes);
assertThatThrownBy(() -> string.incr(region, null)).isInstanceOf(ArithmeticException.class);
@@ -275,7 +276,7 @@ public class RedisStringTest {
@Test
public void incrIncrementsValueAtGivenKey() {
- Region<RedisKey, RedisData> region = uncheckedCast(mock(Region.class));
+ Region<RedisKey, RedisData> region = uncheckedCast(mock(PartitionedRegion.class));
byte[] bytes = stringToBytes("10");
RedisString string = new RedisString(bytes);
string.incr(region, null);
@@ -284,7 +285,7 @@ public class RedisStringTest {
@Test
public void incrbyThrowsNumberFormatExceptionWhenNotALong() {
- Region<RedisKey, RedisData> region = uncheckedCast(mock(Region.class));
+ Region<RedisKey, RedisData> region = uncheckedCast(mock(PartitionedRegion.class));
byte[] bytes = stringToBytes("10 1");
RedisString string = new RedisString(bytes);
assertThatThrownBy(() -> string.incrby(region, null, 2L))
@@ -293,7 +294,7 @@ public class RedisStringTest {
@Test
public void incrbyErrorsWhenValueOverflows() {
- Region<RedisKey, RedisData> region = uncheckedCast(mock(Region.class));
+ Region<RedisKey, RedisData> region = uncheckedCast(mock(PartitionedRegion.class));
byte[] bytes = longToBytes(Long.MAX_VALUE);
RedisString string = new RedisString(bytes);
assertThatThrownBy(() -> string.incrby(region, null, 2L))
@@ -302,7 +303,7 @@ public class RedisStringTest {
@Test
public void incrbyIncrementsValueByGivenLong() {
- Region<RedisKey, RedisData> region = uncheckedCast(mock(Region.class));
+ Region<RedisKey, RedisData> region = uncheckedCast(mock(PartitionedRegion.class));
byte[] bytes = stringToBytes("10");
RedisString string = new RedisString(bytes);
string.incrby(region, null, 2L);
@@ -311,7 +312,7 @@ public class RedisStringTest {
@Test
public void incrbyfloatThrowsArithmeticErrorWhenNotADouble() {
- Region<RedisKey, RedisData> region = uncheckedCast(mock(Region.class));
+ Region<RedisKey, RedisData> region = uncheckedCast(mock(PartitionedRegion.class));
byte[] bytes = stringToBytes("10 1");
RedisString string = new RedisString(bytes);
assertThatThrownBy(() -> string.incrbyfloat(region, null, new BigDecimal("1.1")))
@@ -320,7 +321,7 @@ public class RedisStringTest {
@Test
public void incrbyfloatIncrementsValueByGivenFloat() {
- Region<RedisKey, RedisData> region = uncheckedCast(mock(Region.class));
+ Region<RedisKey, RedisData> region = uncheckedCast(mock(PartitionedRegion.class));
byte[] bytes = stringToBytes("10");
RedisString string = new RedisString(bytes);
string.incrbyfloat(region, null, new BigDecimal("2.20"));
@@ -329,7 +330,7 @@ public class RedisStringTest {
@Test
public void decrThrowsNumberFormatExceptionWhenNotALong() {
- Region<RedisKey, RedisData> region = uncheckedCast(mock(Region.class));
+ Region<RedisKey, RedisData> region = uncheckedCast(mock(PartitionedRegion.class));
byte[] bytes = {0};
RedisString string = new RedisString(bytes);
assertThatThrownBy(() -> string.decr(region, null)).isInstanceOf(NumberFormatException.class);
@@ -337,7 +338,7 @@ public class RedisStringTest {
@Test
public void decrThrowsArithmeticExceptionWhenDecrementingMin() {
- Region<RedisKey, RedisData> region = uncheckedCast(mock(Region.class));
+ Region<RedisKey, RedisData> region = uncheckedCast(mock(PartitionedRegion.class));
byte[] bytes = longToBytes(Long.MIN_VALUE);
RedisString string = new RedisString(bytes);
assertThatThrownBy(() -> string.decr(region, null)).isInstanceOf(ArithmeticException.class);
@@ -345,7 +346,7 @@ public class RedisStringTest {
@Test
public void decrDecrementsValue() {
- Region<RedisKey, RedisData> region = uncheckedCast(mock(Region.class));
+ Region<RedisKey, RedisData> region = uncheckedCast(mock(PartitionedRegion.class));
byte[] bytes = stringToBytes("10");
RedisString string = new RedisString(bytes);
string.decr(region, null);
@@ -354,7 +355,7 @@ public class RedisStringTest {
@Test
public void decrbyThrowsNumberFormatExceptionWhenNotALong() {
- Region<RedisKey, RedisData> region = uncheckedCast(mock(Region.class));
+ Region<RedisKey, RedisData> region = uncheckedCast(mock(PartitionedRegion.class));
byte[] bytes = {1};
RedisString string = new RedisString(bytes);
assertThatThrownBy(() -> string.decrby(region, null, 2))
@@ -363,7 +364,7 @@ public class RedisStringTest {
@Test
public void decrbyThrowsArithmeticExceptionWhenDecrementingMin() {
- Region<RedisKey, RedisData> region = uncheckedCast(mock(Region.class));
+ Region<RedisKey, RedisData> region = uncheckedCast(mock(PartitionedRegion.class));
byte[] bytes = longToBytes(Long.MIN_VALUE);
RedisString string = new RedisString(bytes);
assertThatThrownBy(() -> string.decrby(region, null, 2))
@@ -372,7 +373,7 @@ public class RedisStringTest {
@Test
public void decrbyDecrementsValue() {
- Region<RedisKey, RedisData> region = uncheckedCast(mock(Region.class));
+ Region<RedisKey, RedisData> region = uncheckedCast(mock(PartitionedRegion.class));
byte[] bytes = stringToBytes("10");
RedisString string = new RedisString(bytes);
string.decrby(region, null, 2);
@@ -425,7 +426,7 @@ public class RedisStringTest {
@Test
public void setExpirationTimestamp_stores_delta_that_is_stable() {
- Region<RedisKey, RedisData> region = uncheckedCast(mock(Region.class));
+ Region<RedisKey, RedisData> region = uncheckedCast(mock(PartitionedRegion.class));
final byte[] bytes = {0, 1};
when(region.put(any(), any()))
.thenAnswer(invocation -> validateDeltaSerialization(bytes, invocation));