[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