Tarantool development patches archive
 help / color / mirror / Atom feed
From: "Ilya Kosarev" <i.kosarev@tarantool.org>
To: tarantool-patches@freelists.org
Cc: "Georgy Kirichenko" <georgy@tarantool.org>
Subject: [tarantool-patches] Re[2]: [PATCH v2] refactoring: remove exceptions from triggers
Date: Mon, 02 Sep 2019 14:53:58 +0300	[thread overview]
Message-ID: <1567425238.495671041@f478.i.mail.ru> (raw)
In-Reply-To: <2240493.s3kcRXIbBG@home.lan>

[-- Attachment #1: Type: text/plain, Size: 16167 bytes --]


From 1a55132c453e3f6f2fb7f73cd1f1a10ffd885722 Mon Sep 17 00:00:00 2001
From: Ilya Kosarev <i.kosarev@tarantool.org>
Date: Mon, 2 Sep 2019 14:37:19 +0300
Subject: [PATCH] refactoring: fix codestyle

switch .. case indentations are refactored.
Extra consequent whitespaces are replaced with tabs.
Suitable _xc function implemented.
Closes #4247
Branch: https://github.com/tarantool/tarantool/tree/i.kosarev/gh-4247-remove-exceptions-from-triggers 
Issue: https://github.com/tarantool/tarantool/issues/4247
---
src/box/alter.cc | 311 +++++++++++++++++++++--------------------
src/box/replication.cc | 134 +++++++++---------
src/box/user.cc | 9 +-
src/box/vy_scheduler.c | 3 +-
4 files changed, 232 insertions(+), 225 deletions(-)
diff --git a/src/box/alter.cc b/src/box/alter.cc
index 02d66741b..faa575559 100644
--- a/src/box/alter.cc
+++ b/src/box/alter.cc
@@ -1330,30 +1330,30 @@ MoveIndex::rollback(struct alter_space *alter)
class ModifyIndex: public AlterSpaceOp
{
public:
- ModifyIndex(struct alter_space *alter,
- struct index *index, struct index_def *def)
- : AlterSpaceOp(alter), old_index(index),
- new_index(NULL), new_index_def(def) {
- if (new_index_def->iid == 0 &&
- key_part_cmp(new_index_def->key_def->parts,
- new_index_def->key_def->part_count,
- old_index->def->key_def->parts,
- old_index->def->key_def->part_count) != 0) {
- /*
- * Primary parts have been changed -
- * update secondary indexes.
- */
- alter->pk_def = new_index_def->key_def;
- }
- }
- struct index *old_index;
- struct index *new_index;
- struct index_def *new_index_def;
- virtual void alter_def(struct alter_space *alter);
- virtual void alter(struct alter_space *alter);
- virtual void commit(struct alter_space *alter, int64_t lsn);
- virtual void rollback(struct alter_space *alter);
- virtual ~ModifyIndex();
+ ModifyIndex(struct alter_space *alter,
+ struct index *index, struct index_def *def)
+ : AlterSpaceOp(alter), old_index(index),
+ new_index(NULL), new_index_def(def) {
+ if (new_index_def->iid == 0 &&
+ key_part_cmp(new_index_def->key_def->parts,
+ new_index_def->key_def->part_count,
+ old_index->def->key_def->parts,
+ old_index->def->key_def->part_count) != 0) {
+ /*
+ * Primary parts have been changed -
+ * update secondary indexes.
+ */
+ alter->pk_def = new_index_def->key_def;
+ }
+ }
+ struct index *old_index;
+ struct index *new_index;
+ struct index_def *new_index_def;
+ virtual void alter_def(struct alter_space *alter);
+ virtual void alter(struct alter_space *alter);
+ virtual void commit(struct alter_space *alter, int64_t lsn);
+ virtual void rollback(struct alter_space *alter);
+ virtual ~ModifyIndex();
};

/** Update the definition of the new space */
@@ -3111,16 +3111,16 @@ func_def_new_from_tuple(struct tuple *tuple)
uint32_t len;
const char *str = mp_decode_str(&exports, &len);
switch (STRN2ENUM(func_language, str, len)) {
- case FUNC_LANGUAGE_LUA:
- def->exports.lua = true;
- break;
- case FUNC_LANGUAGE_SQL:
- def->exports.sql = true;
- break;
- default:
- diag_set(ClientError, ER_CREATE_FUNCTION,
- def->name, "invalid exports value");
- return NULL;
+ case FUNC_LANGUAGE_LUA:
+ def->exports.lua = true;
+ break;
+ case FUNC_LANGUAGE_SQL:
+ def->exports.sql = true;
+ break;
+ default:
+ diag_set(ClientError, ER_CREATE_FUNCTION,
+ def->name, "invalid exports value");
+ return NULL;
}
}
const char *aggregate =
@@ -3278,9 +3278,10 @@ on_replace_dd_func(struct trigger * /* trigger */, void *event)
}
/* Can't' drop a builtin function. */
if (old_func->def->language == FUNC_LANGUAGE_SQL_BUILTIN) {
- tnt_raise(ClientError, ER_DROP_FUNCTION,
+ diag_set(ClientError, ER_DROP_FUNCTION,
(unsigned) old_func->def->uid,
"function is SQL built-in");
+ return -1;
}
struct trigger *on_commit =
txn_alter_trigger_new(on_drop_func_commit, old_func);
@@ -3579,17 +3580,17 @@ priv_def_create_from_tuple(struct priv_def *priv, struct tuple *tuple)
* So check for that first.
*/
switch (mp_typeof(*data)) {
- case MP_STR:
- if (mp_decode_strl(&data) == 0) {
- /* Entity-wide privilege. */
- priv->object_id = 0;
- priv->object_type = schema_entity_type(priv->object_type);
- break;
- }
- FALLTHROUGH;
- default:
- if (tuple_field_u32(tuple,BOX_PRIV_FIELD_OBJECT_ID, &(priv->object_id)) != 0)
- return -1;
+ case MP_STR:
+ if (mp_decode_strl(&data) == 0) {
+ /* Entity-wide privilege. */
+ priv->object_id = 0;
+ priv->object_type = schema_entity_type(priv->object_type);
+ break;
+ }
+ FALLTHROUGH;
+ default:
+ if (tuple_field_u32(tuple,BOX_PRIV_FIELD_OBJECT_ID, &(priv->object_id)) != 0)
+ return -1;
}
if (priv->object_type == SC_UNKNOWN) {
diag_set(ClientError, ER_UNKNOWN_SCHEMA_OBJECT,
@@ -3631,121 +3632,121 @@ priv_def_check(struct priv_def *priv, enum priv_type priv_type)
priv->object_type, priv_type) != 0)
return -1;
switch (priv->object_type) {
- case SC_UNIVERSE:
- if (grantor->def->uid != ADMIN) {
- diag_set(AccessDeniedError,
- priv_name(priv_type),
- schema_object_name(SC_UNIVERSE),
- name,
- grantor->def->name);
- return -1;
- }
- break;
- case SC_SPACE: {
- struct space *space = space_cache_find(priv->object_id);
- if (space == NULL)
- return -1;
- if (space->def->uid != grantor->def->uid &&
- grantor->def->uid != ADMIN) {
- diag_set(AccessDeniedError,
- priv_name(priv_type),
- schema_object_name(SC_SPACE), name,
- grantor->def->name);
- return -1;
- }
- break;
+ case SC_UNIVERSE:
+ if (grantor->def->uid != ADMIN) {
+ diag_set(AccessDeniedError,
+ priv_name(priv_type),
+ schema_object_name(SC_UNIVERSE),
+ name,
+ grantor->def->name);
+ return -1;
}
- case SC_FUNCTION: {
- struct func *func = func_by_id(priv->object_id);
- if (func == NULL) {
- diag_set(ClientError, ER_NO_SUCH_FUNCTION, int2str(priv->object_id));
- return -1;
- }
- if (func->def->uid != grantor->def->uid &&
- grantor->def->uid != ADMIN) {
- diag_set(AccessDeniedError,
- priv_name(priv_type),
- schema_object_name(SC_FUNCTION), name,
- grantor->def->name);
- return -1;
- }
- break;
+ break;
+ case SC_SPACE: {
+ struct space *space = space_cache_find(priv->object_id);
+ if (space == NULL)
+ return -1;
+ if (space->def->uid != grantor->def->uid &&
+ grantor->def->uid != ADMIN) {
+ diag_set(AccessDeniedError,
+ priv_name(priv_type),
+ schema_object_name(SC_SPACE), name,
+ grantor->def->name);
+ return -1;
}
- case SC_SEQUENCE: {
- struct sequence *seq = sequence_by_id(priv->object_id);
- if (seq == NULL) {
- diag_set(ClientError, ER_NO_SUCH_SEQUENCE, int2str(priv->object_id));
- return -1;
- }
- if (seq->def->uid != grantor->def->uid &&
- grantor->def->uid != ADMIN) {
- diag_set(AccessDeniedError,
- priv_name(priv_type),
- schema_object_name(SC_SEQUENCE), name,
- grantor->def->name);
- return -1;
- }
- break;
+ break;
+ }
+ case SC_FUNCTION: {
+ struct func *func = func_by_id(priv->object_id);
+ if (func == NULL) {
+ diag_set(ClientError, ER_NO_SUCH_FUNCTION, int2str(priv->object_id));
+ return -1;
}
- case SC_ROLE: {
- struct user *role = user_by_id(priv->object_id);
- if (role == NULL || role->def->type != SC_ROLE) {
- diag_set(ClientError, ER_NO_SUCH_ROLE,
- role ? role->def->name :
- int2str(priv->object_id));
- return -1;
- }
- /*
- * Only the creator of the role can grant or revoke it.
- * Everyone can grant 'PUBLIC' role.
- */
- if (role->def->owner != grantor->def->uid &&
- grantor->def->uid != ADMIN &&
- (role->def->uid != PUBLIC || priv->access != PRIV_X)) {
- diag_set(AccessDeniedError,
- priv_name(priv_type),
- schema_object_name(SC_ROLE), name,
- grantor->def->name);
- return -1;
- }
- /* Not necessary to do during revoke, but who cares. */
- if (role_check(grantee, role) != 0)
- return -1;
- break;
+ if (func->def->uid != grantor->def->uid &&
+ grantor->def->uid != ADMIN) {
+ diag_set(AccessDeniedError,
+ priv_name(priv_type),
+ schema_object_name(SC_FUNCTION), name,
+ grantor->def->name);
+ return -1;
}
- case SC_USER: {
- struct user *user = user_by_id(priv->object_id);
- if (user == NULL || user->def->type != SC_USER) {
- diag_set(ClientError, ER_NO_SUCH_USER,
- user ? user->def->name :
- int2str(priv->object_id));
- return -1;
- }
- if (user->def->owner != grantor->def->uid &&
- grantor->def->uid != ADMIN) {
- diag_set(AccessDeniedError,
- priv_name(priv_type),
- schema_object_name(SC_USER), name,
- grantor->def->name);
- return -1;
- }
- break;
+ break;
+ }
+ case SC_SEQUENCE: {
+ struct sequence *seq = sequence_by_id(priv->object_id);
+ if (seq == NULL) {
+ diag_set(ClientError, ER_NO_SUCH_SEQUENCE, int2str(priv->object_id));
+ return -1;
}
- case SC_ENTITY_SPACE:
- case SC_ENTITY_FUNCTION:
- case SC_ENTITY_SEQUENCE:
- case SC_ENTITY_ROLE:
- case SC_ENTITY_USER: {
- /* Only admin may grant privileges on an entire entity. */
- if (grantor->def->uid != ADMIN) {
- diag_set(AccessDeniedError, priv_name(priv_type),
- schema_object_name(priv->object_type), name,
- grantor->def->name);
- return -1;
- }
+ if (seq->def->uid != grantor->def->uid &&
+ grantor->def->uid != ADMIN) {
+ diag_set(AccessDeniedError,
+ priv_name(priv_type),
+ schema_object_name(SC_SEQUENCE), name,
+ grantor->def->name);
+ return -1;
}
- default:
- break;
+ break;
+ }
+ case SC_ROLE: {
+ struct user *role = user_by_id(priv->object_id);
+ if (role == NULL || role->def->type != SC_ROLE) {
+ diag_set(ClientError, ER_NO_SUCH_ROLE,
+ role ? role->def->name :
+ int2str(priv->object_id));
+ return -1;
+ }
+ /*
+ * Only the creator of the role can grant or revoke it.
+ * Everyone can grant 'PUBLIC' role.
+ */
+ if (role->def->owner != grantor->def->uid &&
+ grantor->def->uid != ADMIN &&
+ (role->def->uid != PUBLIC || priv->access != PRIV_X)) {
+ diag_set(AccessDeniedError,
+ priv_name(priv_type),
+ schema_object_name(SC_ROLE), name,
+ grantor->def->name);
+ return -1;
+ }
+ /* Not necessary to do during revoke, but who cares. */
+ if (role_check(grantee, role) != 0)
+ return -1;
+ break;
+ }
+ case SC_USER: {
+ struct user *user = user_by_id(priv->object_id);
+ if (user == NULL || user->def->type != SC_USER) {
+ diag_set(ClientError, ER_NO_SUCH_USER,
+ user ? user->def->name :
+ int2str(priv->object_id));
+ return -1;
+ }
+ if (user->def->owner != grantor->def->uid &&
+ grantor->def->uid != ADMIN) {
+ diag_set(AccessDeniedError,
+ priv_name(priv_type),
+ schema_object_name(SC_USER), name,
+ grantor->def->name);
+ return -1;
+ }
+ break;
+ }
+ case SC_ENTITY_SPACE:
+ case SC_ENTITY_FUNCTION:
+ case SC_ENTITY_SEQUENCE:
+ case SC_ENTITY_ROLE:
+ case SC_ENTITY_USER: {
+ /* Only admin may grant privileges on an entire entity. */
+ if (grantor->def->uid != ADMIN) {
+ diag_set(AccessDeniedError, priv_name(priv_type),
+ schema_object_name(priv->object_type), name,
+ grantor->def->name);
+ return -1;
+ }
+ }
+ default:
+ break;
}
if (priv->access == 0) {
diag_set(ClientError, ER_GRANT,
diff --git a/src/box/replication.cc b/src/box/replication.cc
index 68bc1b064..bd3d4c23f 100644
--- a/src/box/replication.cc
+++ b/src/box/replication.cc
@@ -386,22 +386,22 @@ static void
replica_on_applier_disconnect(struct replica *replica)
{
switch (replica->applier_sync_state) {
- case APPLIER_SYNC:
- assert(replicaset.applier.synced > 0);
- replicaset.applier.synced--;
- FALLTHROUGH;
- case APPLIER_CONNECTED:
- assert(replicaset.applier.connected > 0);
- replicaset.applier.connected--;
- break;
- case APPLIER_LOADING:
- assert(replicaset.applier.loading > 0);
- replicaset.applier.loading--;
- break;
- case APPLIER_DISCONNECTED:
- break;
- default:
- unreachable();
+ case APPLIER_SYNC:
+ assert(replicaset.applier.synced > 0);
+ replicaset.applier.synced--;
+ FALLTHROUGH;
+ case APPLIER_CONNECTED:
+ assert(replicaset.applier.connected > 0);
+ replicaset.applier.connected--;
+ break;
+ case APPLIER_LOADING:
+ assert(replicaset.applier.loading > 0);
+ replicaset.applier.loading--;
+ break;
+ case APPLIER_DISCONNECTED:
+ break;
+ default:
+ unreachable();
}
replica->applier_sync_state = replica->applier->state;
if (replica->applier_sync_state == APPLIER_LOADING)
@@ -415,43 +415,43 @@ replica_on_applier_state_f(struct trigger *trigger, void *event)
struct replica *replica = container_of(trigger,
struct replica, on_applier_state);
switch (replica->applier->state) {
- case APPLIER_INITIAL_JOIN:
- replicaset.is_joining = true;
- break;
- case APPLIER_JOINED:
- replicaset.is_joining = false;
- break;
- case APPLIER_CONNECTED:
- try {
- if (tt_uuid_is_nil(&replica->uuid))
- replica_on_applier_connect(replica);
- else
- replica_on_applier_reconnect(replica);
- } catch (Exception *e) {
- return -1;
- }
- break;
- case APPLIER_LOADING:
- case APPLIER_DISCONNECTED:
- replica_on_applier_disconnect(replica);
- break;
- case APPLIER_FOLLOW:
- replica_on_applier_sync(replica);
- break;
- case APPLIER_OFF:
- /*
- * Connection to self, duplicate connection
- * to the same master, or the applier fiber
- * has been cancelled. Assume synced.
- */
- replica_on_applier_sync(replica);
- break;
- case APPLIER_STOPPED:
- /* Unrecoverable error. */
- replica_on_applier_disconnect(replica);
- break;
- default:
- break;
+ case APPLIER_INITIAL_JOIN:
+ replicaset.is_joining = true;
+ break;
+ case APPLIER_JOINED:
+ replicaset.is_joining = false;
+ break;
+ case APPLIER_CONNECTED:
+ try {
+ if (tt_uuid_is_nil(&replica->uuid))
+ replica_on_applier_connect(replica);
+ else
+ replica_on_applier_reconnect(replica);
+ } catch (Exception *e) {
+ return -1;
+ }
+ break;
+ case APPLIER_LOADING:
+ case APPLIER_DISCONNECTED:
+ replica_on_applier_disconnect(replica);
+ break;
+ case APPLIER_FOLLOW:
+ replica_on_applier_sync(replica);
+ break;
+ case APPLIER_OFF:
+ /*
+ * Connection to self, duplicate connection
+ * to the same master, or the applier fiber
+ * has been cancelled. Assume synced.
+ */
+ replica_on_applier_sync(replica);
+ break;
+ case APPLIER_STOPPED:
+ /* Unrecoverable error. */
+ replica_on_applier_disconnect(replica);
+ break;
+ default:
+ break;
}
fiber_cond_signal(&replicaset.applier.cond);
return 0;
@@ -472,11 +472,11 @@ replicaset_update(struct applier **appliers, int count)
struct applier *applier;

auto uniq_guard = make_scoped_guard([&]{
- replica_hash_foreach_safe(&uniq, replica, next) {
- replica_hash_remove(&uniq, replica);
- replica_clear_applier(replica);
- replica_delete(replica);
- }
+ replica_hash_foreach_safe(&uniq, replica, next) {
+ replica_hash_remove(&uniq, replica);
+ replica_clear_applier(replica);
+ replica_delete(replica);
+ }
});

/* Check for duplicate UUID */
@@ -596,15 +596,15 @@ applier_on_connect_f(struct trigger *trigger, void *event)
struct applier *applier = (struct applier *)event;

switch (applier->state) {
- case APPLIER_OFF:
- case APPLIER_STOPPED:
- state->failed++;
- break;
- case APPLIER_CONNECTED:
- state->connected++;
- break;
- default:
- return 0;
+ case APPLIER_OFF:
+ case APPLIER_STOPPED:
+ state->failed++;
+ break;
+ case APPLIER_CONNECTED:
+ state->connected++;
+ break;
+ default:
+ return 0;
}
fiber_cond_signal(&state->wakeup);
applier_pause(applier);
diff --git a/src/box/user.cc b/src/box/user.cc
index 50614c6f2..366ebcd72 100644
--- a/src/box/user.cc
+++ b/src/box/user.cc
@@ -302,6 +302,12 @@ user_set_effective_access(struct user *user)
}
}

+static void priv_def_create_from_tuple_xc(struct priv_def *priv, struct tuple *tuple)
+{
+ if (priv_def_create_from_tuple(priv, tuple) != 0)
+ diag_raise();
+}
+
/**
* Reload user privileges and re-grant them.
*/
@@ -339,8 +345,7 @@ user_reload_privs(struct user *user)
struct tuple *tuple;
while ((tuple = iterator_next_xc(it)) != NULL) {
struct priv_def priv;
- if (priv_def_create_from_tuple(&priv, tuple) != 0)
- diag_raise();
+ priv_def_create_from_tuple_xc(&priv, tuple);
/**
* Skip role grants, we're only
* interested in real objects.
diff --git a/src/box/vy_scheduler.c b/src/box/vy_scheduler.c
index ee361c31f..86bed8013 100644
--- a/src/box/vy_scheduler.c
+++ b/src/box/vy_scheduler.c
@@ -510,7 +510,7 @@ vy_scheduler_reset_stat(struct vy_scheduler *scheduler)
stat->compaction_output = 0;
}

-static void
+static int
vy_scheduler_on_delete_lsm(struct trigger *trigger, void *event)
{
struct vy_lsm *lsm = event;
@@ -521,6 +521,7 @@ vy_scheduler_on_delete_lsm(struct trigger *trigger, void *event)
vy_compaction_heap_delete(&scheduler->compaction_heap, lsm);
trigger_clear(trigger);
free(trigger);
+ return 0;
}

int
-- 
2.17.1

[-- Attachment #2: Type: text/html, Size: 19214 bytes --]

  reply	other threads:[~2019-09-02 11:54 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-08-16 18:37 [tarantool-patches] [PATCH v2 0/6] " Ilya Kosarev
2019-08-16 18:37 ` [tarantool-patches] [PATCH v2 1/6] refactoring: remove exceptions from triggers except alter.cc Ilya Kosarev
2019-08-27  8:29   ` [tarantool-patches] " Georgy Kirichenko
2019-08-16 18:37 ` [tarantool-patches] [PATCH v2 2/6] refactoring: remove exceptions from used in alter.cc outer functions Ilya Kosarev
2019-08-27  8:37   ` [tarantool-patches] " Georgy Kirichenko
2019-08-16 18:37 ` [tarantool-patches] [PATCH v2 3/6] refactoring: replace most obvious exceptions in alter.cc Ilya Kosarev
2019-08-27  8:41   ` [tarantool-patches] " Georgy Kirichenko
2019-09-02 11:53     ` Ilya Kosarev [this message]
2019-08-16 18:37 ` [tarantool-patches] [PATCH v2 4/6] refactoring: replace exceptions in most alter.cc functions Ilya Kosarev
2019-08-16 18:37 ` [tarantool-patches] [PATCH v2 5/6] refactoring: replace some more exceptions in alter.cc Ilya Kosarev
2019-08-16 18:37 ` [tarantool-patches] [PATCH v2 6/6] refactoring: replace remaining exceptions in alter.cc & update comments Ilya Kosarev

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1567425238.495671041@f478.i.mail.ru \
    --to=i.kosarev@tarantool.org \
    --cc=georgy@tarantool.org \
    --cc=tarantool-patches@freelists.org \
    --subject='Re: [tarantool-patches] Re[2]: [PATCH v2] refactoring: remove exceptions from triggers' \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox