From: Cyrill Gorcunov <gorcunov@gmail.com> To: tml <tarantool-patches@dev.tarantool.org> Cc: Vladislav Shpilevoy <v.shpilevoy@tarantool.org> Subject: [Tarantool-patches] [PATCH v2 5/7] qsync: provide a way to encode preallocated CONFIRM/ROLLBACK entries Date: Thu, 23 Jul 2020 15:29:40 +0300 [thread overview] Message-ID: <20200723122942.196011-6-gorcunov@gmail.com> (raw) In-Reply-To: <20200723122942.196011-1-gorcunov@gmail.com> Force the caller to allocate memory. Eventually we are planning to use preallocated memory without calling region_alloc at all. Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com> --- src/box/xrow.c | 32 +++++++++++++++++++++----------- src/box/xrow.h | 15 +++++++++++++++ 2 files changed, 36 insertions(+), 11 deletions(-) diff --git a/src/box/xrow.c b/src/box/xrow.c index c2f4ba40a..bebad2dd0 100644 --- a/src/box/xrow.c +++ b/src/box/xrow.c @@ -893,17 +893,11 @@ xrow_encode_dml(const struct request *request, struct region *region, return iovcnt; } -static int -xrow_encode_confirm_rollback(struct xrow_header *row, struct region *region, +int +xrow_encode_confirm_rollback(struct xrow_header *row, + struct request_synchro_body *body, uint32_t replica_id, int64_t lsn, int type) { - struct request_synchro_body *body; - - body = region_alloc(region, sizeof(*body)); - if (body == NULL) { - diag_set(OutOfMemory, sizeof(*body), "region_alloc", "body"); - return -1; - } request_synchro_body_create(body, replica_id, lsn); memset(row, 0, sizeof(*row)); @@ -921,7 +915,15 @@ int xrow_encode_confirm(struct xrow_header *row, struct region *region, uint32_t replica_id, int64_t lsn) { - return xrow_encode_confirm_rollback(row, region, replica_id, lsn, + struct request_synchro_body *body; + + body = region_alloc(region, sizeof(*body)); + if (body == NULL) { + diag_set(OutOfMemory, sizeof(*body), "region_alloc", "body"); + return -1; + } + + return xrow_encode_confirm_rollback(row, body, replica_id, lsn, IPROTO_CONFIRM); } @@ -929,7 +931,15 @@ int xrow_encode_rollback(struct xrow_header *row, struct region *region, uint32_t replica_id, int64_t lsn) { - return xrow_encode_confirm_rollback(row, region, replica_id, lsn, + struct request_synchro_body *body; + + body = region_alloc(region, sizeof(*body)); + if (body == NULL) { + diag_set(OutOfMemory, sizeof(*body), "region_alloc", "body"); + return -1; + } + + return xrow_encode_confirm_rollback(row, body, replica_id, lsn, IPROTO_ROLLBACK); } diff --git a/src/box/xrow.h b/src/box/xrow.h index e21ede5a3..503140d1e 100644 --- a/src/box/xrow.h +++ b/src/box/xrow.h @@ -54,6 +54,7 @@ enum { IPROTO_SELECT_HEADER_LEN = IPROTO_HEADER_LEN + 7, }; +struct request_synchro_body; struct region; struct xrow_header { @@ -215,6 +216,20 @@ int xrow_encode_dml(const struct request *request, struct region *region, struct iovec *iov); + +/** + * Encode the CONFIRM or ROLLBACK to row body and set row type. + * @param row xrow header. + * @param body body to encode. + * @param replica_id master's instance id. + * @param lsn last confirmed lsn. + * @param type IPROTO_CONFIRM or IPROTO_ROLLBACK. + */ +int +xrow_encode_confirm_rollback(struct xrow_header *row, + struct request_synchro_body *body, + uint32_t replica_id, int64_t lsn, int type); + /** * Encode the CONFIRM to row body and set row type to * IPROTO_CONFIRM. -- 2.26.2
next prev parent reply other threads:[~2020-07-23 12:30 UTC|newest] Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-07-23 12:29 [Tarantool-patches] [PATCH v2 0/5] qsync: write CONFIRM/ROLLBACK without txn engine Cyrill Gorcunov 2020-07-23 12:29 ` [Tarantool-patches] [PATCH v2 1/7] journal: drop redundant declaration Cyrill Gorcunov 2020-07-23 12:29 ` [Tarantool-patches] [PATCH v2 2/7] wal: bind asynchronous write completion to an entry Cyrill Gorcunov 2020-07-23 22:10 ` Vladislav Shpilevoy 2020-07-24 17:48 ` Cyrill Gorcunov 2020-07-23 12:29 ` [Tarantool-patches] [PATCH v2 3/7] journal: add journal_entry_create helper Cyrill Gorcunov 2020-07-23 22:10 ` Vladislav Shpilevoy 2020-07-24 17:50 ` Cyrill Gorcunov 2020-07-23 12:29 ` [Tarantool-patches] [PATCH v2 4/7] qsync: provide a binary form of CONFIRM/ROLLBACK entries Cyrill Gorcunov 2020-07-23 22:10 ` Vladislav Shpilevoy 2020-07-24 18:07 ` Cyrill Gorcunov 2020-07-23 12:29 ` Cyrill Gorcunov [this message] 2020-07-23 22:10 ` [Tarantool-patches] [PATCH v2 5/7] qsync: provide a way to encode preallocated " Vladislav Shpilevoy 2020-07-24 18:08 ` Cyrill Gorcunov 2020-07-23 12:29 ` [Tarantool-patches] [PATCH v2 6/7] qsync: implement direct write of CONFIRM/ROLLBACK into a journal Cyrill Gorcunov 2020-07-23 22:10 ` Vladislav Shpilevoy 2020-07-24 18:16 ` Cyrill Gorcunov 2020-07-23 12:29 ` [Tarantool-patches] [PATCH v2 7/7] qsync: drop no longer used xrow_encode_confirm, rollback Cyrill Gorcunov 2020-07-23 22:13 ` [Tarantool-patches] [PATCH v2 0/5] qsync: write CONFIRM/ROLLBACK without txn engine Vladislav Shpilevoy 2020-07-24 18:16 ` Cyrill Gorcunov
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=20200723122942.196011-6-gorcunov@gmail.com \ --to=gorcunov@gmail.com \ --cc=tarantool-patches@dev.tarantool.org \ --cc=v.shpilevoy@tarantool.org \ --subject='Re: [Tarantool-patches] [PATCH v2 5/7] qsync: provide a way to encode preallocated CONFIRM/ROLLBACK entries' \ /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