[tarantool-patches] Re: [PATCH] Do not update schema_version on space:truncate().

  • From: Sergey Petrenko <sergepetrenko@xxxxxxxxxxxxx>
  • To: Konstantin Osipov <kostja@xxxxxxxxxxxxx>, tarantool-patches@xxxxxxxxxxxxx
  • Date: Fri, 6 Jul 2018 17:24:06 +0300

06.07.2018 17:07, Konstantin Osipov пишет:

* Serge Petrenko <sergepetrenko@xxxxxxxxxxxxx> [18/07/06 14:52]:
Schema version is used by both clients and internal modules to check
whether there vere any updates in spaces and indices. While clients
only need to be notified when there is a noticeable change, e.g.
space is removed, internal components also need to be notified when
something like space:truncate() happens, because even though this
operation doesn't change space id or any of its indices, it creates a
new space object, so all the pointers to the old object have to be updated.
Currently both clients and internals share the same schema version, which
leads to unnecessary updates on the client side.

Fix this by implementing 2 separate counters for internal and public use:
schema_state gets updated on every change, including recreation of the same
space object, while schema_version is updated only when there are noticable
changes for the clients. Introduce a new AlterOp to alter.cc to update
public schema_version.
Now all the internals reference schema_state, while all the clients use
schema_version. box.iternal.schema_version() returns schema_version
(the public one).
The new schema is instantiated/becomes effective in do(), not in commit.

Before do() and commit() there is a yield and new queries
can see the new schema already.

Will fix. I thought it'd be a good idea to only increment when we already know
we won't be returning to the old state.
So I should increase schema_version in UpdateSchemaVersion::alter() and decrease it in
UpdateSchemaVersion::rollback() ? And what about creation/drop of a space? Move
schema_version increment to on_replace_dd_space() and decrement in case of failure to
on_create_space_rollback() / on_drop_space_rollback() ?

Other related posts: