[PATCH v2] box: add on_schema_init trigger
Vladimir Davydov
vdavydov.dev at gmail.com
Wed Mar 6 19:41:47 MSK 2019
On Tue, Mar 05, 2019 at 06:53:09PM +0300, Serge Petrenko wrote:
> If you want to change space's `space_name` storage engine to `vinyl`
> , you may say:
> ```
> function trig(old, new)
> if new[3] == 'space_name' and new[4] ~= 'vinyl' then
> return box.tuple.new{new[1], new[2], new[3], 'vinyl',
> new[5], new[6], new[7]}
> end
> end
> ```
You could use new:update{{'=', 4, 'vinyl'}} instead.
> diff --git a/src/box/box.h b/src/box/box.h
> index 53d88ab71..ea6a11aee 100644
> --- a/src/box/box.h
> +++ b/src/box/box.h
> @@ -67,6 +67,8 @@ extern const struct vclock *box_vclock;
> /** Invoked on box shutdown. */
> extern struct rlist box_on_shutdown;
>
> +/** Triggers invoked after schema initialization. */
> +extern struct rlist on_schema_init;
I moved it back to schema.h (Kostja agreed that it'd be better).
Pushed to 2.1 with the following changes:
diff --git a/src/box/box.h b/src/box/box.h
index ea6a11ae..53d88ab7 100644
--- a/src/box/box.h
+++ b/src/box/box.h
@@ -67,8 +67,6 @@ extern const struct vclock *box_vclock;
/** Invoked on box shutdown. */
extern struct rlist box_on_shutdown;
-/** Triggers invoked after schema initialization. */
-extern struct rlist on_schema_init;
/*
* Initialize box library
* @throws C++ exception
diff --git a/src/box/lua/ctl.c b/src/box/lua/ctl.c
index f90a9a97..85ed30c5 100644
--- a/src/box/lua/ctl.c
+++ b/src/box/lua/ctl.c
@@ -40,6 +40,7 @@
#include "lua/trigger.h"
#include "box/box.h"
+#include "box/schema.h"
static int
lbox_ctl_wait_ro(struct lua_State *L)
diff --git a/src/box/schema.cc b/src/box/schema.cc
index f0fccf7f..74d70d8d 100644
--- a/src/box/schema.cc
+++ b/src/box/schema.cc
@@ -70,7 +70,6 @@ uint32_t schema_version = 0;
uint32_t space_cache_version = 0;
struct rlist on_schema_init = RLIST_HEAD_INITIALIZER(on_schema_init);
-
struct rlist on_alter_space = RLIST_HEAD_INITIALIZER(on_alter_space);
struct rlist on_alter_sequence = RLIST_HEAD_INITIALIZER(on_alter_sequence);
diff --git a/src/box/schema.h b/src/box/schema.h
index f3df08b4..6f9a9611 100644
--- a/src/box/schema.h
+++ b/src/box/schema.h
@@ -44,6 +44,9 @@ extern "C" {
extern uint32_t schema_version;
extern uint32_t space_cache_version;
+/** Triggers invoked after schema initialization. */
+extern struct rlist on_schema_init;
+
/**
* Lock of schema modification
*/
diff --git a/test/replication/replica_on_schema_init.lua b/test/replication/replica_on_schema_init.lua
index 66323775..8a221681 100644
--- a/test/replication/replica_on_schema_init.lua
+++ b/test/replication/replica_on_schema_init.lua
@@ -2,13 +2,13 @@
function trig_local(old, new)
if new and new[3] == 'test_local' and new[6]['group_id'] ~= 1 then
- return box.tuple.new({new[1],new[2],new[3],new[4],new[5],{group_id=1},new[7]})
+ return new:update{{'=', 6, {group_id = 1}}}
end
end
function trig_engine(old, new)
if new and new[3] == 'test_engine' and new[4] ~= 'vinyl' then
- return box.tuple.new({new[1],new[2],new[3],'vinyl',new[5],new[6],new[7]})
+ return new:update{{'=', 4, 'vinyl'}}
end
end
@@ -20,9 +20,6 @@ end)
box.cfg({
listen = os.getenv("LISTEN"),
replication = os.getenv("MASTER"),
- memtx_memory = 107374182,
- replication_timeout = 0.1,
- replication_connect_timeout = 0.5,
})
require('console').listen(os.getenv('ADMIN'))
More information about the Tarantool-patches
mailing list