[Tarantool-patches] [PATCH v3 0/6] Stacked diagnostics

Nikita Pettik korablev at tarantool.org
Mon Apr 6 17:17:09 MSK 2020


Branch: https://github.com/tarantool/tarantool/commits/np/gh-1148-stacked-diag
Issue:
https://github.com/tarantool/tarantool/issues/1148
https://github.com/tarantool/tarantool/issues/4829

Implementation of stacked diagnostics in Tarantool according to RFC:
https://github.com/tarantool/tarantool/commit/1acd32d98f628431429b427df19caa9d269bb9c8).
Error structure is extended with double linked list; Lua and C interfaces
are provided to interact with it; stacked diagnostics is supported in
IProto protocol and net.box modules.

Note that patch-set also contains fix of #4829 since some tests rely
on the fact that box.error(err_obj) promotes error to diagnotic area.

Changes in v2:

- renamed 'prev' and 'next' links in struct error to 'cause' and 'effect';
- moved all tests related to box.error module to a separate file (box/error.test.lua);
- removed recursion from error_unref();
- removed box_error_construct() and box_error_add() from public API;
- removed error_prev() getter which was used to access error.prev member in Lua
(now it is accessed directly via error._prev);
- moved diag_add() usages to a separate commit;
- several ref/unref usages corrections in the code;
- added mp_check_* auxiliary checks to iproto_decode_error_stack();
- other minor refactoring (removing unused headers and redundant testing
facilities, fixing comments etc);
- rebased to fresh master branch.

Changes in v3:

- refactored iproto_decode_error_stack(): removed mp_check_*() calls,
added checks on broken map keys values including overflowed values;
- added unit tests to cover iproto_decode_error_stack() function
(which can be called by replication applier);
- integration tests were simplified: instead of using complicated
schema involving persistent functions and functional indexes, simple
function which raises stack of errors is used;
- optimized error_set_prev() function: cycle detection is avoided in
most cases;
- other refactoring: code, tests and commit message clean-ups; added
a few comments and assertion checks.
- rebased to fresh master branch.

@ChangeLog 
* Always promote error created via box.error() to diagnostic area (gh-4829).
* Introduced stacked diagnostick area: now each Lua table representing error
object features .prev member and :set_prev() method. So that errors can be
organized into lists. IProto protocol is extended with new command keys to
support this feature as well (gh-1148).

Kirill Shcherbatov (1):
  iproto: refactor error encoding with mpstream

Nikita Pettik (5):
  box: introduce stacked diagnostic area
  box: use stacked diagnostic area for functional indexes
  box/error: clarify purpose of reference counting in struct error
  box: always promote error created via box.error() to diag
  iproto: support error stacked diagnostic area

 extra/exports                   |   1 +
 src/box/error.cc                |  21 +++
 src/box/error.h                 |  16 ++
 src/box/iproto_constants.h      |   6 +
 src/box/key_list.c              |  12 +-
 src/box/lua/call.c              |   6 +-
 src/box/lua/error.cc            |  13 +-
 src/box/lua/net_box.lua         |  30 ++-
 src/box/xrow.c                  | 150 ++++++++++++---
 src/lib/core/diag.c             |  47 +++++
 src/lib/core/diag.h             | 111 ++++++++++-
 src/lib/core/exception.cc       |   1 +
 src/lua/error.lua               |  32 ++++
 test/box-py/iproto.result       |   6 +-
 test/box-py/iproto.test.py      |   6 +-
 test/box/error.result           | 325 ++++++++++++++++++++++++++++++++
 test/box/error.test.lua         | 120 ++++++++++++
 test/box/iproto.result          | 142 ++++++++++++++
 test/box/iproto.test.lua        |  66 +++++++
 test/box/net.box.result         |  71 +++++++
 test/box/net.box.test.lua       |  31 +++
 test/engine/func_index.result   |  54 +++++-
 test/engine/func_index.test.lua |   8 +
 test/unit/xrow.cc               | 184 +++++++++++++++++-
 test/unit/xrow.result           |  27 ++-
 25 files changed, 1424 insertions(+), 62 deletions(-)
 create mode 100644 test/box/iproto.result
 create mode 100644 test/box/iproto.test.lua

-- 
2.17.1



More information about the Tarantool-patches mailing list