diff --git a/src/main.rs b/src/main.rs index d5bc563d88b3d6d37e55f99f13aeef3fe11ef762..2dd9ad1be2a517ea56c2377ccb1b0899d763a7f7 100644 --- a/src/main.rs +++ b/src/main.rs @@ -51,8 +51,17 @@ pub struct InnerTest { fn picolib_setup(args: &args::Run) { set_log_level(args.log_level()); let l = ::tarantool::lua_state(); - l.exec("package.loaded.pico = {}").unwrap(); - l.exec("_G.pico = package.loaded.pico").unwrap(); + l.exec( + "package.loaded.pico = {} + _G.pico = package.loaded.pico + pico.space = setmetatable({}, { __index = + function(self, space_name) + return box.space['_picodata_' .. space_name] + end + }) + ", + ) + .unwrap(); let luamod: tlua::LuaTable<_> = l.get("pico").unwrap(); luamod.set("VERSION", env!("CARGO_PKG_VERSION")); diff --git a/test/int/test_basics.py b/test/int/test_basics.py index 65d99ab6617e12ba5ef2e5e1e3e5fd390fe1231c..cb781627b4d7f940c4e1c920a3493a2dbbf52011 100644 --- a/test/int/test_basics.py +++ b/test/int/test_basics.py @@ -219,8 +219,8 @@ def test_raft_log(instance: Instance): +-----+----+-----+--------+ | 1 | 1 |1.0.1|Insert(_picodata_peer_address, [1,"127.0.0.1:{p}"])| | 2 | 1 |1.0.2|PersistPeer(i1, 1, r1, Offline(0), {b})| -| 3 | 1 |1.0.3|Insert(_picodata_state, ["replication_factor",1])| -| 4 | 1 |1.0.4|Insert(_picodata_state, ["desired_schema_version",0])| +| 3 | 1 |1.0.3|Insert(_picodata_cluster_state, ["replication_factor",1])| +| 4 | 1 |1.0.4|Insert(_picodata_cluster_state, ["desired_schema_version",0])| | 5 | 1 | |AddNode(1)| | 6 | 2 | |-| | 7 | 2 |1.1.1|PersistPeer(i1, 1, r1, Offline(0) -> Online(1), {b})| @@ -228,7 +228,7 @@ def test_raft_log(instance: Instance): | 9 | 2 |1.1.3|PersistPeer(i1, 1, r1, Replicated(1) -> Online(1), {b})| | 10 | 2 |1.1.4|Insert(_picodata_replicaset, ["r1","e0df68c5-e7f9-395f-86b3-30ad9e1b7b07","i1",1.0,0])| | 11 | 2 |1.1.5|PersistPeer(i1, 1, r1, ShardingInitialized(1) -> Online(1), {b})| -| 12 | 2 |1.1.6|Replace(_picodata_state, ["vshard_bootstrapped",true])| +| 12 | 2 |1.1.6|Replace(_picodata_cluster_state, ["vshard_bootstrapped",true])| | 13 | 2 |1.1.7|PersistPeer(i1, 1, r1, Online(1), {b})| +-----+----+-----+--------+ """.format( # noqa: E501 diff --git a/test/int/test_expelling.py b/test/int/test_expelling.py index 2e007fd0af9a23c6353ff93968812c64c2b7a9e0..138cb9639214878cbeb8b776bbbad33e27a34dcf 100644 --- a/test/int/test_expelling.py +++ b/test/int/test_expelling.py @@ -16,7 +16,7 @@ def assert_peer_expelled(expelled_peer: Instance, instance: Instance): def assert_voters(voters: list[Instance], instance: Instance): expected_voters = list(map(lambda i: i.raft_id, voters)) - real_voters = instance.eval("return box.space.raft_state:get('voters').value") + real_voters = instance.eval("return pico.space.raft_state:get('voters').value") assert real_voters.sort() == expected_voters.sort() diff --git a/test/int/test_joining.py b/test/int/test_joining.py index b49339d9fe1ee00994620fc657a31f7427d9b3e7..0f79f5d21aeafdf7cd6be3777324cb7bf5f7d837 100644 --- a/test/int/test_joining.py +++ b/test/int/test_joining.py @@ -21,16 +21,6 @@ def cluster3(cluster: Cluster): return cluster -def column_index(instance, space, name): - format = instance.eval(f"return box.space.{space}:format()") - i = 0 - for field in format: - if field["name"] == name: - return i - i = i + 1 - raise (f"Column {name} not found in space {space}") - - def raft_join( peer: Instance, cluster_id: str, @@ -56,7 +46,7 @@ def raft_join( def replicaset_id(instance: Instance): return instance.eval( - "return box.space.raft_group:get(...).replicaset_id", instance.instance_id + "return pico.space.raft_group:get(...).replicaset_id", instance.instance_id ) @@ -139,7 +129,7 @@ def test_replication(cluster: Cluster): for instance in cluster.instances: with instance.connect(1) as conn: raft_peer = conn.eval( - "return box.space.raft_group:get(...):tomap()", + "return pico.space.raft_group:get(...):tomap()", instance.instance_id, )[0] space_cluster = conn.select("_cluster") @@ -191,20 +181,24 @@ def test_init_replication_factor(cluster: Cluster): def read_replication_factor(instance): return instance.eval( - 'return box.space.cluster_state:get("replication_factor")' - )[1] + 'return pico.space.cluster_state:get("replication_factor").value' + ) assert read_replication_factor(i1) == 2 assert read_replication_factor(i2) == 2 assert read_replication_factor(i3) == 2 - INDEX_OF_REPLICASET_ID = column_index(i1, "raft_group", "replicaset_id") - - def read_raft_groups(instance): - tuples = instance.eval("return box.space.raft_group:select()") - return set(map(lambda t: t[INDEX_OF_REPLICASET_ID], tuples)) + replicaset_ids = i1.eval( + """ + return pico.space.raft_group:pairs() + :map(function(peer) + return peer.replicaset_id + end) + :totable() + """ + ) - assert read_raft_groups(i1) == {"r1", "r2"} + assert {"r1", "r2"} == set(replicaset_ids) def test_cluster_id_mismatch(instance: Instance): @@ -352,11 +346,11 @@ def test_fail_to_join(cluster: Cluster): joined_instances = i1.eval( """ - res = {} - for _, t in pairs(box.space.raft_group:select()) do - table.insert(res, { t.instance_id, t.raft_id }) - end - return res + return pico.space.raft_group:pairs() + :map(function(peer) + return { peer.instance_id, peer.raft_id } + end) + :totable() """ ) assert {tuple(i) for i in joined_instances} == {(i1.instance_id, i1.raft_id)} diff --git a/test/int/test_migration.py b/test/int/test_migration.py index a075776f9e981de2766b0bc3a74072b13f43882f..e13e1dcbcc8ae130ed9cc42e29a3d0c3eb0c452e 100644 --- a/test/int/test_migration.py +++ b/test/int/test_migration.py @@ -6,7 +6,7 @@ def test_add_migration(cluster: Cluster): i1, i2 = cluster.instances i1.promote_or_fail() i1.eval("pico.add_migration(1, 'migration body')") - migrations_table = i2.call("box.space.migrations:select") + migrations_table = i2.call("pico.space.migration:select") assert [[1, "migration body"]] == migrations_table @@ -16,7 +16,7 @@ def test_push_schema_version(cluster: Cluster): i1.promote_or_fail() i1.eval("pico.push_schema_version(3)") key = "desired_schema_version" - assert [[key, 3]] == i2.call("box.space.cluster_state:select", [key]) + assert [[key, 3]] == i2.call("pico.space.cluster_state:select", [key]) def test_apply_migrations(cluster: Cluster): @@ -39,14 +39,17 @@ def test_apply_migrations(cluster: Cluster): i1.call("pico.migrate") - def assert_space_insert(conn): - assert conn.insert("test_space", [1, "foo"]) - - def assert_replicaset_version(conn, v): - position = conn.schema.get_field("replicasets", "current_schema_version")["id"] - 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, 2) + assert conn.insert("test_space", [1, "foo"]) + + schema_versions = i.eval( + """ + return pico.space.replicaset:pairs() + :map(function(replicaset) + return replicaset.current_schema_version + end) + :totable() + """ + ) + assert {2} == set(schema_versions) diff --git a/test/int/test_network_effects.py b/test/int/test_network_effects.py index 45a8034b1af4dbb626e544740bd0c17452a7df24..62adcf366f8188ad724ee11c6d40393fa1db589f 100644 --- a/test/int/test_network_effects.py +++ b/test/int/test_network_effects.py @@ -68,7 +68,7 @@ def test_log_rollback(cluster3: Cluster): i3.assert_raft_status("Follower") def propose_state_change(srv: Instance, value): - code = 'box.space.cluster_state:put({"test-timeline", "%s"})' % value + code = 'pico.space.cluster_state:put({"test-timeline", "%s"})' % value return srv.raft_propose_eval(code, 0.1) propose_state_change(i1, "i1 is a leader") @@ -91,7 +91,7 @@ def test_log_rollback(cluster3: Cluster): retrying(lambda: i3.assert_raft_status("Follower", i2.raft_id)) print(i2.call("pico.raft_log", dict(return_string=True))) - print(i2.call("box.space.raft_state:select")) + print(i2.call("pico.space.raft_state:select")) propose_state_change(i2, "i2 takes the leadership") # Now i1 has an uncommitted, but persisted entry that should be rolled back. diff --git a/test/int/test_replication.py b/test/int/test_replication.py index 4021a636064a5e43185bef6c287c06c310a4c072..a71cf2880564e8a0d4e06aa80a3e192536fac452 100644 --- a/test/int/test_replication.py +++ b/test/int/test_replication.py @@ -25,7 +25,7 @@ def wait_repl_master(i: Instance, other_than=None): repl_master = i.eval( """ local rid = pico.peer_info(...).replicaset_id - return box.space.replicasets:get(rid).master_id + return pico.space.replicaset:get(rid).master_id """, i.instance_id, )