mirror of
https://github.com/aljazceru/turso.git
synced 2025-12-30 06:24:21 +01:00
add ignore_error flag to interaction so that we fail on errors when executing interactions
This commit is contained in:
@@ -590,6 +590,7 @@ impl Display for Fault {
|
||||
pub struct Interaction {
|
||||
pub connection_index: usize,
|
||||
pub interaction: InteractionType,
|
||||
pub ignore_error: bool,
|
||||
}
|
||||
|
||||
impl Deref for Interaction {
|
||||
@@ -611,6 +612,15 @@ impl Interaction {
|
||||
Self {
|
||||
connection_index,
|
||||
interaction,
|
||||
ignore_error: false,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn new_ignore_error(connection_index: usize, interaction: InteractionType) -> Self {
|
||||
Self {
|
||||
connection_index,
|
||||
interaction,
|
||||
ignore_error: true,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -472,7 +472,7 @@ impl Property {
|
||||
.into_iter()
|
||||
.map(|q| Interaction::new(connection_index, InteractionType::Query(q))),
|
||||
);
|
||||
interactions.push(Interaction::new(connection_index, cq2));
|
||||
interactions.push(Interaction::new_ignore_error(connection_index, cq2));
|
||||
interactions.push(Interaction::new(connection_index, assertion));
|
||||
|
||||
interactions
|
||||
|
||||
@@ -175,9 +175,14 @@ pub fn execute_interaction_turso(
|
||||
match &interaction.interaction {
|
||||
InteractionType::Query(_) => {
|
||||
tracing::debug!(?interaction);
|
||||
let results = interaction.execute_query(conn);
|
||||
if results.is_err() {
|
||||
tracing::error!(?results);
|
||||
let results = interaction
|
||||
.execute_query(conn)
|
||||
.inspect_err(|err| tracing::error!(?err));
|
||||
|
||||
if let Err(err) = &results
|
||||
&& !interaction.ignore_error
|
||||
{
|
||||
return Err(err.clone());
|
||||
}
|
||||
stack.push(results);
|
||||
// TODO: skip integrity check with mvcc
|
||||
@@ -186,10 +191,10 @@ pub fn execute_interaction_turso(
|
||||
}
|
||||
}
|
||||
InteractionType::FsyncQuery(query) => {
|
||||
let results = interaction.execute_fsync_query(conn.clone(), env);
|
||||
if results.is_err() {
|
||||
tracing::error!(?results);
|
||||
}
|
||||
let results = interaction
|
||||
.execute_fsync_query(conn.clone(), env)
|
||||
.inspect_err(|err| tracing::error!(?err));
|
||||
|
||||
stack.push(results);
|
||||
|
||||
let query_interaction = Interaction::new(
|
||||
@@ -217,10 +222,10 @@ pub fn execute_interaction_turso(
|
||||
}
|
||||
InteractionType::FaultyQuery(_) => {
|
||||
let conn = conn.clone();
|
||||
let results = interaction.execute_faulty_query(&conn, env);
|
||||
if results.is_err() {
|
||||
tracing::error!(?results);
|
||||
}
|
||||
let results = interaction
|
||||
.execute_faulty_query(&conn, env)
|
||||
.inspect_err(|err| tracing::error!(?err));
|
||||
|
||||
stack.push(results);
|
||||
// Reset fault injection
|
||||
env.io.inject_fault(false);
|
||||
@@ -296,6 +301,11 @@ fn execute_interaction_rusqlite(
|
||||
let results = execute_query_rusqlite(conn, query).map_err(|e| {
|
||||
turso_core::LimboError::InternalError(format!("error executing query: {e}"))
|
||||
});
|
||||
if let Err(err) = &results
|
||||
&& !interaction.ignore_error
|
||||
{
|
||||
return Err(err.clone());
|
||||
}
|
||||
tracing::debug!("{:?}", results);
|
||||
stack.push(results);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user