ScyllaDB Documentation Logo Documentation
  • Server
    • ScyllaDB Open Source
    • ScyllaDB Enterprise
    • ScyllaDB Alternator
  • Cloud
  • Tools
    • ScyllaDB Manager
    • ScyllaDB Monitoring Stack
    • ScyllaDB Operator
  • Drivers
    • CQL Drivers
    • DynamoDB Drivers
Download
Menu
ScyllaDB Docs Scylla Rust Driver Making queries Query timeouts

Query timeoutsΒΆ

Query execution time can be limited by setting a request timeout. If a query does not complete in the given time, then QueryError::RequestTimeout is returned by the driver immediately, so that application logic can continue operating, but the query may still be in progress on the server.

As a side note, if one wishes custom server-side timeouts (i.e. actual interruption of query processing), one can use aUSING TIMEOUT <duration> directive supported in ScyllaDB (but not in Cassandra).

Timeout can be set globally (per session) or locally (for given statement). The default per-session timeout is currently 30s. It is possible to turn off timeouts completely by providing None as timeout when building Session. However, setting per-statement timeout to None results in falling back to per-session timeout.

use scylla::{Session, SessionBuilder, query::Query};
use scylla::transport::ExecutionProfile;
use std::time::Duration;

let uri = std::env::var("SCYLLA_URI")
    .unwrap_or_else(|_| "127.0.0.1:9042".to_string());

let no_timeout_profile_handle = ExecutionProfile::builder()
    .request_timeout(None) // no timeout
    .build()
    .into_handle();

let session: Session = SessionBuilder::new()
    .known_node(uri)
    .default_execution_profile_handle(no_timeout_profile_handle) // no per-session timeout
    .build()
    .await?;

// This query, having no timeout, could block indefinitely if a queried node hangs.
session
    .query("TRUNCATE keyspace.table", ())
    .await?;

let three_sec_timeout_profile_handle = ExecutionProfile::builder()
    .request_timeout(Some(Duration::from_secs(3))) // no timeout
    .build()
    .into_handle();

// The below query will last for no more than 3 seconds, yielding a RequestTimeout error
// if no response arrives until then.
let mut query: Query = "TRUNCATE keyspace.table".into();
query.set_execution_profile_handle(Some(three_sec_timeout_profile_handle));
session
    .query(query, ())
    .await?;
PREVIOUS
Lightweight transaction (LWT) query
NEXT
Execution profiles
Scylla Rust Driver
  • main
    • main
  • Scylla Rust Driver
  • Quick Start
    • Creating a project
    • Connecting and running a simple query
    • Running Scylla using Docker
  • Connecting to the cluster
    • Compression
    • Authentication
    • TLS
  • Making queries
    • Simple query
    • Query values
    • Query result
    • Prepared query
    • Batch statement
    • Paged query
    • USE keyspace
    • Schema agreement
    • Lightweight transaction (LWT) query
    • Query timeouts
  • Execution profiles
    • Creating a profile and setting it
    • All options supported by a profile
    • Priorities of execution settings
    • Remapping execution profile handles
  • Data Types
    • Bool, Tinyint, Smallint, Int, Bigint, Float, Double
    • Ascii, Text, Varchar
    • Counter
    • Blob
    • Inet
    • Uuid, Timeuuid
    • Date
    • Time
    • Timestamp
    • Duration
    • Decimal
    • Varint
    • List, Set, Map
    • Tuple
    • User defined types
  • Load balancing
    • DefaultPolicy
  • Retry policy configuration
    • Fallthrough retry policy
    • Default retry policy
    • Downgrading consistency retry policy
  • Speculative execution
    • Simple speculative execution
    • Percentile speculative execution
  • Driver metrics
  • Logging
  • Query tracing
    • Tracing a simple/prepared/batch query
    • Tracing a paged query
    • Tracing Session::prepare
    • Query Execution History
  • Schema
  • Create an issue
  • Edit this page
Logo
Docs Contact Us About Us
Mail List Icon Slack Icon Forum Icon
© 2023, ScyllaDB. All rights reserved.
Last updated on 22 March 2023.
Powered by Sphinx 4.3.2 & ScyllaDB Theme 1.3.5