Sylvain Lebresne created CASSANDRA-5744:
-------------------------------------------
Summary: Cleanup AbstractType/TypeSerializer classes
Key: CASSANDRA-5744
URL: https://issues.apache.org/jira/browse/CASSANDRA-5744
Project: Cassandra
Issue Type: Improvement
Affects Versions: 2.0 beta 1
Reporter: Sylvain Lebresne
Assignee: Sylvain Lebresne
Priority: Minor
Fix For: 2.0
Attachments: 0001-Inverse-serialize-deserialize.txt,
0002-Make-sure-deseriaze-don-t-throw-on-empty-BB.txt,
0003-Avoid-duplicating-code.txt
This is somewhat a followup to CASSANDRA-4495. I'm attaching 3 patches that do
the following:
# It inverse the serialize and deserialize method in TypeSerializer. Sorry I
didn't saw that earlier, but calling serialize the method that takes a byte
array to produce an object feels wrong to me (and wikipedia seems to agree with
me that this should the other way around:
http://en.wikipedia.org/wiki/Serialization :))
# For historical reasons (which imo were somewhat of a mistake in the first
place but that's another story), we accept an empty byte buffer as a valid
value for any type. When I say "valid", I mean that validate() never throw
(except for InetAddressType as it happens, but that's more of an inconsistency
that the patch fixes). However, for some reason most deserialize methods were
just throwing a random exception if an empty byte buffer. So I think we should
be coherent here, if validate() pass, you should be able to deserialize the
value alright, and the 2nd patch make sure of that (return null when there was
nothing else making sense).
# The patch removes a bunch of code duplication. Namely, AbstracType has a
getSerializer() method that return the corresponding TypeSerializer, but
despite that, every AbstractType subclass was redefining its compose, decompose
and validate that were just calling the corresponding method in their
deserializer. So the patch makes those method concrete in AbstractType and
remove the code duplication all over the place. Furthermore, TypeSerializer had
a getString(ByteBuffer) and a toString(T value) methods. But since we also
have a deserialize(ByteBuffer), the former getString() is really not useful as
it's just toString(deserialize()). So the patch also remove that method.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira