blob: c2056c5973651157f20f72aebd415e704de60f2e [file]
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="description" content="Java Driver for Apache Cassandra® Documentation">
<link rel="canonical" href="https://apache.github.io/cassandra-java-driver/core/query_timestamps/">
<link rel="prev" href="../non_blocking/">
<link rel="next" href="../idempotence/">
<link rel="icon" href="../../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.17">
<title>Query Timestamps - Java Driver for Apache Cassandra</title>
<link rel="stylesheet" href="../../assets/stylesheets/main.7e37652d.min.css">
<link rel="stylesheet" href="../../assets/stylesheets/palette.06af60db.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
<script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="blue" data-md-color-accent="blue">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#query-timestamps" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="../.." title="Java Driver for Apache Cassandra" class="md-header__button md-logo" aria-label="Java Driver for Apache Cassandra" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
Java Driver for Apache Cassandra
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Query Timestamps
</span>
</div>
</div>
</div>
<form class="md-header__option" data-md-component="palette">
<input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="blue" data-md-color-accent="blue" aria-hidden="true" type="radio" name="__palette" id="__palette_0">
</form>
<script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<a href="javascript:void(0)" class="md-search__icon md-icon" title="Share" aria-label="Share" data-clipboard data-clipboard-text="" data-md-component="search-share" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91s2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08"/></svg>
</a>
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>
</button>
</nav>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/apache/cassandra-java-driver" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path fill="currentColor" d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
</div>
<div class="md-source__repository">
apache/cassandra-java-driver
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<nav class="md-tabs" aria-label="Tabs" data-md-component="tabs">
<div class="md-grid">
<ul class="md-tabs__list">
<li class="md-tabs__item">
<a href="../../HOME-README/" class="md-tabs__link">
Home
</a>
</li>
<li class="md-tabs__item md-tabs__item--active">
<a href="../.." class="md-tabs__link">
Manual
</a>
</li>
<li class="md-tabs__item">
<a href="../../api/" class="md-tabs__link">
API References
</a>
</li>
<li class="md-tabs__item">
<a href="../../faq-README/" class="md-tabs__link">
FAQ
</a>
</li>
<li class="md-tabs__item">
<a href="../../changelog-README/" class="md-tabs__link">
Changelog
</a>
</li>
<li class="md-tabs__item">
<a href="../../upgrade-README/" class="md-tabs__link">
Upgrade Guide
</a>
</li>
</ul>
</div>
</nav>
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary md-nav--lifted" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="../.." title="Java Driver for Apache Cassandra" class="md-nav__button md-logo" aria-label="Java Driver for Apache Cassandra" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg>
</a>
Java Driver for Apache Cassandra
</label>
<div class="md-nav__source">
<a href="https://github.com/apache/cassandra-java-driver" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path fill="currentColor" d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
</div>
<div class="md-source__repository">
apache/cassandra-java-driver
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../HOME-README/" class="md-nav__link">
<span class="md-ellipsis">
Home
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2" checked>
<label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="">
<span class="md-ellipsis">
Manual
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_2">
<span class="md-nav__icon md-icon"></span>
Manual
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../.." class="md-nav__link">
<span class="md-ellipsis">
Overview
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../api_conventions/" class="md-nav__link">
<span class="md-ellipsis">
API Conventions
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../case_sensitivity/" class="md-nav__link">
<span class="md-ellipsis">
Case Sensitivity
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../cloud/" class="md-nav__link">
<span class="md-ellipsis">
Cloud
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_5" checked>
<label class="md-nav__link" for="__nav_2_5" id="__nav_2_5_label" tabindex="">
<span class="md-ellipsis">
Core
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_2_5_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_2_5">
<span class="md-nav__icon md-icon"></span>
Core
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../" class="md-nav__link">
<span class="md-ellipsis">
Overview
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../integration/" class="md-nav__link">
<span class="md-ellipsis">
Integration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../configuration/" class="md-nav__link">
<span class="md-ellipsis">
Configuration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../authentication/" class="md-nav__link">
<span class="md-ellipsis">
Authentication
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../ssl/" class="md-nav__link">
<span class="md-ellipsis">
SSL
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../load_balancing/" class="md-nav__link">
<span class="md-ellipsis">
Load Balancing
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../pooling/" class="md-nav__link">
<span class="md-ellipsis">
Pooling
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../reconnection/" class="md-nav__link">
<span class="md-ellipsis">
Reconnection
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../retries/" class="md-nav__link">
<span class="md-ellipsis">
Retries
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../speculative_execution/" class="md-nav__link">
<span class="md-ellipsis">
Speculative Execution
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../metrics/" class="md-nav__link">
<span class="md-ellipsis">
Metrics
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../logging/" class="md-nav__link">
<span class="md-ellipsis">
Logging
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_5_13" >
<label class="md-nav__link" for="__nav_2_5_13" id="__nav_2_5_13_label" tabindex="0">
<span class="md-ellipsis">
Statements
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_5_13_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2_5_13">
<span class="md-nav__icon md-icon"></span>
Statements
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../statements/" class="md-nav__link">
<span class="md-ellipsis">
Overview
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../statements/batch/" class="md-nav__link">
<span class="md-ellipsis">
Batch
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../statements/per_query_keyspace/" class="md-nav__link">
<span class="md-ellipsis">
Per Query Keyspace
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../statements/prepared/" class="md-nav__link">
<span class="md-ellipsis">
Prepared
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../statements/simple/" class="md-nav__link">
<span class="md-ellipsis">
Simple
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../paging/" class="md-nav__link">
<span class="md-ellipsis">
Paging
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../async/" class="md-nav__link">
<span class="md-ellipsis">
Async Programming
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../reactive/" class="md-nav__link">
<span class="md-ellipsis">
Reactive Streams
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../custom_codecs/" class="md-nav__link">
<span class="md-ellipsis">
Custom Codecs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../temporal_types/" class="md-nav__link">
<span class="md-ellipsis">
Temporal Types
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../tuples/" class="md-nav__link">
<span class="md-ellipsis">
Tuples
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../udts/" class="md-nav__link">
<span class="md-ellipsis">
UDTs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../compression/" class="md-nav__link">
<span class="md-ellipsis">
Compression
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../address_resolution/" class="md-nav__link">
<span class="md-ellipsis">
Address Resolution
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../request_tracker/" class="md-nav__link">
<span class="md-ellipsis">
Request Tracker
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../throttling/" class="md-nav__link">
<span class="md-ellipsis">
Throttling
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../tracing/" class="md-nav__link">
<span class="md-ellipsis">
Tracing
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../performance/" class="md-nav__link">
<span class="md-ellipsis">
Performance
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_5_27" >
<label class="md-nav__link" for="__nav_2_5_27" id="__nav_2_5_27_label" tabindex="0">
<span class="md-ellipsis">
Metadata
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_5_27_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2_5_27">
<span class="md-nav__icon md-icon"></span>
Metadata
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../metadata/" class="md-nav__link">
<span class="md-ellipsis">
Overview
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../metadata/node/" class="md-nav__link">
<span class="md-ellipsis">
Node
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../metadata/schema/" class="md-nav__link">
<span class="md-ellipsis">
Schema
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../metadata/token/" class="md-nav__link">
<span class="md-ellipsis">
Token
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../control_connection/" class="md-nav__link">
<span class="md-ellipsis">
Control Connection
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../native_protocol/" class="md-nav__link">
<span class="md-ellipsis">
Native Protocol
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../non_blocking/" class="md-nav__link">
<span class="md-ellipsis">
Non-blocking
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
<span class="md-ellipsis">
Query Timestamps
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
Query Timestamps
</span>
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#query-timestamps" class="md-nav__link">
<span class="md-ellipsis">
Query timestamps
</span>
</a>
<nav class="md-nav" aria-label="Query timestamps">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#quick-overview" class="md-nav__link">
<span class="md-ellipsis">
Quick overview
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#cql-using-timestamp" class="md-nav__link">
<span class="md-ellipsis">
CQL USING TIMESTAMP
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#timestamp-generator" class="md-nav__link">
<span class="md-ellipsis">
Timestamp generator
</span>
</a>
<nav class="md-nav" aria-label="Timestamp generator">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#atomictimestampgenerator" class="md-nav__link">
<span class="md-ellipsis">
AtomicTimestampGenerator
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#threadlocaltimestampgenerator" class="md-nav__link">
<span class="md-ellipsis">
ThreadLocalTimestampGenerator
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#serversidetimestampgenerator" class="md-nav__link">
<span class="md-ellipsis">
ServerSideTimestampGenerator
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#custom" class="md-nav__link">
<span class="md-ellipsis">
Custom
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#using-multiple-generators" class="md-nav__link">
<span class="md-ellipsis">
Using multiple generators
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#per-statement-timestamp" class="md-nav__link">
<span class="md-ellipsis">
Per-statement timestamp
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#timestamps-and-lightweight-transactions" class="md-nav__link">
<span class="md-ellipsis">
Timestamps and lightweight transactions
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#summary" class="md-nav__link">
<span class="md-ellipsis">
Summary
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../idempotence/" class="md-nav__link">
<span class="md-ellipsis">
Idempotence
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../detachable_types/" class="md-nav__link">
<span class="md-ellipsis">
Detachable Types
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_5_34" >
<label class="md-nav__link" for="__nav_2_5_34" id="__nav_2_5_34_label" tabindex="0">
<span class="md-ellipsis">
DSE
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_5_34_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2_5_34">
<span class="md-nav__icon md-icon"></span>
DSE
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../dse/" class="md-nav__link">
<span class="md-ellipsis">
Overview
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../dse/geotypes/" class="md-nav__link">
<span class="md-ellipsis">
Geotypes
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_5_34_3" >
<label class="md-nav__link" for="__nav_2_5_34_3" id="__nav_2_5_34_3_label" tabindex="0">
<span class="md-ellipsis">
Graph
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="4" aria-labelledby="__nav_2_5_34_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2_5_34_3">
<span class="md-nav__icon md-icon"></span>
Graph
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../dse/graph/" class="md-nav__link">
<span class="md-ellipsis">
Overview
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_5_34_3_2" >
<label class="md-nav__link" for="__nav_2_5_34_3_2" id="__nav_2_5_34_3_2_label" tabindex="0">
<span class="md-ellipsis">
Fluent
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="5" aria-labelledby="__nav_2_5_34_3_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2_5_34_3_2">
<span class="md-nav__icon md-icon"></span>
Fluent
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../dse/graph/fluent/" class="md-nav__link">
<span class="md-ellipsis">
Overview
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../dse/graph/fluent/explicit/" class="md-nav__link">
<span class="md-ellipsis">
Explicit
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../dse/graph/fluent/implicit/" class="md-nav__link">
<span class="md-ellipsis">
Implicit
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../dse/graph/options/" class="md-nav__link">
<span class="md-ellipsis">
Options
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../dse/graph/results/" class="md-nav__link">
<span class="md-ellipsis">
Results
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../dse/graph/script/" class="md-nav__link">
<span class="md-ellipsis">
Script
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../graalvm/" class="md-nav__link">
<span class="md-ellipsis">
GraalVM
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../shaded_jar/" class="md-nav__link">
<span class="md-ellipsis">
Shaded JAR
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../bom/" class="md-nav__link">
<span class="md-ellipsis">
BOM
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_6" >
<label class="md-nav__link" for="__nav_2_6" id="__nav_2_6_label" tabindex="">
<span class="md-ellipsis">
Query Builder
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_2_6_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2_6">
<span class="md-nav__icon md-icon"></span>
Query Builder
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../query_builder/" class="md-nav__link">
<span class="md-ellipsis">
Overview
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../query_builder/select/" class="md-nav__link">
<span class="md-ellipsis">
Select
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../query_builder/insert/" class="md-nav__link">
<span class="md-ellipsis">
Insert
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../query_builder/update/" class="md-nav__link">
<span class="md-ellipsis">
Update
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../query_builder/delete/" class="md-nav__link">
<span class="md-ellipsis">
Delete
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_6_6" >
<label class="md-nav__link" for="__nav_2_6_6" id="__nav_2_6_6_label" tabindex="0">
<span class="md-ellipsis">
Schema
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_6_6_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2_6_6">
<span class="md-nav__icon md-icon"></span>
Schema
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../query_builder/schema/" class="md-nav__link">
<span class="md-ellipsis">
Overview
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../query_builder/schema/aggregate/" class="md-nav__link">
<span class="md-ellipsis">
Aggregate
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../query_builder/schema/function/" class="md-nav__link">
<span class="md-ellipsis">
Function
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../query_builder/schema/index/" class="md-nav__link">
<span class="md-ellipsis">
Index
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../query_builder/schema/keyspace/" class="md-nav__link">
<span class="md-ellipsis">
Keyspace
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../query_builder/schema/materialized_view/" class="md-nav__link">
<span class="md-ellipsis">
Materialized View
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../query_builder/schema/table/" class="md-nav__link">
<span class="md-ellipsis">
Table
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../query_builder/schema/type/" class="md-nav__link">
<span class="md-ellipsis">
Type
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../query_builder/truncate/" class="md-nav__link">
<span class="md-ellipsis">
Truncate
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../query_builder/condition/" class="md-nav__link">
<span class="md-ellipsis">
Condition
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../query_builder/relation/" class="md-nav__link">
<span class="md-ellipsis">
Relation
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../query_builder/term/" class="md-nav__link">
<span class="md-ellipsis">
Term
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../query_builder/idempotence/" class="md-nav__link">
<span class="md-ellipsis">
Idempotence
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_7" >
<label class="md-nav__link" for="__nav_2_7" id="__nav_2_7_label" tabindex="">
<span class="md-ellipsis">
Mapper
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_2_7_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2_7">
<span class="md-nav__icon md-icon"></span>
Mapper
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../mapper/" class="md-nav__link">
<span class="md-ellipsis">
Overview
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../mapper/entities/" class="md-nav__link">
<span class="md-ellipsis">
Entities
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_7_3" >
<label class="md-nav__link" for="__nav_2_7_3" id="__nav_2_7_3_label" tabindex="0">
<span class="md-ellipsis">
DAOs
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_7_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2_7_3">
<span class="md-nav__icon md-icon"></span>
DAOs
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../mapper/daos/" class="md-nav__link">
<span class="md-ellipsis">
Overview
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../mapper/daos/custom_types/" class="md-nav__link">
<span class="md-ellipsis">
Custom Types
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../mapper/daos/delete/" class="md-nav__link">
<span class="md-ellipsis">
Delete
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../mapper/daos/getentity/" class="md-nav__link">
<span class="md-ellipsis">
Get Entity
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../mapper/daos/increment/" class="md-nav__link">
<span class="md-ellipsis">
Increment
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../mapper/daos/insert/" class="md-nav__link">
<span class="md-ellipsis">
Insert
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../mapper/daos/null_saving/" class="md-nav__link">
<span class="md-ellipsis">
Null Saving
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../mapper/daos/query/" class="md-nav__link">
<span class="md-ellipsis">
Query
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../mapper/daos/queryprovider/" class="md-nav__link">
<span class="md-ellipsis">
Query Provider
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../mapper/daos/select/" class="md-nav__link">
<span class="md-ellipsis">
Select
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../mapper/daos/setentity/" class="md-nav__link">
<span class="md-ellipsis">
Set Entity
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../mapper/daos/statement_attributes/" class="md-nav__link">
<span class="md-ellipsis">
Statement Attributes
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../mapper/daos/update/" class="md-nav__link">
<span class="md-ellipsis">
Update
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../mapper/mapper/" class="md-nav__link">
<span class="md-ellipsis">
Mapper
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_7_5" >
<label class="md-nav__link" for="__nav_2_7_5" id="__nav_2_7_5_label" tabindex="0">
<span class="md-ellipsis">
Configuration
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_7_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2_7_5">
<span class="md-nav__icon md-icon"></span>
Configuration
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../mapper/config/" class="md-nav__link">
<span class="md-ellipsis">
Overview
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../mapper/config/kotlin/" class="md-nav__link">
<span class="md-ellipsis">
Kotlin
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../mapper/config/lombok/" class="md-nav__link">
<span class="md-ellipsis">
Lombok
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../mapper/config/record/" class="md-nav__link">
<span class="md-ellipsis">
Record
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../mapper/config/scala/" class="md-nav__link">
<span class="md-ellipsis">
Scala
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_8" >
<label class="md-nav__link" for="__nav_2_8" id="__nav_2_8_label" tabindex="">
<span class="md-ellipsis">
Developer
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_2_8_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2_8">
<span class="md-nav__icon md-icon"></span>
Developer
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../developer/" class="md-nav__link">
<span class="md-ellipsis">
Overview
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_8_2" >
<label class="md-nav__link" for="__nav_2_8_2" id="__nav_2_8_2_label" tabindex="0">
<span class="md-ellipsis">
Common
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_8_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2_8_2">
<span class="md-nav__icon md-icon"></span>
Common
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../developer/common/" class="md-nav__link">
<span class="md-ellipsis">
Overview
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../developer/common/concurrency/" class="md-nav__link">
<span class="md-ellipsis">
Concurrency
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../developer/common/context/" class="md-nav__link">
<span class="md-ellipsis">
Context
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../developer/common/event_bus/" class="md-nav__link">
<span class="md-ellipsis">
Event Bus
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../developer/native_protocol/" class="md-nav__link">
<span class="md-ellipsis">
Native Protocol
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../developer/netty_pipeline/" class="md-nav__link">
<span class="md-ellipsis">
Netty Pipeline
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../developer/request_execution/" class="md-nav__link">
<span class="md-ellipsis">
Request Execution
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../developer/admin/" class="md-nav__link">
<span class="md-ellipsis">
Admin
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../osgi/" class="md-nav__link">
<span class="md-ellipsis">
OSGi
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../api/" class="md-nav__link">
<span class="md-ellipsis">
API References
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../faq-README/" class="md-nav__link">
<span class="md-ellipsis">
FAQ
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../changelog-README/" class="md-nav__link">
<span class="md-ellipsis">
Changelog
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../upgrade-README/" class="md-nav__link">
<span class="md-ellipsis">
Upgrade Guide
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#query-timestamps" class="md-nav__link">
<span class="md-ellipsis">
Query timestamps
</span>
</a>
<nav class="md-nav" aria-label="Query timestamps">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#quick-overview" class="md-nav__link">
<span class="md-ellipsis">
Quick overview
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#cql-using-timestamp" class="md-nav__link">
<span class="md-ellipsis">
CQL USING TIMESTAMP
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#timestamp-generator" class="md-nav__link">
<span class="md-ellipsis">
Timestamp generator
</span>
</a>
<nav class="md-nav" aria-label="Timestamp generator">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#atomictimestampgenerator" class="md-nav__link">
<span class="md-ellipsis">
AtomicTimestampGenerator
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#threadlocaltimestampgenerator" class="md-nav__link">
<span class="md-ellipsis">
ThreadLocalTimestampGenerator
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#serversidetimestampgenerator" class="md-nav__link">
<span class="md-ellipsis">
ServerSideTimestampGenerator
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#custom" class="md-nav__link">
<span class="md-ellipsis">
Custom
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#using-multiple-generators" class="md-nav__link">
<span class="md-ellipsis">
Using multiple generators
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#per-statement-timestamp" class="md-nav__link">
<span class="md-ellipsis">
Per-statement timestamp
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#timestamps-and-lightweight-transactions" class="md-nav__link">
<span class="md-ellipsis">
Timestamps and lightweight transactions
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#summary" class="md-nav__link">
<span class="md-ellipsis">
Summary
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1>Query Timestamps</h1>
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->
<h2 id="query-timestamps">Query timestamps<a class="headerlink" href="#query-timestamps" title="Permanent link">&para;</a></h2>
<h3 id="quick-overview">Quick overview<a class="headerlink" href="#quick-overview" title="Permanent link">&para;</a></h3>
<p>Defines the order in which mutations are applied on the server. Ways to set it (by order of
precedence, higher priority first):</p>
<ul>
<li><code>USING TIMESTAMP</code> in the query string.</li>
<li>programmatically with <a href="https://docs.datastax.com/en/drivers/java/4.17/com/datastax/oss/driver/api/core/cql/Statement.html#setQueryTimestamp-long-">Statement.setQueryTimestamp()</a>.</li>
<li>timestamp generator: <code>advanced.timestamp-generator</code> in the configuration. Defaults to session-wide
monotonic, also available: per-thread monotonic, server-side, or write your own.</li>
<li>if the generator didn't set it, assigned server-side.</li>
</ul>
<hr />
<p>In Cassandra, each mutation has a microsecond-precision timestamp, which is used to order operations
relative to each other.</p>
<p>There are various ways to assign it:</p>
<h3 id="cql-using-timestamp">CQL <code>USING TIMESTAMP</code><a class="headerlink" href="#cql-using-timestamp" title="Permanent link">&para;</a></h3>
<p>You can explicitly provide the timestamp in your CQL query:</p>
<div class="highlight"><pre><span></span><code><span class="n">session</span><span class="p">.</span><span class="na">execute</span><span class="p">(</span><span class="s">&quot;INSERT INTO my_table(c1, c2) values (1, 1) &quot;</span><span class="w"> </span><span class="o">+</span>
<span class="w"> </span><span class="s">&quot;USING TIMESTAMP 1432815430948040&quot;</span><span class="p">);</span>
</code></pre></div>
<h3 id="timestamp-generator">Timestamp generator<a class="headerlink" href="#timestamp-generator" title="Permanent link">&para;</a></h3>
<p>The driver has a timestamp generator that gets invoked for every outgoing request; it either assigns
a client-side timestamp to the request, or indicates that the server should assign it. </p>
<p>The timestamp generator is defined in the <a href="../configuration/">configuration</a>.</p>
<h4 id="atomictimestampgenerator">AtomicTimestampGenerator<a class="headerlink" href="#atomictimestampgenerator" title="Permanent link">&para;</a></h4>
<div class="highlight"><pre><span></span><code>datastax-java-driver.advanced.timestamp-generator {
class = AtomicTimestampGenerator
}
</code></pre></div>
<p>This is the default implementation. It always generates a client timestamp, and guarantees
monotonicity (i.e. ever-increasing timestamps) across all application threads.</p>
<p>Note that, in order to achieve monotonicity, the generator might return timestamps that drift out in
the future. This happens if timestamps are generated at a rate of more than one per microsecond, or
more likely in the event of a system clock skew. When this happens, the generator logs a warning
message in the category <code>com.datastax.oss.driver.internal.core.time.MonotonicTimestampGenerator</code>:</p>
<div class="highlight"><pre><span></span><code>Clock skew detected: current tick (...) was ... microseconds behind the last generated timestamp (...),
returned timestamps will be artificially incremented to guarantee monotonicity.
</code></pre></div>
<p>You can control that message with these options:</p>
<div class="highlight"><pre><span></span><code>datastax-java-driver.advanced.timestamp-generator {
drift-warning {
# How far in the future timestamps are allowed to drift before the warning is logged.
# If it is undefined or set to 0, warnings are disabled.
threshold = 1 second
# How often the warning will be logged if timestamps keep drifting above the threshold.
interval = 10 seconds
}
}
</code></pre></div>
<p>This generator strives to achieve microsecond resolution on a best-effort basis. But in practice,
the real accuracy of generated timestamps is largely dependent on the granularity of the operating
system's clock. For most systems, this minimum granularity is millisecond, and the sub-millisecond
part is simply a counter that gets incremented until the next clock tick, as provided by
<code>System.currentTimeMillis()</code>.</p>
<p>On some systems, however, it is possible to have a better granularity by using a <a href="https://github.com/jnr/jnr-posix">JNR</a> call to
<a href="http://man7.org/linux/man-pages/man2/settimeofday.2.html">gettimeofday</a>. This native call will be used when available, unless use of the Java clock is forced
with this configuration option: </p>
<div class="highlight"><pre><span></span><code>datastax-java-driver.advanced.timestamp-generator {
force-java-clock = true
}
</code></pre></div>
<p>To check what the driver is currently using, turn on <code>INFO</code> logs for the category
<code>com.datastax.oss.driver.internal.core.time</code>, and look for one of the following messages at
initialization:</p>
<ul>
<li><code>Using Java system clock because this was explicitly required in the configuration</code></li>
<li><code>Could not access native clock (see debug logs for details), falling back to Java system clock</code></li>
<li><code>Using native clock for microsecond precision</code></li>
</ul>
<h4 id="threadlocaltimestampgenerator">ThreadLocalTimestampGenerator<a class="headerlink" href="#threadlocaltimestampgenerator" title="Permanent link">&para;</a></h4>
<div class="highlight"><pre><span></span><code>datastax-java-driver.advanced.timestamp-generator {
class = ThreadLocalTimestampGenerator
}
</code></pre></div>
<p>This is similar to the atomic generator, except that it only guarantees monotonicity within each
thread. In other words, if a given application thread invokes <code>session.execute()</code> multiple times,
the timestamps will be strictly increasing; but across two or more application threads, there might
be duplicates.</p>
<p>This is a bit more efficient, but should only be used when threads are not in direct competition for
timestamp ties (i.e., they are executing independent statements).</p>
<p>It uses the same configuration options <code>drift-warning</code> and<code>force-java-clock</code>; see the previous
section for details. </p>
<h4 id="serversidetimestampgenerator">ServerSideTimestampGenerator<a class="headerlink" href="#serversidetimestampgenerator" title="Permanent link">&para;</a></h4>
<div class="highlight"><pre><span></span><code>datastax-java-driver.advanced.timestamp-generator {
class = ServerSideTimestampGenerator
}
</code></pre></div>
<p>This implementation always lets the server assign a timestamp.</p>
<h4 id="custom">Custom<a class="headerlink" href="#custom" title="Permanent link">&para;</a></h4>
<p>You can create your own generator by implementing <a href="https://docs.datastax.com/en/drivers/java/4.17/com/datastax/oss/driver/api/core/time/TimestampGenerator.html">TimestampGenerator</a>, and referencing your
implementation class from the configuration.</p>
<h4 id="using-multiple-generators">Using multiple generators<a class="headerlink" href="#using-multiple-generators" title="Permanent link">&para;</a></h4>
<p>The timestamp generator can be overridden in <a href="../configuration/#profiles">execution profiles</a>:</p>
<div class="highlight"><pre><span></span><code>datastax-java-driver {
advanced.timestamp-generator.class = AtomicTimestampGenerator
profiles {
profile1 {
advanced.timestamp-generator.class = ServerSideTimestampGenerator
}
profile2 {}
}
}
</code></pre></div>
<p>The <code>profile1</code> profile uses its own generator. The <code>profile2</code> profile inherits the default
profile's. Note that this goes beyond configuration inheritance: the driver only creates a single
<code>AtomicTimestampGenerator</code> instance and reuses it (this also occurs if two sibling profiles have the
same configuration).</p>
<p>Each request uses its declared profile's generator. If it doesn't declare any profile, or if the
profile doesn't have a dedicated policy, then the default profile's generator is used.</p>
<h3 id="per-statement-timestamp">Per-statement timestamp<a class="headerlink" href="#per-statement-timestamp" title="Permanent link">&para;</a></h3>
<p>Finally, you can assign a timestamp to a statement directly from application code:</p>
<div class="highlight"><pre><span></span><code><span class="n">Statement</span><span class="w"> </span><span class="n">statement</span><span class="w"> </span><span class="o">=</span>
<span class="w"> </span><span class="n">SimpleStatement</span><span class="p">.</span><span class="na">builder</span><span class="p">(</span><span class="s">&quot;UPDATE users SET email = &#39;x@y.com&#39; where id = 1&quot;</span><span class="p">)</span>
<span class="w"> </span><span class="p">.</span><span class="na">setQueryTimestamp</span><span class="p">(</span><span class="mi">1432815430948040L</span><span class="p">)</span>
<span class="w"> </span><span class="p">.</span><span class="na">build</span><span class="p">();</span>
<span class="n">session</span><span class="p">.</span><span class="na">execute</span><span class="p">(</span><span class="n">statement</span><span class="p">);</span>
</code></pre></div>
<h3 id="timestamps-and-lightweight-transactions">Timestamps and lightweight transactions<a class="headerlink" href="#timestamps-and-lightweight-transactions" title="Permanent link">&para;</a></h3>
<p>Client-side timestamps are prohibited for <a href="https://docs.datastax.com/en/dse/6.0/cql/cql/cql_using/useInsertLWT.html">lightweight transactions</a> (used for conditional updates
such as <code>INSERT... IF NOT EXISTS</code>, <code>UPDATE... IF...</code>, etc.).</p>
<p>If you add a <code>USING TIMESTAMP</code> clause to such a query, the server will return an error:</p>
<div class="highlight"><pre><span></span><code>cqlsh&gt; UPDATE foo USING TIMESTAMP 1234 SET v=1 WHERE k=0 IF v=2;
InvalidRequest: Error from server: code=2200 [Invalid query] message=&quot;Cannot provide custom timestamp for conditional updates&quot;
</code></pre></div>
<p>If you execute a conditional update through the driver with a client-side timestamp generator, the
client-side timestamp will be silently ignored and the server will provide its own.</p>
<h3 id="summary">Summary<a class="headerlink" href="#summary" title="Permanent link">&para;</a></h3>
<p>Here is the order of precedence of all the methods described so far:</p>
<ol>
<li>if there is a <code>USING TIMESTAMP</code> clause in the CQL string, use that over anything else;</li>
<li>otherwise, if a default timestamp was set directly on the statement, use it;</li>
<li>otherwise, if the timestamp generator assigned a timestamp, use it;</li>
<li>otherwise, let the server assign the timestamp.</li>
</ol>
</article>
</div>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
<button type="button" class="md-top md-icon" data-md-component="top" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg>
Back to top
</button>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "../..", "features": ["navigation.tabs", "navigation.sections", "navigation.top", "search.highlight", "search.share"], "search": "../../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
<script src="../../assets/javascripts/bundle.92b07e13.min.js"></script>
</body>
</html>