06.07.2018 17:07, Konstantin Osipov пишет:
* Serge Petrenko <sergepetrenko@xxxxxxxxxxxxx> [18/07/06 14:52]:Will fix. I thought it'd be a good idea to only increment when we already know
Schema version is used by both clients and internal modules to checkThe new schema is instantiated/becomes effective in do(), not in commit.
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).
Before do() and commit() there is a yield and new queries
can see the new schema already.