Cassandra Non-Default Durability Test

29 Nov 2015

Let's test Cassandra running on one node with durability settings where Cassandra only acknowledges writes after they've actually been fsynced to the commit log.

In a root terminal, use the set-write-through.sh script (detailed above) to guarantee our hard drive writes when it says it writes, rather than caching to the drive's RAM:

# ./set-write-through.sh

In user terminal 1, edit cassandra.yaml so that commits actually sync to disk before acknowledging the write to the client.

$ cd ${HOME}/apache-cassandra-3.0.0/conf
$ vim cassandra.yaml
commitlog_sync: periodic  ==>  #commitlog_sync: periodic
commitlog_sync_period_in_ms: 10000  ==>  #commitlog_sync_period_in_ms: 10000

#commitlog_sync: batch  ==>  commitlog_sync: batch
#commitlog_sync_batch_window_in_ms: 2  ==>  commitlog_sync_batch_window_in_ms: 2

Also remove any data left around by previous durability tests:

$ rm -rf cd ${HOME}/apache-cassandra-3.0.0/data/*
$ cd ${HOME}/apache-cassandra-3.0.0/bin
$ ./cassandra -f

In user terminal 2:

$ cd ${HOME}/apache-cassandra-3.0.0/bin
$ ./cqlsh -e "create keyspace foo with replication = {'class':'SimpleStrategy', 'replication_factor':1};"

$ ./cqlsh -k foo -e "drop table t;"
$ ./cqlsh -k foo -e "create table t (i int primary key);"

In user terminal 3:

$ cd go/src/github.com/manniwood/cass-play/insert-ints/
$ ./insert-ints
...
inserted 1047
inserted 1048
inserted 1049
inserted 1050
Did not insert 1051

In user terminal 4:

$ ./kill-cass.sh 

In terminal 1:

$ ./cassandra -f

In terminal 2:

$ ./cqlsh -k foo -e "select count(*) from t;"

 count
-------
  1050

(1 rows)

$ ./cqlsh -k foo -e "select max(i) from t;"

 system.max(i)
---------------
          1050

(1 rows)

Looks like those durability settings work as advertised!