diff --git a/compute_tools/src/compute.rs b/compute_tools/src/compute.rs index da5ad00da6..ca805f5e89 100644 --- a/compute_tools/src/compute.rs +++ b/compute_tools/src/compute.rs @@ -338,27 +338,30 @@ impl ComputeNode { // In this case we need to connect with old `zenith_admin` name // and create new user. We cannot simply rename connected user, // but we can create a new one and grant it all privileges. - let mut client = match Client::connect(self.connstr.as_str(), NoTls) { - Err(e) => { - info!( - "cannot connect to postgres: {}, retrying with `zenith_admin` username", - e - ); - let mut zenith_admin_connstr = self.connstr.clone(); + let mut client = { + let _span = tracing::info_span!("connect").entered(); + match Client::connect(self.connstr.as_str(), NoTls) { + Err(e) => { + info!( + "cannot connect to postgres: {}, retrying with `zenith_admin` username", + e + ); + let mut zenith_admin_connstr = self.connstr.clone(); - zenith_admin_connstr - .set_username("zenith_admin") - .map_err(|_| anyhow::anyhow!("invalid connstr"))?; + zenith_admin_connstr + .set_username("zenith_admin") + .map_err(|_| anyhow::anyhow!("invalid connstr"))?; - let mut client = Client::connect(zenith_admin_connstr.as_str(), NoTls)?; - client.simple_query("CREATE USER cloud_admin WITH SUPERUSER")?; - client.simple_query("GRANT zenith_admin TO cloud_admin")?; - drop(client); + let mut client = Client::connect(zenith_admin_connstr.as_str(), NoTls)?; + client.simple_query("CREATE USER cloud_admin WITH SUPERUSER")?; + client.simple_query("GRANT zenith_admin TO cloud_admin")?; + drop(client); - // reconnect with connsting with expected name - Client::connect(self.connstr.as_str(), NoTls)? + // reconnect with connsting with expected name + Client::connect(self.connstr.as_str(), NoTls)? + } + Ok(client) => client, } - Ok(client) => client, }; // Proceed with post-startup configuration. Note, that order of operations is important.