cassandra-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Sylvain Lebresne (JIRA)" <>
Subject [jira] [Commented] (CASSANDRA-9554) Avoid digest mismatch storm on upgrade to 3.0
Date Mon, 31 Aug 2015 15:24:46 GMT


Sylvain Lebresne commented on CASSANDRA-9554:

You're right of course.

I've push a few additional commits on [my branch|].
It makes {{PartitionTest.testDigest}} run on the legacy format (even though that test isn't
all that useful) and more importantly adds backward compatibility tests against values computed
on 2.2 as suggested. There is also 3 other "fix" commits:
* the first one remove the "local deletion time" from the digest computation on 3.0 nodes.
This one isn't really a bug nor a problem for backward compatibility, but as the name implies,
the "local deletion time" is meant to be a local information (even though it's in practice
assigned by the coordinator and thus common to all replica, and that's why this wasn't a problem)
and if "feels" better to not use it in digests.  This is also more consistent with the old
way to during things (we don't include it in pre-3.0 digets).
* the second one makes it so that deletion of a row on a compact table is done through the
insertion of a cell tombstone. As explained by the comment in the commit, that's more consistent
with the old way of doing this, and is easier than to deal with that in both thrift and the
backward compatibility code (which we weren't doing properly).
* the thirft one fix minor errors in the legacy digest computation.

CI tests are ongoing but will be at [utests|]
and [dtests|].

> Avoid digest mismatch storm on upgrade to 3.0
> ---------------------------------------------
>                 Key: CASSANDRA-9554
>                 URL:
>             Project: Cassandra
>          Issue Type: Bug
>            Reporter: Aleksey Yeschenko
>            Assignee: Sylvain Lebresne
>              Labels: upgrade
>             Fix For: 3.0 beta 2
> CASSANDRA-8099, in {{UnfilteredRowIterators.digest()}}:
> {code}
>         // TODO: we're not computing digest the same way that old nodes. This
>         // means we'll have digest mismatches during upgrade. We should pass the messaging
version of
>         // the node this is for (which might mean computing the digest last, and won't
>         // for schema (where we announce the version through gossip to everyone))
> {code}
> In a mixed 2.1(2.2) - 3.0 clusters, we need to calculate both digest at the same time
and keep both results, and send the appropriate one, depending on receiving nodes' messaging
versions. Do that until {{MessagingService.allNodesAtLeast30()}} is true (this is not unprecedented).

This message was sent by Atlassian JIRA

View raw message