[Tarantool-patches] [PATCH v5 3/8] refactoring: recombine error conditions in triggers

Sergey Ostanevich sergos at tarantool.org
Wed Nov 27 16:28:47 MSK 2019


Hi!

LGTM

Sergos


On 22 Nov 05:46, Ilya Kosarev wrote:
> Some error conditions in triggers and underlying functions were
> combined to look better. On the other hand, in
> on_replace_dd_fk_constraint we now return an error immediately if
> child space were not found instead of searching for both child and
> parent spaces before search results inspection.
> 
> Part of #4247
> ---
>  src/box/alter.cc | 35 +++++++++++++++--------------------
>  1 file changed, 15 insertions(+), 20 deletions(-)
> 
> diff --git a/src/box/alter.cc b/src/box/alter.cc
> index 16e3f7d37..aaaf53493 100644
> --- a/src/box/alter.cc
> +++ b/src/box/alter.cc
> @@ -3621,9 +3621,8 @@ on_replace_dd_collation(struct trigger * /* trigger */, void *event)
>  int
>  priv_def_create_from_tuple(struct priv_def *priv, struct tuple *tuple)
>  {
> -	if (tuple_field_u32(tuple, BOX_PRIV_FIELD_ID, &(priv->grantor_id)) != 0)
> -		return -1;
> -	if (tuple_field_u32(tuple, BOX_PRIV_FIELD_UID, &(priv->grantee_id)) != 0)
> +	if (tuple_field_u32(tuple, BOX_PRIV_FIELD_ID, &(priv->grantor_id)) != 0 ||
> +	    tuple_field_u32(tuple, BOX_PRIV_FIELD_UID, &(priv->grantee_id)) != 0)
>  		return -1;
>  
>  	const char *object_type =
> @@ -3882,9 +3881,8 @@ modify_priv(struct trigger *trigger, void *event)
>  	(void) event;
>  	struct tuple *tuple = (struct tuple *)trigger->data;
>  	struct priv_def priv;
> -	if (priv_def_create_from_tuple(&priv, tuple) != 0)
> -		return -1;
> -	if (grant_or_revoke(&priv) != 0)
> +	if (priv_def_create_from_tuple(&priv, tuple) != 0 ||
> +	    grant_or_revoke(&priv) != 0)
>  		return -1;
>  	return 0;
>  }
> @@ -3903,11 +3901,9 @@ on_replace_dd_priv(struct trigger * /* trigger */, void *event)
>  	struct priv_def priv;
>  
>  	if (new_tuple != NULL && old_tuple == NULL) {	/* grant */
> -		if (priv_def_create_from_tuple(&priv, new_tuple) != 0)
> -			return -1;
> -		if (priv_def_check(&priv, PRIV_GRANT) != 0)
> -			return -1;
> -		if (grant_or_revoke(&priv) != 0)
> +		if (priv_def_create_from_tuple(&priv, new_tuple) != 0 ||
> +		    priv_def_check(&priv, PRIV_GRANT) != 0 ||
> +		    grant_or_revoke(&priv) != 0)
>  			return -1;
>  		struct trigger *on_rollback =
>  			txn_alter_trigger_new(revoke_priv, new_tuple);
> @@ -3916,9 +3912,8 @@ on_replace_dd_priv(struct trigger * /* trigger */, void *event)
>  		txn_stmt_on_rollback(stmt, on_rollback);
>  	} else if (new_tuple == NULL) {                /* revoke */
>  		assert(old_tuple);
> -		if (priv_def_create_from_tuple(&priv, old_tuple) != 0)
> -			return -1;
> -		if (priv_def_check(&priv, PRIV_REVOKE) != 0)
> +		if (priv_def_create_from_tuple(&priv, old_tuple) != 0 ||
> +		    priv_def_check(&priv, PRIV_REVOKE) != 0)
>  			return -1;
>  		priv.access = 0;
>  		if (grant_or_revoke(&priv) != 0)
> @@ -3929,11 +3924,9 @@ on_replace_dd_priv(struct trigger * /* trigger */, void *event)
>  			return -1;
>  		txn_stmt_on_rollback(stmt, on_rollback);
>  	} else {                                       /* modify */
> -		if (priv_def_create_from_tuple(&priv, new_tuple) != 0)
> -			return -1;
> -		if (priv_def_check(&priv, PRIV_GRANT) != 0)
> -			return -1;
> -		if (grant_or_revoke(&priv) != 0)
> +		if (priv_def_create_from_tuple(&priv, new_tuple) != 0 ||
> +		    priv_def_check(&priv, PRIV_GRANT) != 0 ||
> +		    grant_or_revoke(&priv) != 0)
>  			return -1;
>  		struct trigger *on_rollback =
>  			txn_alter_trigger_new(modify_priv, old_tuple);
> @@ -5264,8 +5257,10 @@ on_replace_dd_fk_constraint(struct trigger * /* trigger*/, void *event)
>  			return -1;
>  		auto fk_def_guard = make_scoped_guard([=] { free(fk_def); });
>  		struct space *child_space = space_cache_find(fk_def->child_id);
> +		if (child_space == NULL)
> +			return -1;
>  		struct space *parent_space = space_cache_find(fk_def->parent_id);
> -		if (child_space == NULL or parent_space == NULL)
> +		if (parent_space == NULL)
>  			return -1;
>  		struct fk_constraint *old_fk=
>  			fk_constraint_remove(&child_space->child_fk_constraint,
> -- 
> 2.17.1
> 


More information about the Tarantool-patches mailing list