Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

BEGIN tests #327

Merged
merged 3 commits into from
Dec 8, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ require (
github.com/lib/pq v1.10.9
github.com/libp2p/go-reuseport v0.4.0
github.com/opentracing/opentracing-go v1.2.0
github.com/pg-sharding/lyx v0.0.0-20231128090931-e78a93d53505
github.com/pg-sharding/lyx v0.0.0-20231205060821-62d800c1c693
github.com/pkg/errors v0.9.1
github.com/rs/zerolog v1.31.0
github.com/sevlyar/go-daemon v0.1.6
Expand Down
2 changes: 2 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,8 @@ github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+
github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc=
github.com/pg-sharding/lyx v0.0.0-20231128090931-e78a93d53505 h1:OsLSe/dJ39CE9Z4DttrClPhdXYJpIWqtxtYc647n/a4=
github.com/pg-sharding/lyx v0.0.0-20231128090931-e78a93d53505/go.mod h1:2dPBQAhqv/30mhzj2yBXQkXhsGJQ8GhM+oWOfbGua58=
github.com/pg-sharding/lyx v0.0.0-20231205060821-62d800c1c693 h1:U3mp4vsGFou6MH7nhmq/a6if+rOIpkG3tVi6DSePFds=
github.com/pg-sharding/lyx v0.0.0-20231205060821-62d800c1c693/go.mod h1:2dPBQAhqv/30mhzj2yBXQkXhsGJQ8GhM+oWOfbGua58=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
Expand Down
1 change: 1 addition & 0 deletions test/regress/schedule/router
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,4 @@ test: single_shard_joins
test: multishard
test: error
test: routing_hint
test: begin
211 changes: 211 additions & 0 deletions test/regress/tests/router/expected/begin.out
Original file line number Diff line number Diff line change
@@ -0,0 +1,211 @@
\c spqr-console

SQPR router admin console
Here you can configure your routing rules
------------------------------------------------
You can find documentation here
https://github.com/pg-sharding/spqr/tree/master/docs

DROP SHARDING RULE ALL;
drop sharding rule
--------------------------
dropped sharding rule t1
(1 row)

DROP KEY RANGE ALL;
drop key range
----------------
(0 rows)

ADD SHARDING RULE t1 COLUMNS id;
add sharding rule
-------------------------------------------------------------------------------------------
created sharding rule t1 for table (*) with columns [id, hash: x->x] in default dataspace
(1 row)

ADD KEY RANGE krid1 FROM 1 TO 11 ROUTE TO sh1;
add key range
--------------------------------
created key range from 1 to 11
(1 row)

ADD KEY RANGE krid2 FROM 11 TO 101 ROUTE TO sh2;
add key range
----------------------------------
created key range from 11 to 101
(1 row)

\c regress
CREATE TABLE test_beg(id int, age int);
NOTICE: send query to shard(s) : sh1,sh2
INSERT INTO test_beg(id, age) VALUES (10, 16);
NOTICE: send query to shard(s) : sh1
INSERT INTO test_beg(id, age) VALUES (10, 16);
NOTICE: send query to shard(s) : sh1
SELECT * FROM test_beg WHERE id=10;
NOTICE: send query to shard(s) : sh1
id | age
----+-----
10 | 16
10 | 16
(2 rows)

BEGIN TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SELECT * FROM test_beg WHERE id=10;
NOTICE: send query to shard(s) : sh1
id | age
----+-----
10 | 16
10 | 16
(2 rows)

INSERT INTO test_beg(id, age) VALUES (10, 16);
SELECT * FROM test_beg WHERE id=10;
id | age
----+-----
10 | 16
10 | 16
10 | 16
(3 rows)

ROLLBACK;
BEGIN TRANSACTION ISOLATION LEVEL READ COMMITTED;
SELECT * FROM test_beg WHERE id=10;
NOTICE: send query to shard(s) : sh1
id | age
----+-----
10 | 16
10 | 16
(2 rows)

INSERT INTO test_beg(id, age) VALUES (10, 16);
SELECT * FROM test_beg WHERE id=10;
id | age
----+-----
10 | 16
10 | 16
10 | 16
(3 rows)

ROLLBACK;
BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ;
SELECT * FROM test_beg WHERE id=10;
NOTICE: send query to shard(s) : sh1
id | age
----+-----
10 | 16
10 | 16
(2 rows)

INSERT INTO test_beg(id, age) VALUES (10, 16);
SELECT * FROM test_beg WHERE id=10;
id | age
----+-----
10 | 16
10 | 16
10 | 16
(3 rows)

ROLLBACK;
BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SELECT * FROM test_beg WHERE id=10;
NOTICE: send query to shard(s) : sh1
id | age
----+-----
10 | 16
10 | 16
(2 rows)

INSERT INTO test_beg(id, age) VALUES (10, 16);
SELECT * FROM test_beg WHERE id=10;
id | age
----+-----
10 | 16
10 | 16
10 | 16
(3 rows)

ROLLBACK;
/* TODO: Different ISOLATION LEVEL have to effect */
BEGIN TRANSACTION READ WRITE;
SELECT * FROM test_beg WHERE id=10;
NOTICE: send query to shard(s) : sh1
id | age
----+-----
10 | 16
10 | 16
(2 rows)

INSERT INTO test_beg(id, age) VALUES (10, 16);
SELECT * FROM test_beg WHERE id=10;
id | age
----+-----
10 | 16
10 | 16
10 | 16
(3 rows)

ROLLBACK;
BEGIN TRANSACTION DEFERRABLE;
SELECT * FROM test_beg WHERE id=10;
NOTICE: send query to shard(s) : sh1
id | age
----+-----
10 | 16
10 | 16
(2 rows)

INSERT INTO test_beg(id, age) VALUES (10, 16);
SELECT * FROM test_beg WHERE id=10;
id | age
----+-----
10 | 16
10 | 16
10 | 16
(3 rows)

ROLLBACK;
BEGIN TRANSACTION NOT DEFERRABLE;
SELECT * FROM test_beg WHERE id=10;
NOTICE: send query to shard(s) : sh1
id | age
----+-----
10 | 16
10 | 16
(2 rows)

INSERT INTO test_beg(id, age) VALUES (10, 16);
SELECT * FROM test_beg WHERE id=10;
id | age
----+-----
10 | 16
10 | 16
10 | 16
(3 rows)

ROLLBACK;
BEGIN TRANSACTION READ ONLY;
SELECT * FROM test_beg WHERE id=10;
NOTICE: send query to shard(s) : sh1
id | age
----+-----
10 | 16
10 | 16
(2 rows)

INSERT INTO test_beg(id, age) VALUES (10, 16);
ERROR: cannot execute INSERT in a read-only transaction
ROLLBACK;
\c spqr-console

SQPR router admin console
Here you can configure your routing rules
------------------------------------------------
You can find documentation here
https://github.com/pg-sharding/spqr/tree/master/docs

DROP DATASPACE ALL CASCADE
drop dataspace
----------------
(0 rows)

64 changes: 64 additions & 0 deletions test/regress/tests/router/sql/begin.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
\c spqr-console
DROP SHARDING RULE ALL;
DROP KEY RANGE ALL;
ADD SHARDING RULE t1 COLUMNS id;
ADD KEY RANGE krid1 FROM 1 TO 11 ROUTE TO sh1;
ADD KEY RANGE krid2 FROM 11 TO 101 ROUTE TO sh2;

\c regress
CREATE TABLE test_beg(id int, age int);
INSERT INTO test_beg(id, age) VALUES (10, 16);
INSERT INTO test_beg(id, age) VALUES (10, 16);
SELECT * FROM test_beg WHERE id=10;

BEGIN TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SELECT * FROM test_beg WHERE id=10;
INSERT INTO test_beg(id, age) VALUES (10, 16);
SELECT * FROM test_beg WHERE id=10;
ROLLBACK;

BEGIN TRANSACTION ISOLATION LEVEL READ COMMITTED;
SELECT * FROM test_beg WHERE id=10;
INSERT INTO test_beg(id, age) VALUES (10, 16);
SELECT * FROM test_beg WHERE id=10;
ROLLBACK;

BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ;
SELECT * FROM test_beg WHERE id=10;
INSERT INTO test_beg(id, age) VALUES (10, 16);
SELECT * FROM test_beg WHERE id=10;
ROLLBACK;

BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SELECT * FROM test_beg WHERE id=10;
INSERT INTO test_beg(id, age) VALUES (10, 16);
SELECT * FROM test_beg WHERE id=10;
ROLLBACK;

/* TODO: Different ISOLATION LEVEL have to effect */

BEGIN TRANSACTION READ WRITE;
SELECT * FROM test_beg WHERE id=10;
INSERT INTO test_beg(id, age) VALUES (10, 16);
SELECT * FROM test_beg WHERE id=10;
ROLLBACK;

BEGIN TRANSACTION DEFERRABLE;
SELECT * FROM test_beg WHERE id=10;
INSERT INTO test_beg(id, age) VALUES (10, 16);
SELECT * FROM test_beg WHERE id=10;
ROLLBACK;

BEGIN TRANSACTION NOT DEFERRABLE;
SELECT * FROM test_beg WHERE id=10;
INSERT INTO test_beg(id, age) VALUES (10, 16);
SELECT * FROM test_beg WHERE id=10;
ROLLBACK;

BEGIN TRANSACTION READ ONLY;
SELECT * FROM test_beg WHERE id=10;
INSERT INTO test_beg(id, age) VALUES (10, 16);
ROLLBACK;

\c spqr-console
DROP DATASPACE ALL CASCADE
Loading