Skip to content
Snippets Groups Projects
Commit 3487dbdc authored by Robin Appelman's avatar Robin Appelman
Browse files

use unix socket for localhost mysql connections

parent f5dd80a3
No related branches found
No related tags found
No related merge requests found
......@@ -34,7 +34,7 @@ class Log extends Base {
private $queue;
public function __construct(
IQueue $queue,
IQueue $queue
) {
parent::__construct();
$this->queue = $queue;
......
......@@ -40,7 +40,7 @@ class Setup extends Base {
public function __construct(
\OCA\NotifyPush\SelfTest $test,
IConfig $config,
SetupWizard $setupWizard,
SetupWizard $setupWizard
) {
parent::__construct();
$this->test = $test;
......@@ -249,7 +249,7 @@ class Setup extends Base {
private function enterToContinue(OutputInterface $output): bool {
$output->write("Press enter to continue or ESC to cancel...");
system('stty cbreak -echo');
system('stty cbreak');
$result = null;
while ($result === null) {
$this->abortIfInterrupted();
......
......@@ -38,6 +38,8 @@ async fn main() -> Result<()> {
None => Config::from_env().wrap_err("Failed to load config from environment variables")?,
};
log::trace!("Running with config: {:?}", config);
let port = dotenv::var("PORT")
.ok()
.and_then(|port| port.parse().ok())
......@@ -51,14 +53,14 @@ async fn main() -> Result<()> {
DEBOUNCE_ENABLE.store(false, Ordering::Relaxed);
}
log::trace!("Running with config: {:?} on port {}", config, port);
let app = Arc::new(App::new(config, log_handle).await?);
app.self_test().await?;
log::trace!("Listening on port {}", port);
let server = spawn(serve(app.clone(), port, serve_cancel_handle));
if let Some(metrics_port) = metrics_port {
log::trace!("Metrics listening on port {}", port);
spawn(serve_metrics(metrics_port, metrics_cancel_handle));
}
......
......@@ -3,9 +3,13 @@ use crate::UserId;
use color_eyre::{eyre::WrapErr, Result};
use dashmap::DashMap;
use rand::{thread_rng, Rng};
use sqlx::any::AnyConnectOptions;
use sqlx::mysql::MySqlConnectOptions;
use sqlx::{Any, AnyPool, FromRow};
use std::path::PathBuf;
use std::time::Instant;
use tokio::time::Duration;
use warp::http::Uri;
#[derive(Debug, Clone, FromRow)]
pub struct UserStorageAccess {
......@@ -50,8 +54,23 @@ impl StorageMapping {
})
}
fn parse_options(connect: &str) -> Result<AnyConnectOptions> {
let uri: Uri = connect.parse()?;
if uri.scheme_str() == Some("mysql") && uri.host() == Some("localhost") {
let socket_addr = PathBuf::from("/var/run/mysqld/mysqld.sock");
if socket_addr.exists() {
log::trace!("Using unix socket instead of tcp for mysql localhost connection");
let mysql_options: MySqlConnectOptions = connect.parse()?;
return Ok(mysql_options.socket(socket_addr).into());
}
}
Ok(connect.parse()?)
}
pub async fn new(connect: &str, prefix: String) -> Result<Self> {
let connection = AnyPool::connect(connect)
let options =
Self::parse_options(connect).wrap_err("Failed to parse SQL connect string")?;
let connection = AnyPool::connect_with(options)
.await
.wrap_err("Failed to connect to Nextcloud database")?;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment