[Tarantool-patches] [PATCH] exports: allow to use json tools via FFI

Oleg Babin olegrok at tarantool.org
Mon Aug 24 10:12:39 MSK 2020


Hi! Thanks for your comments. See my answers below.

On 22/08/2020 00:56, Vladislav Shpilevoy wrote:
> Hi! Thanks for the patch!
>
> On 21.08.2020 18:26,olegrok at tarantool.org  wrote:
>> From: Oleg Babin<babinoleg at mail.ru>
>>
>> This patch exports some json functions to be used via FFI. We solve
>> following problem: currently we don't have any tools to inspect
>> jsonpaths. E.g. user wants to ban or restrict an access to some
>> tuple fields, it could be some system fields. Tarantool doesn't
>> have hidden fields and to solve such problem we should fairly
>> parse input jsonpaths. Before this patch user should write its own
>> or some external tools. This patch allows to use functions from
>> built-in json-lexer directly from Tarantool via FFI.
> I understand the problem - you don't want to implement your own tool,
> but you must realize, that exporting some internal structs and functions
> via FFI is not safe. We won't care about "backward compatibility" of
> internal functions. And JSON code is quite mutable, it may change in
> future, if we will rework multikeys, for example. And that will make
> your code unusable on newer versions. Even probably inside one version,
> because we won't bump version number just for the sake of internal code
> change.

I understand it's OK in general for FFI. If I use some internal 
functions it's my responsibility to fix my wrappers/libraries to use it 
if something will change.

> Even worse is that you took not only general stuff like json_lexer_next_token,
> but also json_path_multikey_offset - this is heavily internal, why do you
> need it?

I don't really need it. I exported it just for consistency (to have full 
set of json_path_* functions).

> I can't upvote this patch, sorry. I propose you to implement a JSON path
> parser in Lua, or copy-paste the C code from json.h/c. and create your
> own C module. The whole json.c is 666 lines, including the multikey
> support and json trees, which occupy most of the space and you don't need
> them. The parser is trivial, one day work to implement it from the scratch
> with the tests. Please, don't use the internal structs and functions.
>
> You can't just export everything you need if by luck it happened we have it
> somewhere internally implemented in C. It is not safe.
>
> The only thing you need to implement the same JSON path parser is utf8 module,
> and you have it.

Creation of some new module will add new external dependency that I 
don't want to introduce.

I'm not sure that performance of Lua-implemented module will quite high 
as in case with FFI.

But OK I understand your point.



More information about the Tarantool-patches mailing list