diff --git a/pgcat.toml b/pgcat.toml index 87f2700c..888a920b 100644 --- a/pgcat.toml +++ b/pgcat.toml @@ -179,6 +179,7 @@ primary_reads_enabled = true # `random`: picks a shard at random # `random_healthy`: picks a shard at random favoring shards with the least number of recent errors # `shard_`: e.g. shard_0, shard_4, etc. picks a specific shard, everytime +# `fail`: fails to pick up shard. (require explicit shard setup) # default_shard = "shard_0" # So what if you wanted to implement a different hashing function, diff --git a/src/config.rs b/src/config.rs index b0d98fb5..b9dc3ee1 100644 --- a/src/config.rs +++ b/src/config.rs @@ -773,6 +773,7 @@ pub enum DefaultShard { Shard(usize), Random, RandomHealthy, + Fail, } impl Default for DefaultShard { fn default() -> Self { @@ -787,6 +788,7 @@ impl serde::Serialize for DefaultShard { } DefaultShard::Random => serializer.serialize_str("random"), DefaultShard::RandomHealthy => serializer.serialize_str("random_healthy"), + DefaultShard::Fail => serializer.serialize_str("fail"), } } } @@ -804,6 +806,7 @@ impl<'de> serde::Deserialize<'de> for DefaultShard { match s.as_str() { "random" => Ok(DefaultShard::Random), "random_healthy" => Ok(DefaultShard::RandomHealthy), + "fail" => Ok(DefaultShard::Fail), _ => Err(serde::de::Error::custom( "invalid value for no_shard_specified_behavior", )), diff --git a/src/errors.rs b/src/errors.rs index 13047b4b..66a5b521 100644 --- a/src/errors.rs +++ b/src/errors.rs @@ -30,6 +30,7 @@ pub enum Error { QueryRouterError(String), InvalidShardId(usize), PreparedStatementError, + NoShardSelected, } #[derive(Clone, PartialEq, Debug)] diff --git a/src/pool.rs b/src/pool.rs index 7915a0a4..5f044d80 100644 --- a/src/pool.rs +++ b/src/pool.rs @@ -720,6 +720,7 @@ impl ConnectionPool { .unwrap() }); } + DefaultShard::Fail => return Err(Error::NoShardSelected), }, };