From b5b05ed8528f6d54346dae82c86c8b4c67fff506 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Ml=C3=A1dek?= Date: Sun, 23 Oct 2022 13:46:42 +0200 Subject: [PATCH] fix: add custom logging handler (elucidate db locked errors?) --- src/database/mod.rs | 12 +++++++++++- src/database/stores/fs/mod.rs | 3 ++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/database/mod.rs b/src/database/mod.rs index c9d4705..e84ec84 100644 --- a/src/database/mod.rs +++ b/src/database/mod.rs @@ -35,7 +35,7 @@ use std::fs; use std::path::{Path, PathBuf}; use std::sync::{Arc, RwLock}; use std::time::Duration; -use tracing::{debug, trace}; +use tracing::{debug, error, trace}; #[derive(Debug)] pub struct ConnectionOptions { @@ -72,6 +72,15 @@ impl diesel::r2d2::CustomizeConnection type DbPool = r2d2::Pool>; +#[derive(Debug)] +pub struct LoggingHandler {} + +impl diesel::r2d2::HandleError for LoggingHandler { + fn handle_error(&self, error: diesel::r2d2::Error) { + error!("{}", error); + } +} + pub struct OpenResult { pub db: UpEndDatabase, pub new: bool, @@ -112,6 +121,7 @@ impl UpEndDatabase { enable_foreign_keys: true, busy_timeout: Some(Duration::from_secs(30)), })) + .error_handler(Box::new(LoggingHandler {})) .build(manager)?; trace!("Pool created."); diff --git a/src/database/stores/fs/mod.rs b/src/database/stores/fs/mod.rs index 3bfc1e1..066bcfb 100644 --- a/src/database/stores/fs/mod.rs +++ b/src/database/stores/fs/mod.rs @@ -10,7 +10,7 @@ use crate::database::entry::{Entry, InvariantEntry}; use crate::database::hierarchies::{ resolve_path, resolve_path_cached, ResolveCache, UHierPath, UNode, }; -use crate::database::{UpEndConnection, UpEndDatabase, UPEND_SUBDIR}; +use crate::database::{LoggingHandler, UpEndConnection, UpEndDatabase, UPEND_SUBDIR}; use crate::util::hash::{b58_encode, Hash, Hashable}; use crate::util::jobs::{JobContainer, JobHandle}; use anyhow::{anyhow, Error, Result}; @@ -122,6 +122,7 @@ impl FsStore { let pool = r2d2::Pool::builder() .connection_customizer(Box::new(ConnectionOptions {})) + .error_handler(Box::new(LoggingHandler {})) .build(manager)?; let lock = Arc::new(RwLock::new(()));