[ 
https://issues.apache.org/jira/browse/CASSANDRA-4383?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13444176#comment-13444176
 ] 

Eric Evans commented on CASSANDRA-4383:
---------------------------------------

The approach taken here continues to make me a little hesitant simply because, 
I think, it introduces for the first time a need for proper ordering of STATE 
transmission/reception.  I don't have a clear-enough understanding of how the 
underlying messaging works to know if we can firmly rely on that or not (I take 
you at your word that we can), but it is significant enough to warrant a 
mention, if for the interface alone.

And on that note...

bq. Patch 0003 is something we can take or leave, it just seemed to make sense 
to have a way to atomically set two gossip states at once in case the gossiper 
fires in between adding the first and second state, however it's ok for us to 
gossip TOKENS without STATUS, since STATUS is what fires events. I'm also not 
100% certain it actually adds them atomically, since EndpointState is backed by 
NBHM.

What I had in mind was (at least) something like a 
{{sendState\{Normal,Bootstrap,...\}(Collection<token> tokens)}} to encapsulate 
those operations sensitive to ordering.  
{{Gossiper.addLocalApplicationStates(...)}} still makes it too easy to do the 
wrong thing.

A couple of other things:

{{StorageService.getHostId(ep)}} creates a second means of obtaining a host ID, 
and it's not at all obvious that it should only be used in assigning the value 
returned by the method of the _same name_ in {{TokenMetadata}}.  At a minimum, 
I think this should be given a new name, one that makes obvious its purpose.  
However, wouldn't encapsulation be better anyway if this were a {{Gossiper}} 
method?

And in addition to {{getHostId}}, {{usesHostId}} also seems better suited to 
the {{Gossiper}}.

Finally, is there any reason that {{TokenSerializer.(de)serialize(...)}} 
shouldn't be static?  What is the instance buying us?

----

As for the whole "...using the presence of a hostID as an implicit indication 
of the version...", I was unaware of CASSANDRA-4317 (e6530cc3) and (somehow 
)mistakenly took that as part of this change.  Sorry about that.

bq. Well, it's six one way and a half dozen the other. We can look at 
NET_VERSION instead, but it was also introduced in 1.2, so it's effectively the 
same thing... and you could have the bug in the opposite direction

If we look for a NET_VERSION that's not there (and should be), then the error 
is a missing NET_VERSION.  If NET_VERSION is >= 1.2, or exists at all if you 
prefer the implicit (I don't), and there is no HOST_ID, then we have a bug in 
transmitting/reception of HOST_ID.

But, mostly I meant that it doesn't read as well as the old code that clearly 
did one thing when the version was < X, and another when it was >= Y.

Anyway, this ship has sailed as far as this ticket goes, so if you'd prefer 
discuss it elsewhere then that's fine.  There is no need to hold any of this 
against this particular issue/change.
                
> Binary encoding of vnode tokens
> -------------------------------
>
>                 Key: CASSANDRA-4383
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-4383
>             Project: Cassandra
>          Issue Type: Sub-task
>            Reporter: Brandon Williams
>            Assignee: Brandon Williams
>             Fix For: 1.2.0 beta 1
>
>         Attachments: 
> 0001-Add-HOST_ID-and-TOKENS-app-states-binary-serialization.txt, 
> 0002-Fix-tests.txt, 0003-Add-tokens-and-status-atomically.txt
>
>
> Since after CASSANDRA-4317 we can know which version a remote node is using 
> (that is, whether it is vnode-aware or not) this a good opportunity to change 
> the token encoding to binary, since with a default of 256 tokens per node 
> even a fixed-length 16 byte encoding per token provides a great deal of 
> savings in gossip traffic over a text representation.

--
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