This is an automated email from the ASF dual-hosted git repository.
ringles pushed a commit to branch
GEODE-9892-Create-Infrastructure-for-Redis-Lists
in repository https://gitbox.apache.org/repos/asf/geode.git
The following commit(s) were added to
refs/heads/GEODE-9892-Create-Infrastructure-for-Redis-Lists by this push:
new 71dc96b Clean up test code, preliminary sizing work
71dc96b is described below
commit 71dc96b0286acab5f190e8b95d039a364c593c1f
Author: Ray Ingles <[email protected]>
AuthorDate: Wed Jan 12 11:45:55 2022 -0500
Clean up test code, preliminary sizing work
---
.../list/AbstractListsIntegrationTest.java | 59 ++++++++++------------
.../geode/redis/internal/data/RedisList.java | 4 ++
.../internal/data/collections/SizeableList.java | 12 ++---
.../data/collections/SizeableListTest.java | 2 +-
4 files changed, 37 insertions(+), 40 deletions(-)
diff --git
a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/list/AbstractListsIntegrationTest.java
b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/list/AbstractListsIntegrationTest.java
index 5282340..06dda88 100755
---
a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/list/AbstractListsIntegrationTest.java
+++
b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/list/AbstractListsIntegrationTest.java
@@ -32,9 +32,11 @@ import org.apache.geode.test.awaitility.GeodeAwaitility;
public abstract class AbstractListsIntegrationTest implements
RedisIntegrationTest {
- private JedisCluster jedis;
+ public static final String KEY = "key";
+ public static final String PREEXISTING_VALUE = "preexistingValue";
private static final int REDIS_CLIENT_TIMEOUT =
Math.toIntExact(GeodeAwaitility.getTimeout().toMillis());
+ private JedisCluster jedis;
@Before
public void setUp() {
@@ -54,30 +56,26 @@ public abstract class AbstractListsIntegrationTest
implements RedisIntegrationTe
@Test
public void lpushErrors_withExistingKey_ofWrongType() {
- String key = "key";
- String stringValue = "preexistingValue";
String[] setValue = new String[1];
setValue[0] = "set value that should never get added";
- jedis.set(key, stringValue);
- assertThatThrownBy(() -> jedis.lpush(key, setValue))
+ jedis.set(KEY, PREEXISTING_VALUE);
+ assertThatThrownBy(() -> jedis.lpush(KEY, setValue))
.hasMessageContaining("Operation against a key holding the wrong kind
of value");
}
@Test
public void
lpush_withExistingKey_ofWrongType_shouldNotOverWriteExistingKey() {
- String key = "key";
- String stringValue = "preexistingValue";
String[] setValue = new String[1];
setValue[0] = "set value that should never get added";
- jedis.set(key, stringValue);
+ jedis.set(KEY, PREEXISTING_VALUE);
- assertThatThrownBy(() -> jedis.lpush(key,
setValue)).isInstanceOf(JedisDataException.class);
+ assertThatThrownBy(() -> jedis.lpush(KEY,
setValue)).isInstanceOf(JedisDataException.class);
- String result = jedis.get(key);
+ String result = jedis.get(KEY);
- assertThat(result).isEqualTo(stringValue);
+ assertThat(result).isEqualTo(PREEXISTING_VALUE);
}
@Test
@@ -87,30 +85,30 @@ public abstract class AbstractListsIntegrationTest
implements RedisIntegrationTe
blob[i] = (byte) i;
}
- jedis.lpush("key".getBytes(), blob, blob);
+ jedis.lpush(KEY.getBytes(), blob, blob);
- byte[] result = jedis.lpop("key".getBytes());
+ byte[] result = jedis.lpop(KEY.getBytes());
assertThat(result).containsExactly(blob);
- result = jedis.lpop("key".getBytes());
+ result = jedis.lpop(KEY.getBytes());
assertThat(result).containsExactly(blob);
}
@Test
public void lpop_withStringFails() {
- jedis.set("string", "value");
+ jedis.set("string", PREEXISTING_VALUE);
assertThatThrownBy(() ->
jedis.lpop("string")).hasMessageContaining("WRONGTYPE");
}
@Test
public void lpop_withNonExistentKey_returnsNull() {
- assertThat(jedis.lpop("non existent")).isNull();
+ assertThat(jedis.lpop("nonexistent")).isNull();
}
@Test
public void lpop_returnsOneMember() {
- jedis.lpush("key", "m1", "m2");
- String result = jedis.lpop("key");
- assertThat(result).isIn("m1", "m2");
+ jedis.lpush(KEY, "e1", "e2");
+ String result = jedis.lpop(KEY);
+ assertThat(result).isIn("e1", "e2");
}
@Test
@@ -125,20 +123,19 @@ public abstract class AbstractListsIntegrationTest
implements RedisIntegrationTe
@Test
public void llen_returnsListLength() {
- jedis.lpush("key", "m1", "m2", "m3");
- assertThat(jedis.llen("key")).isEqualTo(3L);
+ jedis.lpush(KEY, "e1", "e2", "e3");
+ assertThat(jedis.llen(KEY)).isEqualTo(3L);
- String result = jedis.lpop("key");
- assertThat(result).isEqualTo("m3");
- assertThat(jedis.llen("key")).isEqualTo(2L);
+ String result = jedis.lpop(KEY);
+ assertThat(result).isEqualTo("e3");
+ assertThat(jedis.llen(KEY)).isEqualTo(2L);
- result = jedis.lpop("key");
- assertThat(result).isEqualTo("m2");
- assertThat(jedis.llen("key")).isEqualTo(1L);
+ result = jedis.lpop(KEY);
+ assertThat(result).isEqualTo("e2");
+ assertThat(jedis.llen(KEY)).isEqualTo(1L);
- result = jedis.lpop("key");
- assertThat(result).isEqualTo("m1");
- assertThat(jedis.llen("key")).isEqualTo(0L);
+ result = jedis.lpop(KEY);
+ assertThat(result).isEqualTo("e1");
+ assertThat(jedis.llen(KEY)).isEqualTo(0L);
}
-
}
diff --git
a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/RedisList.java
b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/RedisList.java
index 3338ae7..d1b672e 100644
---
a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/RedisList.java
+++
b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/RedisList.java
@@ -212,6 +212,10 @@ public class RedisList extends AbstractRedisData {
super(initialElements);
}
+ public ElementList() {
+ super(Collections.emptyList());
+ }
+
@Override
protected int sizeElement(byte[] element) {
return memoryOverhead(element);
diff --git
a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/collections/SizeableList.java
b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/collections/SizeableList.java
index 1747413..83426ac 100644
---
a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/collections/SizeableList.java
+++
b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/collections/SizeableList.java
@@ -17,17 +17,16 @@ package org.apache.geode.redis.internal.data.collections;
import static org.apache.geode.internal.JvmSizeUtils.memoryOverhead;
-import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedList;
-import java.util.List;
import org.apache.geode.internal.size.Sizeable;
public abstract class SizeableList<K> extends LinkedList<K> implements
Sizeable {
- private static final long serialVersionUID = 9174920505089089517L;
+// private static final long serialVersionUID = 9174920505089089517L;
private static final int SIZEABLE_LIST_OVERHEAD =
memoryOverhead(SizeableList.class);
+ private static final int NODE_OVERHEAD = 4;
private int memberOverhead;
@@ -35,14 +34,13 @@ public abstract class SizeableList<K> extends LinkedList<K>
implements Sizeable
for(K element: collection) {
this.add(0, element);
}
-// super(collection);
}
@Override
public boolean add(K k) {
boolean added = this.add(k);
if (added) {
- memberOverhead += sizeElement(k) + 4; // TODO: Figure out sizing.
+ memberOverhead += sizeElement(k) + NODE_OVERHEAD;
}
return added;
}
@@ -52,15 +50,13 @@ public abstract class SizeableList<K> extends LinkedList<K>
implements Sizeable
public boolean remove(Object k) {
boolean removed = this.remove(k);
if (removed) {
- memberOverhead -= sizeElement((K) k);
+ memberOverhead -= sizeElement(k) + NODE_OVERHEAD;
}
return removed;
}
@Override
public int getSizeInBytes() {
- // The object referenced by the "strategy" field is not sized
- // since it is usually a singleton instance.
return SIZEABLE_LIST_OVERHEAD + memberOverhead;
}
diff --git
a/geode-for-redis/src/test/java/org/apache/geode/redis/internal/data/collections/SizeableListTest.java
b/geode-for-redis/src/test/java/org/apache/geode/redis/internal/data/collections/SizeableListTest.java
index d18ebbb..ba6207c 100644
---
a/geode-for-redis/src/test/java/org/apache/geode/redis/internal/data/collections/SizeableListTest.java
+++
b/geode-for-redis/src/test/java/org/apache/geode/redis/internal/data/collections/SizeableListTest.java
@@ -38,7 +38,7 @@ public class SizeableListTest {
for (int i = 0; i < size; ++i) {
initialElements.add(new byte[] {(byte) i});
}
- RedisList.ElementList list = new RedisList.ElementList(0);
+ RedisList.ElementList list = new RedisList.ElementList(initialElements);
return list;
}