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

Reply via email to