We are printing out error messages when a remote connection is closed
ERROR [shard 0] gossip - Fail to send GossipDigestACK2 to 127.0.0.2:0: rpc::closed_error (connection is closed)
ERROR [shard 0] gossip - Fail to handle GOSSIP_DIGEST_ACK: rpc::closed_error (connection is closed)
WARN [shard 0] unimplemented
this is causing issues with DTEST as it validates after finishing a run
that there are no ERRORs in the log
The rule is:
We can handle it correctly if error occurs -> log warn
We can not handle it correctly when error occurs -> log error
Fixes#144
So that do_before_change_notifications and do_on_change_notifications
are under seastar::async.
Now, before_change callbacks are inside seastar::async context.
It is easier to futurize apply_new_states and handle_major_state_change.
Now, on_change, on_join and on_restart callbacks are inside
seastar::async context.
It is not correct to use _scheduled_gossip_task.armed() to tell if
gossip is enabled or not , since timer set _armed = false before calling
the timer callback.
It was working correctly because we did not actually check is_enabled()
flag inside the timer callback but inside the send_gossip_digest_syn()'s
continuation and at that time the timer is armed again.
Use a standalone flag to do so.
We sleep storage_service_ring_delay until we abort due to failing to
talk to a seed node. We should retry sending GossipDigestSyn message,
instead of sending it once.
With this, we can start the seed node and normal node in a script like
below, without any sleep between.
./scylla --listen-address 127.0.0.1
./scylla --listen-address 127.0.0.2
This is useful for testing.
This is a long-awaited cleanup. Gossiper code runs every second, it is
not performance sensitive, so it does not make much sense to stick to
lowres db_clock, use high_resolution_clock instead.
Dependencies between static variables don't work if they're in different
translation units.
I see in gossiper's constructor, QUARANTINE_DELAY is still 0.
Make it a function. It is nicer to make it inline, but I don't want to
pull storage_service.hh into gossiper.hh.