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 7881f3e Tests passing
7881f3e is described below
commit 7881f3efecdb0e0ebd7d19168dc88116e9729b11
Author: Ray Ingles <[email protected]>
AuthorDate: Tue Jan 11 15:18:31 2022 -0500
Tests passing
---
.../commands/executor/list/LPushExecutor.java | 2 +-
.../geode/redis/internal/data/NullRedisList.java | 3 ++-
.../geode/redis/internal/data/RedisList.java | 22 ++++++++--------------
.../internal/data/collections/SizeableList.java | 16 +++++-----------
.../serialization/DataSerializableFixedID.java | 3 ++-
5 files changed, 18 insertions(+), 28 deletions(-)
diff --git
a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/commands/executor/list/LPushExecutor.java
b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/commands/executor/list/LPushExecutor.java
index 2449c2b..efa5085 100755
---
a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/commands/executor/list/LPushExecutor.java
+++
b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/commands/executor/list/LPushExecutor.java
@@ -33,7 +33,7 @@ public class LPushExecutor implements CommandExecutor {
Region<RedisKey, RedisData> region = context.getRegion();
RedisKey key = command.getKey();
- List<byte[]> elementsToAdd = new ArrayList<>(commandElements.subList(2,
commandElements.size()));
+ List<byte[]> elementsToAdd = commandElements.subList(2,
commandElements.size());
long entriesAdded = context.listLockedExecute(key, false,
list -> list.lpush(elementsToAdd, region, key));
diff --git
a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/NullRedisList.java
b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/NullRedisList.java
index 699e0e0..2637fbf 100644
---
a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/NullRedisList.java
+++
b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/NullRedisList.java
@@ -34,7 +34,8 @@ class NullRedisList extends RedisList {
@Override
public long lpush(List<byte[]> elementsToAdd, Region<RedisKey, RedisData>
region, RedisKey key) {
- region.create(key, new RedisList(elementsToAdd));
+ RedisList newList = new RedisList(elementsToAdd);
+ region.create(key, newList);
return elementsToAdd.size();
}
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 5da9685..3338ae7 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
@@ -16,7 +16,6 @@
package org.apache.geode.redis.internal.data;
-import static java.util.Collections.emptyList;
import static org.apache.geode.internal.JvmSizeUtils.memoryOverhead;
import static org.apache.geode.redis.internal.data.RedisDataType.REDIS_LIST;
@@ -24,7 +23,7 @@ import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import java.util.Collection;
-import java.util.LinkedList;
+import java.util.Collections;
import java.util.List;
import java.util.Objects;
@@ -40,7 +39,6 @@ import
org.apache.geode.redis.internal.data.delta.RemoveByteArrays;
public class RedisList extends AbstractRedisData {
protected static final int REDIS_LIST_OVERHEAD =
memoryOverhead(RedisList.class);
-
private ElementList elements;
public RedisList(Collection<byte[]> collection) {
@@ -100,12 +98,12 @@ public class RedisList extends AbstractRedisData {
@Override
public void applyAddByteArrayDelta(byte[] bytes) {
- appendElement(bytes);
+ prependElement(bytes);
}
@Override
public void applyRemoveByteArrayDelta(byte[] bytes) {
- membersRemove(bytes);
+ elementRemove(bytes);
}
/**
@@ -128,7 +126,7 @@ public class RedisList extends AbstractRedisData {
throws IOException, ClassNotFoundException {
super.fromData(in, context);
int size = DataSerializer.readPrimitiveInt(in);
- elements = new ElementList(size);
+ elements = new ElementList(Collections.emptyList()); //TODO: zero arg
constructor!!
for (int i = 0; i < size; ++i) {
elements.add(DataSerializer.readByteArray(in));
}
@@ -151,7 +149,7 @@ public class RedisList extends AbstractRedisData {
}
@VisibleForTesting
- synchronized boolean membersRemove(byte[] memberToRemove) {
+ synchronized boolean elementRemove(byte[] memberToRemove) {
return elements.remove(memberToRemove);
}
@@ -176,13 +174,13 @@ public class RedisList extends AbstractRedisData {
if (!super.equals(o)) {
return false;
}
- RedisList redisSet = (RedisList) o;
+ RedisList redisList = (RedisList) o;
- if (redisSet.elements.size() != elements.size()) {
+ if (redisList.elements.size() != elements.size()) {
return false;
}
for (byte[] element : elements) {
- if (!redisSet.elements.contains(element)) {
+ if (!redisList.elements.contains(element)) {
return false;
}
}
@@ -214,10 +212,6 @@ public class RedisList extends AbstractRedisData {
super(initialElements);
}
- public ElementList(int size) {
- super(size);
- }
-
@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 7249f5e..1747413 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
@@ -30,23 +30,17 @@ public abstract class SizeableList<K> extends LinkedList<K>
implements Sizeable
memoryOverhead(SizeableList.class);
private int memberOverhead;
- private List<K> elements;
public SizeableList(Collection<K> collection) {
- elements = new ArrayList<>(collection.size());
- for (K element: collection) {
- add(element);
+ for(K element: collection) {
+ this.add(0, element);
}
- }
-
-
- public SizeableList(int size) {
- elements = new LinkedList<>();
+// super(collection);
}
@Override
public boolean add(K k) {
- boolean added = elements.add(k);
+ boolean added = this.add(k);
if (added) {
memberOverhead += sizeElement(k) + 4; // TODO: Figure out sizing.
}
@@ -56,7 +50,7 @@ public abstract class SizeableList<K> extends LinkedList<K>
implements Sizeable
@SuppressWarnings("unchecked")
@Override
public boolean remove(Object k) {
- boolean removed = elements.remove(k);
+ boolean removed = this.remove(k);
if (removed) {
memberOverhead -= sizeElement((K) k);
}
diff --git
a/geode-serialization/src/main/java/org/apache/geode/internal/serialization/DataSerializableFixedID.java
b/geode-serialization/src/main/java/org/apache/geode/internal/serialization/DataSerializableFixedID.java
index 2e29996..19e28d4 100644
---
a/geode-serialization/src/main/java/org/apache/geode/internal/serialization/DataSerializableFixedID.java
+++
b/geode-serialization/src/main/java/org/apache/geode/internal/serialization/DataSerializableFixedID.java
@@ -690,9 +690,10 @@ public interface DataSerializableFixedID extends
SerializationVersions, BasicSer
short REDIS_STRING_ID = 2187;
short REDIS_HASH_ID = 2188;
short REDIS_NULL_DATA_ID = 2189;
- short REDIS_LIST_ID = 2190;
+ // unused 2190;
short REDIS_MEMBER_INFO_ID = 2191;
short REDIS_SORTED_SET_ID = 2192;
+ short REDIS_LIST_ID = 2193;
// NOTE, codes > 65535 will take 4 bytes to serialize
/**