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;
   }
 

Reply via email to