From 106ebee71cb46de2ffa7216bd4d6b2dc571657b5 Mon Sep 17 00:00:00 2001 From: Mostafa Abdelraouf Date: Mon, 8 Aug 2022 15:15:48 -0500 Subject: [PATCH] Fix local dev (#112) * Fix Dev env * Update tests/sharding/query_routing_setup.sql * Update tests/sharding/query_routing_setup.sql * bring pgcat.toml on ci and local dev to parity * more parity * pool names * pool names * less diff * fix tests * fmt * add other user to setup Co-authored-by: Lev Kokotov --- .circleci/pgcat.toml | 27 +++++++++++++++- pgcat.toml | 20 ++++++------ src/config.rs | 21 +++++++------ tests/sharding/query_routing_setup.sql | 43 ++++++++++++++++++++++---- 4 files changed, 85 insertions(+), 26 deletions(-) diff --git a/.circleci/pgcat.toml b/.circleci/pgcat.toml index 1c0c010..7afb420 100644 --- a/.circleci/pgcat.toml +++ b/.circleci/pgcat.toml @@ -35,7 +35,7 @@ admin_password = "admin_pass" # pool # configs are structured as pool. # the pool_name is what clients use as database name when connecting -# For the example below a client can connect using "postgres://sharding_user:sharding_user@pgcat_host:pgcat_port/sharded" +# For the example below a client can connect using "postgres://sharding_user:sharding_user@pgcat_host:pgcat_port/sharded_db" [pools.sharded_db] # Pool mode (see PgBouncer docs for more). # session: one server connection per connected client @@ -80,6 +80,11 @@ password = "sharding_user" # is the sum of pool_size across all users. pool_size = 9 +[pools.sharded_db.users.1] +username = "other_user" +password = "other_user" +pool_size = 21 + # Shard 0 [pools.sharded_db.shards.0] # [ host, port, role ] @@ -103,3 +108,23 @@ servers = [ [ "localhost", 5432, "replica" ], ] database = "shard2" + + +[pools.simple_db] +pool_mode = "session" +default_role = "primary" +query_parser_enabled = true +primary_reads_enabled = true +sharding_function = "pg_bigint_hash" + +[pools.simple_db.users.0] +username = "simple_user" +password = "simple_user" +pool_size = 5 + +[pools.simple_db.shards.0] +servers = [ + [ "127.0.0.1", 5432, "primary" ], + [ "localhost", 5432, "replica" ] +] +database = "some_db" diff --git a/pgcat.toml b/pgcat.toml index a1937e6..0fa53bc 100644 --- a/pgcat.toml +++ b/pgcat.toml @@ -14,7 +14,7 @@ port = 6432 # How long to wait before aborting a server connection (ms). connect_timeout = 5000 -# How much time to give `SELECT 1` health check query to return with a result (ms). +# How much time to give the health check query to return with a result (ms). healthcheck_timeout = 1000 # For how long to ban a server if it fails a health check (seconds). @@ -29,14 +29,14 @@ autoreload = false # Credentials to access the virtual administrative database (pgbouncer or pgcat) # Connecting to that database allows running commands like `SHOW POOLS`, `SHOW DATABASES`, etc.. -admin_username = "user" -admin_password = "pass" +admin_username = "admin_user" +admin_password = "admin_pass" # pool # configs are structured as pool. # the pool_name is what clients use as database name when connecting -# For the example below a client can connect using "postgres://sharding_user:sharding_user@pgcat_host:pgcat_port/sharded" -[pools.sharded] +# For the example below a client can connect using "postgres://sharding_user:sharding_user@pgcat_host:pgcat_port/sharded_db" +[pools.sharded_db] # Pool mode (see PgBouncer docs for more). # session: one server connection per connected client # transaction: one server connection per client transaction @@ -72,7 +72,7 @@ primary_reads_enabled = true sharding_function = "pg_bigint_hash" # Credentials for users that may connect to this cluster -[pools.sharded.users.0] +[pools.sharded_db.users.0] username = "sharding_user" password = "sharding_user" # Maximum number of server connections that can be established for this user @@ -80,13 +80,13 @@ password = "sharding_user" # is the sum of pool_size across all users. pool_size = 9 -[pools.sharded.users.1] +[pools.sharded_db.users.1] username = "other_user" password = "other_user" pool_size = 21 # Shard 0 -[pools.sharded.shards.0] +[pools.sharded_db.shards.0] # [ host, port, role ] servers = [ [ "127.0.0.1", 5432, "primary" ], @@ -95,14 +95,14 @@ servers = [ # Database name (e.g. "postgres") database = "shard0" -[pools.sharded.shards.1] +[pools.sharded_db.shards.1] servers = [ [ "127.0.0.1", 5432, "primary" ], [ "localhost", 5432, "replica" ], ] database = "shard1" -[pools.sharded.shards.2] +[pools.sharded_db.shards.2] servers = [ [ "127.0.0.1", 5432, "primary" ], [ "localhost", 5432, "replica" ], diff --git a/src/config.rs b/src/config.rs index f1138f9..8e5e94e 100644 --- a/src/config.rs +++ b/src/config.rs @@ -521,30 +521,33 @@ mod test { assert_eq!(get_config().general.ban_time, 60); assert_eq!(get_config().pools.len(), 2); - assert_eq!(get_config().pools["sharded"].shards.len(), 3); + assert_eq!(get_config().pools["sharded_db"].shards.len(), 3); assert_eq!(get_config().pools["simple_db"].shards.len(), 1); - assert_eq!(get_config().pools["sharded"].users.len(), 2); + assert_eq!(get_config().pools["sharded_db"].users.len(), 2); assert_eq!(get_config().pools["simple_db"].users.len(), 1); assert_eq!( - get_config().pools["sharded"].shards["0"].servers[0].0, + get_config().pools["sharded_db"].shards["0"].servers[0].0, "127.0.0.1" ); assert_eq!( - get_config().pools["sharded"].shards["1"].servers[0].2, + get_config().pools["sharded_db"].shards["1"].servers[0].2, "primary" ); - assert_eq!(get_config().pools["sharded"].shards["1"].database, "shard1"); assert_eq!( - get_config().pools["sharded"].users["0"].username, + get_config().pools["sharded_db"].shards["1"].database, + "shard1" + ); + assert_eq!( + get_config().pools["sharded_db"].users["0"].username, "sharding_user" ); assert_eq!( - get_config().pools["sharded"].users["1"].password, + get_config().pools["sharded_db"].users["1"].password, "other_user" ); - assert_eq!(get_config().pools["sharded"].users["1"].pool_size, 21); - assert_eq!(get_config().pools["sharded"].default_role, "any"); + assert_eq!(get_config().pools["sharded_db"].users["1"].pool_size, 21); + assert_eq!(get_config().pools["sharded_db"].default_role, "any"); assert_eq!( get_config().pools["simple_db"].shards["0"].servers[0].0, diff --git a/tests/sharding/query_routing_setup.sql b/tests/sharding/query_routing_setup.sql index 8ecfc58..384b234 100644 --- a/tests/sharding/query_routing_setup.sql +++ b/tests/sharding/query_routing_setup.sql @@ -1,11 +1,12 @@ - DROP DATABASE IF EXISTS shard0; DROP DATABASE IF EXISTS shard1; DROP DATABASE IF EXISTS shard2; +DROP DATABASE IF EXISTS some_db; CREATE DATABASE shard0; CREATE DATABASE shard1; CREATE DATABASE shard2; +CREATE DATABASE some_db; \c shard0 @@ -41,21 +42,51 @@ CREATE TABLE data ( CREATE TABLE data_shard_2 PARTITION OF data FOR VALUES WITH (MODULUS 3, REMAINDER 2); -DROP ROLE IF EXISTS sharding_user; -CREATE ROLE sharding_user ENCRYPTED PASSWORD 'sharding_user' LOGIN; -GRANT CONNECT ON DATABASE shard0 TO sharding_user; -GRANT CONNECT ON DATABASE shard1 TO sharding_user; -GRANT CONNECT ON DATABASE shard2 TO sharding_user; +\c some_db + +DROP TABLE IF EXISTS data CASCADE; + +CREATE TABLE data ( + id BIGINT, + value VARCHAR +); + +DROP ROLE IF EXISTS sharding_user; +DROP ROLE IF EXISTS other_user; +DROP ROLE IF EXISTS simple_user; +CREATE ROLE sharding_user ENCRYPTED PASSWORD 'sharding_user' LOGIN; +CREATE ROLE other_user ENCRYPTED PASSWORD 'other_user' LOGIN; +CREATE ROLE simple_user ENCRYPTED PASSWORD 'simple_user' LOGIN; + +GRANT CONNECT ON DATABASE shard0 TO sharding_user; +GRANT CONNECT ON DATABASE shard1 TO sharding_user; +GRANT CONNECT ON DATABASE shard2 TO sharding_user; + +GRANT CONNECT ON DATABASE shard0 TO other_user; +GRANT CONNECT ON DATABASE shard1 TO other_user; +GRANT CONNECT ON DATABASE shard2 TO other_user; + +GRANT CONNECT ON DATABASE some_db TO simple_user; \c shard0 GRANT ALL ON SCHEMA public TO sharding_user; GRANT ALL ON TABLE data TO sharding_user; +GRANT ALL ON SCHEMA public TO other_user; +GRANT ALL ON TABLE data TO other_user; \c shard1 GRANT ALL ON SCHEMA public TO sharding_user; GRANT ALL ON TABLE data TO sharding_user; +GRANT ALL ON SCHEMA public TO other_user; +GRANT ALL ON TABLE data TO other_user; \c shard2 GRANT ALL ON SCHEMA public TO sharding_user; GRANT ALL ON TABLE data TO sharding_user; +GRANT ALL ON SCHEMA public TO other_user; +GRANT ALL ON TABLE data TO other_user; + +\c some_db +GRANT ALL ON SCHEMA public TO simple_user; +GRANT ALL ON TABLE data TO simple_user;