From: Leonid Vasiliev <lvasiliev@tarantool.org> To: v.shpilevoy@tarantool.org, alexander.turenko@tarantool.org Cc: tarantool-patches@dev.tarantool.org Subject: [Tarantool-patches] [PATCH V6 04/10] error: update constructors of some errors Date: Mon, 20 Apr 2020 01:25:06 +0300 [thread overview] Message-ID: <23c4fadce103b55d2374e3859c1c51a96ad16139.1587334824.git.lvasiliev@tarantool.org> (raw) In-Reply-To: <cover.1587334824.git.lvasiliev@tarantool.org> In-Reply-To: <cover.1587334824.git.lvasiliev@tarantool.org> We want to have a transparent marshalling through net.box for errors. To do this, we need to recreate the error on the client side with the same parameters as on the server. For convenience, we update AccessDeniedError constructor which has pointers to static strings and add the XlogGapError constructor that does not require vclock. Needed for #4398 --- src/box/error.cc | 24 +++++++++++++++--------- src/box/error.h | 11 ++++++++--- 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/src/box/error.cc b/src/box/error.cc index 277727d..c3c2af3 100644 --- a/src/box/error.cc +++ b/src/box/error.cc @@ -255,6 +255,13 @@ XlogGapError::XlogGapError(const char *file, unsigned line, (long long) vclock_sum(to), s_to ? s_to : ""); } +XlogGapError::XlogGapError(const char *file, unsigned line, + const char *msg) + : XlogError(&type_XlogGapError, file, line) +{ + error_format_msg(this, "%s", msg); +} + struct error * BuildXlogGapError(const char *file, unsigned line, const struct vclock *from, const struct vclock *to) @@ -283,23 +290,22 @@ AccessDeniedError::AccessDeniedError(const char *file, unsigned int line, const char *access_type, const char *object_type, const char *object_name, - const char *user_name) + const char *user_name, + bool run_trigers) :ClientError(&type_AccessDeniedError, file, line, ER_ACCESS_DENIED) { error_format_msg(this, tnt_errcode_desc(m_errcode), access_type, object_type, object_name, user_name); struct on_access_denied_ctx ctx = {access_type, object_type, object_name}; - trigger_run(&on_access_denied, (void *) &ctx); /* - * We want to use ctx parameters as error parameters - * later, so we have to alloc space for it. - * As m_access_type and m_object_type are constant - * literals they are statically allocated. We must copy - * only m_object_name. + * Don't run the triggers when create after marshaling + * through network. */ - m_object_type = object_type; - m_access_type = access_type; + if (run_trigers) + trigger_run(&on_access_denied, (void *) &ctx); + m_object_type = strdup(object_type); + m_access_type = strdup(access_type); m_object_name = strdup(object_name); } diff --git a/src/box/error.h b/src/box/error.h index 461ca0f..988b982 100644 --- a/src/box/error.h +++ b/src/box/error.h @@ -241,11 +241,14 @@ class AccessDeniedError: public ClientError public: AccessDeniedError(const char *file, unsigned int line, const char *access_type, const char *object_type, - const char *object_name, const char *user_name); + const char *object_name, const char *user_name, + bool run_trigers = true); ~AccessDeniedError() { free(m_object_name); + free(m_object_type); + free(m_access_type); } const char * @@ -268,11 +271,11 @@ public: private: /** Type of object the required access was denied to */ - const char *m_object_type; + char *m_object_type; /** Name of object the required access was denied to */ char *m_object_name; /** Type of declined access */ - const char *m_access_type; + char *m_access_type; }; /** @@ -302,6 +305,8 @@ struct XlogGapError: public XlogError { XlogGapError(const char *file, unsigned line, const struct vclock *from, const struct vclock *to); + XlogGapError(const char *file, unsigned line, + const char *msg); virtual void raise() { throw this; } }; -- 2.7.4
next prev parent reply other threads:[~2020-04-19 22:25 UTC|newest] Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-04-19 22:25 [Tarantool-patches] [PATCH V6 00/10] Extending error functionality Leonid Vasiliev 2020-04-19 22:25 ` [Tarantool-patches] [PATCH V6 01/10] error: add custom error type Leonid Vasiliev 2020-04-19 22:25 ` [Tarantool-patches] [PATCH V6 02/10] session: add offset to SQL session settings array Leonid Vasiliev 2020-04-19 22:25 ` [Tarantool-patches] [PATCH V6 03/10] error: add session setting for error type marshaling Leonid Vasiliev 2020-04-19 22:25 ` Leonid Vasiliev [this message] 2020-04-19 22:25 ` [Tarantool-patches] [PATCH V6 05/10] box: move Lua MP_EXT decoder from tuple.c Leonid Vasiliev 2020-04-19 22:25 ` [Tarantool-patches] [PATCH V6 06/10] error: add error MsgPack encoding Leonid Vasiliev 2020-04-19 22:25 ` [Tarantool-patches] [PATCH V6 07/10] error: export error_unref() function Leonid Vasiliev 2020-04-19 22:25 ` [Tarantool-patches] [PATCH V6 08/10] error: make iproto errors reuse mp_error module Leonid Vasiliev 2020-04-19 22:25 ` [Tarantool-patches] [PATCH V6 09/10] iproto: rename IPROTO_ERROR and IPROTO_ERROR_STACK Leonid Vasiliev 2020-04-19 22:25 ` [Tarantool-patches] [PATCH V6 10/10] error: fix iproto error stack overlapped by old error Leonid Vasiliev 2020-04-20 0:26 ` [Tarantool-patches] [PATCH V6 00/10] Extending error functionality Vladislav Shpilevoy 2020-04-20 8:05 ` lvasiliev 2020-04-20 8:05 ` Kirill Yukhin 2020-04-21 19:03 ` Konstantin Osipov 2020-04-22 16:17 ` lvasiliev 2020-04-22 17:23 ` Konstantin Osipov 2020-04-20 8:30 ` Kirill Yukhin
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=23c4fadce103b55d2374e3859c1c51a96ad16139.1587334824.git.lvasiliev@tarantool.org \ --to=lvasiliev@tarantool.org \ --cc=alexander.turenko@tarantool.org \ --cc=tarantool-patches@dev.tarantool.org \ --cc=v.shpilevoy@tarantool.org \ --subject='Re: [Tarantool-patches] [PATCH V6 04/10] error: update constructors of some errors' \ /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