Compare commits

..

2 Commits

Author SHA1 Message Date
Vita Tauer
c0ae53484f Fixed linter errors 2024-11-11 12:09:19 +01:00
Vita Tauer
a1690a76c5 Add 'Fail' mode when no shard selected 2024-11-11 12:04:15 +01:00
7 changed files with 12 additions and 6 deletions

4
Cargo.lock generated
View File

@@ -1525,9 +1525,9 @@ checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
[[package]]
name = "sqlparser"
version = "0.52.0"
version = "0.41.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9a875d8cd437cc8a97e9aeaeea352ec9a19aea99c23e9effb17757291de80b08"
checksum = "5cc2c25a6c66789625ef164b4c7d2e548d627902280c13710d33da8222169964"
dependencies = [
"log",
"sqlparser_derive",

View File

@@ -19,7 +19,7 @@ serde_derive = "1"
regex = "1"
num_cpus = "1"
once_cell = "1"
sqlparser = { version = "0.52", features = ["visitor"] }
sqlparser = { version = "0.41", features = ["visitor"] }
log = "0.4"
arc-swap = "1"
parking_lot = "0.12.1"

View File

@@ -2,7 +2,7 @@ apiVersion: v2
name: pgcat
description: A Helm chart for PgCat a PostgreSQL pooler and proxy (like PgBouncer) with support for sharding, load balancing, failover and mirroring.
maintainers:
- name: PostgresML
email: team@postgresml.org
- name: Wildcard
email: support@w6d.io
appVersion: "1.2.0"
version: 0.2.5
version: 0.2.4

View File

@@ -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_<number>`: 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,

View File

@@ -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",
)),

View File

@@ -30,6 +30,7 @@ pub enum Error {
QueryRouterError(String),
InvalidShardId(usize),
PreparedStatementError,
NoShardSelected,
}
#[derive(Clone, PartialEq, Debug)]

View File

@@ -720,6 +720,7 @@ impl ConnectionPool {
.unwrap()
});
}
DefaultShard::Fail => return Err(Error::NoShardSelected),
},
};