Skip to content
Snippets Groups Projects
Commit 824c2778 authored by Valentin Syrovatskiy's avatar Valentin Syrovatskiy
Browse files

feat: switch migration language to SQL instead of Lua

parent 3de8fa76
No related branches found
No related tags found
1 merge request!364feat: switch migration language to SQL instead of Lua
Pipeline #13548 passed
pub mod apply {
use crate::traft::{error::Error, node, rpc::sync, RaftIndex, RaftTerm, Result};
use std::time::Duration;
use tarantool::{lua_state, tlua::LuaError};
crate::define_rpc_request! {
fn proc_apply_migration(req: Request) -> Result<Response> {
......@@ -12,9 +13,9 @@ pub mod apply {
match storage.migrations.get(req.migration_id)? {
Some(migration) => {
match crate::tarantool::exec(migration.body.as_str()) {
match lua_state().exec_with("box.execute(...)", migration.body) {
Ok(_) => Ok(Response{}),
Err(e) => Err(e.into())
Err(e) => Err(LuaError::from(e).into()),
}
}
None => Err(Error::other(format!("Migration {0} not found", req.migration_id))),
......
......@@ -31,22 +31,22 @@ def test_apply_migrations(cluster: Cluster):
i1, _, _ = cluster.instances
i1.promote_or_fail()
i1.assert_raft_status("Leader")
i1.call(
"picolib.add_migration",
1,
"""
box.schema.space.create('test_space', {
format = {
{name = 'id', type = 'unsigned'},
{name = 'value', type = 'string'},
}
})
""",
CREATE TABLE "test_space" (
"id" INT PRIMARY KEY
)""",
)
i1.call(
"picolib.add_migration",
2,
"box.space.test_space:create_index('pk', {parts = {'id'}})",
"""
ALTER TABLE "test_space"
ADD COLUMN "value" VARCHAR(100)
""",
)
i1.call("picolib.push_schema_version", 2)
......@@ -56,11 +56,11 @@ def test_apply_migrations(cluster: Cluster):
assert conn.insert("test_space", [1, "foo"])
@funcy.retry(tries=30, timeout=0.2) # type: ignore
def assert_replicaset_version(conn):
def assert_replicaset_version(conn, v):
position = conn.schema.get_field("replicasets", "current_schema_version")["id"]
assert [2, 2, 2] == [tuple[position] for tuple in conn.select("replicasets")]
assert [v, v, v] == [tuple[position] for tuple in conn.select("replicasets")]
for i in cluster.instances:
with i.connect(timeout=1) as conn:
assert_space_insert(conn)
assert_replicaset_version(conn)
assert_replicaset_version(conn, 2)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment