# Client-side timestamps

**Note**: Cassandra 2.1+ is required.

Cassandra uses timestamps to serialize write operations. That is, values with a
more current timestamp are considered to be the most up-to-date version of that
information. By default, timestamps are assigned by the driver on the
client-side. This behavior can be overridden by configuring the driver to use a
timestamp generator or assigning a timestamp directly to a [`CassStatement`] or
[`CassBatch`].

## Monotonically Increasing Timestamp Generator

The monotonic timestamp generator guarantees that all writes that share this
generator will be given monotonically increasing timestamps. This generator
produces microsecond timestamps with the sub-millisecond part generated using an
atomic counter. That guarantees that no more than 1000 timestamps will be
generated for a given millisecond clock tick even when shared by multiple
sessions.

**Warning**: If the rate of 1000 timestamps per millisecond is exceeded this
generator will produce duplicate timestamps.

```c
CassCluster* cluster = cass_cluster_new();

CassTimestampGen* timestamp_gen = cass_timestamp_gen_monotonic_new();

cass_cluster_set_timestamp_gen(cluster, timestamp_gen);

/* ... */

/* Connect sessions */

/* Timestamp generators must be freed */
cass_timestamp_gen_free(timestamp_gen);

cass_cluster_free(cluster);
```

All sessions that connect using this cluster object will share this same
timestamp generator.


## Per Statement/Batch timestamps

Timestamps can also be assigned to individuals [`CassStatement`] or
[`CassBatch`] requests.

```c
CassStatement* statement = cass_statement_new("INSERT INTO * ...", 2);

/* Add a timestamp to the statement */
cass_statement_set_timestamp(statement, 123456789);
```

```c
CassBatch* batch = cass_batch_new(CASS_BATCH_TYPE_LOGGED);

/* Add a timestamp to the batch */
cass_batch_set_timestamp(batch, 123456789);

/* Add statments to batch */
```

[`CassStatement`]: http://datastax.github.io/cpp-driver/api/struct.CassStatement/
[`CassBatch`]: http://datastax.github.io/cpp-driver/api/struct.CassBatch/