Was this page helpful?
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:
USING TIMESTAMP
in the statement string itselfManually using
set_timestamp
on the statementTimestamp 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(())
# }