mirror of
https://github.com/postgresml/pgcat.git
synced 2026-03-26 10:26:30 +00:00
Make infer role configurable and fix double parse bug (#533)
* Make infer role configurable and fix double parse bug * Fix tests * Enable infer_role_from query in toml for tests * Fix test * Add max length config, add logging for which application is failing to parse, and change config name * fmt * Update src/config.rs --------- Co-authored-by: Lev Kokotov <levkk@users.noreply.github.com>
This commit is contained in:
@@ -511,6 +511,11 @@ pub struct Pool {
|
||||
#[serde(default)] // False
|
||||
pub query_parser_enabled: bool,
|
||||
|
||||
pub query_parser_max_length: Option<usize>,
|
||||
|
||||
#[serde(default)] // False
|
||||
pub query_parser_read_write_splitting: bool,
|
||||
|
||||
#[serde(default)] // False
|
||||
pub primary_reads_enabled: bool,
|
||||
|
||||
@@ -627,6 +632,18 @@ impl Pool {
|
||||
}
|
||||
}
|
||||
|
||||
if self.query_parser_read_write_splitting && !self.query_parser_enabled {
|
||||
error!(
|
||||
"query_parser_read_write_splitting is only valid when query_parser_enabled is true"
|
||||
);
|
||||
return Err(Error::BadConfig);
|
||||
}
|
||||
|
||||
if self.plugins.is_some() && !self.query_parser_enabled {
|
||||
error!("plugins are only valid when query_parser_enabled is true");
|
||||
return Err(Error::BadConfig);
|
||||
}
|
||||
|
||||
self.automatic_sharding_key = match &self.automatic_sharding_key {
|
||||
Some(key) => {
|
||||
// No quotes in the key so we don't have to compare quoted
|
||||
@@ -663,6 +680,8 @@ impl Default for Pool {
|
||||
users: BTreeMap::default(),
|
||||
default_role: String::from("any"),
|
||||
query_parser_enabled: false,
|
||||
query_parser_max_length: None,
|
||||
query_parser_read_write_splitting: false,
|
||||
primary_reads_enabled: false,
|
||||
sharding_function: ShardingFunction::PgBigintHash,
|
||||
automatic_sharding_key: None,
|
||||
@@ -914,6 +933,17 @@ impl From<&Config> for std::collections::HashMap<String, String> {
|
||||
format!("pools.{}.query_parser_enabled", pool_name),
|
||||
pool.query_parser_enabled.to_string(),
|
||||
),
|
||||
(
|
||||
format!("pools.{}.query_parser_max_length", pool_name),
|
||||
match pool.query_parser_max_length {
|
||||
Some(max_length) => max_length.to_string(),
|
||||
None => String::from("unlimited"),
|
||||
},
|
||||
),
|
||||
(
|
||||
format!("pools.{}.query_parser_read_write_splitting", pool_name),
|
||||
pool.query_parser_read_write_splitting.to_string(),
|
||||
),
|
||||
(
|
||||
format!("pools.{}.default_role", pool_name),
|
||||
pool.default_role.clone(),
|
||||
@@ -1096,6 +1126,15 @@ impl Config {
|
||||
"[pool: {}] Query router: {}",
|
||||
pool_name, pool_config.query_parser_enabled
|
||||
);
|
||||
|
||||
info!(
|
||||
"[pool: {}] Query parser max length: {:?}",
|
||||
pool_name, pool_config.query_parser_max_length
|
||||
);
|
||||
info!(
|
||||
"[pool: {}] Infer role from query: {}",
|
||||
pool_name, pool_config.query_parser_read_write_splitting
|
||||
);
|
||||
info!(
|
||||
"[pool: {}] Number of shards: {}",
|
||||
pool_name,
|
||||
|
||||
Reference in New Issue
Block a user