From: Vladislav Shpilevoy <v.shpilevoy@tarantool.org> To: tarantool-patches@dev.tarantool.org, babinoleg@mail.ru, alexander.turenko@tarantool.org, imun@tarantool.org Subject: [Tarantool-patches] [PATCH 1/2] tuple: hide internal functions from box.tuple.* Date: Sat, 15 Feb 2020 19:08:44 +0100 [thread overview] Message-ID: <c512e905250ba1dab1499429aa4c8e81a32e9cae.1581790002.git.v.shpilevoy@tarantool.org> (raw) In-Reply-To: <cover.1581790002.git.v.shpilevoy@tarantool.org> box.tuple.bless, .encode, and .is are internal. Their behaviour is not documented, and they may omit some checks for the sake of speed, and can crash if used without thinking. Nonetheless, despite they are not documented, curious users could notice them in box.tuple.* output via autocompletion, for example. And they could try to use them. This is not ok. box.tuple.bless() being called by a user leads either to a crash, or to a leak (because it is basically tuple reference counter increment). box.tuple.encode() is kind of a wrapper around msgpack, and users should not touch it. It may change, may be removed. And is just makes no sense except some rare cases in schema.lua. bless() and encode() were used in schema.lua only, so the patch simply moves them to box.internal.tuple. box.tuple.is() is kept as is, because - this is used in the tests a lot; - it is totally safe; - that function actually makes sense, and some users could have already started using it. There is no a test, since nothing to test - bless() is not available for users anymore (assuming no one is brave enough to rely on box.internal). Closes #4684 --- src/box/lua/schema.lua | 4 ++-- src/box/lua/tuple.lua | 14 ++++++++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/box/lua/schema.lua b/src/box/lua/schema.lua index 50c96a335..0d28edbe6 100644 --- a/src/box/lua/schema.lua +++ b/src/box/lua/schema.lua @@ -17,8 +17,8 @@ end local builtin = ffi.C -- performance fixup for hot functions -local tuple_encode = box.tuple.encode -local tuple_bless = box.tuple.bless +local tuple_encode = box.internal.tuple.encode +local tuple_bless = box.internal.tuple.bless local is_tuple = box.tuple.is assert(tuple_encode ~= nil and tuple_bless ~= nil and is_tuple ~= nil) diff --git a/src/box/lua/tuple.lua b/src/box/lua/tuple.lua index a25a28987..eb3946a0f 100644 --- a/src/box/lua/tuple.lua +++ b/src/box/lua/tuple.lua @@ -342,7 +342,17 @@ ffi.metatype(tuple_iterator_t, { __tostring = function(it) return "<tuple iterator>" end; }) +-- Free methods, which are not needed anymore. +internal.tuple.slice = nil +internal.tuple.transform = nil +internal.tuple.tuple_to_map = nil +internal.tuple.tostring = nil + -- internal api for box.select and iterators -box.tuple.bless = tuple_bless -box.tuple.encode = tuple_encode +internal.tuple.bless = tuple_bless +internal.tuple.encode = tuple_encode + +-- The function is internal in a sense that it is not documented. +-- But it is safe and widely used in the tests. Keep it here at +-- least for test code. box.tuple.is = is_tuple -- 2.21.1 (Apple Git-122.3)
next prev parent reply other threads:[~2020-02-15 18:08 UTC|newest] Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-02-15 18:08 [Tarantool-patches] [PATCH 0/2] box.tuple.* cleanup Vladislav Shpilevoy 2020-02-15 18:08 ` Vladislav Shpilevoy [this message] 2020-03-16 13:15 ` [Tarantool-patches] [PATCH 1/2] tuple: hide internal functions from box.tuple.* Nikita Pettik 2020-02-15 18:08 ` [Tarantool-patches] [PATCH 2/2] tuple: make box.tuple.is() public Vladislav Shpilevoy 2020-02-16 15:07 ` Vladislav Shpilevoy 2020-02-17 20:21 ` Oleg Babin 2020-02-17 21:11 ` Vladislav Shpilevoy 2020-03-16 13:19 ` Nikita Pettik 2020-02-15 19:02 ` [Tarantool-patches] [PATCH 0/2] box.tuple.* cleanup Oleg Babin 2020-02-16 15:07 ` Vladislav Shpilevoy 2020-03-01 14:21 ` Igor Munkin 2020-03-15 17:42 ` Vladislav Shpilevoy 2020-03-15 22:38 ` Nikita Pettik 2020-03-16 14:07 ` Kirill Yukhin 2020-03-16 17:48 ` 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=c512e905250ba1dab1499429aa4c8e81a32e9cae.1581790002.git.v.shpilevoy@tarantool.org \ --to=v.shpilevoy@tarantool.org \ --cc=alexander.turenko@tarantool.org \ --cc=babinoleg@mail.ru \ --cc=imun@tarantool.org \ --cc=tarantool-patches@dev.tarantool.org \ --subject='Re: [Tarantool-patches] [PATCH 1/2] tuple: hide internal functions from box.tuple.*' \ /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