Consistency Level

PHP Driver supports consistency levels when executing statements.

Background

Given
a running Cassandra cluster with 3 nodes
And
the following schema:
CREATE KEYSPACE simplex WITH replication = {
  'class': 'SimpleStrategy',
  'replication_factor': 3
};
USE simplex;
CREATE TABLE playlists (
  id uuid,
  title text,
  album text,
  artist text,
  song_id uuid,
  PRIMARY KEY (id, title, album, artist)
);

Consistency levels are specified via an ExecutionOptions object

Given
tracing is enabled
And
the following example:
$cluster     = Dse::cluster()->build();
$session     = $cluster->connect("simplex");

$insertQuery = "INSERT INTO playlists (id, song_id, artist, title, album) " .
               "VALUES (62c36092-82a1-3a00-93d1-46196ee77204, " .
                   new Dse\Uuid('756716f7-2e54-4715-9f00-91dcbea6cf50') . ", " .
                   "'Joséphine Baker', " .
                   "'La Petite Tonkinoise', " .
                   "'Bye Bye Blackbird')";
$statement   = new Dse\SimpleStatement($insertQuery);

// ExecutionOptions is deprecated, but still legal. Disable error reporting for it.
error_reporting(E_ALL ^ E_DEPRECATED);

$options = new Dse\ExecutionOptions(array('consistency' => Dse::CONSISTENCY_ALL));
$session->execute($statement, $options);

// Restore error-reporting to normal.
error_reporting(E_ALL);

// Below uses the system_traces.events table to verify consistency ALL is met
$statement = new Dse\SimpleStatement("SELECT source from system_traces.events");
$result    = $session->execute($statement, $options);
$sources   = array();
foreach ($result as $row) {
    array_push($sources, (string) $row['source']);
}
$sources = array_unique($sources);

foreach ($sources as $source) {
    echo str_replace($_SERVER["IP_PREFIX"], "", $source) . PHP_EOL;
}
When
it is executed
Then
its output should contain disregarding order:
1
2
3

Consistency levels are specified via an array of execution options

Given
tracing is enabled
And
the following example:
$cluster     = Dse::cluster()->build();
$session     = $cluster->connect("simplex");

$insertQuery = "INSERT INTO playlists (id, song_id, artist, title, album) " .
               "VALUES (62c36092-82a1-3a00-93d1-46196ee77204, " .
                   new Dse\Uuid('756716f7-2e54-4715-9f00-91dcbea6cf50') . ", " .
                   "'Joséphine Baker', " .
                   "'La Petite Tonkinoise', " .
                   "'Bye Bye Blackbird')";
$statement   = new Dse\SimpleStatement($insertQuery);
$options     = array('consistency' => Dse::CONSISTENCY_ALL);
$session->execute($statement, $options);

// Below uses the system_traces.events table to verify consistency ALL is met
$statement = new Dse\SimpleStatement("SELECT source from system_traces.events");
$result    = $session->execute($statement, $options);
$sources   = array();
foreach ($result as $row) {
    array_push($sources, (string) $row['source']);
}
$sources = array_unique($sources);

foreach ($sources as $source) {
    echo str_replace($_SERVER["IP_PREFIX"], "", $source) . PHP_EOL;
}
When
it is executed
Then
its output should contain disregarding order:
1
2
3