From: Nikita Pettik <korablev@tarantool.org> To: Vladislav Shpilevoy <v.shpilevoy@tarantool.org> Cc: tarantool-patches@dev.tarantool.org Subject: Re: [Tarantool-patches] [PATCH v2 06/10] box: introduce stacked diagnostic area Date: Fri, 3 Apr 2020 01:54:16 +0000 [thread overview] Message-ID: <20200403015416.GB946@tarantool.org> (raw) In-Reply-To: <24e2df72-400f-11f9-25a2-eabf871e6cb5@tarantool.org> On 03 Apr 00:20, Vladislav Shpilevoy wrote: > Hi! Thanks for the fixes! > > >> Also a small comment about cycle detection in your patch. Here I > >> would strongly-strongly recommend to avoid it when it is clearly > >> not necessary. > > > > To be honest, I don't understand why do you care about this opimization so > > much. Linking errors into list is unlikely to be hot execution path, so nobody > > should bother with such minor improvement here. > > I am really afraid, that our solution team will find a way to > shoot in their legs. For example, by doing some weird banking > application producing error stacks with 50 errors and more, or > they will add many errors when will forward them in the network > from node to node (they actually want this, and are going to do > that when we introduce custom errors), and will waste notable > time on cycle checking. And probably will even hit the cycle > error, and will complain. This is what I am afraid of. I am > trying to save every CPU cycle. > > > Instead, keeping code clear, > > simple and straightforward (your diff contains more branches and looks a bit > > more complicated to me) must be the main goal. Applied diff below only due to > > your recommendation. > > > > > > Still, I haven't changed my mind. I didn't apply diff below, sorry. > > I'll leave it to the second reviewer. > > Not sure there will be a second reviewer. From what I understand, the > release is begin of next week. I am ok, lets leave it then as is. There's still 56 open issues assigned to 2.4 milestone. I doubt that all of them will be closed till Monday... > Sorry, I still couldn't finish with this commit. Made another > amendment. See diff below, and on top of this commit on the branch. > > What I did is I made diag_add_error() assert, when the diag is > empty. And when we are trying to add not a topmost error. Ok, as far as I understand, to ensure that diag_set() is always called before diag_add(). > To understand why see that case. Assume, we have a place which > does diag_set() somewhere deep. And we have code calling this > place and doing diag_add(). While diag_set() is there, we can't > end up in infinitely growing stack if that error hits again and > again. Diag_set() will drop the old stack. Agree. > Then the diag_set() place is removed/changed in a way, that it > does not set a diag, or also makes diag_add(). We will not notice > this in the tests, and the stack will have a chance of growing > infinitely. > > So I added an assertion to catch such changes right away. I hope > you agree. I added one another tiny commit on top of the last patch > to make box_error_add() ok with that. This is a public function, > and in there it is ok to both add and set. > > Also I added a test on what happens when you box.error.set() middle > of an error stack. > > ==================== > diff --git a/src/lib/core/diag.h b/src/lib/core/diag.h > index 276bf2362..10d59d240 100644 > --- a/src/lib/core/diag.h > +++ b/src/lib/core/diag.h > @@ -254,11 +254,12 @@ static inline void > diag_add_error(struct diag *diag, struct error *e) > { > assert(e != NULL); > + assert(diag->last != NULL); > + assert(e->effect == NULL); I added a few comments, check them out: diff --git a/src/lib/core/diag.h b/src/lib/core/diag.h index 10d59d240..9c238f5a2 100644 --- a/src/lib/core/diag.h +++ b/src/lib/core/diag.h @@ -254,7 +254,12 @@ static inline void diag_add_error(struct diag *diag, struct error *e) { assert(e != NULL); + /* diag_set_error() should be called before. */ assert(diag->last != NULL); + /* + * e should be the bottom of its own stack. + * Otherwise some errors may be lost. + */ assert(e->effect == NULL); assert(diag->last->effect == NULL); error_ref(e); > + assert(diag->last->effect == NULL); > error_ref(e); > - error_unlink_effect(e); > e->cause = diag->last; > - if (diag->last != NULL) > - diag->last->effect = e; > + diag->last->effect = e; > diag->last = e; > } > > diff --git a/test/box/error.result b/test/box/error.result > index a4e8a8d8d..3d07f6e64 100644 > --- a/test/box/error.result > +++ b/test/box/error.result > @@ -789,3 +789,22 @@ assert(e1.prev == e2) > | --- > | - true > | ... > + > +-- Set middle of an error stack into the diagnostics area. > +e1:set_prev(e2) > + | --- > + | ... > +e2:set_prev(e3) > + | --- > + | ... > +box.error.set(e2) > + | --- > + | ... > +assert(e1.prev == nil) > + | --- > + | - true > + | ... > +assert(e2.prev == e3) > + | --- > + | - true > + | ... > diff --git a/test/box/error.test.lua b/test/box/error.test.lua > index f03fb4d36..ed7eb7565 100644 > --- a/test/box/error.test.lua > +++ b/test/box/error.test.lua > @@ -214,3 +214,10 @@ assert(e2.code == 111) > box.error.set(e1) > box.error.clear() > assert(e1.prev == e2) > + > +-- Set middle of an error stack into the diagnostics area. > +e1:set_prev(e2) > +e2:set_prev(e3) > +box.error.set(e2) > +assert(e1.prev == nil) > +assert(e2.prev == e3)
next prev parent reply other threads:[~2020-04-03 1:54 UTC|newest] Thread overview: 57+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-03-25 1:42 [Tarantool-patches] [PATCH v2 00/10] Stacked diagnostics Nikita Pettik 2020-03-25 1:42 ` [Tarantool-patches] [PATCH v2 01/10] box: rfc for stacked diagnostic area Nikita Pettik 2020-03-25 8:27 ` Konstantin Osipov 2020-03-25 14:08 ` Nikita Pettik 2020-03-25 1:42 ` [Tarantool-patches] [PATCH v2 02/10] box: rename diag_add_error to diag_set_error Nikita Pettik 2020-03-25 8:27 ` Konstantin Osipov 2020-03-26 0:22 ` Vladislav Shpilevoy 2020-03-26 12:31 ` Nikita Pettik 2020-03-25 1:42 ` [Tarantool-patches] [PATCH v2 03/10] test: move box.error tests to box/error.test.lua Nikita Pettik 2020-03-25 8:28 ` Konstantin Osipov 2020-03-26 0:22 ` Vladislav Shpilevoy 2020-03-26 12:31 ` Nikita Pettik 2020-03-25 1:43 ` [Tarantool-patches] [PATCH v2 04/10] box/error: introduce box.error.set() method Nikita Pettik 2020-03-25 8:33 ` Konstantin Osipov 2020-03-25 17:41 ` Nikita Pettik 2020-03-26 0:22 ` Vladislav Shpilevoy 2020-03-26 12:31 ` Nikita Pettik 2020-03-25 1:43 ` [Tarantool-patches] [PATCH v2 05/10] box/error: don't set error created via box.error.new to diag Nikita Pettik 2020-03-26 16:50 ` Konstantin Osipov 2020-03-26 17:59 ` Nikita Pettik 2020-03-26 18:06 ` Nikita Pettik 2020-03-26 18:07 ` Alexander Turenko 2020-03-27 0:19 ` Vladislav Shpilevoy 2020-03-27 13:09 ` Nikita Pettik 2020-03-25 1:43 ` [Tarantool-patches] [PATCH v2 06/10] box: introduce stacked diagnostic area Nikita Pettik 2020-03-26 16:54 ` Konstantin Osipov 2020-03-26 18:03 ` Nikita Pettik 2020-03-26 18:08 ` Konstantin Osipov 2020-03-28 18:40 ` Vladislav Shpilevoy 2020-04-01 16:09 ` Nikita Pettik 2020-04-02 0:29 ` Vladislav Shpilevoy 2020-04-02 17:42 ` Nikita Pettik 2020-04-02 22:20 ` Vladislav Shpilevoy 2020-04-03 1:54 ` Nikita Pettik [this message] 2020-04-03 23:17 ` Vladislav Shpilevoy 2020-03-28 18:59 ` Vladislav Shpilevoy 2020-03-31 17:44 ` Nikita Pettik 2020-04-02 0:29 ` Vladislav Shpilevoy 2020-04-02 14:16 ` Nikita Pettik 2020-03-25 1:43 ` [Tarantool-patches] [PATCH v2 07/10] box: use stacked diagnostic area for functional indexes Nikita Pettik 2020-03-30 23:24 ` Vladislav Shpilevoy 2020-04-01 15:53 ` Nikita Pettik 2020-03-25 1:43 ` [Tarantool-patches] [PATCH v2 08/10] box/error: clarify purpose of reference counting in struct error Nikita Pettik 2020-03-30 23:24 ` Vladislav Shpilevoy 2020-03-25 1:43 ` [Tarantool-patches] [PATCH v2 09/10] iproto: refactor error encoding with mpstream Nikita Pettik 2020-03-30 23:24 ` Vladislav Shpilevoy 2020-04-01 15:54 ` Nikita Pettik 2020-03-25 1:43 ` [Tarantool-patches] [PATCH v2 10/10] iproto: support error stacked diagnostic area Nikita Pettik 2020-03-30 23:24 ` Vladislav Shpilevoy 2020-04-01 16:26 ` Nikita Pettik 2020-04-01 22:24 ` Nikita Pettik 2020-04-02 0:29 ` Vladislav Shpilevoy 2020-04-02 14:01 ` Nikita Pettik 2020-04-02 22:20 ` Vladislav Shpilevoy 2020-04-03 2:16 ` Nikita Pettik 2020-04-03 23:17 ` Vladislav Shpilevoy 2020-04-06 11:07 ` Nikita Pettik
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=20200403015416.GB946@tarantool.org \ --to=korablev@tarantool.org \ --cc=tarantool-patches@dev.tarantool.org \ --cc=v.shpilevoy@tarantool.org \ --subject='Re: [Tarantool-patches] [PATCH v2 06/10] box: introduce stacked diagnostic area' \ /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