Class DynamicMessageRecordSerializer
- java.lang.Object
-
- com.apple.foundationdb.record.provider.common.DynamicMessageRecordSerializer
-
- All Implemented Interfaces:
RecordSerializer<Message>
@API(UNSTABLE) public class DynamicMessageRecordSerializer extends Object implements RecordSerializer<Message>
Serialize records using default Protobuf serialization usingDynamicMessage
.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface com.apple.foundationdb.record.provider.common.RecordSerializer
RecordSerializer.Counts, RecordSerializer.Events
-
-
Constructor Summary
Constructors Modifier Constructor Description protected
DynamicMessageRecordSerializer()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description Message
deserialize(RecordMetaData metaData, Tuple primaryKey, byte[] serialized, StoreTimer timer)
Convert a byte array to a Protobuf record.protected DynamicMessage
deserializeFromBytes(Descriptors.Descriptor storedDescriptor, byte[] serialized)
protected DynamicMessage
deserializeUnion(Descriptors.Descriptor unionDescriptor, Tuple primaryKey, byte[] serialized, int metaDataVersion)
protected org.apache.commons.lang3.tuple.Pair<Descriptors.FieldDescriptor,DynamicMessage>
getUnionField(DynamicMessage unionMessage, Tuple primaryKey)
static RecordSerializer<Message>
instance()
byte[]
serialize(RecordMetaData metaData, RecordType recordType, Message record, StoreTimer timer)
Convert a Protobuf record to bytes.protected byte[]
serializeToBytes(Message storedRecord)
RecordSerializer<Message>
widen()
Convert this typed record serializer to an untyped one.
-
-
-
Method Detail
-
instance
@Nonnull public static RecordSerializer<Message> instance()
-
widen
@Nonnull public RecordSerializer<Message> widen()
Description copied from interface:RecordSerializer
Convert this typed record serializer to an untyped one.- If this serializer wraps another serializer, for example, because it does compressions, then
widen
that serializer and return the result wrapped equivalently. - If this serializer parses messages in a type-sensitive way, return the closest general purpose way.
- If this serializer is inherently bound to its type parameter, throw an exception.
If a
FDBTypedRecordStore
is created without callingFDBTypedRecordStore.Builder.setUntypedSerializer(com.apple.foundationdb.record.provider.common.RecordSerializer<com.google.protobuf.Message>)
, then in order to make the untyped record store that is paired with the typed store (used, for instance, to rebuild indexes), the given typed serializer will be widened by calling this method.- Specified by:
widen
in interfaceRecordSerializer<Message>
- Returns:
- a new serializer that works the same way but handles all record types.
- If this serializer wraps another serializer, for example, because it does compressions, then
-
serialize
@Nonnull public byte[] serialize(@Nonnull RecordMetaData metaData, @Nonnull RecordType recordType, @Nonnull Message record, @Nullable StoreTimer timer)
Description copied from interface:RecordSerializer
Convert a Protobuf record to bytes. While Protobuf messages provide their ownMessageLite.toByteArray()
method for serialization, record stores may elect to first wrap the raw Protobuf record in another wrapping type or perform additional transformations like encrypt or compress records. Implementors of this interface can control how exactly which transformations are done, with the main constraint being that whatever operation is done should be reversible by calling thedeserialize()
method on those bytes. Implementors should also be careful as they evolve this method that thedeserialize
method is still able to read older data unless they are certain that any record store that used the older implementation has since been cleared out or migrated to a newer format.- Specified by:
serialize
in interfaceRecordSerializer<Message>
- Parameters:
metaData
- the store's meta-datarecordType
- the record type of the messagerecord
- the Protobuf record to serializetimer
- a timer used to instrument serialization- Returns:
- the serialized record
-
deserialize
@Nonnull public Message deserialize(@Nonnull RecordMetaData metaData, @Nonnull Tuple primaryKey, @Nonnull byte[] serialized, @Nullable StoreTimer timer)
Description copied from interface:RecordSerializer
Convert a byte array to a Protobuf record. This should be the inverse of theserialize()
method.- Specified by:
deserialize
in interfaceRecordSerializer<Message>
- Parameters:
metaData
- the store's meta-dataprimaryKey
- the primary key of the recordserialized
- the serialized bytestimer
- a timer used to instrument deserialization- Returns:
- the deserialized record
-
deserializeUnion
@Nonnull protected DynamicMessage deserializeUnion(@Nonnull Descriptors.Descriptor unionDescriptor, @Nonnull Tuple primaryKey, @Nonnull byte[] serialized, int metaDataVersion)
-
deserializeFromBytes
@Nonnull protected DynamicMessage deserializeFromBytes(@Nonnull Descriptors.Descriptor storedDescriptor, @Nonnull byte[] serialized)
-
getUnionField
@Nonnull protected org.apache.commons.lang3.tuple.Pair<Descriptors.FieldDescriptor,DynamicMessage> getUnionField(@Nonnull DynamicMessage unionMessage, @Nonnull Tuple primaryKey)
-
-