Skip to content

Commit ab19c1c

Browse files
committed
store: Limit maximum execution time for SQL queries
1 parent 5102acd commit ab19c1c

File tree

2 files changed

+11
-6
lines changed

2 files changed

+11
-6
lines changed

store/postgres/src/deployment_store.rs

+10-5
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ use crate::detail::ErrorDetail;
5454
use crate::dynds::DataSourcesTable;
5555
use crate::primary::DeploymentId;
5656
use crate::relational::index::{CreateIndex, IndexList, Method};
57-
use crate::relational::{Layout, LayoutCache, SqlName, Table};
57+
use crate::relational::{Layout, LayoutCache, SqlName, Table, STATEMENT_TIMEOUT};
5858
use crate::relational_queries::{FromEntityData, JSONData};
5959
use crate::{advisory_lock, catalog, retry};
6060
use crate::{connection_pool::ConnectionPool, detail};
@@ -293,12 +293,17 @@ impl DeploymentStore {
293293
query: &str,
294294
) -> Result<Vec<SqlQueryObject>, QueryExecutionError> {
295295
let query = format!("select to_jsonb(sub.*) as data from ({}) as sub", query);
296-
297296
let query = diesel::sql_query(query);
298297

299-
// Execute the provided SQL query
300-
let results = query
301-
.load::<JSONData>(conn)
298+
let results = conn
299+
.transaction(|conn| {
300+
if let Some(ref timeout_sql) = *STATEMENT_TIMEOUT {
301+
conn.batch_execute(timeout_sql)?;
302+
}
303+
304+
// Execute the provided SQL query
305+
query.load::<JSONData>(conn)
306+
})
302307
.map_err(|e| QueryExecutionError::SqlError(e.to_string()))?;
303308

304309
Ok(results

store/postgres/src/relational.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ pub const STRING_PREFIX_SIZE: usize = 256;
9595
pub const BYTE_ARRAY_PREFIX_SIZE: usize = 64;
9696

9797
lazy_static! {
98-
static ref STATEMENT_TIMEOUT: Option<String> = ENV_VARS
98+
pub(crate) static ref STATEMENT_TIMEOUT: Option<String> = ENV_VARS
9999
.graphql
100100
.sql_statement_timeout
101101
.map(|duration| format!("set local statement_timeout={}", duration.as_millis()));

0 commit comments

Comments
 (0)