[
https://issues.apache.org/jira/browse/CASSANDRA-1034?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13011600#comment-13011600
]
Stu Hood commented on CASSANDRA-1034:
-------------------------------------
I was reaaally hoping we could subclass here... adding RingPosition leads to
explicit conversions scattered all over that end up obscuring implicit
conversions.
The hairiest part of subclassing would be renaming all of our Token subclasses
with DecoratedKey subclasses, but it cleans up unnecessary references: for
example, for a DecoratedKey for ByteOrderPartitioner or LocalPartitioner you
have:
{code}
DecoratedKey
BytesToken token;
ByteBuffer token;
ByteBuffer key;
{code}
... while with subclassing you could save two object references:
{code}
DecoratedKey
ByteBuffer keyAndToken;
{code}
Also, the Comparable dilemma is relatively straightforward with subclassing:
Token implements Comparable<Token>, the subclasses override, call
super.compare, and if their superclass is equal, fall back to
instanceof(myclass) to see whether they can compare the key data.
> Remove assumption that Key to Token is one-to-one
> -------------------------------------------------
>
> Key: CASSANDRA-1034
> URL: https://issues.apache.org/jira/browse/CASSANDRA-1034
> Project: Cassandra
> Issue Type: Bug
> Reporter: Stu Hood
> Assignee: Sylvain Lebresne
> Priority: Minor
> Fix For: 0.8
>
> Attachments:
> 0001-Make-range-accept-both-Token-and-DecoratedKey.patch,
> 0002-LengthPartitioner.patch, 1034_v1.txt
>
>
> get_range_slices assumes that Tokens do not collide and converts a KeyRange
> to an AbstractBounds. For RandomPartitioner, this assumption isn't safe, and
> would lead to a very weird heisenberg.
> Converting AbstractBounds to use a DecoratedKey would solve this, because the
> byte[] key portion of the DecoratedKey can act as a tiebreaker.
> Alternatively, we could make DecoratedKey extend Token, and then use
> DecoratedKeys in places where collisions are unacceptable.
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira