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 4/7] qsync: provide a binary form of CONFIRM/ROLLBACK entries Date: Thu, 23 Jul 2020 15:29:39 +0300 [thread overview] Message-ID: <20200723122942.196011-5-gorcunov@gmail.com> (raw) In-Reply-To: <20200723122942.196011-1-gorcunov@gmail.com> These msgpack entries will be needed to write them down to a journal without involving txn engine. Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com> --- src/box/iproto_constants.h | 27 +++++++++++++++++++++++++++ src/box/xrow.c | 23 ++++++++--------------- 2 files changed, 35 insertions(+), 15 deletions(-) diff --git a/src/box/iproto_constants.h b/src/box/iproto_constants.h index 6b850f101..1e6566e0f 100644 --- a/src/box/iproto_constants.h +++ b/src/box/iproto_constants.h @@ -328,6 +328,33 @@ iproto_type_is_synchro_request(uint32_t type) return type == IPROTO_CONFIRM || type == IPROTO_ROLLBACK; } +/** CONFIRM/ROLLBACK entries encoded in MsgPack. */ +struct PACKED request_synchro_body { + uint8_t m_body; + uint8_t k_replica_id; + uint8_t m_replica_id; + uint32_t v_replica_id; + uint8_t k_lsn; + uint8_t m_lsn; + uint64_t v_lsn; +}; + +/** + * Creates CONFIRM/ROLLBACK entry. + */ +static inline void +request_synchro_body_create(struct request_synchro_body *body, + uint32_t replica_id, int64_t lsn) +{ + body->m_body = 0x80 | 2; + body->k_replica_id = IPROTO_REPLICA_ID; + body->m_replica_id = 0xce; + body->v_replica_id = mp_bswap_u32(replica_id); + body->k_lsn = IPROTO_LSN; + body->m_lsn = 0xcf; + body->v_lsn = mp_bswap_u64(lsn); +} + /** This is an error. */ static inline bool iproto_type_is_error(uint32_t type) diff --git a/src/box/xrow.c b/src/box/xrow.c index 0c797a9d5..c2f4ba40a 100644 --- a/src/box/xrow.c +++ b/src/box/xrow.c @@ -897,26 +897,19 @@ static int xrow_encode_confirm_rollback(struct xrow_header *row, struct region *region, uint32_t replica_id, int64_t lsn, int type) { - size_t len = mp_sizeof_map(2) + mp_sizeof_uint(IPROTO_REPLICA_ID) + - mp_sizeof_uint(replica_id) + mp_sizeof_uint(IPROTO_LSN) + - mp_sizeof_uint(lsn); - char *buf = (char *)region_alloc(region, len); - if (buf == NULL) { - diag_set(OutOfMemory, len, "region_alloc", "buf"); + struct request_synchro_body *body; + + body = region_alloc(region, sizeof(*body)); + if (body == NULL) { + diag_set(OutOfMemory, sizeof(*body), "region_alloc", "body"); return -1; } - char *pos = buf; - - pos = mp_encode_map(pos, 2); - pos = mp_encode_uint(pos, IPROTO_REPLICA_ID); - pos = mp_encode_uint(pos, replica_id); - pos = mp_encode_uint(pos, IPROTO_LSN); - pos = mp_encode_uint(pos, lsn); + request_synchro_body_create(body, replica_id, lsn); memset(row, 0, sizeof(*row)); - row->body[0].iov_base = buf; - row->body[0].iov_len = len; + row->body[0].iov_base = (void *)body; + row->body[0].iov_len = sizeof(*body); row->bodycnt = 1; row->type = type; -- 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 ` Cyrill Gorcunov [this message] 2020-07-23 22:10 ` [Tarantool-patches] [PATCH v2 4/7] qsync: provide a binary form of CONFIRM/ROLLBACK entries Vladislav Shpilevoy 2020-07-24 18:07 ` Cyrill Gorcunov 2020-07-23 12:29 ` [Tarantool-patches] [PATCH v2 5/7] qsync: provide a way to encode preallocated " Cyrill Gorcunov 2020-07-23 22:10 ` 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-5-gorcunov@gmail.com \ --to=gorcunov@gmail.com \ --cc=tarantool-patches@dev.tarantool.org \ --cc=v.shpilevoy@tarantool.org \ --subject='Re: [Tarantool-patches] [PATCH v2 4/7] qsync: provide a binary form of 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