[Tarantool-patches] [PATCH v2 01/10] applier: store instance_id in struct applier
Serge Petrenko
sergepetrenko at tarantool.org
Fri Sep 4 11:13:21 MSK 2020
04.09.2020 01:51, Vladislav Shpilevoy пишет:
> Applier is going to need its numeric ID in order to tell the
> future Raft module who is a sender of a Raft message. An
> alternative would be to add sender ID to each Raft message, but
> this looks like a crutch. Moreover, applier still needs to know
> its numeric ID in order to notify Raft about heartbeats from the
> peer node.
>
> Needed for #1146
Hi! Thanks for the patch!
> ---
> src/box/applier.cc | 19 +++++++++++++++++++
> src/box/applier.h | 2 ++
> 2 files changed, 21 insertions(+)
>
> diff --git a/src/box/applier.cc b/src/box/applier.cc
> index c1d07ca54..699b5a683 100644
> --- a/src/box/applier.cc
> +++ b/src/box/applier.cc
> @@ -67,6 +67,23 @@ applier_set_state(struct applier *applier, enum applier_state state)
> trigger_run_xc(&applier->on_state, applier);
> }
>
> +static inline void
> +applier_assign_instance_id(struct applier *applier)
Maybe call it `applier_set_id`? This way it's shorter and resembles
`replica_set_id`.
> +{
> + /*
> + * After final join, the applier already received latest
> + * records from _cluster, including the record about
> + * source instance. It can be absent in case the source is
> + * an anonymous replica.
> + */
> + assert(applier->state == APPLIER_JOINED);
> + struct replica *replica = replica_by_uuid(&applier->uuid);
> + if (replica != NULL)
> + applier->instance_id = replica->id;
> + else
> + assert(applier->instance_id == 0);
> +}
> +
> /**
> * Write a nice error message to log file on SocketError or ClientError
> * in applier_f().
> @@ -603,6 +620,7 @@ applier_join(struct applier *applier)
> say_info("final data received");
>
> applier_set_state(applier, APPLIER_JOINED);
> + applier_assign_instance_id(applier);
> applier_set_state(applier, APPLIER_READY);
> }
>
> @@ -1207,6 +1225,7 @@ applier_subscribe(struct applier *applier)
> instance_id != REPLICA_ID_NIL) {
> say_info("final data received");
> applier_set_state(applier, APPLIER_JOINED);
> + applier_assign_instance_id(applier);
> applier_set_state(applier, APPLIER_READY);
> applier_set_state(applier, APPLIER_FOLLOW);
> }
> diff --git a/src/box/applier.h b/src/box/applier.h
> index 6e979a806..15ca1fcfd 100644
> --- a/src/box/applier.h
> +++ b/src/box/applier.h
> @@ -95,6 +95,8 @@ struct applier {
> ev_tstamp lag;
> /** The last box_error_code() logged to avoid log flooding */
> uint32_t last_logged_errcode;
> + /** Remote instance ID. */
> + uint32_t instance_id;
> /** Remote instance UUID */
> struct tt_uuid uuid;
> /** Remote URI (string) */
--
Serge Petrenko
More information about the Tarantool-patches
mailing list