Tarantool development patches archive
 help / color / mirror / Atom feed
From: Vladislav Shpilevoy <v.shpilevoy@tarantool.org>
To: Chris Sosnin <k.sosnin@tarantool.org>
Cc: tarantool-patches@dev.tarantool.org
Subject: Re: [Tarantool-patches] [PATCH v2] iproto: add an empty body to the unprepare response
Date: Wed, 4 Mar 2020 23:39:08 +0100	[thread overview]
Message-ID: <380d14ba-1008-8edc-eb9b-5ebfdd205b4a@tarantool.org> (raw)
In-Reply-To: <465B5192-A6D8-45BE-8FA7-627BA804E22D@tarantool.org>

>>> diff --git a/src/box/iproto.cc <http://iproto.cc> b/src/box/iproto.cc <http://iproto.cc>
>>> index f313af6ae..d5891391d 100644
>>> --- a/src/box/iproto.cc <http://iproto.cc>
>>> +++ b/src/box/iproto.cc <http://iproto.cc>
>>> @@ -1781,20 +1781,23 @@ tx_process_sql(struct cmsg *m)
>>>  */
>>> out = msg->connection->tx.p_obuf;
>>> struct obuf_svp header_svp;
>>> +if (is_unprepare) {
>>
>> Looks like you don't need that flag anymore. Consider the diff:
>>
>> ====================
>> diff --git a/src/box/iproto.cc <http://iproto.cc/> b/src/box/iproto.cc <http://iproto.cc/>
>> index d5891391d..28095f5b8 100644
>> --- a/src/box/iproto.cc <http://iproto.cc/>
>> +++ b/src/box/iproto.cc <http://iproto.cc/>
>> @@ -1716,10 +1716,9 @@ tx_process_sql(struct cmsg *m)
>> struct obuf *out;
>> struct port port;
>> struct sql_bind *bind = NULL;
>> -int bind_count = 0;
>> +int rc, bind_count = 0;
>> const char *sql;
>> uint32_t len;
>> -bool is_unprepare = false;
>>
>> if (tx_check_schema(msg->header.schema_version))
>> goto error;
>> @@ -1771,7 +1770,12 @@ tx_process_sql(struct cmsg *m)
>> uint32_t stmt_id = mp_decode_uint(&sql);
>> if (sql_unprepare(stmt_id) != 0)
>> goto error;
>> -is_unprepare = true;
>> +out = msg->connection->tx.p_obuf;
>> +if (iproto_reply_ok(out, msg->header.sync,
>> +    schema_version) != 0)
>> +goto error;
>> +iproto_wpos_create(&msg->wpos, out);
>> +return;
>> }
>> }
>>
>> @@ -1781,23 +1785,17 @@ tx_process_sql(struct cmsg *m)
>>  */
>> out = msg->connection->tx.p_obuf;
>> struct obuf_svp header_svp;
>> -if (is_unprepare) {
>> -if (iproto_reply_ok(out, msg->header.sync, schema_version) != 0)
>> -goto error;
>> -iproto_wpos_create(&msg->wpos, out);
>> -return;
>> -}
>> /* Prepare memory for the iproto header. */
>> if (iproto_prepare_header(out, &header_svp, IPROTO_HEADER_LEN) != 0) {
>> port_destroy(&port);
>> goto error;
>> }
>> -if (port_dump_msgpack(&port, out) != 0) {
>> -port_destroy(&port);
>> +rc = port_dump_msgpack(&port, out);
>> +port_destroy(&port);
>> +if (rc != 0) {
>> obuf_rollback_to_svp(out, &header_svp);
>> goto error;
>> }
>> -port_destroy(&port);
>> iproto_reply_sql(out, &header_svp, msg->header.sync, schema_version);
>> iproto_wpos_create(&msg->wpos, out);
>> return;
> 
> The change with rc and avoiding code duplication is more about refactoring, should we apply
> it here?

I changed 'rc' and port_destroy(), because you changed the same lines. So
my diff does not make the final patch bigger and touches only lines which
would be changed anyway, except 'rc' declaration. I couldn't declare it in
place, because the compiler complained about 'rc' not declared for 'end'
label, if jumped from unprepare execution.

> As for the flag, the current code is well separated, all switch-cases perform the execution, 
> everything after is about preparing the message to send.
> 
> Maybe it’s only me, but it looks cleaner without this diff, not to mention it produces the same code.

Did you check assembler?

> If you (or someone else) insist, however, I will apply it and resend.

I don't insist. You can keep it as is.

LGTM.

  reply	other threads:[~2020-03-04 22:39 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-03-03 16:16 Chris Sosnin
2020-03-03 22:33 ` Vladislav Shpilevoy
2020-03-04  8:14   ` Chris Sosnin
2020-03-04 22:39     ` Vladislav Shpilevoy [this message]
2020-03-05  5:41 ` Kirill Yukhin
2020-03-05  8:41   ` Nikita Pettik
2020-03-06 17:27     ` Alexander Turenko
2020-03-06 19:58       ` Chris Sosnin
2020-03-06 20:39         ` Alexander Turenko
2020-03-07 22:02         ` Nikita Pettik
2020-03-08 17:13           ` Alexander Turenko
2020-03-15 15:34       ` Vladislav Shpilevoy
2020-03-17  8:04         ` Kirill Yukhin
2020-03-16 20:33 ` Konstantin Osipov

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=380d14ba-1008-8edc-eb9b-5ebfdd205b4a@tarantool.org \
    --to=v.shpilevoy@tarantool.org \
    --cc=k.sosnin@tarantool.org \
    --cc=tarantool-patches@dev.tarantool.org \
    --subject='Re: [Tarantool-patches] [PATCH v2] iproto: add an empty body to the unprepare response' \
    /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