git.net

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Difference between heartbeat and generation on a Gossip packet


Hi Abdelkarim,

Other people on this list are much more knowledgeable than me and can
correct me if I'm wrong, but my understanding is that the combination of
generation and version (aka heartbeat) form a logical clock tuple
consisting of (generation, version) and that combination is the
HeartBeatState.

The generation is the really important part and roughly corresponds to the
last start time of that particular Cassandra process in seconds since epoch
plus any forced increments due to e.g. the gossiper stopping or starting
(nodetool disable/enable gossip). The generation is further stored on disk
in the system.local table so that during a crash or restart, even if the
system's clock moves backwards, the Cassandra node's generation should
never move backwards. Whenever a node's generation number changes it's
considered a major gossip state update by other nodes because they have to
do things like ensure they are speaking the right protocol version, compare
schema, etc ... in addition to all the versioned state changes seen below.

The version is a counter used to show the passage of time within a
generation and is used to signal versioned gossip state changes. It starts
at zero on process start and increases by one roughly every second. There
are various pieces of metadata like a node's status, schema, rack, dc, host
id, tokens, etc... which are all versioned using this version counter when
they change (whatever shows up in nodetool gossipinfo is a good example of
these states). When the gossiper is enabled, every second, each node increments
their local version by one, picks another peer to gossip with, and sends
out their map of versioned items to that peer; other nodes know to pick up
any new data if the version has increased. Since nodes are all gossiping
with each other, any update to one node's versioned data get's propagated
out quickly even if that node may not have directly gossiped with everyone.
Naturally, the version number only increases for a given generation, but if
the generation changes the version moves backwards (resets to zero).

So yea, think of (generation, version) as forming a logical clock which
roughly corresponds to (~last process start in seconds since the epoch,
~seconds since last process start) for each node. This logical clock is
used to create ordering in gossip state changes.

Hope that was helpful,
-Joey Lynch

On Tue, Jun 26, 2018 at 3:09 PM Abdelkrim Fitouri <abdou.abf@xxxxxxxxx>
wrote:

> Hello,
>
> I  am studying the gossip part on casssandra and wondering about the
> difference between the heartbeat and generation data exchanged for the
> autodiscovery.
>
> many thanks for any help.
>
> --
>
> Best Regards.
>
> Abdelkarim.
>


( ! ) Warning: include(msgfooter.php): failed to open stream: No such file or directory in /var/www/git/apache-cassandra-development/msg02270.html on line 127
Call Stack
#TimeMemoryFunctionLocation
10.0006368792{main}( ).../msg02270.html:0

( ! ) Warning: include(): Failed opening 'msgfooter.php' for inclusion (include_path='.:/var/www/git') in /var/www/git/apache-cassandra-development/msg02270.html on line 127
Call Stack
#TimeMemoryFunctionLocation
10.0006368792{main}( ).../msg02270.html:0