pgdog.git / summary / log / commit / refs

commit    b17e0394c62425ebdcd3371d1e2bb9d28cdfabaa
Author:   Lev Kokotov <lev.kokotov@gmail.com>
Date:     Thu Jan 02 18:52:22 2025 +0000

    save


src/backend/pool/connection.rs | 2 +- src/backend/server.rs | 22 ++++++++++++---------- src/frontend/client.rs | 5 ++--- 3 files changed, 15 insertions(+), 14 deletions(-) diff --git a/src/backend/pool/connection.rs b/src/backend/pool/connection.rs index f90fd282..d60cd179 100644 --- a/src/backend/pool/connection.rs +++ b/src/backend/pool/connection.rs @@ -18,7 +18,7 @@ impl Connection { } /// Create a server connection if one doesn't exist already. - pub async fn connect(&mut self) -> Result<(), Error> { + pub async fn get(&mut self) -> Result<(), Error> { if self.server.is_none() { self.server = Some(Server::connect("127.0.0.1:5432").await?); } diff --git a/src/backend/server.rs b/src/backend/server.rs index 2995e699..db6c6ff9 100644 --- a/src/backend/server.rs +++ b/src/backend/server.rs @@ -146,6 +146,14 @@ impl Server { self.state == State::Idle } + /// Server connection is synchronized and can receive more messages. + pub fn in_sync(&self) -> bool { + matches!( + self.state, + State::IdleInTransaction | State::TransactionError | State::Idle + ) + } + /// Server parameters. pub fn params(&self) -> &Vec<(String, String)> { &self.params @@ -171,18 +179,12 @@ impl Server { /// Attempt to rollback the transaction on this server, if any has been started. pub fn rollback(mut self) { spawn(async move { - match self.state { - State::IdleInTransaction => { - if let Err(_err) = self.execute("ROLLBACK").await { - self.state = State::Error; - } - } - - State::Active => { + if self.in_sync() { + if let Err(_err) = self.execute("ROLLBACK").await { self.state = State::Error; } - - _ => (), + } else { + self.state = State::Error; } }); } diff --git a/src/frontend/client.rs b/src/frontend/client.rs index 50e009af..8ed4eba0 100644 --- a/src/frontend/client.rs +++ b/src/frontend/client.rs @@ -4,9 +4,8 @@ use tokio::select; use super::{Buffer, Error}; use crate::backend::pool::Connection; -use crate::backend::Server; use crate::net::messages::{ - Authentication, BackendKeyData, Message, ParameterStatus, Protocol, ReadyForQuery, + Authentication, BackendKeyData, ParameterStatus, Protocol, ReadyForQuery, }; use crate::net::Stream; use crate::state::State; @@ -69,7 +68,7 @@ impl Client { flush = buffer.flush(); self.state = State::Waiting; - server.connect().await?; + server.get().await?; self.state = State::Active; server.send(buffer.into()).await?; [parent: 726ecba1e393]