From e010a507509ba58c8a868c0a6f492844f4ae6f27 Mon Sep 17 00:00:00 2001 From: Alexander Kolov Date: Mon, 18 Nov 2024 16:19:45 +0900 Subject: [PATCH] =?UTF-8?q?DuckDB=20doesn=E2=80=99t=20preserve=20IO=20Erro?= =?UTF-8?q?r,=20let=20us=20try=20to=20intercept=20DuckDBFailure?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/duckdb-server-rust/src/query.rs | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/packages/duckdb-server-rust/src/query.rs b/packages/duckdb-server-rust/src/query.rs index f1e5c0c1..0088056b 100644 --- a/packages/duckdb-server-rust/src/query.rs +++ b/packages/duckdb-server-rust/src/query.rs @@ -1,5 +1,4 @@ use std::future::Future; -use std::io; use std::path::{Path, PathBuf}; use std::pin::Pin; @@ -29,12 +28,11 @@ where match query_fn(state, params.clone()).await { Ok(response) => return Ok(response), Err(AppError::Error(err)) => { - // Check if the error is an IO error - if let Some(io_err) = err.downcast_ref::() { - if attempt <= max_retries { + if let Some(duckdb_err) = err.downcast_ref::() { + if matches!(duckdb_err, duckdb::Error::DuckDBFailure(_, _)) && attempt <= max_retries { tracing::warn!( - "IO error encountered: {}. Retrying after recreating connection. Attempt: {}", - io_err, + "DuckDB failure encountered: {}. Retrying after recreating connection. Attempt: {}", + duckdb_err, attempt ); state.recreate_db(database_id).await?; @@ -42,6 +40,7 @@ where } } + tracing::error!("+++ ERROR {:?}", err); return Err(AppError::Error(err)); } Err(err) => return Err(err),