Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
revert validation changes
  • Loading branch information
zainkabani committed Jun 17, 2023
commit 06ab0f961c0a04d8ccb4c2275c611f6629a1a3bd
36 changes: 14 additions & 22 deletions src/pool.rs
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,7 @@ pub struct ConnectionPool {
/// The server information has to be passed to the
/// clients on startup. We pre-connect to all shards and replicas
/// on pool creation and save the startup parameters here.
original_server_parameters: ServerParameters,
original_server_parameters: Arc<RwLock<ServerParameters>>,

/// Pool configuration.
pub settings: PoolSettings,
Expand Down Expand Up @@ -257,7 +257,6 @@ impl ConnectionPool {
.clone()
.into_keys()
.collect::<Vec<String>>();
let mut original_server_parameters = ServerParameters::new();

// Sort by shard number to ensure consistency.
shard_ids.sort_by_key(|k| k.parse::<i64>().unwrap());
Expand Down Expand Up @@ -415,20 +414,6 @@ impl ConnectionPool {
pool.build_unchecked(manager)
};

// Set original server parameters by getting a connection
// If we don't want to validate then a default set of parameters will be used
if config.general.validate_config {
match pool.get().await {
Ok(conn) => {
original_server_parameters = conn.server_parameters();
}
Err(err) => {
error!("Shard {} down or misconfigured: {:?}", address, err);
return Err(Error::ServerError);
}
};
}

pools.push(pool);
servers.push(address);
}
Expand All @@ -451,7 +436,7 @@ impl ConnectionPool {
addresses,
banlist: Arc::new(RwLock::new(banlist)),
config_hash: new_pool_hash_value,
original_server_parameters,
original_server_parameters: Arc::new(RwLock::new(ServerParameters::default())),
auth_hash: pool_auth_hash,
settings: PoolSettings {
pool_mode: match user.pool_mode {
Expand Down Expand Up @@ -527,22 +512,29 @@ impl ConnectionPool {
pub async fn validate(&mut self) -> Result<(), Error> {
let mut futures = Vec::new();
let validated = Arc::clone(&self.validated);
validated.store(true, Ordering::Relaxed);

for shard in 0..self.shards() {
for server in 0..self.servers(shard) {
let databases = self.databases.clone();
let validated = Arc::clone(&validated);
let pool_server_parameters = Arc::clone(&self.original_server_parameters);

let task = tokio::task::spawn(async move {
match databases[shard][server].get().await {
Ok(_) => {}
let connection = match databases[shard][server].get().await {
Ok(conn) => conn,
Err(err) => {
validated.store(false, Ordering::Relaxed);
error!("Shard {} down or misconfigured: {:?}", shard, err);
return;
}
};

let proxy = connection;
let server = &*proxy;
let server_parameters: ServerParameters = server.server_parameters();

let mut guard = pool_server_parameters.write();
*guard = server_parameters;
validated.store(true, Ordering::Relaxed);
});

futures.push(task);
Expand Down Expand Up @@ -914,7 +906,7 @@ impl ConnectionPool {
}

pub fn server_parameters(&self) -> ServerParameters {
self.original_server_parameters.clone()
self.original_server_parameters.read().clone()
}

fn busy_connection_count(&self, address: &Address) -> u32 {
Expand Down
13 changes: 12 additions & 1 deletion src/server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,18 @@ pub struct ServerParameters {

impl Default for ServerParameters {
fn default() -> Self {
ServerParameters::new()
let mut server_parameters = ServerParameters::new();
server_parameters.set_param("client_encoding".to_string(), "UTF8".to_string(), false);
server_parameters.set_param("DateStyle".to_string(), "ISO, MDY".to_string(), false);
server_parameters.set_param("TimeZone".to_string(), "Etc/UTC".to_string(), false);
server_parameters.set_param(
"standard_conforming_strings".to_string(),
"on".to_string(),
false,
);
server_parameters.set_param("application_name".to_string(), "pgcat".to_string(), false);

server_parameters
}
}

Expand Down