[tarantool-patches] Re: [PATCH v4 04/20] refactoring: remove exceptions from replica_check_id
Georgy Kirichenko
georgy at tarantool.org
Mon Sep 30 15:15:19 MSK 2019
LGTM, thank you
On Monday, September 23, 2019 6:56:55 PM MSK Ilya Kosarev wrote:
> replica_check_id is used in on_replace_dd_cluster trigger
> therefore it has to be cleared from exceptions. Now it doesn't
> throw any more. It's usages are updated.
>
> Part of #4247
> ---
> src/box/alter.cc | 6 ++++--
> src/box/replication.cc | 21 ++++++++++++++-------
> src/box/replication.h | 2 +-
> 3 files changed, 19 insertions(+), 10 deletions(-)
>
> diff --git a/src/box/alter.cc b/src/box/alter.cc
> index 1fce160f5..d4cb9e8d8 100644
> --- a/src/box/alter.cc
> +++ b/src/box/alter.cc
> @@ -3627,7 +3627,8 @@ on_replace_dd_cluster(struct trigger *trigger, void
> *event) /* Check fields */
> uint32_t replica_id =
> tuple_field_u32_xc(new_tuple,
BOX_CLUSTER_FIELD_ID);
> - replica_check_id(replica_id);
> + if (replica_check_id(replica_id) != 0)
> + return -1;
> tt_uuid replica_uuid;
> tuple_field_uuid_xc(new_tuple, BOX_CLUSTER_FIELD_UUID,
> &replica_uuid);
> @@ -3665,7 +3666,8 @@ on_replace_dd_cluster(struct trigger *trigger, void
> *event) assert(old_tuple != NULL);
> uint32_t replica_id =
> tuple_field_u32_xc(old_tuple,
BOX_CLUSTER_FIELD_ID);
> - replica_check_id(replica_id);
> + if (replica_check_id(replica_id) != 0)
> + return -1;
>
> struct trigger *on_commit;
> on_commit = txn_alter_trigger_new(unregister_replica,
> diff --git a/src/box/replication.cc b/src/box/replication.cc
> index 82bf496c8..786941f5c 100644
> --- a/src/box/replication.cc
> +++ b/src/box/replication.cc
> @@ -114,15 +114,19 @@ replication_free(void)
> free(replicaset.replica_by_id);
> }
>
> -void
> +int
> replica_check_id(uint32_t replica_id)
> {
> - if (replica_id == REPLICA_ID_NIL)
> - tnt_raise(ClientError, ER_REPLICA_ID_IS_RESERVED,
> + if (replica_id == REPLICA_ID_NIL) {
> + diag_set(ClientError, ER_REPLICA_ID_IS_RESERVED,
> (unsigned) replica_id);
> - if (replica_id >= VCLOCK_MAX)
> - tnt_raise(LoggedError, ER_REPLICA_MAX,
> + return -1;
> + }
> + if (replica_id >= VCLOCK_MAX) {
> + diag_set(ClientError, ER_REPLICA_MAX,
> (unsigned) replica_id);
> + return -1;
> + }
> /*
> * It's okay to update the instance id while it is joining to
> * a cluster as long as the id is set by the time bootstrap is
> @@ -133,9 +137,12 @@ replica_check_id(uint32_t replica_id)
> * case it will replay this operation during the final join
> * stage.
> */
> - if (!replicaset.is_joining && replica_id == instance_id)
> - tnt_raise(ClientError,
ER_LOCAL_INSTANCE_ID_IS_READ_ONLY,
> + if (!replicaset.is_joining && replica_id == instance_id) {
> + diag_set(ClientError, ER_LOCAL_INSTANCE_ID_IS_READ_ONLY,
> (unsigned) replica_id);
> + return -1;
> + }
> + return 0;
> }
>
> /* Return true if replica doesn't have id, relay and applier */
> diff --git a/src/box/replication.h b/src/box/replication.h
> index 19f283c7d..470420592 100644
> --- a/src/box/replication.h
> +++ b/src/box/replication.h
> @@ -352,7 +352,7 @@ replica_on_relay_stop(struct replica *replica);
> #if defined(__cplusplus)
> } /* extern "C" */
>
> -void
> +int
> replica_check_id(uint32_t replica_id);
>
> /**
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: This is a digitally signed message part.
URL: <https://lists.tarantool.org/pipermail/tarantool-patches/attachments/20190930/d08475b0/attachment.sig>
More information about the Tarantool-patches
mailing list