This is an automated email from the ASF dual-hosted git repository. jensdeppe pushed a commit to branch develop in repository https://gitbox.apache.org/repos/asf/geode.git
The following commit(s) were added to refs/heads/develop by this push: new 5dce03c GEODE-10125: Switch Radish data structures to use DataSerializable (#7512) 5dce03c is described below commit 5dce03c9136e66d2497fdcbad8943620442d956b Author: Jens Deppe <jde...@vmware.com> AuthorDate: Fri Apr 1 06:29:14 2022 -0700 GEODE-10125: Switch Radish data structures to use DataSerializable (#7512) --- .../codeAnalysis/sanctionedDataSerializables.txt | 24 ++++++------- .../geode/redis/internal/GeodeRedisService.java | 31 ++--------------- .../geode/redis/internal/RedisConstants.java | 13 ++++++++ .../redis/internal/data/AbstractRedisData.java | 7 ++-- .../geode/redis/internal/data/NullRedisData.java | 31 ++++++++--------- .../geode/redis/internal/data/RedisData.java | 4 +-- .../geode/redis/internal/data/RedisHash.java | 34 +++++++++---------- .../apache/geode/redis/internal/data/RedisKey.java | 32 ++++++++---------- .../geode/redis/internal/data/RedisList.java | 35 +++++++++---------- .../apache/geode/redis/internal/data/RedisSet.java | 34 +++++++++---------- .../geode/redis/internal/data/RedisSortedSet.java | 35 ++++++++++--------- .../geode/redis/internal/data/RedisString.java | 33 +++++++++--------- .../data/delta/AddByteArrayDoublePairs.java | 6 ++-- .../internal/data/delta/AddByteArrayPairs.java | 6 ++-- .../redis/internal/data/delta/AddByteArrays.java | 6 ++-- .../internal/data/delta/AddByteArraysTail.java | 6 ++-- .../internal/data/delta/RemoveByteArrays.java | 6 ++-- .../internal/data/delta/RemoveElementsByIndex.java | 6 ++-- .../data/delta/ReplaceByteArrayAtOffset.java | 6 ++-- .../data/delta/ReplaceByteArrayDoublePairs.java | 6 ++-- .../internal/data/delta/ReplaceByteArrays.java | 6 ++-- .../internal/data/delta/ReplaceByteAtOffset.java | 7 ++-- .../geode/redis/internal/pubsub/Publisher.java | 39 ++++++++++------------ .../internal/services/cluster/RedisMemberInfo.java | 36 ++++++++++---------- ...serialization.DataSerializableFixedIdRegistrant | 16 --------- .../geode/redis/internal/data/RedisHashTest.java | 5 ++- .../geode/redis/internal/data/RedisListTest.java | 8 ++--- .../geode/redis/internal/data/RedisSetTest.java | 10 +++--- .../redis/internal/data/RedisSortedSetTest.java | 5 ++- .../geode/redis/internal/data/RedisStringTest.java | 8 ++--- .../serialization/DataSerializableFixedID.java | 12 +------ 31 files changed, 212 insertions(+), 301 deletions(-) diff --git a/geode-for-redis/src/integrationTest/resources/org/apache/geode/codeAnalysis/sanctionedDataSerializables.txt b/geode-for-redis/src/integrationTest/resources/org/apache/geode/codeAnalysis/sanctionedDataSerializables.txt index 5c1cf88..096dd65 100644 --- a/geode-for-redis/src/integrationTest/resources/org/apache/geode/codeAnalysis/sanctionedDataSerializables.txt +++ b/geode-for-redis/src/integrationTest/resources/org/apache/geode/codeAnalysis/sanctionedDataSerializables.txt @@ -7,32 +7,32 @@ fromData,8 toData,8 org/apache/geode/redis/internal/data/RedisHash,2 -toData,15 -fromData,58 +toData,14 +fromData,55 org/apache/geode/redis/internal/data/RedisKey,2 fromData,19 toData,19 org/apache/geode/redis/internal/data/RedisList,2 -toData,55 -fromData,42 +toData,52 +fromData,39 org/apache/geode/redis/internal/data/RedisSet,2 -toData,55 -fromData,51 +toData,52 +fromData,48 org/apache/geode/redis/internal/data/RedisSortedSet,2 -toData,15 -fromData,86 +toData,14 +fromData,83 org/apache/geode/redis/internal/data/RedisString,2 -toData,15 -fromData,15 +toData,14 +fromData,14 org/apache/geode/redis/internal/pubsub/Publisher$PublishRequest,2 -fromData,55 -toData,61 +fromData,53 +toData,59 org/apache/geode/redis/internal/services/cluster/RedisMemberInfo,2 fromData,28 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 6a72f37..ba87db7 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 @@ -23,23 +23,10 @@ import org.apache.geode.distributed.internal.ResourceEvent; import org.apache.geode.distributed.internal.ResourceEventsListener; import org.apache.geode.internal.cache.CacheService; import org.apache.geode.internal.cache.InternalCache; -import org.apache.geode.internal.serialization.DataSerializableFixedID; -import org.apache.geode.internal.serialization.DataSerializableFixedIdRegistrant; -import org.apache.geode.internal.serialization.DataSerializableFixedIdRegistrar; import org.apache.geode.logging.internal.log4j.api.LogService; import org.apache.geode.management.internal.beans.CacheServiceMBeanBase; -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; -import org.apache.geode.redis.internal.pubsub.Publisher; -import org.apache.geode.redis.internal.services.cluster.RedisMemberInfo; - -public class GeodeRedisService implements CacheService, ResourceEventsListener, - DataSerializableFixedIdRegistrant { + +public class GeodeRedisService implements CacheService, ResourceEventsListener { private static final Logger logger = LogService.getLogger(); private GeodeRedisServer redisServer; private InternalCache cache; @@ -57,20 +44,6 @@ public class GeodeRedisService implements CacheService, ResourceEventsListener, } @Override - public void register(DataSerializableFixedIdRegistrar registrar) { - 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); - registrar.register(DataSerializableFixedID.REDIS_NULL_DATA_ID, NullRedisData.class); - registrar.register(DataSerializableFixedID.REDIS_MEMBER_INFO_ID, RedisMemberInfo.class); - registrar.register(DataSerializableFixedID.REDIS_SORTED_SET_ID, RedisSortedSet.class); - } - - @Override public void close() { stopRedisServer(); } diff --git a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/RedisConstants.java b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/RedisConstants.java index 1be3ccc..ab79b0d 100644 --- a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/RedisConstants.java +++ b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/RedisConstants.java @@ -22,6 +22,19 @@ import org.apache.geode.redis.internal.commands.executor.server.CommandCommandEx public class RedisConstants { /* + * DataSerializable Instantiator IDs + */ + public static int PUBLISH_REQUEST_DATA_SERIALIZABLE_ID = 1045; + public static int MEMBER_INFO_DATA_SERIALIZABLE_ID = 1046; + public static int REDIS_NULL_DATA_DATA_SERIALIZABLE_ID = 1047; + public static int REDIS_KEY_DATA_SERIALIZABLE_ID = 1048; + public static int REDIS_LIST_DATA_SERIALIZABLE_ID = 1049; + public static int REDIS_SET_DATA_SERIALIZABLE_ID = 1050; + public static int REDIS_STRING_DATA_SERIALIZABLE_ID = 1051; + public static int REDIS_HASH_DATA_SERIALIZABLE_ID = 1052; + public static int REDIS_SORTED_SET_DATA_SERIALIZABLE_ID = 1053; + + /* * Error responses */ public static final String PARSING_EXCEPTION_MESSAGE = diff --git a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/AbstractRedisData.java b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/AbstractRedisData.java index 6f2692c..eb0b8f0 100644 --- a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/AbstractRedisData.java +++ b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/AbstractRedisData.java @@ -52,9 +52,7 @@ import org.apache.geode.internal.cache.BucketRegion; import org.apache.geode.internal.cache.LocalDataSet; import org.apache.geode.internal.cache.PartitionedRegion; import org.apache.geode.internal.cache.TXId; -import org.apache.geode.internal.serialization.DeserializationContext; import org.apache.geode.internal.serialization.KnownVersion; -import org.apache.geode.internal.serialization.SerializationContext; import org.apache.geode.redis.internal.data.delta.AddByteArrayDoublePairs; import org.apache.geode.redis.internal.data.delta.AddByteArrayPairs; import org.apache.geode.redis.internal.data.delta.AddByteArrays; @@ -216,14 +214,13 @@ public abstract class AbstractRedisData implements RedisData { } @Override - public void toData(DataOutput out, SerializationContext context) throws IOException { + public void toData(DataOutput out) throws IOException { out.writeByte(version); out.writeLong(expirationTimestamp); } @Override - public void fromData(DataInput in, DeserializationContext context) - throws IOException, ClassNotFoundException { + public void fromData(DataInput in) throws IOException, ClassNotFoundException { version = in.readByte(); expirationTimestamp = in.readLong(); } diff --git a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/NullRedisData.java b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/NullRedisData.java index 4b11d7c..253b10e 100644 --- a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/NullRedisData.java +++ b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/NullRedisData.java @@ -17,14 +17,15 @@ package org.apache.geode.redis.internal.data; +import static org.apache.geode.redis.internal.RedisConstants.REDIS_NULL_DATA_DATA_SERIALIZABLE_ID; + import java.io.DataInput; import java.io.DataOutput; +import org.apache.geode.DataSerializable; +import org.apache.geode.Instantiator; import org.apache.geode.InvalidDeltaException; import org.apache.geode.cache.Region; -import org.apache.geode.internal.serialization.DeserializationContext; -import org.apache.geode.internal.serialization.KnownVersion; -import org.apache.geode.internal.serialization.SerializationContext; import org.apache.geode.redis.internal.netty.ExecutionHandlerContext; import org.apache.geode.redis.internal.services.RegionProvider; @@ -32,6 +33,16 @@ import org.apache.geode.redis.internal.services.RegionProvider; * Implements behaviour for when no instance of RedisData exists. */ public class NullRedisData implements RedisData { + + static { + Instantiator + .register(new Instantiator(NullRedisData.class, REDIS_NULL_DATA_DATA_SERIALIZABLE_ID) { + public DataSerializable newInstance() { + return new NullRedisData(); + } + }); + } + @Override public boolean isNull() { return true; @@ -103,26 +114,16 @@ public class NullRedisData implements RedisData { } @Override - public int getDSFID() { - return REDIS_NULL_DATA_ID; - } - - @Override - public void toData(DataOutput out, SerializationContext context) { + public void toData(DataOutput out) { throw new UnsupportedOperationException(); } @Override - public void fromData(DataInput in, DeserializationContext context) { + public void fromData(DataInput in) { throw new UnsupportedOperationException(); } @Override - public KnownVersion[] getSerializationVersions() { - return null; - } - - @Override public boolean hasDelta() { return false; } diff --git a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/RedisData.java b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/RedisData.java index cbfb691..673c47e 100644 --- a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/RedisData.java +++ b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/RedisData.java @@ -25,10 +25,10 @@ import java.io.DataInputStream; import java.io.IOException; import java.util.Arrays; +import org.apache.geode.DataSerializable; import org.apache.geode.DataSerializer; import org.apache.geode.Delta; import org.apache.geode.cache.Region; -import org.apache.geode.internal.serialization.DataSerializableFixedID; import org.apache.geode.internal.serialization.KnownVersion; import org.apache.geode.internal.serialization.VersionedDataInputStream; import org.apache.geode.internal.size.Sizeable; @@ -37,7 +37,7 @@ import org.apache.geode.redis.internal.RedisException; import org.apache.geode.redis.internal.netty.ExecutionHandlerContext; import org.apache.geode.redis.internal.services.RegionProvider; -public interface RedisData extends Delta, DataSerializableFixedID, Sizeable { +public interface RedisData extends Delta, DataSerializable, Sizeable { /** * Returns true if this instance does not exist. diff --git a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/RedisHash.java b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/RedisHash.java index 7e044f7..e8750fc 100644 --- a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/RedisHash.java +++ b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/RedisHash.java @@ -20,6 +20,7 @@ import static org.apache.geode.internal.JvmSizeUtils.memoryOverhead; import static org.apache.geode.redis.internal.RedisConstants.ERROR_NOT_INTEGER; import static org.apache.geode.redis.internal.RedisConstants.ERROR_OVERFLOW; import static org.apache.geode.redis.internal.RedisConstants.HASH_VALUE_NOT_FLOAT; +import static org.apache.geode.redis.internal.RedisConstants.REDIS_HASH_DATA_SERIALIZABLE_ID; import static org.apache.geode.redis.internal.netty.Coder.bytesToLong; import static org.apache.geode.redis.internal.netty.Coder.bytesToString; @@ -37,12 +38,11 @@ import java.util.Objects; import org.apache.commons.lang3.tuple.ImmutablePair; +import org.apache.geode.DataSerializable; import org.apache.geode.DataSerializer; +import org.apache.geode.Instantiator; import org.apache.geode.annotations.VisibleForTesting; import org.apache.geode.cache.Region; -import org.apache.geode.internal.serialization.DeserializationContext; -import org.apache.geode.internal.serialization.KnownVersion; -import org.apache.geode.internal.serialization.SerializationContext; import org.apache.geode.logging.internal.log4j.api.LogService; import org.apache.geode.redis.internal.commands.executor.GlobPattern; import org.apache.geode.redis.internal.data.collections.SizeableBytes2ObjectOpenCustomHashMapWithCursor; @@ -51,6 +51,15 @@ import org.apache.geode.redis.internal.data.delta.RemoveByteArrays; import org.apache.geode.redis.internal.netty.Coder; public class RedisHash extends AbstractRedisData { + + static { + Instantiator.register(new Instantiator(RedisHash.class, REDIS_HASH_DATA_SERIALIZABLE_ID) { + public DataSerializable newInstance() { + return new RedisHash(); + } + }); + } + protected static final int REDIS_HASH_OVERHEAD = memoryOverhead(RedisHash.class); private Hash hash; @@ -81,15 +90,14 @@ public class RedisHash extends AbstractRedisData { * to be thread safe with toData. */ @Override - public synchronized void toData(DataOutput out, SerializationContext context) throws IOException { - super.toData(out, context); + public synchronized void toData(DataOutput out) throws IOException { + super.toData(out); hash.toData(out); } @Override - public void fromData(DataInput in, DeserializationContext context) - throws IOException, ClassNotFoundException { - super.fromData(in, context); + public void fromData(DataInput in) throws IOException, ClassNotFoundException { + super.fromData(in); int size = DataSerializer.readInteger(in); hash = new Hash(size); for (int i = 0; i < size; i++) { @@ -97,11 +105,6 @@ public class RedisHash extends AbstractRedisData { } } - @Override - public int getDSFID() { - return REDIS_HASH_ID; - } - synchronized byte[] hashPut(byte[] field, byte[] value) { return hash.put(field, value); } @@ -356,11 +359,6 @@ public class RedisHash extends AbstractRedisData { } @Override - public KnownVersion[] getSerializationVersions() { - return null; - } - - @Override public int getSizeInBytes() { return REDIS_HASH_OVERHEAD + hash.getSizeInBytes(); } diff --git a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/RedisKey.java b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/RedisKey.java index 8316ef9..8a0c271 100644 --- a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/RedisKey.java +++ b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/RedisKey.java @@ -15,6 +15,7 @@ package org.apache.geode.redis.internal.data; +import static org.apache.geode.redis.internal.RedisConstants.REDIS_KEY_DATA_SERIALIZABLE_ID; import static org.apache.geode.redis.internal.netty.Coder.bytesToString; import static org.apache.geode.redis.internal.services.RegionProvider.REDIS_SLOTS_PER_BUCKET; @@ -23,14 +24,20 @@ import java.io.DataOutput; import java.io.IOException; import java.util.Arrays; +import org.apache.geode.DataSerializable; import org.apache.geode.DataSerializer; -import org.apache.geode.internal.serialization.DataSerializableFixedID; -import org.apache.geode.internal.serialization.DeserializationContext; -import org.apache.geode.internal.serialization.KnownVersion; -import org.apache.geode.internal.serialization.SerializationContext; +import org.apache.geode.Instantiator; import org.apache.geode.redis.internal.commands.executor.cluster.RedisPartitionResolver; -public class RedisKey implements DataSerializableFixedID { +public class RedisKey implements DataSerializable { + + static { + Instantiator.register(new Instantiator(RedisKey.class, REDIS_KEY_DATA_SERIALIZABLE_ID) { + public DataSerializable newInstance() { + return new RedisKey(); + } + }); + } private short slot; private byte[] value; @@ -66,29 +73,18 @@ public class RedisKey implements DataSerializableFixedID { } @Override - public int getDSFID() { - return DataSerializableFixedID.REDIS_KEY; - } - - @Override - public void toData(DataOutput out, SerializationContext context) throws IOException { + public void toData(DataOutput out) throws IOException { out.writeShort(slot); DataSerializer.writeByteArray(value, out); } @Override - public void fromData(DataInput in, DeserializationContext context) - throws IOException { + public void fromData(DataInput in) throws IOException { slot = in.readShort(); value = DataSerializer.readByteArray(in); } @Override - public KnownVersion[] getSerializationVersions() { - return null; - } - - @Override public String toString() { return bytesToString(value); } 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 823a91c..3696519 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 @@ -18,6 +18,7 @@ package org.apache.geode.redis.internal.data; import static org.apache.geode.internal.JvmSizeUtils.memoryOverhead; import static org.apache.geode.redis.internal.RedisConstants.ERROR_INDEX_OUT_OF_RANGE; +import static org.apache.geode.redis.internal.RedisConstants.REDIS_LIST_DATA_SERIALIZABLE_ID; import static org.apache.geode.redis.internal.data.RedisDataType.REDIS_LIST; import java.io.DataInput; @@ -30,11 +31,10 @@ import java.util.List; import java.util.ListIterator; import java.util.Objects; +import org.apache.geode.DataSerializable; import org.apache.geode.DataSerializer; +import org.apache.geode.Instantiator; import org.apache.geode.cache.Region; -import org.apache.geode.internal.serialization.DeserializationContext; -import org.apache.geode.internal.serialization.KnownVersion; -import org.apache.geode.internal.serialization.SerializationContext; import org.apache.geode.redis.internal.RedisException; import org.apache.geode.redis.internal.commands.Command; import org.apache.geode.redis.internal.data.collections.SizeableByteArrayList; @@ -49,6 +49,15 @@ import org.apache.geode.redis.internal.netty.ExecutionHandlerContext; import org.apache.geode.redis.internal.services.RegionProvider; public class RedisList extends AbstractRedisData { + + static { + Instantiator.register(new Instantiator(RedisList.class, REDIS_LIST_DATA_SERIALIZABLE_ID) { + public DataSerializable newInstance() { + return new RedisList(); + } + }); + } + protected static final int REDIS_LIST_OVERHEAD = memoryOverhead(RedisList.class); private final SizeableByteArrayList elementList; @@ -295,7 +304,6 @@ public class RedisList extends AbstractRedisData { } /** - * * @param context The {@link ExecutionHandlerContext} for this operation, passed to allow events * to be triggered * @param source The {@link RedisKey} associated with the source RedisList @@ -373,8 +381,8 @@ public class RedisList extends AbstractRedisData { */ @Override - public synchronized void toData(DataOutput out, SerializationContext context) throws IOException { - super.toData(out, context); + public synchronized void toData(DataOutput out) throws IOException { + super.toData(out); DataSerializer.writePrimitiveInt(elementList.size(), out); for (byte[] element : elementList) { DataSerializer.writeByteArray(element, out); @@ -382,9 +390,8 @@ public class RedisList extends AbstractRedisData { } @Override - public void fromData(DataInput in, DeserializationContext context) - throws IOException, ClassNotFoundException { - super.fromData(in, context); + public void fromData(DataInput in) throws IOException, ClassNotFoundException { + super.fromData(in); int size = DataSerializer.readPrimitiveInt(in); for (int i = 0; i < size; ++i) { byte[] element = DataSerializer.readByteArray(in); @@ -392,11 +399,6 @@ public class RedisList extends AbstractRedisData { } } - @Override - public int getDSFID() { - return REDIS_LIST_ID; - } - public synchronized int elementInsert(byte[] elementToInsert, byte[] referenceElement, boolean before) { int i = 0; @@ -481,11 +483,6 @@ public class RedisList extends AbstractRedisData { } @Override - public KnownVersion[] getSerializationVersions() { - return null; - } - - @Override public int getSizeInBytes() { return REDIS_LIST_OVERHEAD + elementList.getSizeInBytes(); } diff --git a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/RedisSet.java b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/RedisSet.java index c53b6af..4bc1a44 100644 --- a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/RedisSet.java +++ b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/RedisSet.java @@ -17,6 +17,7 @@ package org.apache.geode.redis.internal.data; import static org.apache.geode.internal.JvmSizeUtils.memoryOverhead; +import static org.apache.geode.redis.internal.RedisConstants.REDIS_SET_DATA_SERIALIZABLE_ID; import static org.apache.geode.redis.internal.data.NullRedisDataStructures.NULL_REDIS_SET; import static org.apache.geode.redis.internal.data.RedisDataType.REDIS_SET; @@ -36,12 +37,11 @@ import it.unimi.dsi.fastutil.bytes.ByteArrays; import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.Pair; +import org.apache.geode.DataSerializable; import org.apache.geode.DataSerializer; +import org.apache.geode.Instantiator; import org.apache.geode.annotations.VisibleForTesting; import org.apache.geode.cache.Region; -import org.apache.geode.internal.serialization.DeserializationContext; -import org.apache.geode.internal.serialization.KnownVersion; -import org.apache.geode.internal.serialization.SerializationContext; import org.apache.geode.redis.internal.commands.executor.GlobPattern; import org.apache.geode.redis.internal.data.collections.SizeableObjectOpenCustomHashSetWithCursor; import org.apache.geode.redis.internal.data.delta.AddByteArrays; @@ -50,6 +50,15 @@ import org.apache.geode.redis.internal.data.delta.ReplaceByteArrays; import org.apache.geode.redis.internal.services.RegionProvider; public class RedisSet extends AbstractRedisData { + + static { + Instantiator.register(new Instantiator(RedisSet.class, REDIS_SET_DATA_SERIALIZABLE_ID) { + public DataSerializable newInstance() { + return new RedisSet(); + } + }); + } + protected static final int REDIS_SET_OVERHEAD = memoryOverhead(RedisSet.class); private MemberSet members; @@ -381,8 +390,8 @@ public class RedisSet extends AbstractRedisData { */ @Override - public synchronized void toData(DataOutput out, SerializationContext context) throws IOException { - super.toData(out, context); + public synchronized void toData(DataOutput out) throws IOException { + super.toData(out); DataSerializer.writePrimitiveInt(members.size(), out); for (byte[] member : members) { DataSerializer.writeByteArray(member, out); @@ -390,9 +399,8 @@ public class RedisSet extends AbstractRedisData { } @Override - public void fromData(DataInput in, DeserializationContext context) - throws IOException, ClassNotFoundException { - super.fromData(in, context); + public void fromData(DataInput in) throws IOException, ClassNotFoundException { + super.fromData(in); int size = DataSerializer.readPrimitiveInt(in); members = new MemberSet(size); for (int i = 0; i < size; ++i) { @@ -400,11 +408,6 @@ public class RedisSet extends AbstractRedisData { } } - @Override - public int getDSFID() { - return REDIS_SET_ID; - } - @VisibleForTesting synchronized boolean membersAdd(byte[] memberToAdd) { return members.add(memberToAdd); @@ -519,11 +522,6 @@ public class RedisSet extends AbstractRedisData { } @Override - public KnownVersion[] getSerializationVersions() { - return null; - } - - @Override public int getSizeInBytes() { return REDIS_SET_OVERHEAD + members.getSizeInBytes(); } diff --git a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/RedisSortedSet.java b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/RedisSortedSet.java index cd44b35..e958961 100644 --- a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/RedisSortedSet.java +++ b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/RedisSortedSet.java @@ -18,6 +18,7 @@ package org.apache.geode.redis.internal.data; import static java.lang.Double.compare; import static org.apache.geode.internal.JvmSizeUtils.memoryOverhead; +import static org.apache.geode.redis.internal.RedisConstants.REDIS_SORTED_SET_DATA_SERIALIZABLE_ID; import static org.apache.geode.redis.internal.data.NullRedisDataStructures.NULL_REDIS_SORTED_SET; import static org.apache.geode.redis.internal.data.RedisDataType.REDIS_SORTED_SET; import static org.apache.geode.redis.internal.netty.Coder.doubleToBytes; @@ -37,12 +38,11 @@ import java.util.Objects; import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.logging.log4j.Logger; +import org.apache.geode.DataSerializable; import org.apache.geode.DataSerializer; +import org.apache.geode.Instantiator; import org.apache.geode.annotations.VisibleForTesting; import org.apache.geode.cache.Region; -import org.apache.geode.internal.serialization.DeserializationContext; -import org.apache.geode.internal.serialization.KnownVersion; -import org.apache.geode.internal.serialization.SerializationContext; import org.apache.geode.internal.size.Sizeable; import org.apache.geode.logging.internal.log4j.api.LogService; import org.apache.geode.redis.internal.RedisConstants; @@ -63,6 +63,16 @@ import org.apache.geode.redis.internal.netty.Coder; import org.apache.geode.redis.internal.services.RegionProvider; public class RedisSortedSet extends AbstractRedisData { + + static { + Instantiator + .register(new Instantiator(RedisSortedSet.class, REDIS_SORTED_SET_DATA_SERIALIZABLE_ID) { + public DataSerializable newInstance() { + return new RedisSortedSet(); + } + }); + } + protected static final int REDIS_SORTED_SET_OVERHEAD = memoryOverhead(RedisSortedSet.class); private static final Logger logger = LogService.getLogger(); @@ -124,15 +134,14 @@ public class RedisSortedSet extends AbstractRedisData { */ @Override - public synchronized void toData(DataOutput out, SerializationContext context) throws IOException { - super.toData(out, context); + public synchronized void toData(DataOutput out) throws IOException { + super.toData(out); members.toData(out); } @Override - public void fromData(DataInput in, DeserializationContext context) - throws IOException, ClassNotFoundException { - super.fromData(in, context); + public void fromData(DataInput in) throws IOException, ClassNotFoundException { + super.fromData(in); int size = DataSerializer.readPrimitiveInt(in); members = new MemberMap(size); for (int i = 0; i < size; i++) { @@ -169,11 +178,6 @@ public class RedisSortedSet extends AbstractRedisData { }); } - @Override - public int getDSFID() { - return REDIS_SORTED_SET_ID; - } - protected synchronized MemberAddResult memberAdd(byte[] memberToAdd, double scoreToAdd) { OrderedSetEntry entry = members.get(memberToAdd); if (entry == null) { @@ -730,11 +734,6 @@ public class RedisSortedSet extends AbstractRedisData { return "RedisSortedSet{" + super.toString() + ", " + "size=" + members.size() + '}'; } - @Override - public KnownVersion[] getSerializationVersions() { - return null; - } - // Comparison to allow the use of LEAST_MEMBER_NAME and GREATEST_MEMBER_NAME to always be less // than or greater than respectively any other byte array representing a member name. The use of // "==" is important as it allows us to differentiate between the constant byte arrays defined diff --git a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/RedisString.java b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/RedisString.java index 18bcda7..a499abf 100644 --- a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/RedisString.java +++ b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/RedisString.java @@ -17,6 +17,7 @@ package org.apache.geode.redis.internal.data; import static org.apache.geode.internal.JvmSizeUtils.memoryOverhead; +import static org.apache.geode.redis.internal.RedisConstants.REDIS_STRING_DATA_SERIALIZABLE_ID; import static org.apache.geode.redis.internal.netty.Coder.bytesToString; import java.io.DataInput; @@ -25,12 +26,11 @@ import java.io.IOException; import java.math.BigDecimal; import java.util.Arrays; +import org.apache.geode.DataSerializable; import org.apache.geode.DataSerializer; +import org.apache.geode.Instantiator; import org.apache.geode.annotations.VisibleForTesting; import org.apache.geode.cache.Region; -import org.apache.geode.internal.serialization.DeserializationContext; -import org.apache.geode.internal.serialization.KnownVersion; -import org.apache.geode.internal.serialization.SerializationContext; import org.apache.geode.redis.internal.RedisConstants; import org.apache.geode.redis.internal.commands.executor.string.SetOptions; import org.apache.geode.redis.internal.data.delta.AppendByteArray; @@ -42,6 +42,14 @@ import org.apache.geode.redis.internal.netty.Coder; public class RedisString extends AbstractRedisData { + static { + Instantiator.register(new Instantiator(RedisString.class, REDIS_STRING_DATA_SERIALIZABLE_ID) { + public DataSerializable newInstance() { + return new RedisString(); + } + }); + } + private static final int REDIS_STRING_OVERHEAD = memoryOverhead(RedisString.class); // An array containing the number of set bits for each value from 0x00 to 0xff private static final byte[] bitCountTable = getBitCountTable(); @@ -365,25 +373,19 @@ public class RedisString extends AbstractRedisData { */ @Override - public synchronized void toData(DataOutput out, SerializationContext context) throws IOException { - super.toData(out, context); + public synchronized void toData(DataOutput out) throws IOException { + super.toData(out); DataSerializer.writeByteArray(value, out); } @Override - public void fromData(DataInput in, DeserializationContext context) - throws IOException, ClassNotFoundException { - super.fromData(in, context); + public void fromData(DataInput in) throws IOException, ClassNotFoundException { + super.fromData(in); value = DataSerializer.readByteArray(in); } @Override - public int getDSFID() { - return REDIS_STRING_ID; - } - - @Override public void applySetByteArrayDelta(byte[] bytes) { value = bytes; } @@ -478,11 +480,6 @@ public class RedisString extends AbstractRedisData { } @Override - public KnownVersion[] getSerializationVersions() { - return null; - } - - @Override public int getSizeInBytes() { return REDIS_STRING_OVERHEAD + memoryOverhead(value); } diff --git a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/delta/AddByteArrayDoublePairs.java b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/delta/AddByteArrayDoublePairs.java index e2f46eb..a81b98f 100644 --- a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/delta/AddByteArrayDoublePairs.java +++ b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/delta/AddByteArrayDoublePairs.java @@ -18,7 +18,6 @@ package org.apache.geode.redis.internal.data.delta; import static org.apache.geode.DataSerializer.readByteArray; import static org.apache.geode.DataSerializer.readPrimitiveDouble; -import static org.apache.geode.internal.InternalDataSerializer.readArrayLength; import static org.apache.geode.redis.internal.data.delta.DeltaType.ADD_BYTE_ARRAY_DOUBLE_PAIRS; import java.io.DataInput; @@ -28,7 +27,6 @@ import java.util.ArrayList; import java.util.List; import org.apache.geode.DataSerializer; -import org.apache.geode.internal.InternalDataSerializer; import org.apache.geode.redis.internal.data.AbstractRedisData; public class AddByteArrayDoublePairs extends DeltaInfo { @@ -52,7 +50,7 @@ public class AddByteArrayDoublePairs extends DeltaInfo { public void serializeTo(DataOutput out) throws IOException { super.serializeTo(out); - InternalDataSerializer.writeArrayLength(byteArrays.size(), out); + DataSerializer.writePrimitiveInt(byteArrays.size(), out); for (int i = 0; i < byteArrays.size(); i++) { DataSerializer.writeByteArray(byteArrays.get(i), out); DataSerializer.writePrimitiveDouble(doubles[i], out); @@ -60,7 +58,7 @@ public class AddByteArrayDoublePairs extends DeltaInfo { } public static void deserializeFrom(DataInput in, AbstractRedisData redisData) throws IOException { - int size = readArrayLength(in); + int size = DataSerializer.readPrimitiveInt(in); while (size > 0) { byte[] byteArray = readByteArray(in); double doubleValue = readPrimitiveDouble(in); diff --git a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/delta/AddByteArrayPairs.java b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/delta/AddByteArrayPairs.java index ce62506..ac2329e 100644 --- a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/delta/AddByteArrayPairs.java +++ b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/delta/AddByteArrayPairs.java @@ -16,7 +16,6 @@ package org.apache.geode.redis.internal.data.delta; import static org.apache.geode.DataSerializer.readByteArray; -import static org.apache.geode.internal.InternalDataSerializer.readArrayLength; import static org.apache.geode.redis.internal.data.delta.DeltaType.ADD_BYTE_ARRAY_PAIRS; import java.io.DataInput; @@ -26,7 +25,6 @@ import java.util.ArrayList; import java.util.List; import org.apache.geode.DataSerializer; -import org.apache.geode.internal.InternalDataSerializer; import org.apache.geode.redis.internal.data.AbstractRedisData; public class AddByteArrayPairs extends DeltaInfo { @@ -53,14 +51,14 @@ public class AddByteArrayPairs extends DeltaInfo { public void serializeTo(DataOutput out) throws IOException { super.serializeTo(out); - InternalDataSerializer.writeArrayLength(byteArrayPairs.size(), out); + DataSerializer.writePrimitiveInt(byteArrayPairs.size(), out); for (byte[] bytes : byteArrayPairs) { DataSerializer.writeByteArray(bytes, out); } } public static void deserializeFrom(DataInput in, AbstractRedisData redisData) throws IOException { - int size = readArrayLength(in); + int size = DataSerializer.readPrimitiveInt(in); while (size > 0) { byte[] key = readByteArray(in); byte[] value = readByteArray(in); diff --git a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/delta/AddByteArrays.java b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/delta/AddByteArrays.java index 9b8efb4..f8e5b70 100644 --- a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/delta/AddByteArrays.java +++ b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/delta/AddByteArrays.java @@ -17,7 +17,6 @@ package org.apache.geode.redis.internal.data.delta; import static org.apache.geode.DataSerializer.readByteArray; -import static org.apache.geode.internal.InternalDataSerializer.readArrayLength; import static org.apache.geode.redis.internal.data.delta.DeltaType.ADD_BYTE_ARRAYS; import java.io.DataInput; @@ -27,7 +26,6 @@ import java.util.ArrayList; import java.util.List; import org.apache.geode.DataSerializer; -import org.apache.geode.internal.InternalDataSerializer; import org.apache.geode.redis.internal.data.AbstractRedisData; public class AddByteArrays extends DeltaInfo { @@ -54,14 +52,14 @@ public class AddByteArrays extends DeltaInfo { public void serializeTo(DataOutput out) throws IOException { super.serializeTo(out); - InternalDataSerializer.writeArrayLength(byteArrays.size(), out); + DataSerializer.writePrimitiveInt(byteArrays.size(), out); for (byte[] bytes : byteArrays) { DataSerializer.writeByteArray(bytes, out); } } public static void deserializeFrom(DataInput in, AbstractRedisData redisData) throws IOException { - int size = readArrayLength(in); + int size = DataSerializer.readPrimitiveInt(in); while (size > 0) { redisData.applyAddByteArrayDelta(readByteArray(in)); size--; diff --git a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/delta/AddByteArraysTail.java b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/delta/AddByteArraysTail.java index 69c65f6..6e9f152 100644 --- a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/delta/AddByteArraysTail.java +++ b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/delta/AddByteArraysTail.java @@ -17,7 +17,6 @@ package org.apache.geode.redis.internal.data.delta; import static org.apache.geode.DataSerializer.readByteArray; -import static org.apache.geode.internal.InternalDataSerializer.readArrayLength; import static org.apache.geode.redis.internal.data.delta.DeltaType.ADD_BYTE_ARRAYS_TAIL; import java.io.DataInput; @@ -26,7 +25,6 @@ import java.io.IOException; import java.util.List; import org.apache.geode.DataSerializer; -import org.apache.geode.internal.InternalDataSerializer; import org.apache.geode.redis.internal.data.AbstractRedisData; public class AddByteArraysTail extends DeltaInfo { @@ -48,14 +46,14 @@ public class AddByteArraysTail extends DeltaInfo { public void serializeTo(DataOutput out) throws IOException { super.serializeTo(out); - InternalDataSerializer.writeArrayLength(byteArrays.size(), out); + DataSerializer.writePrimitiveInt(byteArrays.size(), out); for (byte[] bytes : byteArrays) { DataSerializer.writeByteArray(bytes, out); } } public static void deserializeFrom(DataInput in, AbstractRedisData redisData) throws IOException { - int size = readArrayLength(in); + int size = DataSerializer.readPrimitiveInt(in); while (size > 0) { redisData.applyAddByteArrayTailDelta(readByteArray(in)); size--; diff --git a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/delta/RemoveByteArrays.java b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/delta/RemoveByteArrays.java index 1e1c8dd..ad28bcf 100644 --- a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/delta/RemoveByteArrays.java +++ b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/delta/RemoveByteArrays.java @@ -17,7 +17,6 @@ package org.apache.geode.redis.internal.data.delta; import static org.apache.geode.DataSerializer.readByteArray; -import static org.apache.geode.internal.InternalDataSerializer.readArrayLength; import static org.apache.geode.redis.internal.data.delta.DeltaType.REMOVE_BYTE_ARRAYS; import java.io.DataInput; @@ -28,7 +27,6 @@ import java.util.List; import org.apache.geode.DataSerializer; import org.apache.geode.annotations.VisibleForTesting; -import org.apache.geode.internal.InternalDataSerializer; import org.apache.geode.redis.internal.data.AbstractRedisData; public class RemoveByteArrays extends DeltaInfo { @@ -53,14 +51,14 @@ public class RemoveByteArrays extends DeltaInfo { public void serializeTo(DataOutput out) throws IOException { super.serializeTo(out); - InternalDataSerializer.writeArrayLength(byteArrays.size(), out); + DataSerializer.writePrimitiveInt(byteArrays.size(), out); for (byte[] bytes : byteArrays) { DataSerializer.writeByteArray(bytes, out); } } public static void deserializeFrom(DataInput in, AbstractRedisData redisData) throws IOException { - int size = readArrayLength(in); + int size = DataSerializer.readPrimitiveInt(in); while (size > 0) { redisData.applyRemoveByteArrayDelta(readByteArray(in)); size--; diff --git a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/delta/RemoveElementsByIndex.java b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/delta/RemoveElementsByIndex.java index dd3eed3..a061944 100644 --- a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/delta/RemoveElementsByIndex.java +++ b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/delta/RemoveElementsByIndex.java @@ -16,7 +16,6 @@ package org.apache.geode.redis.internal.data.delta; import static org.apache.geode.DataSerializer.readPrimitiveInt; -import static org.apache.geode.internal.InternalDataSerializer.readArrayLength; import static org.apache.geode.redis.internal.data.delta.DeltaType.REMOVE_ELEMENTS_BY_INDEX; import java.io.DataInput; @@ -26,7 +25,6 @@ import java.util.ArrayList; import java.util.List; import org.apache.geode.DataSerializer; -import org.apache.geode.internal.InternalDataSerializer; import org.apache.geode.redis.internal.data.AbstractRedisData; public class RemoveElementsByIndex extends DeltaInfo { @@ -53,14 +51,14 @@ public class RemoveElementsByIndex extends DeltaInfo { public void serializeTo(DataOutput out) throws IOException { super.serializeTo(out); - InternalDataSerializer.writeArrayLength(indexes.size(), out); + DataSerializer.writePrimitiveInt(indexes.size(), out); for (int index : indexes) { DataSerializer.writePrimitiveInt(index, out); } } public static void deserializeFrom(DataInput in, AbstractRedisData redisData) throws IOException { - int size = readArrayLength(in); + int size = DataSerializer.readPrimitiveInt(in); List<Integer> indexes = new ArrayList<>(); while (size > 0) { indexes.add(readPrimitiveInt(in)); diff --git a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/delta/ReplaceByteArrayAtOffset.java b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/delta/ReplaceByteArrayAtOffset.java index 83c588c..53a8954 100644 --- a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/delta/ReplaceByteArrayAtOffset.java +++ b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/delta/ReplaceByteArrayAtOffset.java @@ -16,7 +16,6 @@ package org.apache.geode.redis.internal.data.delta; import static org.apache.geode.DataSerializer.readByteArray; -import static org.apache.geode.internal.InternalDataSerializer.readArrayLength; import static org.apache.geode.redis.internal.data.delta.DeltaType.REPLACE_BYTE_ARRAY_AT_OFFSET; import java.io.DataInput; @@ -24,7 +23,6 @@ import java.io.DataOutput; import java.io.IOException; import org.apache.geode.DataSerializer; -import org.apache.geode.internal.InternalDataSerializer; import org.apache.geode.redis.internal.data.AbstractRedisData; public class ReplaceByteArrayAtOffset extends DeltaInfo { @@ -43,12 +41,12 @@ public class ReplaceByteArrayAtOffset extends DeltaInfo { public void serializeTo(DataOutput out) throws IOException { super.serializeTo(out); - InternalDataSerializer.writeArrayLength(offset, out); + DataSerializer.writePrimitiveInt(offset, out); DataSerializer.writeByteArray(byteArray, out); } public static void deserializeFrom(DataInput in, AbstractRedisData redisData) throws IOException { - int offset = readArrayLength(in); + int offset = DataSerializer.readPrimitiveInt(in); byte[] byteArray = readByteArray(in); redisData.applyReplaceByteArrayAtOffsetDelta(offset, byteArray); } diff --git a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/delta/ReplaceByteArrayDoublePairs.java b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/delta/ReplaceByteArrayDoublePairs.java index 0ef5613..3b50f26 100644 --- a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/delta/ReplaceByteArrayDoublePairs.java +++ b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/delta/ReplaceByteArrayDoublePairs.java @@ -16,7 +16,6 @@ package org.apache.geode.redis.internal.data.delta; import static org.apache.geode.DataSerializer.readByteArray; import static org.apache.geode.DataSerializer.readPrimitiveDouble; -import static org.apache.geode.internal.InternalDataSerializer.readArrayLength; import static org.apache.geode.redis.internal.data.delta.DeltaType.REPLACE_BYTE_ARRAY_DOUBLE_PAIRS; import java.io.DataInput; @@ -24,7 +23,6 @@ import java.io.DataOutput; import java.io.IOException; import org.apache.geode.DataSerializer; -import org.apache.geode.internal.InternalDataSerializer; import org.apache.geode.redis.internal.data.AbstractRedisData; import org.apache.geode.redis.internal.data.RedisSortedSet; @@ -42,7 +40,7 @@ public class ReplaceByteArrayDoublePairs extends DeltaInfo { public void serializeTo(DataOutput out) throws IOException { super.serializeTo(out); - InternalDataSerializer.writeArrayLength(members.size(), out); + DataSerializer.writePrimitiveInt(members.size(), out); for (byte[] member : members.keySet()) { DataSerializer.writeByteArray(member, out); DataSerializer.writePrimitiveDouble(members.get(member).getScore(), out); @@ -50,7 +48,7 @@ public class ReplaceByteArrayDoublePairs extends DeltaInfo { } public static void deserializeFrom(DataInput in, AbstractRedisData redisData) throws IOException { - int size = readArrayLength(in); + int size = DataSerializer.readPrimitiveInt(in); RedisSortedSet.MemberMap membersMap = new RedisSortedSet.MemberMap(size); RedisSortedSet.ScoreSet scoreSet = new RedisSortedSet.ScoreSet(); while (size > 0) { diff --git a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/delta/ReplaceByteArrays.java b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/delta/ReplaceByteArrays.java index 423331b..e7ca82c 100644 --- a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/delta/ReplaceByteArrays.java +++ b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/delta/ReplaceByteArrays.java @@ -15,7 +15,6 @@ package org.apache.geode.redis.internal.data.delta; import static org.apache.geode.DataSerializer.readByteArray; -import static org.apache.geode.internal.InternalDataSerializer.readArrayLength; import static org.apache.geode.redis.internal.data.delta.DeltaType.REPLACE_BYTE_ARRAYS; import java.io.DataInput; @@ -24,7 +23,6 @@ import java.io.IOException; import java.util.Set; import org.apache.geode.DataSerializer; -import org.apache.geode.internal.InternalDataSerializer; import org.apache.geode.redis.internal.data.AbstractRedisData; import org.apache.geode.redis.internal.data.RedisSet; @@ -42,7 +40,7 @@ public class ReplaceByteArrays extends DeltaInfo { public void serializeTo(DataOutput out) throws IOException { super.serializeTo(out); - InternalDataSerializer.writeArrayLength(byteArrays.size(), out); + DataSerializer.writePrimitiveInt(byteArrays.size(), out); for (byte[] bytes : byteArrays) { DataSerializer.writeByteArray(bytes, out); } @@ -50,7 +48,7 @@ public class ReplaceByteArrays extends DeltaInfo { // Create a member set as you read it in public static void deserializeFrom(DataInput in, AbstractRedisData redisData) throws IOException { - int size = readArrayLength(in); + int size = DataSerializer.readPrimitiveInt(in); RedisSet.MemberSet members = new RedisSet.MemberSet(size); while (size > 0) { members.add(readByteArray(in)); diff --git a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/delta/ReplaceByteAtOffset.java b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/delta/ReplaceByteAtOffset.java index df6089f..62093e9 100644 --- a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/delta/ReplaceByteAtOffset.java +++ b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/data/delta/ReplaceByteAtOffset.java @@ -16,7 +16,7 @@ package org.apache.geode.redis.internal.data.delta; import static org.apache.geode.DataSerializer.readPrimitiveByte; -import static org.apache.geode.internal.InternalDataSerializer.readArrayLength; +import static org.apache.geode.DataSerializer.readPrimitiveInt; import static org.apache.geode.redis.internal.data.delta.DeltaType.REPLACE_BYTE_AT_OFFSET; import java.io.DataInput; @@ -24,7 +24,6 @@ import java.io.DataOutput; import java.io.IOException; import org.apache.geode.DataSerializer; -import org.apache.geode.internal.InternalDataSerializer; import org.apache.geode.redis.internal.data.AbstractRedisData; public class ReplaceByteAtOffset extends DeltaInfo { @@ -43,11 +42,11 @@ public class ReplaceByteAtOffset extends DeltaInfo { public void serializeTo(DataOutput out) throws IOException { super.serializeTo(out); - InternalDataSerializer.writeArrayLength(offset, out); + DataSerializer.writePrimitiveInt(offset, out); DataSerializer.writePrimitiveByte(byteValue, out); } public static void deserializeFrom(DataInput in, AbstractRedisData redisData) throws IOException { - redisData.applyReplaceByteAtOffsetDelta(readArrayLength(in), readPrimitiveByte(in)); + redisData.applyReplaceByteAtOffsetDelta(readPrimitiveInt(in), readPrimitiveByte(in)); } } diff --git a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/pubsub/Publisher.java b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/pubsub/Publisher.java index a9051df..a4adaee 100644 --- a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/pubsub/Publisher.java +++ b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/pubsub/Publisher.java @@ -19,6 +19,7 @@ import static java.util.Arrays.asList; import static org.apache.geode.internal.lang.utils.JavaWorkarounds.computeIfAbsent; import static org.apache.geode.logging.internal.executors.LoggingExecutors.newCachedThreadPool; import static org.apache.geode.redis.internal.RedisConstants.INTERNAL_SERVER_ERROR; +import static org.apache.geode.redis.internal.RedisConstants.PUBLISH_REQUEST_DATA_SERIALIZABLE_ID; import static org.apache.geode.redis.internal.netty.Coder.bytesToString; import static org.apache.geode.redis.internal.netty.Coder.getErrorResponse; import static org.apache.geode.redis.internal.netty.StringBytesGlossary.MESSAGE; @@ -43,18 +44,15 @@ import io.netty.buffer.ByteBuf; import io.netty.util.ReferenceCountUtil; import org.apache.logging.log4j.Logger; +import org.apache.geode.DataSerializable; import org.apache.geode.DataSerializer; +import org.apache.geode.Instantiator; import org.apache.geode.annotations.VisibleForTesting; import org.apache.geode.cache.execute.FunctionContext; import org.apache.geode.cache.execute.FunctionService; import org.apache.geode.cache.execute.ResultCollector; import org.apache.geode.distributed.DistributedMember; -import org.apache.geode.internal.InternalDataSerializer; import org.apache.geode.internal.cache.execute.InternalFunction; -import org.apache.geode.internal.serialization.DataSerializableFixedID; -import org.apache.geode.internal.serialization.DeserializationContext; -import org.apache.geode.internal.serialization.KnownVersion; -import org.apache.geode.internal.serialization.SerializationContext; import org.apache.geode.logging.internal.log4j.api.LogService; import org.apache.geode.redis.internal.netty.Client; import org.apache.geode.redis.internal.netty.Coder; @@ -250,7 +248,17 @@ public class Publisher { } } - public static class PublishRequest implements DataSerializableFixedID { + public static class PublishRequest implements DataSerializable { + + static { + Instantiator + .register(new Instantiator(PublishRequest.class, PUBLISH_REQUEST_DATA_SERIALIZABLE_ID) { + public DataSerializable newInstance() { + return new PublishRequest(); + } + }); + } + // note final can not be used because of DataSerializableFixedID private byte[] channel; private List<byte[]> messages; @@ -287,24 +295,18 @@ public class Publisher { } @Override - public int getDSFID() { - return PUBLISH_REQUEST; - } - - @Override - public void toData(DataOutput out, SerializationContext context) throws IOException { + public void toData(DataOutput out) throws IOException { DataSerializer.writeByteArray(getChannel(), out); - InternalDataSerializer.writeArrayLength(messages.size(), out); + DataSerializer.writePrimitiveInt(messages.size(), out); for (byte[] message : messages) { DataSerializer.writeByteArray(message, out); } } @Override - public void fromData(DataInput in, DeserializationContext context) - throws IOException { + public void fromData(DataInput in) throws IOException { channel = DataSerializer.readByteArray(in); - int messageCount = InternalDataSerializer.readArrayLength(in); + int messageCount = DataSerializer.readPrimitiveInt(in); messages = new ArrayList<>(messageCount); for (int i = 0; i < messageCount; i++) { messages.add(DataSerializer.readByteArray(in)); @@ -312,11 +314,6 @@ public class Publisher { } @Override - public KnownVersion[] getSerializationVersions() { - return null; - } - - @Override public String toString() { return "PublishRequest{" + "channel=" + bytesToString(channel) + diff --git a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/services/cluster/RedisMemberInfo.java b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/services/cluster/RedisMemberInfo.java index dcbee42..6b80ab0 100644 --- a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/services/cluster/RedisMemberInfo.java +++ b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/services/cluster/RedisMemberInfo.java @@ -15,20 +15,29 @@ package org.apache.geode.redis.internal.services.cluster; +import static org.apache.geode.redis.internal.RedisConstants.MEMBER_INFO_DATA_SERIALIZABLE_ID; + import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; import java.io.Serializable; import java.util.Objects; +import org.apache.geode.DataSerializable; import org.apache.geode.DataSerializer; +import org.apache.geode.Instantiator; import org.apache.geode.distributed.DistributedMember; -import org.apache.geode.internal.serialization.DataSerializableFixedID; -import org.apache.geode.internal.serialization.DeserializationContext; -import org.apache.geode.internal.serialization.KnownVersion; -import org.apache.geode.internal.serialization.SerializationContext; -public class RedisMemberInfo implements DataSerializableFixedID, Serializable { +public class RedisMemberInfo implements DataSerializable, Serializable { + + static { + Instantiator + .register(new Instantiator(RedisMemberInfo.class, MEMBER_INFO_DATA_SERIALIZABLE_ID) { + public DataSerializable newInstance() { + return new RedisMemberInfo(); + } + }); + } private static final long serialVersionUID = -10228877687322470L; @@ -37,7 +46,7 @@ public class RedisMemberInfo implements DataSerializableFixedID, Serializable { private int redisPort; // For serialization - public RedisMemberInfo() {} + private RedisMemberInfo() {} public RedisMemberInfo(DistributedMember member, String hostAddress, int redisPort) { this.member = member; @@ -58,31 +67,20 @@ public class RedisMemberInfo implements DataSerializableFixedID, Serializable { } @Override - public int getDSFID() { - return REDIS_MEMBER_INFO_ID; - } - - @Override - public void toData(DataOutput out, SerializationContext context) throws IOException { + public void toData(DataOutput out) throws IOException { DataSerializer.writeObject(member, out); DataSerializer.writeString(hostAddress, out); out.writeInt(redisPort); } @Override - public void fromData(DataInput in, DeserializationContext context) - throws IOException, ClassNotFoundException { + public void fromData(DataInput in) throws IOException, ClassNotFoundException { member = DataSerializer.readObject(in); hostAddress = DataSerializer.readString(in); redisPort = DataSerializer.readPrimitiveInt(in); } @Override - public KnownVersion[] getSerializationVersions() { - return null; - } - - @Override public String toString() { return member.toString() + " hostAddress: " + hostAddress + " redisPort: " + redisPort; } diff --git a/geode-for-redis/src/main/resources/META-INF/services/org.apache.geode.internal.serialization.DataSerializableFixedIdRegistrant b/geode-for-redis/src/main/resources/META-INF/services/org.apache.geode.internal.serialization.DataSerializableFixedIdRegistrant deleted file mode 100644 index d871a4f..0000000 --- a/geode-for-redis/src/main/resources/META-INF/services/org.apache.geode.internal.serialization.DataSerializableFixedIdRegistrant +++ /dev/null @@ -1,16 +0,0 @@ -# -# 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. -# - -org.apache.geode.redis.internal.GeodeRedisService diff --git a/geode-for-redis/src/test/java/org/apache/geode/redis/internal/data/RedisHashTest.java b/geode-for-redis/src/test/java/org/apache/geode/redis/internal/data/RedisHashTest.java index 0d46161..3cb2400 100644 --- a/geode-for-redis/src/test/java/org/apache/geode/redis/internal/data/RedisHashTest.java +++ b/geode-for-redis/src/test/java/org/apache/geode/redis/internal/data/RedisHashTest.java @@ -47,7 +47,6 @@ import org.apache.geode.cache.Region; import org.apache.geode.internal.HeapDataOutputStream; import org.apache.geode.internal.cache.PartitionedRegion; import org.apache.geode.internal.serialization.ByteArrayDataInput; -import org.apache.geode.internal.serialization.SerializationContext; import org.apache.geode.internal.size.ReflectionObjectSizer; import org.apache.geode.internal.size.ReflectionSingleObjectSizer; import org.apache.geode.redis.internal.commands.executor.GlobPattern; @@ -60,8 +59,8 @@ public class RedisHashTest { @Test public void confirmToDataIsSynchronized() throws NoSuchMethodException { - assertThat(Modifier.isSynchronized(RedisHash.class - .getMethod("toData", DataOutput.class, SerializationContext.class).getModifiers())) + assertThat(Modifier.isSynchronized( + RedisHash.class.getMethod("toData", DataOutput.class).getModifiers())) .isTrue(); } diff --git a/geode-for-redis/src/test/java/org/apache/geode/redis/internal/data/RedisListTest.java b/geode-for-redis/src/test/java/org/apache/geode/redis/internal/data/RedisListTest.java index cb46bcc..031a180 100644 --- a/geode-for-redis/src/test/java/org/apache/geode/redis/internal/data/RedisListTest.java +++ b/geode-for-redis/src/test/java/org/apache/geode/redis/internal/data/RedisListTest.java @@ -36,7 +36,6 @@ import org.apache.geode.cache.Region; import org.apache.geode.internal.HeapDataOutputStream; import org.apache.geode.internal.cache.PartitionedRegion; import org.apache.geode.internal.serialization.ByteArrayDataInput; -import org.apache.geode.internal.serialization.SerializationContext; public class RedisListTest { @@ -57,10 +56,9 @@ public class RedisListTest { @Test public void confirmToDataIsSynchronized() throws NoSuchMethodException { - assertThat(Modifier - .isSynchronized(RedisList.class - .getMethod("toData", DataOutput.class, SerializationContext.class).getModifiers())) - .isTrue(); + assertThat(Modifier.isSynchronized( + RedisList.class.getMethod("toData", DataOutput.class).getModifiers())) + .isTrue(); } @Test diff --git a/geode-for-redis/src/test/java/org/apache/geode/redis/internal/data/RedisSetTest.java b/geode-for-redis/src/test/java/org/apache/geode/redis/internal/data/RedisSetTest.java index 7f5c4cb..0208234 100644 --- a/geode-for-redis/src/test/java/org/apache/geode/redis/internal/data/RedisSetTest.java +++ b/geode-for-redis/src/test/java/org/apache/geode/redis/internal/data/RedisSetTest.java @@ -54,7 +54,6 @@ import org.apache.geode.internal.HeapDataOutputStream; import org.apache.geode.internal.cache.PartitionedRegion; import org.apache.geode.internal.cache.TXId; import org.apache.geode.internal.serialization.ByteArrayDataInput; -import org.apache.geode.internal.serialization.SerializationContext; import org.apache.geode.internal.size.ReflectionObjectSizer; import org.apache.geode.redis.internal.netty.Coder; import org.apache.geode.redis.internal.services.RegionProvider; @@ -84,10 +83,9 @@ public class RedisSetTest { @Test public void confirmToDataIsSynchronized() throws NoSuchMethodException { - assertThat(Modifier - .isSynchronized(RedisSet.class - .getMethod("toData", DataOutput.class, SerializationContext.class).getModifiers())) - .isTrue(); + assertThat(Modifier.isSynchronized( + RedisSet.class.getMethod("toData", DataOutput.class).getModifiers())) + .isTrue(); } private RedisSet createRedisSet(int m1, int m2) { @@ -491,7 +489,7 @@ public class RedisSetTest { private void iterateOverSet(RedisSet set, AtomicBoolean running) throws Exception { while (running.get()) { HeapDataOutputStream out = new HeapDataOutputStream(100); - set.toData(out, null); + set.toData(out); } } diff --git a/geode-for-redis/src/test/java/org/apache/geode/redis/internal/data/RedisSortedSetTest.java b/geode-for-redis/src/test/java/org/apache/geode/redis/internal/data/RedisSortedSetTest.java index 03a68f8..ef54a98 100644 --- a/geode-for-redis/src/test/java/org/apache/geode/redis/internal/data/RedisSortedSetTest.java +++ b/geode-for-redis/src/test/java/org/apache/geode/redis/internal/data/RedisSortedSetTest.java @@ -61,7 +61,6 @@ import org.apache.geode.cache.Region; import org.apache.geode.internal.HeapDataOutputStream; import org.apache.geode.internal.cache.PartitionedRegion; import org.apache.geode.internal.serialization.ByteArrayDataInput; -import org.apache.geode.internal.serialization.SerializationContext; import org.apache.geode.internal.size.ReflectionObjectSizer; import org.apache.geode.redis.internal.commands.executor.GlobPattern; import org.apache.geode.redis.internal.commands.executor.sortedset.SortedSetLexRangeOptions; @@ -88,8 +87,8 @@ public class RedisSortedSetTest { @Test public void confirmToDataIsSynchronized() throws NoSuchMethodException { - assertThat(Modifier.isSynchronized(RedisSortedSet.class - .getMethod("toData", DataOutput.class, SerializationContext.class).getModifiers())) + assertThat(Modifier.isSynchronized( + RedisSortedSet.class.getMethod("toData", DataOutput.class).getModifiers())) .isTrue(); } diff --git a/geode-for-redis/src/test/java/org/apache/geode/redis/internal/data/RedisStringTest.java b/geode-for-redis/src/test/java/org/apache/geode/redis/internal/data/RedisStringTest.java index 7c13a74..29d4f05 100644 --- a/geode-for-redis/src/test/java/org/apache/geode/redis/internal/data/RedisStringTest.java +++ b/geode-for-redis/src/test/java/org/apache/geode/redis/internal/data/RedisStringTest.java @@ -40,7 +40,6 @@ import org.apache.geode.cache.Region; import org.apache.geode.internal.HeapDataOutputStream; import org.apache.geode.internal.cache.PartitionedRegion; import org.apache.geode.internal.serialization.ByteArrayDataInput; -import org.apache.geode.internal.serialization.SerializationContext; import org.apache.geode.internal.size.ReflectionObjectSizer; public class RedisStringTest { @@ -252,10 +251,9 @@ public class RedisStringTest { @Test public void confirmToDataIsSynchronized() throws NoSuchMethodException { - assertThat(Modifier - .isSynchronized(RedisString.class - .getMethod("toData", DataOutput.class, SerializationContext.class).getModifiers())) - .isTrue(); + assertThat(Modifier.isSynchronized( + RedisString.class.getMethod("toData", DataOutput.class).getModifiers())) + .isTrue(); } @Test 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 19e28d4..bf7ff09 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 @@ -462,9 +462,6 @@ public interface DataSerializableFixedID extends SerializationVersions, BasicSer short UPDATE_ENTRY_VERSION_MESSAGE = 158; short PR_UPDATE_ENTRY_VERSION_MESSAGE = 159; - short REDIS_KEY = 160; - short PUBLISH_REQUEST = 161; - // 162 through 164 unused short PR_FETCH_BULK_ENTRIES_MESSAGE = 165; @@ -686,14 +683,7 @@ public interface DataSerializableFixedID extends SerializationVersions, BasicSer short ABORT_BACKUP_REQUEST = 2183; short MEMBER_IDENTIFIER = 2184; short HOST_AND_PORT = 2185; - short REDIS_SET_ID = 2186; - short REDIS_STRING_ID = 2187; - short REDIS_HASH_ID = 2188; - short REDIS_NULL_DATA_ID = 2189; - // 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 /**