From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Thu, 20 Jun 2019 14:25:50 +0300 From: Vladimir Davydov Subject: Re: [tarantool-patches] [PATCH] ddl: No replication for temp and local spaces Message-ID: <20190620112550.v2mwqa4orlr4y3rj@esperanza> References: <20190619124823.7021-1-szudin@tarantool.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20190619124823.7021-1-szudin@tarantool.org> To: Stanislav Zudin Cc: tarantool-patches@freelists.org, georgy@tarantool.org List-ID: On Wed, Jun 19, 2019 at 03:48:23PM +0300, Stanislav Zudin wrote: > Do not spread the space:truncate() to replicas if the > affected space is local and temporary. > > Closes #4263 > --- > Branch: https://github.com/tarantool/tarantool/tree/stanztt/gh-4263-no-replica-tmplocal-space > Issue: https://github.com/tarantool/tarantool/issues/4263 > > src/box/alter.cc | 10 ++++++ > test/replication/local_spaces.result | 48 ++++++++++++++++++++++++++ > test/replication/local_spaces.test.lua | 19 ++++++++++ > 3 files changed, 77 insertions(+) > > diff --git a/src/box/alter.cc b/src/box/alter.cc > index a37a68ce4..55d588511 100644 > --- a/src/box/alter.cc > +++ b/src/box/alter.cc > @@ -2278,6 +2278,16 @@ on_replace_dd_truncate(struct trigger * /* trigger */, void *event) > auto scoped_guard = > make_scoped_guard([=] { alter_space_delete(alter); }); > > + /* > + * Modify the WAL header to prohibit > + * replication of local & temporary > + * spaces truncation. > + */ > + if (space_is_temporary(old_space) && Must be ||. Local or temporary. > + space_group_id(old_space) == GROUP_LOCAL) { > + stmt->row->group_id = GROUP_LOCAL; > + } > + > /* > * Recreate all indexes of the truncated space. > */ > diff --git a/test/replication/local_spaces.result b/test/replication/local_spaces.result > index ed1b76da8..c36e21403 100644 > --- a/test/replication/local_spaces.result > +++ b/test/replication/local_spaces.result > @@ -71,6 +71,22 @@ s3.temporary > --- > - true > ... > +-- The truncation of the local & temporary space should not > +-- spread among the replicas It would be nice to see the issue no here. > +s4 = box.schema.space.create('test4', {is_local = true, temporary = true}) > +--- > +... > +_ = s4:create_index('pk') > +--- > +... > +s4.is_local > +--- > +- true > +... > +s4.temporary > +--- > +- true > +... > _ = s1:insert{1} > --- > ... > @@ -80,6 +96,9 @@ _ = s2:insert{1} > _ = s3:insert{1} > --- > ... > +_ = s4:insert{1} > +--- > +... > box.snapshot() > --- > - ok > @@ -93,6 +112,16 @@ _ = s2:insert{2} > _ = s3:insert{2} > --- > ... > +_ = s4:insert{2} > +--- > +... > +s4:truncate() > +--- > +... > +box.space._truncate:select{} > +--- > +- - [515, 1] > +... > box.schema.user.grant('guest', 'replication') > --- > ... > @@ -124,6 +153,14 @@ box.space.test3.temporary > --- > - true > ... > +box.space.test4.is_local > +--- > +- true > +... > +box.space.test4.temporary > +--- > +- true > +... > box.space.test1:select() > --- > - - [1] > @@ -137,6 +174,14 @@ box.space.test3:select() > --- > - [] > ... > +box.space.test4:select() > +--- > +- [] > +... I don't see where you check that 'truncate' command isn't replicated, i.e. changes done to a space on the replica are not truncated. > +box.space._truncate:select{} > +--- > +- [] > +... > box.cfg{read_only = true} -- local spaces ignore read_only > --- > ... > @@ -253,3 +298,6 @@ s2:drop() > s3:drop() > --- > ... > +s4:drop() > +--- > +...