From: Vladislav Shpilevoy <v.shpilevoy@tarantool.org> To: Nikita Pettik <korablev@tarantool.org>, tarantool-patches@dev.tarantool.org Subject: Re: [Tarantool-patches] [PATCH 2/2] vinyl: skip invalid upserts during squash Date: Tue, 26 May 2020 23:33:55 +0200 [thread overview] Message-ID: <30344cf8-3ea1-33c2-2c34-89a2c4c561ec@tarantool.org> (raw) In-Reply-To: <c065a8c8-aa23-de42-c1df-ba1c81cba97a@tarantool.org> Hi! Thanks for the patch! > diff --git a/src/box/vy_history.c b/src/box/vy_history.c > index 0f3b71195..2232348f9 100644 > --- a/src/box/vy_history.c > +++ b/src/box/vy_history.c > @@ -102,12 +102,22 @@ vy_history_apply(struct vy_history *history, struct key_def *cmp_def, > while (node != NULL) { > struct tuple *stmt = vy_apply_upsert(node->stmt, curr_stmt, > cmp_def, format, true); > - ++*upserts_applied; > - if (curr_stmt != NULL) > - tuple_unref(curr_stmt); > - if (stmt == NULL) > - return -1; > - curr_stmt = stmt; > + if (stmt == NULL) { > + /* > + * In case statement hasn't been applied, > + * simply skip it ignoring errors (otherwise > + * error will appear during tuple read). > + */ > + assert(diag_last_error(diag_get()) != NULL); > + struct error *e = diag_last_error(diag_get()); > + if (e->type != &type_ClientError) > + return -1; *. Shouldn't we log here? > diff --git a/src/box/vy_lsm.c b/src/box/vy_lsm.c > index 04c9926a8..3d630fc01 100644 > --- a/src/box/vy_lsm.c > +++ b/src/box/vy_lsm.c > @@ -984,13 +984,20 @@ vy_lsm_commit_upsert(struct vy_lsm *lsm, struct vy_mem *mem, > struct tuple *upserted = > vy_apply_upsert(stmt, older, lsm->cmp_def, > lsm->mem_format, false); > - lsm->stat.upsert.applied++; > - > if (upserted == NULL) { > - /* OOM */ > + /* > + * OOM or upserted tuple does not fulfill > + * space format. Hence, upsert can't be > + * transformed into replace. Log error > + * and exit. > + */ > + struct error *e = diag_last_error(diag_get()); > + assert(e != NULL); > + error_log(e); *. These three lines can be replaced with diag_log();. > diff --git a/src/box/vy_tx.c b/src/box/vy_tx.c > index 5029bd8a1..1a2ea43d9 100644 > --- a/src/box/vy_tx.c > +++ b/src/box/vy_tx.c > @@ -515,11 +515,11 @@ vy_tx_write(struct vy_lsm *lsm, struct vy_mem *mem, > region_stmt); > tuple_unref(applied); > return rc; > + } else { > + struct error *e = diag_last_error(diag_get()); > + assert(e != NULL); > + error_log(e); *. The same here. > diff --git a/src/box/vy_write_iterator.c b/src/box/vy_write_iterator.c > index 7a6a20627..4d34d96c8 100644 > --- a/src/box/vy_write_iterator.c > +++ b/src/box/vy_write_iterator.c > @@ -850,10 +850,23 @@ vy_read_view_merge(struct vy_write_iterator *stream, struct tuple *hint, > vy_stmt_type(hint) != IPROTO_UPSERT); > struct tuple *applied = vy_apply_upsert(h->tuple, hint, > stream->cmp_def, stream->format, false); > - if (applied == NULL) > - return -1; > - vy_stmt_unref_if_possible(h->tuple); > - h->tuple = applied; > + if (applied == NULL) { > + /* > + * Current upsert can't be applied. > + * Let's skip it and log error. > + */ > + struct error *e = diag_last_error(diag_get()); > + assert(e != NULL); > + if (e->type != &type_ClientError) > + return -1; > + say_info("upsert %s is not applied due to the error: %s", > + vy_stmt_str(h->tuple), e->errmsg); > + vy_stmt_unref_if_possible(h->tuple); *. Why here we use sometimes say_info() and sometimes error_log()? Why not something one? > @@ -864,10 +877,17 @@ vy_read_view_merge(struct vy_write_iterator *stream, struct tuple *hint, > assert(result->tuple != NULL); > struct tuple *applied = vy_apply_upsert(h->tuple, result->tuple, > stream->cmp_def, stream->format, false); > - if (applied == NULL) > - return -1; > - vy_stmt_unref_if_possible(result->tuple); > - result->tuple = applied; > + if (applied == NULL) { > + struct error *e = diag_last_error(diag_get()); > + assert(e != NULL); > + if (e->type != &type_ClientError) > + return -1; > + say_info("upsert %s is not applied due to the error: %s", > + vy_stmt_str(h->tuple), e->errmsg); > + } else { > + vy_stmt_unref_if_possible(result->tuple); > + result->tuple = applied; > + } > vy_stmt_unref_if_possible(h->tuple); > /* > * Don't bother freeing 'h' since it's
next prev parent reply other threads:[~2020-05-26 21:33 UTC|newest] Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-04-13 21:55 [Tarantool-patches] [PATCH 0/2] Validate result of upserts squash & skip invalid upserts which can't be applied Nikita Pettik 2020-04-13 21:55 ` [Tarantool-patches] [PATCH 1/2] vinyl: validate resulting tuple after upsert is applied Nikita Pettik 2020-06-22 19:28 ` Aleksandr Lyapunov 2020-04-13 21:55 ` [Tarantool-patches] [PATCH 2/2] vinyl: skip invalid upserts during squash Nikita Pettik 2020-04-13 22:12 ` Konstantin Osipov 2020-05-14 2:11 ` Nikita Pettik 2020-05-14 6:56 ` Konstantin Osipov 2020-05-19 19:10 ` Nikita Pettik 2020-05-19 19:39 ` Konstantin Osipov 2020-05-21 2:51 ` Nikita Pettik 2020-05-21 8:36 ` Konstantin Osipov 2020-05-01 0:31 ` Vladislav Shpilevoy 2020-05-14 2:21 ` Nikita Pettik 2020-05-14 21:32 ` Vladislav Shpilevoy 2020-05-19 18:18 ` Nikita Pettik 2020-05-20 22:13 ` Vladislav Shpilevoy 2020-05-26 21:33 ` Vladislav Shpilevoy [this message] 2020-05-27 20:05 ` Nikita Pettik 2020-05-29 21:47 ` Vladislav Shpilevoy 2020-06-01 19:24 ` Nikita Pettik 2020-05-20 22:13 ` [Tarantool-patches] [PATCH 0/2] Validate result of upserts squash & skip invalid upserts which can't be applied Vladislav Shpilevoy 2020-05-22 2:42 ` Nikita Pettik 2020-05-26 21:33 ` Vladislav Shpilevoy 2020-05-27 20:10 ` Nikita Pettik 2020-06-22 14:13 ` Aleksandr Lyapunov 2020-06-22 20:21 ` Nikita Pettik 2020-06-23 12:32 ` Aleksandr Lyapunov 2020-06-02 21:36 ` Vladislav Shpilevoy 2020-06-02 21:37 ` Vladislav Shpilevoy
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=30344cf8-3ea1-33c2-2c34-89a2c4c561ec@tarantool.org \ --to=v.shpilevoy@tarantool.org \ --cc=korablev@tarantool.org \ --cc=tarantool-patches@dev.tarantool.org \ --subject='Re: [Tarantool-patches] [PATCH 2/2] vinyl: skip invalid upserts during squash' \ /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