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 9a8b809 Sizing works for certain values of 'works'
9a8b809 is described below
commit 9a8b80985cd4e23ff8a16256d4359e465eb3a701
Author: Ray Ingles <[email protected]>
AuthorDate: Wed Jan 12 16:50:51 2022 -0500
Sizing works for certain values of 'works'
---
.../internal/data/collections/SizeableList.java | 24 +++++++++++++++-------
.../data/collections/SizeableListTest.java | 10 ++-------
2 files changed, 19 insertions(+), 15 deletions(-)
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 9179072..5320827 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
@@ -26,19 +26,23 @@ public abstract class SizeableList<K> extends LinkedList<K>
implements Sizeable
private static final long serialVersionUID = -8255284217236712060L;
private static final int SIZEABLE_LIST_OVERHEAD =
memoryOverhead(SizeableList.class);
- private static final int NODE_OVERHEAD = 4;
+ private static final int NODE_OVERHEAD = 24;
private int memberOverhead;
public SizeableList(Collection<K> collection) {
for (K element : collection) {
- this.add(0, element);
+ add(0, element);
}
}
- @Override
+ public void add(int index, K k) {
+ super.add(index, k);
+ memberOverhead += sizeElement(k) + NODE_OVERHEAD;
+ }
+
public boolean add(K k) {
- boolean added = this.add(k);
+ boolean added = super.add(k);
if (added) {
memberOverhead += sizeElement(k) + NODE_OVERHEAD;
}
@@ -46,11 +50,17 @@ public abstract class SizeableList<K> extends LinkedList<K>
implements Sizeable
}
@SuppressWarnings("unchecked")
- @Override
+ public K remove(int index) {
+ K element = super.remove(index);
+ memberOverhead -= sizeElement(element) + NODE_OVERHEAD;
+ return element;
+ }
+
+ @SuppressWarnings("unchecked")
public boolean remove(Object k) {
- boolean removed = this.remove(k);
+ boolean removed = super.remove(k);
if (removed) {
- memberOverhead -= sizeElement(k) + NODE_OVERHEAD;
+ memberOverhead -= sizeElement((K) k) + NODE_OVERHEAD;
}
return removed;
}
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 1d6c4cc..f5e9668 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
@@ -48,15 +48,9 @@ public class SizeableListTest {
}
@Test
- public void getSizeInBytesForSingleElementList() {
- RedisList.ElementList list = createTestElementList(1);
- assertThat(list.getSizeInBytes()).isEqualTo(expectedSize(list));
- }
-
- @Test
public void getSizeInBytesIsAccurateForByteArrays() {
List<byte[]> initialElements = new ArrayList<>();
- int initialNumberOfElements = 100;
+ int initialNumberOfElements = 20;
int elementsToAdd = 100;
for (int i = 0; i < initialNumberOfElements; ++i) {
initialElements.add(new byte[] {(byte) i});
@@ -74,7 +68,7 @@ public class SizeableListTest {
// Remove all the members and assert that the size is correct after each
remove
for (int i = 0; i < initialNumberOfElements + elementsToAdd; ++i) {
- list.remove(new byte[] {(byte) i});
+ list.remove(0);
assertThat(list.getSizeInBytes()).isEqualTo(expectedSize(list));
}
assertThat(list.size()).isEqualTo(0);