ScyllaDB University Live | Free Virtual Training Event
Learn more
ScyllaDB Documentation Logo Documentation
  • Server
  • Cloud
  • Tools
    • ScyllaDB Manager
    • ScyllaDB Monitoring Stack
    • ScyllaDB Operator
  • Drivers
    • CQL Drivers
    • DynamoDB Drivers
  • Resources
    • ScyllaDB University
    • Community Forum
    • Tutorials
Download
ScyllaDB Docs Scylla Rust Driver Executing CQL statements - best practices Timestamp generators

Caution

You're viewing documentation for an unstable version of Scylla Rust Driver. Switch to the latest stable version.

Timestamp generators¶

If you want to generate timestamps on the client side you can provide a TimestampGenerator to a SessionBuilder when creating a Session. Then every executed statement will have attached a new timestamp generated by the provided TimestampGenerator. Timestamps are set according to precendence:

  1. USING TIMESTAMP in the statement string itself

  2. Manually using set_timestamp on the statement

  3. Timestamp generated by the generator

Simple Timestamp Generator¶

Most basic client-side timestamp generator. Generates timestamp based on system clock. Provides no guarantees and panics when the system clock provides timestamp before the unix epoch.

Monotonic Timestamp Generator¶

Client-side timestamp generator. Guarantees monotonic timestamps based on the system clock, with automatic timestamp incrementation if the system clock timestamp would not be monotonic. If the clock skew exceeds warning_threshold of the generator (can be changed with with_warning_times, 1s by default) user will be warned with timestamp generation with warning_interval cooldown period (can be changed with with_warning_times, 1s by default) to not spam the user. If user does not want to be warned about the clock skew, the warnings can be turned off with without_warnings function.

# extern crate scylla;
# use std::error::Error;
# async fn check_only_compiles() -> Result<(), Box<dyn std::error::Error>> {
use scylla::client::session::Session;
use scylla::client::session_builder::SessionBuilder;
use scylla::policies::timestamp_generator::MonotonicTimestampGenerator;
use scylla::statement::unprepared::Statement;
use std::sync::Arc;

let session: Session = SessionBuilder::new()
    .known_node("127.0.0.1:9042")
    .timestamp_generator(Arc::new(MonotonicTimestampGenerator::new()))
    .build()
    .await?;

// This statement will have a timestamp generated 
// by the monotonic timestamp generator
let my_statement: Statement = Statement::new("INSERT INTO ks.tab (a) VALUES(?)");
let to_insert: i32 = 12345;
session.query_unpaged(my_statement, (to_insert,)).await?;
# Ok(())
# }

Was this page helpful?

PREVIOUS
Request timeouts
NEXT
Execution profiles
  • Create an issue
  • Edit this page

On this page

  • Timestamp generators
    • Simple Timestamp Generator
    • Monotonic Timestamp Generator
Scylla Rust Driver
  • main
    • main
    • v1.1.0
    • v1.0.0
  • 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
  • Executing CQL statements - best practices
    • Unprepared statement
    • Statement values
    • Query result
    • Prepared statement
    • Batch statement
    • Paged query
    • USE keyspace
    • Schema agreement
    • Lightweight transaction (LWT) statement
    • Request timeouts
    • Timestamp generators
  • 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
    • Vector
  • 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
  • Migration guides
    • Adjusting code to changes in serialization API introduced in 0.11
    • Adjusting code to changes in deserialization API introduced in 0.15
  • Logging
  • Query tracing
    • Tracing a simple/prepared/batch query
    • Tracing a paged query
    • Tracing Session::prepare
    • Query Execution History
  • Schema
Docs Tutorials University Contact Us About Us
© 2025, ScyllaDB. All rights reserved. | Terms of Service | Privacy Policy | ScyllaDB, and ScyllaDB Cloud, are registered trademarks of ScyllaDB, Inc.
Last updated on 08 May 2025.
Powered by Sphinx 7.4.7 & ScyllaDB Theme 1.8.6