Initial commit
diff --git a/geode-for-redis/src/acceptanceTest/java/org/apache/geode/redis/internal/commands/executor/list/RedisListNativeRedisAcceptanceTest.java b/geode-for-redis/src/acceptanceTest/java/org/apache/geode/redis/internal/commands/executor/list/RedisListNativeRedisAcceptanceTest.java
new file mode 100644
index 0000000..9de54ea
--- /dev/null
+++ b/geode-for-redis/src/acceptanceTest/java/org/apache/geode/redis/internal/commands/executor/list/RedisListNativeRedisAcceptanceTest.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.apache.geode.redis.internal.commands.executor.list;
+
+
+import org.junit.ClassRule;
+
+import org.apache.geode.redis.NativeRedisClusterTestRule;
+
+public class RedisListNativeRedisAcceptanceTest extends AbstractRedisListIntegrationTest {
+
+ @ClassRule
+ public static NativeRedisClusterTestRule redis = new NativeRedisClusterTestRule();
+
+ @Override
+ public int getPort() {
+ return redis.getExposedPorts().get(0);
+ }
+
+ @Override
+ public void flushAll() {
+ redis.flushAll();
+ }
+
+}
diff --git a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/list/AbstractRedisListIntegrationTest.java b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/list/AbstractRedisListIntegrationTest.java
new file mode 100644
index 0000000..446016f
--- /dev/null
+++ b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/list/AbstractRedisListIntegrationTest.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.apache.geode.redis.internal.commands.executor.list;
+
+import static org.apache.geode.test.dunit.rules.RedisClusterStartupRule.BIND_ADDRESS;
+import static org.apache.geode.test.dunit.rules.RedisClusterStartupRule.REDIS_CLIENT_TIMEOUT;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import redis.clients.jedis.HostAndPort;
+import redis.clients.jedis.JedisCluster;
+
+import org.apache.geode.redis.RedisIntegrationTest;
+
+public abstract class AbstractRedisListIntegrationTest implements RedisIntegrationTest {
+ private JedisCluster jedis;
+
+ @Before
+ public void setUp() {
+ jedis = new JedisCluster(new HostAndPort(BIND_ADDRESS, getPort()), REDIS_CLIENT_TIMEOUT);
+ }
+
+ @After
+ public void tearDown() {
+ flushAll();
+ jedis.close();
+ }
+
+ @Test
+ public void firstTest() {
+ }
+
+}
diff --git a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/list/RedisListIntegrationTest.java b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/list/RedisListIntegrationTest.java
new file mode 100644
index 0000000..4eb8188
--- /dev/null
+++ b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/list/RedisListIntegrationTest.java
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.apache.geode.redis.internal.commands.executor.list;
+
+
+import org.junit.ClassRule;
+
+import org.apache.geode.redis.GeodeRedisServerRule;
+
+public class RedisListIntegrationTest extends AbstractRedisListIntegrationTest {
+
+ @ClassRule
+ public static GeodeRedisServerRule server = new GeodeRedisServerRule();
+
+ @Override
+ public int getPort() {
+ return server.getPort();
+ }
+}
diff --git a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/GeodeRedisService.java b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/GeodeRedisService.java
index 1573ffe..6a72f37 100644
--- a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/GeodeRedisService.java
+++ b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/GeodeRedisService.java
@@ -31,6 +31,7 @@
import org.apache.geode.redis.internal.data.NullRedisData;
import org.apache.geode.redis.internal.data.RedisHash;
import org.apache.geode.redis.internal.data.RedisKey;
+import org.apache.geode.redis.internal.data.RedisList;
import org.apache.geode.redis.internal.data.RedisSet;
import org.apache.geode.redis.internal.data.RedisSortedSet;
import org.apache.geode.redis.internal.data.RedisString;
@@ -60,6 +61,7 @@
registrar.register(DataSerializableFixedID.REDIS_KEY, RedisKey.class);
registrar.register(DataSerializableFixedID.PUBLISH_REQUEST,
Publisher.PublishRequest.class);
+ registrar.register(DataSerializableFixedID.REDIS_LIST_ID, RedisList.class);
registrar.register(DataSerializableFixedID.REDIS_SET_ID, RedisSet.class);
registrar.register(DataSerializableFixedID.REDIS_STRING_ID, RedisString.class);
registrar.register(DataSerializableFixedID.REDIS_HASH_ID, RedisHash.class);
diff --git a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/commands/RedisCommandType.java b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/commands/RedisCommandType.java
index 03a9d8e..1ef570f 100755
--- a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/commands/RedisCommandType.java
+++ b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/commands/RedisCommandType.java
@@ -75,6 +75,9 @@
import org.apache.geode.redis.internal.commands.executor.key.ScanExecutor;
import org.apache.geode.redis.internal.commands.executor.key.TTLExecutor;
import org.apache.geode.redis.internal.commands.executor.key.TypeExecutor;
+import org.apache.geode.redis.internal.commands.executor.list.LLenExecutor;
+import org.apache.geode.redis.internal.commands.executor.list.LPopExecutor;
+import org.apache.geode.redis.internal.commands.executor.list.LPushExecutor;
import org.apache.geode.redis.internal.commands.executor.pubsub.PsubscribeExecutor;
import org.apache.geode.redis.internal.commands.executor.pubsub.PubSubExecutor;
import org.apache.geode.redis.internal.commands.executor.pubsub.PublishExecutor;
@@ -293,6 +296,12 @@
ZUNIONSTORE(new ZUnionStoreExecutor(), SUPPORTED,
new Parameter().min(4).flags(WRITE, DENYOOM, MOVABLEKEYS)),
+ /************** Lists *****************/
+
+ LLEN(new LLenExecutor(), SUPPORTED, new Parameter().exact(2).flags(READONLY, FAST)),
+ LPOP(new LPopExecutor(), SUPPORTED, new Parameter().min(2).flags(WRITE, FAST)),
+ LPUSH(new LPushExecutor(), SUPPORTED, new Parameter().min(3).flags(WRITE, DENYOOM, FAST)),
+
/************* Server *****************/
COMMAND(new COMMANDCommandExecutor(), SUPPORTED, new Parameter().min(1).firstKey(0).flags(RANDOM,
LOADING, STALE)),
diff --git a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/commands/executor/list/LLenExecutor.java b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/commands/executor/list/LLenExecutor.java
new file mode 100644
index 0000000..c4b6353
--- /dev/null
+++ b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/commands/executor/list/LLenExecutor.java
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.apache.geode.redis.internal.commands.executor.list;
+
+
+import org.apache.geode.cache.Region;
+import org.apache.geode.redis.internal.commands.Command;
+import org.apache.geode.redis.internal.commands.executor.CommandExecutor;
+import org.apache.geode.redis.internal.commands.executor.RedisResponse;
+import org.apache.geode.redis.internal.data.RedisData;
+import org.apache.geode.redis.internal.data.RedisKey;
+import org.apache.geode.redis.internal.netty.ExecutionHandlerContext;
+
+public class LLenExecutor implements CommandExecutor {
+
+ @Override
+ public RedisResponse executeCommand(Command command, ExecutionHandlerContext context) {
+ Region<RedisKey, RedisData> region = context.getRegion();
+ RedisKey key = command.getKey();
+
+ int result = context.listLockedExecute(key, true,
+ list -> list.llen());
+
+ return RedisResponse.integer(result);
+ }
+}
diff --git a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/commands/executor/list/LPopExecutor.java b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/commands/executor/list/LPopExecutor.java
new file mode 100644
index 0000000..d7bcd51
--- /dev/null
+++ b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/commands/executor/list/LPopExecutor.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.apache.geode.redis.internal.commands.executor.list;
+
+
+
+import org.apache.geode.cache.Region;
+import org.apache.geode.redis.internal.commands.Command;
+import org.apache.geode.redis.internal.commands.executor.CommandExecutor;
+import org.apache.geode.redis.internal.commands.executor.RedisResponse;
+import org.apache.geode.redis.internal.commands.parameters.RedisParametersMismatchException;
+import org.apache.geode.redis.internal.data.RedisData;
+import org.apache.geode.redis.internal.data.RedisKey;
+import org.apache.geode.redis.internal.netty.ExecutionHandlerContext;
+
+public class LPopExecutor implements CommandExecutor {
+
+ @Override
+ public RedisResponse executeCommand(Command command, ExecutionHandlerContext context) {
+ Region<RedisKey, RedisData> region = context.getRegion();
+ RedisKey key = command.getKey();
+ // TODO: Size check needed until we implement 'count' arg (Redis 6.2+)
+ if (command.getProcessedCommand().size() > 2) {
+ throw new RedisParametersMismatchException(command.wrongNumberOfArgumentsErrorMessage());
+ }
+ byte[] popped = context.listLockedExecute(key, false,
+ list -> list.lpop(region, key));
+
+ return RedisResponse.bulkString(popped);
+ }
+}
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
new file mode 100644
index 0000000..2b6973e
--- /dev/null
+++ b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/commands/executor/list/LPushExecutor.java
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.apache.geode.redis.internal.commands.executor.list;
+
+import java.util.List;
+
+import org.apache.geode.cache.Region;
+import org.apache.geode.redis.internal.commands.Command;
+import org.apache.geode.redis.internal.commands.executor.CommandExecutor;
+import org.apache.geode.redis.internal.commands.executor.RedisResponse;
+import org.apache.geode.redis.internal.data.RedisData;
+import org.apache.geode.redis.internal.data.RedisKey;
+import org.apache.geode.redis.internal.netty.ExecutionHandlerContext;
+
+public class LPushExecutor implements CommandExecutor {
+
+ @Override
+ public RedisResponse executeCommand(Command command, ExecutionHandlerContext context) {
+ List<byte[]> commandElements = command.getProcessedCommand();
+ Region<RedisKey, RedisData> region = context.getRegion();
+ RedisKey key = command.getKey();
+
+ List<byte[]> elementsToAdd = commandElements.subList(2, commandElements.size());
+
+ long entriesAdded = context.listLockedExecute(key, false,
+ list -> list.lpush(elementsToAdd, region, key));
+
+ return RedisResponse.integer(entriesAdded);
+ }
+}
diff --git a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/NullRedisDataStructures.java b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/NullRedisDataStructures.java
index e0e750e..5f16975 100644
--- a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/NullRedisDataStructures.java
+++ b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/NullRedisDataStructures.java
@@ -20,4 +20,5 @@
public static final NullRedisSortedSet NULL_REDIS_SORTED_SET = new NullRedisSortedSet();
public static final NullRedisHash NULL_REDIS_HASH = new NullRedisHash();
public static final NullRedisData NULL_REDIS_DATA = new NullRedisData();
+ public static final NullRedisList NULL_REDIS_LIST = new NullRedisList();
}
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
new file mode 100644
index 0000000..4104cbc
--- /dev/null
+++ b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/NullRedisList.java
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package org.apache.geode.redis.internal.data;
+
+class NullRedisList extends RedisList {
+
+ NullRedisList() {
+ super();
+ }
+
+ @Override
+ public boolean isNull() {
+ return true;
+ }
+
+}
diff --git a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/RedisDataType.java b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/RedisDataType.java
index e44eafe..dfb26c6 100755
--- a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/RedisDataType.java
+++ b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/RedisDataType.java
@@ -18,6 +18,7 @@
import static org.apache.geode.redis.internal.data.NullRedisDataStructures.NULL_REDIS_DATA;
import static org.apache.geode.redis.internal.data.NullRedisDataStructures.NULL_REDIS_HASH;
+import static org.apache.geode.redis.internal.data.NullRedisDataStructures.NULL_REDIS_LIST;
import static org.apache.geode.redis.internal.data.NullRedisDataStructures.NULL_REDIS_SET;
import static org.apache.geode.redis.internal.data.NullRedisDataStructures.NULL_REDIS_SORTED_SET;
import static org.apache.geode.redis.internal.data.NullRedisDataStructures.NULL_REDIS_STRING;
@@ -28,6 +29,7 @@
REDIS_STRING("string", NULL_REDIS_STRING),
REDIS_HASH("hash", NULL_REDIS_HASH),
REDIS_SET("set", NULL_REDIS_SET),
+ REDIS_LIST("list", NULL_REDIS_LIST),
REDIS_SORTED_SET("sortedset", NULL_REDIS_SORTED_SET);
private final String toStringValue;
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
new file mode 100644
index 0000000..11f2902
--- /dev/null
+++ b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/RedisList.java
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package org.apache.geode.redis.internal.data;
+
+import static org.apache.geode.redis.internal.data.RedisDataType.REDIS_LIST;
+
+import java.util.List;
+
+import org.apache.geode.cache.Region;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
+import org.apache.geode.internal.serialization.KnownVersion;
+
+public class RedisList extends AbstractRedisData {
+
+ public RedisList() {
+ }
+
+ public long lpush(List<byte[]> elementsToAdd, Region<RedisKey, RedisData> region, RedisKey key) {
+ return 0;
+ }
+
+ public byte[] lpop(Region<RedisKey, RedisData> region, RedisKey key) {
+ return null;
+ }
+
+ public int llen() {
+ return 0;
+ }
+
+ @Override
+ public int getDSFID() {
+ return DataSerializableFixedID.REDIS_LIST_ID;
+ }
+
+ @Override
+ public RedisDataType getType() {
+ return REDIS_LIST;
+ }
+
+ @Override
+ public int getSizeInBytes() {
+ return 0;
+ }
+
+ @Override
+ protected boolean removeFromRegion() {
+ return false;
+ }
+
+ @Override
+ public KnownVersion[] getSerializationVersions() {
+ return new KnownVersion[0];
+ }
+
+}
diff --git a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/netty/ExecutionHandlerContext.java b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/netty/ExecutionHandlerContext.java
index c375851..21c08ad 100644
--- a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/netty/ExecutionHandlerContext.java
+++ b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/netty/ExecutionHandlerContext.java
@@ -58,6 +58,7 @@
import org.apache.geode.redis.internal.data.RedisDataTypeMismatchException;
import org.apache.geode.redis.internal.data.RedisHash;
import org.apache.geode.redis.internal.data.RedisKey;
+import org.apache.geode.redis.internal.data.RedisList;
import org.apache.geode.redis.internal.data.RedisSet;
import org.apache.geode.redis.internal.data.RedisSortedSet;
import org.apache.geode.redis.internal.data.RedisString;
@@ -486,17 +487,25 @@
return getRegionProvider().getTypedRedisData(RedisDataType.REDIS_SORTED_SET, key, updateStats);
}
-
public <R> R setLockedExecute(RedisKey key, boolean updateStats,
FailableFunction<RedisSet, R> function) {
return getRegionProvider().lockedExecute(key,
() -> function.apply(getRedisSet(key, updateStats)));
}
+ public <R> R listLockedExecute(RedisKey key, boolean updateStats,
+ FailableFunction<RedisList, R> function) {
+ return getRegionProvider().lockedExecute(key,
+ () -> function.apply(getRedisList(key, updateStats)));
+ }
+
public RedisSet getRedisSet(RedisKey key, boolean updateStats) {
return getRegionProvider().getTypedRedisData(RedisDataType.REDIS_SET, key, updateStats);
}
+ private RedisList getRedisList(RedisKey key, boolean updateStats) {
+ return getRegionProvider().getTypedRedisData(RedisDataType.REDIS_LIST, key, updateStats);
+ }
public <R> R dataLockedExecute(RedisKey key, boolean updateStats,
FailableFunction<RedisData, R> function) {
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 73fbcad..d82763f 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
@@ -693,6 +693,7 @@
// 2190 unused
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
/**