From d7ba9229225c44c9b8fad509e063258d6f668a4a Mon Sep 17 00:00:00 2001
From: Sean Busbey <sean.busbey@gmail.com>
Date: Tue, 19 Jul 2016 09:31:48 -0500
Subject: [PATCH] [cassandra] remove deprecated cassandra client.

---
 bin/bindings.properties                       |   4 -
 bin/ycsb                                      |  10 -
 bin/ycsb.bat                                  |   5 -
 bin/ycsb.sh                                   |   7 -
 cassandra/README.md                           |  72 ---
 cassandra/pom.xml                             |  51 --
 .../com/yahoo/ycsb/db/CassandraCQLClient.java | 435 -------------
 .../com/yahoo/ycsb/db/CassandraClient10.java  | 591 ------------------
 .../com/yahoo/ycsb/db/CassandraClient7.java   | 549 ----------------
 .../com/yahoo/ycsb/db/CassandraClient8.java   | 528 ----------------
 .../java/com/yahoo/ycsb/db/package-info.java  |  23 -
 distribution/pom.xml                          |   2 +-
 pom.xml                                       |   3 -
 13 files changed, 1 insertion(+), 2279 deletions(-)
 delete mode 100644 cassandra/README.md
 delete mode 100644 cassandra/pom.xml
 delete mode 100755 cassandra/src/main/java/com/yahoo/ycsb/db/CassandraCQLClient.java
 delete mode 100644 cassandra/src/main/java/com/yahoo/ycsb/db/CassandraClient10.java
 delete mode 100644 cassandra/src/main/java/com/yahoo/ycsb/db/CassandraClient7.java
 delete mode 100644 cassandra/src/main/java/com/yahoo/ycsb/db/CassandraClient8.java
 delete mode 100644 cassandra/src/main/java/com/yahoo/ycsb/db/package-info.java

diff --git a/bin/bindings.properties b/bin/bindings.properties
index e7a7d592..f3a24b46 100644
--- a/bin/bindings.properties
+++ b/bin/bindings.properties
@@ -29,10 +29,6 @@ accumulo:com.yahoo.ycsb.db.accumulo.AccumuloClient
 aerospike:com.yahoo.ycsb.db.AerospikeClient
 asynchbase:com.yahoo.ycsb.db.AsyncHBaseClient
 basic:com.yahoo.ycsb.BasicDB
-cassandra-7:com.yahoo.ycsb.db.CassandraClient7
-cassandra-8:com.yahoo.ycsb.db.CassandraClient8
-cassandra-10:com.yahoo.ycsb.db.CassandraClient10
-cassandra-cql:com.yahoo.ycsb.db.CassandraCQLClient
 cassandra2-cql:com.yahoo.ycsb.db.CassandraCQLClient
 couchbase:com.yahoo.ycsb.db.CouchbaseClient
 couchbase2:com.yahoo.ycsb.db.couchbase2.Couchbase2Client
diff --git a/bin/ycsb b/bin/ycsb
index dad1fab2..1e051f1e 100755
--- a/bin/ycsb
+++ b/bin/ycsb
@@ -55,10 +55,6 @@ DATABASES = {
     "aerospike"    : "com.yahoo.ycsb.db.AerospikeClient",
     "asynchbase"   : "com.yahoo.ycsb.db.AsyncHBaseClient",
     "basic"        : "com.yahoo.ycsb.BasicDB",
-    "cassandra-7"  : "com.yahoo.ycsb.db.CassandraClient7",
-    "cassandra-8"  : "com.yahoo.ycsb.db.CassandraClient8",
-    "cassandra-10" : "com.yahoo.ycsb.db.CassandraClient10",
-    "cassandra-cql": "com.yahoo.ycsb.db.CassandraCQLClient",
     "cassandra2-cql": "com.yahoo.ycsb.db.CassandraCQLClient",
     "couchbase"    : "com.yahoo.ycsb.db.CouchbaseClient",
     "couchbase2"   : "com.yahoo.ycsb.db.couchbase2.Couchbase2Client",
@@ -243,12 +239,6 @@ def main():
     # Classpath set up
     binding = args.database.split("-")[0]
 
-    # Deprecation message for the entire cassandra-binding
-    if binding == "cassandra":
-        warn("The 'cassandra-7', 'cassandra-8', 'cassandra-10', and "
-             "cassandra-cql' clients are deprecated. If you are using "
-             "Cassandra 2.X try using the 'cassandra2-cql' client instead.")
-
     if binding == "couchbase":
         warn("The 'couchbase' client has been deprecated. If you are using "
              "Couchbase 4.0+ try using the 'couchbase2' client instead.")
diff --git a/bin/ycsb.bat b/bin/ycsb.bat
index bd609481..ce022f64 100644
--- a/bin/ycsb.bat
+++ b/bin/ycsb.bat
@@ -178,11 +178,6 @@ FOR %%F IN (%YCSB_HOME%\%BINDING_DIR%\target\dependency\*.jar) DO (
 
 :classpathComplete
 
-@REM Cassandra deprecation message
-IF NOT "%BINDING_DIR%" == "cassandra" GOTO notOldCassandra
-echo [WARN] The 'cassandra-7', 'cassandra-8', 'cassandra-10', and cassandra-cql' clients are deprecated. If you are using Cassandra 2.X try using the 'cassandra2-cql' client instead.
-:notOldCassandra
-
 @REM Couchbase deprecation message
 IF NOT "%BINDING_DIR%" == "couchbase" GOTO notOldCouchbase
 echo [WARN] The 'couchbase' client is deprecated. If you are using Couchbase 4.0+ try using the 'couchbase2' client instead.
diff --git a/bin/ycsb.sh b/bin/ycsb.sh
index cc882602..24e320c5 100755
--- a/bin/ycsb.sh
+++ b/bin/ycsb.sh
@@ -208,13 +208,6 @@ else
   done
 fi
 
-# Cassandra deprecation message
-if [ "$BINDING_DIR" = "cassandra" ] ; then
-  echo "[WARN] The 'cassandra-7', 'cassandra-8', 'cassandra-10', and \
-cassandra-cql' clients are deprecated. If you are using \
-Cassandra 2.X try using the 'cassandra2-cql' client instead."
-fi
-
 # Couchbase deprecation message
 if [ "${BINDING_DIR}" = "couchbase" ] ; then
   echo "[WARN] The 'couchbase' client is deprecated. If you are using \
diff --git a/cassandra/README.md b/cassandra/README.md
deleted file mode 100644
index bff09f4e..00000000
--- a/cassandra/README.md
+++ /dev/null
@@ -1,72 +0,0 @@
-<!--
-Copyright (c) 2015 YCSB contributors. All rights reserved.
-
-Licensed 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. See accompanying
-LICENSE file.
--->
-# THIS BINDING IS DEPRECATED
-----------------------------
-Date of removal from YCSB: **March 2016**
-
-Due to the low amount of use and support for older Cassandra lineages (0.X and 1.X), YCSB will not support clients for these versions either.
-
-For Cassandra 2.X use the ```cassandra2-cql``` client: https://github.com/brianfrankcooper/YCSB/tree/master/cassandra2.
-
-# Cassandra (0.7, 0.8, 1.x) drivers for YCSB
-
-**For Cassandra 2 CQL support, use the `cassandra2-cql` binding.  The Thrift drivers below are deprecated, and the CQL driver here does not support Cassandra 2.1+.**
-
-There are three drivers in the Cassandra binding:
-
-* `cassandra-7`: Cassandra 0.7 Thrift binding.
-* `cassandra-8`: Cassandra 0.8 Thrift binding.
-* `cassandra-10`: Cassandra 1.0+ Thrift binding.
-* `cassandra-cql`: Cassandra CQL binding, for Cassandra 1.x to 2.0. See `cassandra2/README.md` for details on parameters.
-
-# `cassandra-10`
-
-## Creating a table
-
-Using `cassandra-cli`:
-
-      create keyspace usertable with placement_strategy = 'org.apache.cassandra.locator.SimpleStrategy' and strategy_options = {replication_factor:1};
-
-      create column family data with column_type = 'Standard' and comparator = 'UTF8Type';
-
-**Note that `replication_factor` and consistency levels (below) will affect performance.**
-
-## Configuration Parameters
-
-- `hosts` (**required**)
-  - Cassandra nodes to connect to.
-  - No default.
-
-* `port`
-  - Thrift port for communicating with Cassandra cluster.
-  * Default is `9160`.
-
-- `cassandra.columnfamily`
-  - Column family name - must match the column family for the table created (see above).
-  - Default value is `data`
-
-- `cassandra.username`
-- `cassandra.password`
-  - Optional user name and password for authentication. See http://docs.datastax.com/en/cassandra/2.0/cassandra/security/security_config_native_authenticate_t.html for details.
-
-* `cassandra.readconsistencylevel`
-* `cassandra.scanconsistencylevel`
-* `cassandra.writeconsistencylevel`
-
-  - Default value is `ONE`
-  - Consistency level for reads and writes, respectively. See the [DataStax documentation](http://docs.datastax.com/en/cassandra/2.0/cassandra/dml/dml_config_consistency_c.html) for details.
-  - *Note that the default setting does not provide durability in the face of node failure. Changing this setting will affect observed performance.* See also `replication_factor`, above.
diff --git a/cassandra/pom.xml b/cassandra/pom.xml
deleted file mode 100644
index 04db85d5..00000000
--- a/cassandra/pom.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-Copyright (c) 2012 - 2016 YCSB contributors. All rights reserved.
-
-Licensed 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. See accompanying
-LICENSE file.
--->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-     <groupId>com.yahoo.ycsb</groupId>
-     <artifactId>binding-parent</artifactId>
-     <version>0.11.0-SNAPSHOT</version>
-     <relativePath>../binding-parent</relativePath>
-  </parent>
-  
-  <artifactId>cassandra-binding</artifactId>
-  <name>Cassandra DB Binding</name>
-  <packaging>jar</packaging>
-
-  <dependencies>
-     <dependency>
-       <groupId>org.apache.cassandra</groupId>
-       <artifactId>cassandra-all</artifactId>
-       <version>${cassandra.version}</version>
-     </dependency>
-     <!-- CQL driver -->
-     <dependency>
-       <groupId>com.datastax.cassandra</groupId>
-       <artifactId>cassandra-driver-core</artifactId>
-       <version>${cassandra.cql.version}</version>
-     </dependency>
-     <dependency>
-       <groupId>com.yahoo.ycsb</groupId>
-       <artifactId>core</artifactId>
-       <version>${project.version}</version>
-       <scope>provided</scope>
-     </dependency>
-  </dependencies>
-</project>
diff --git a/cassandra/src/main/java/com/yahoo/ycsb/db/CassandraCQLClient.java b/cassandra/src/main/java/com/yahoo/ycsb/db/CassandraCQLClient.java
deleted file mode 100755
index eeaca7ae..00000000
--- a/cassandra/src/main/java/com/yahoo/ycsb/db/CassandraCQLClient.java
+++ /dev/null
@@ -1,435 +0,0 @@
-/**
- * Copyright (c) 2013 Yahoo! Inc. All rights reserved.
- *
- * Licensed 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. See accompanying LICENSE file.
- *
- * Submitted by Chrisjan Matser on 10/11/2010.
- */
-package com.yahoo.ycsb.db;
-
-import com.datastax.driver.core.*;
-import com.datastax.driver.core.querybuilder.Insert;
-import com.datastax.driver.core.querybuilder.QueryBuilder;
-import com.datastax.driver.core.querybuilder.Select;
-import com.yahoo.ycsb.*;
-import java.nio.ByteBuffer;
-
-import java.util.Map;
-import java.util.Set;
-import java.util.HashMap;
-import java.util.Vector;
-import java.util.concurrent.atomic.AtomicInteger;
-
-/**
- * Tested with Cassandra 2.0, CQL client for YCSB framework
- *
- * See {@code cassandra2} for a version compatible with Cassandra 2.1+. See
- * {@code cassandra2/README.md} for details.
- *
- * @author cmatser
- */
-public class CassandraCQLClient extends DB {
-
-  private static Cluster cluster = null;
-  private static Session session = null;
-
-  private static ConsistencyLevel readConsistencyLevel = ConsistencyLevel.ONE;
-  private static ConsistencyLevel writeConsistencyLevel = ConsistencyLevel.ONE;
-
-  public static final String YCSB_KEY = "y_id";
-  public static final String KEYSPACE_PROPERTY = "cassandra.keyspace";
-  public static final String KEYSPACE_PROPERTY_DEFAULT = "ycsb";
-  public static final String USERNAME_PROPERTY = "cassandra.username";
-  public static final String PASSWORD_PROPERTY = "cassandra.password";
-
-  public static final String HOSTS_PROPERTY = "hosts";
-  public static final String PORT_PROPERTY = "port";
-
-  public static final String READ_CONSISTENCY_LEVEL_PROPERTY =
-      "cassandra.readconsistencylevel";
-  public static final String READ_CONSISTENCY_LEVEL_PROPERTY_DEFAULT = "ONE";
-  public static final String WRITE_CONSISTENCY_LEVEL_PROPERTY =
-      "cassandra.writeconsistencylevel";
-  public static final String WRITE_CONSISTENCY_LEVEL_PROPERTY_DEFAULT = "ONE";
-
-  /**
-   * Count the number of times initialized to teardown on the last
-   * {@link #cleanup()}.
-   */
-  private static final AtomicInteger INIT_COUNT = new AtomicInteger(0);
-
-  private static boolean debug = false;
-
-  /**
-   * Initialize any state for this DB. Called once per DB instance; there is one
-   * DB instance per client thread.
-   */
-  @Override
-  public void init() throws DBException {
-
-    // Keep track of number of calls to init (for later cleanup)
-    INIT_COUNT.incrementAndGet();
-
-    // Synchronized so that we only have a single
-    // cluster/session instance for all the threads.
-    synchronized (INIT_COUNT) {
-
-      // Check if the cluster has already been initialized
-      if (cluster != null) {
-        return;
-      }
-
-      try {
-
-        debug =
-            Boolean.parseBoolean(getProperties().getProperty("debug", "false"));
-
-        String host = getProperties().getProperty(HOSTS_PROPERTY);
-        if (host == null) {
-          throw new DBException(String.format(
-              "Required property \"%s\" missing for CassandraCQLClient",
-              HOSTS_PROPERTY));
-        }
-        String[] hosts = host.split(",");
-        String port = getProperties().getProperty("port", "9042");
-        if (port == null) {
-          throw new DBException(String.format(
-              "Required property \"%s\" missing for CassandraCQLClient",
-              PORT_PROPERTY));
-        }
-
-        String username = getProperties().getProperty(USERNAME_PROPERTY);
-        String password = getProperties().getProperty(PASSWORD_PROPERTY);
-
-        String keyspace = getProperties().getProperty(KEYSPACE_PROPERTY,
-            KEYSPACE_PROPERTY_DEFAULT);
-
-        readConsistencyLevel = ConsistencyLevel.valueOf(
-            getProperties().getProperty(READ_CONSISTENCY_LEVEL_PROPERTY,
-                READ_CONSISTENCY_LEVEL_PROPERTY_DEFAULT));
-        writeConsistencyLevel = ConsistencyLevel.valueOf(
-            getProperties().getProperty(WRITE_CONSISTENCY_LEVEL_PROPERTY,
-                WRITE_CONSISTENCY_LEVEL_PROPERTY_DEFAULT));
-
-        // public void connect(String node) {}
-        if ((username != null) && !username.isEmpty()) {
-          cluster = Cluster.builder().withCredentials(username, password)
-              .withPort(Integer.valueOf(port)).addContactPoints(hosts).build();
-        } else {
-          cluster = Cluster.builder().withPort(Integer.valueOf(port))
-              .addContactPoints(hosts).build();
-        }
-
-        // Update number of connections based on threads
-        int threadcount =
-            Integer.parseInt(getProperties().getProperty("threadcount", "1"));
-        cluster.getConfiguration().getPoolingOptions()
-            .setMaxConnectionsPerHost(HostDistance.LOCAL, threadcount);
-
-        // Set connection timeout 3min (default is 5s)
-        cluster.getConfiguration().getSocketOptions()
-            .setConnectTimeoutMillis(3 * 60 * 1000);
-        // Set read (execute) timeout 3min (default is 12s)
-        cluster.getConfiguration().getSocketOptions()
-            .setReadTimeoutMillis(3 * 60 * 1000);
-
-        Metadata metadata = cluster.getMetadata();
-        System.out.printf("Connected to cluster: %s\n",
-            metadata.getClusterName());
-
-        for (Host discoveredHost : metadata.getAllHosts()) {
-          System.out.printf("Datacenter: %s; Host: %s; Rack: %s\n",
-              discoveredHost.getDatacenter(), discoveredHost.getAddress(),
-              discoveredHost.getRack());
-        }
-
-        session = cluster.connect(keyspace);
-
-      } catch (Exception e) {
-        throw new DBException(e);
-      }
-    } // synchronized
-  }
-
-  /**
-   * Cleanup any state for this DB. Called once per DB instance; there is one DB
-   * instance per client thread.
-   */
-  @Override
-  public void cleanup() throws DBException {
-    if (INIT_COUNT.decrementAndGet() <= 0) {
-      cluster.shutdown();
-    }
-  }
-
-  /**
-   * Read a record from the database. Each field/value pair from the result will
-   * be stored in a HashMap.
-   *
-   * @param table
-   *          The name of the table
-   * @param key
-   *          The record key of the record to read.
-   * @param fields
-   *          The list of fields to read, or null for all of them
-   * @param result
-   *          A HashMap of field/value pairs for the result
-   * @return Zero on success, a non-zero error code on error
-   */
-  @Override
-  public Status read(String table, String key, Set<String> fields,
-      HashMap<String, ByteIterator> result) {
-
-    try {
-      Statement stmt;
-      Select.Builder selectBuilder;
-
-      if (fields == null) {
-        selectBuilder = QueryBuilder.select().all();
-      } else {
-        selectBuilder = QueryBuilder.select();
-        for (String col : fields) {
-          ((Select.Selection) selectBuilder).column(col);
-        }
-      }
-
-      stmt = selectBuilder.from(table).where(QueryBuilder.eq(YCSB_KEY, key))
-          .limit(1);
-      stmt.setConsistencyLevel(readConsistencyLevel);
-
-      if (debug) {
-        System.out.println(stmt.toString());
-      }
-
-      ResultSet rs = session.execute(stmt);
-
-      // Should be only 1 row
-      if (!rs.isExhausted()) {
-        Row row = rs.one();
-        ColumnDefinitions cd = row.getColumnDefinitions();
-
-        for (ColumnDefinitions.Definition def : cd) {
-          ByteBuffer val = row.getBytesUnsafe(def.getName());
-          if (val != null) {
-            result.put(def.getName(), new ByteArrayByteIterator(val.array()));
-          } else {
-            result.put(def.getName(), null);
-          }
-        }
-
-      }
-
-      return Status.OK;
-
-    } catch (Exception e) {
-      e.printStackTrace();
-      System.out.println("Error reading key: " + key);
-      return Status.ERROR;
-    }
-
-  }
-
-  /**
-   * Perform a range scan for a set of records in the database. Each field/value
-   * pair from the result will be stored in a HashMap.
-   * 
-   * Cassandra CQL uses "token" method for range scan which doesn't always yield
-   * intuitive results.
-   *
-   * @param table
-   *          The name of the table
-   * @param startkey
-   *          The record key of the first record to read.
-   * @param recordcount
-   *          The number of records to read
-   * @param fields
-   *          The list of fields to read, or null for all of them
-   * @param result
-   *          A Vector of HashMaps, where each HashMap is a set field/value
-   *          pairs for one record
-   * @return Zero on success, a non-zero error code on error
-   */
-  @Override
-  public Status scan(String table, String startkey, int recordcount,
-      Set<String> fields, Vector<HashMap<String, ByteIterator>> result) {
-
-    try {
-      Statement stmt;
-      Select.Builder selectBuilder;
-
-      if (fields == null) {
-        selectBuilder = QueryBuilder.select().all();
-      } else {
-        selectBuilder = QueryBuilder.select();
-        for (String col : fields) {
-          ((Select.Selection) selectBuilder).column(col);
-        }
-      }
-
-      stmt = selectBuilder.from(table);
-
-      // The statement builder is not setup right for tokens.
-      // So, we need to build it manually.
-      String initialStmt = stmt.toString();
-      StringBuilder scanStmt = new StringBuilder();
-      scanStmt.append(initialStmt.substring(0, initialStmt.length() - 1));
-      scanStmt.append(" WHERE ");
-      scanStmt.append(QueryBuilder.token(YCSB_KEY));
-      scanStmt.append(" >= ");
-      scanStmt.append("token('");
-      scanStmt.append(startkey);
-      scanStmt.append("')");
-      scanStmt.append(" LIMIT ");
-      scanStmt.append(recordcount);
-
-      stmt = new SimpleStatement(scanStmt.toString());
-      stmt.setConsistencyLevel(readConsistencyLevel);
-
-      if (debug) {
-        System.out.println(stmt.toString());
-      }
-
-      ResultSet rs = session.execute(stmt);
-
-      HashMap<String, ByteIterator> tuple;
-      while (!rs.isExhausted()) {
-        Row row = rs.one();
-        tuple = new HashMap<String, ByteIterator>();
-
-        ColumnDefinitions cd = row.getColumnDefinitions();
-
-        for (ColumnDefinitions.Definition def : cd) {
-          ByteBuffer val = row.getBytesUnsafe(def.getName());
-          if (val != null) {
-            tuple.put(def.getName(), new ByteArrayByteIterator(val.array()));
-          } else {
-            tuple.put(def.getName(), null);
-          }
-        }
-
-        result.add(tuple);
-      }
-
-      return Status.OK;
-
-    } catch (Exception e) {
-      e.printStackTrace();
-      System.out.println("Error scanning with startkey: " + startkey);
-      return Status.ERROR;
-    }
-
-  }
-
-  /**
-   * Update a record in the database. Any field/value pairs in the specified
-   * values HashMap will be written into the record with the specified record
-   * key, overwriting any existing values with the same field name.
-   *
-   * @param table
-   *          The name of the table
-   * @param key
-   *          The record key of the record to write.
-   * @param values
-   *          A HashMap of field/value pairs to update in the record
-   * @return Zero on success, a non-zero error code on error
-   */
-  @Override
-  public Status update(String table, String key,
-      HashMap<String, ByteIterator> values) {
-    // Insert and updates provide the same functionality
-    return insert(table, key, values);
-  }
-
-  /**
-   * Insert a record in the database. Any field/value pairs in the specified
-   * values HashMap will be written into the record with the specified record
-   * key.
-   *
-   * @param table
-   *          The name of the table
-   * @param key
-   *          The record key of the record to insert.
-   * @param values
-   *          A HashMap of field/value pairs to insert in the record
-   * @return Zero on success, a non-zero error code on error
-   */
-  @Override
-  public Status insert(String table, String key,
-      HashMap<String, ByteIterator> values) {
-
-    try {
-      Insert insertStmt = QueryBuilder.insertInto(table);
-
-      // Add key
-      insertStmt.value(YCSB_KEY, key);
-
-      // Add fields
-      for (Map.Entry<String, ByteIterator> entry : values.entrySet()) {
-        Object value;
-        ByteIterator byteIterator = entry.getValue();
-        value = byteIterator.toString();
-
-        insertStmt.value(entry.getKey(), value);
-      }
-
-      insertStmt.setConsistencyLevel(writeConsistencyLevel);
-
-      if (debug) {
-        System.out.println(insertStmt.toString());
-      }
-
-      session.execute(insertStmt);
-
-      return Status.OK;
-    } catch (Exception e) {
-      e.printStackTrace();
-    }
-
-    return Status.ERROR;
-  }
-
-  /**
-   * Delete a record from the database.
-   *
-   * @param table
-   *          The name of the table
-   * @param key
-   *          The record key of the record to delete.
-   * @return Zero on success, a non-zero error code on error
-   */
-  @Override
-  public Status delete(String table, String key) {
-
-    try {
-      Statement stmt;
-
-      stmt = QueryBuilder.delete().from(table)
-          .where(QueryBuilder.eq(YCSB_KEY, key));
-      stmt.setConsistencyLevel(writeConsistencyLevel);
-
-      if (debug) {
-        System.out.println(stmt.toString());
-      }
-
-      session.execute(stmt);
-
-      return Status.OK;
-    } catch (Exception e) {
-      e.printStackTrace();
-      System.out.println("Error deleting key: " + key);
-    }
-
-    return Status.ERROR;
-  }
-
-}
diff --git a/cassandra/src/main/java/com/yahoo/ycsb/db/CassandraClient10.java b/cassandra/src/main/java/com/yahoo/ycsb/db/CassandraClient10.java
deleted file mode 100644
index b3d8e4a7..00000000
--- a/cassandra/src/main/java/com/yahoo/ycsb/db/CassandraClient10.java
+++ /dev/null
@@ -1,591 +0,0 @@
-/**
- * Copyright (c) 2010 Yahoo! Inc. All rights reserved.
- *
- * Licensed 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. See accompanying
- * LICENSE file.
- */
-
-package com.yahoo.ycsb.db;
-
-import com.yahoo.ycsb.ByteArrayByteIterator;
-import com.yahoo.ycsb.ByteIterator;
-import com.yahoo.ycsb.DB;
-import com.yahoo.ycsb.DBException;
-import com.yahoo.ycsb.Status;
-import com.yahoo.ycsb.StringByteIterator;
-import com.yahoo.ycsb.Utils;
-
-import org.apache.cassandra.thrift.AuthenticationRequest;
-import org.apache.cassandra.thrift.Cassandra;
-import org.apache.cassandra.thrift.Column;
-import org.apache.cassandra.thrift.ColumnOrSuperColumn;
-import org.apache.cassandra.thrift.ColumnParent;
-import org.apache.cassandra.thrift.ColumnPath;
-import org.apache.cassandra.thrift.ConsistencyLevel;
-import org.apache.cassandra.thrift.KeyRange;
-import org.apache.cassandra.thrift.KeySlice;
-import org.apache.cassandra.thrift.Mutation;
-import org.apache.cassandra.thrift.SlicePredicate;
-import org.apache.cassandra.thrift.SliceRange;
-import org.apache.thrift.protocol.TBinaryProtocol;
-import org.apache.thrift.protocol.TProtocol;
-import org.apache.thrift.transport.TFramedTransport;
-import org.apache.thrift.transport.TSocket;
-import org.apache.thrift.transport.TTransport;
-
-import java.nio.ByteBuffer;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
-import java.util.Vector;
-
-//XXXX if we do replication, fix the consistency levels
-/**
- * Cassandra 1.0.6 client for YCSB framework.
- */
-public class CassandraClient10 extends DB {
-  public static final int OK = 0;
-  public static final int ERROR = -1;
-  public static final ByteBuffer EMPTY_BYTE_BUFFER =
-      ByteBuffer.wrap(new byte[0]);
-
-  public static final String CONNECTION_RETRY_PROPERTY =
-      "cassandra.connectionretries";
-  public static final String CONNECTION_RETRY_PROPERTY_DEFAULT = "300";
-
-  public static final String OPERATION_RETRY_PROPERTY =
-      "cassandra.operationretries";
-  public static final String OPERATION_RETRY_PROPERTY_DEFAULT = "300";
-
-  public static final String USERNAME_PROPERTY = "cassandra.username";
-  public static final String PASSWORD_PROPERTY = "cassandra.password";
-
-  public static final String COLUMN_FAMILY_PROPERTY = "cassandra.columnfamily";
-  public static final String COLUMN_FAMILY_PROPERTY_DEFAULT = "data";
-
-  public static final String READ_CONSISTENCY_LEVEL_PROPERTY =
-      "cassandra.readconsistencylevel";
-  public static final String READ_CONSISTENCY_LEVEL_PROPERTY_DEFAULT = "ONE";
-
-  public static final String WRITE_CONSISTENCY_LEVEL_PROPERTY =
-      "cassandra.writeconsistencylevel";
-  public static final String WRITE_CONSISTENCY_LEVEL_PROPERTY_DEFAULT = "ONE";
-
-  public static final String SCAN_CONSISTENCY_LEVEL_PROPERTY =
-      "cassandra.scanconsistencylevel";
-  public static final String SCAN_CONSISTENCY_LEVEL_PROPERTY_DEFAULT = "ONE";
-
-  public static final String DELETE_CONSISTENCY_LEVEL_PROPERTY =
-      "cassandra.deleteconsistencylevel";
-  public static final String DELETE_CONSISTENCY_LEVEL_PROPERTY_DEFAULT = "ONE";
-
-  private int connectionRetries;
-  private int operationRetries;
-  private String columnFamily;
-
-  private TTransport tr;
-  private Cassandra.Client client;
-
-  private boolean debug = false;
-
-  private String tableName = "";
-  private Exception errorexception = null;
-
-  private List<Mutation> mutations = new ArrayList<Mutation>();
-  private Map<String, List<Mutation>> mutationMap =
-      new HashMap<String, List<Mutation>>();
-  private Map<ByteBuffer, Map<String, List<Mutation>>> record =
-      new HashMap<ByteBuffer, Map<String, List<Mutation>>>();
-
-  private ColumnParent parent;
-
-  private ConsistencyLevel readConsistencyLevel = ConsistencyLevel.ONE;
-  private ConsistencyLevel writeConsistencyLevel = ConsistencyLevel.ONE;
-  private ConsistencyLevel scanConsistencyLevel = ConsistencyLevel.ONE;
-  private ConsistencyLevel deleteConsistencyLevel = ConsistencyLevel.ONE;
-
-  /**
-   * Initialize any state for this DB. Called once per DB instance; there is one
-   * DB instance per client thread.
-   */
-  public void init() throws DBException {
-    String hosts = getProperties().getProperty("hosts");
-    if (hosts == null) {
-      throw new DBException(
-          "Required property \"hosts\" missing for CassandraClient");
-    }
-
-    columnFamily = getProperties().getProperty(COLUMN_FAMILY_PROPERTY,
-        COLUMN_FAMILY_PROPERTY_DEFAULT);
-    parent = new ColumnParent(columnFamily);
-
-    connectionRetries =
-        Integer.parseInt(getProperties().getProperty(CONNECTION_RETRY_PROPERTY,
-            CONNECTION_RETRY_PROPERTY_DEFAULT));
-    operationRetries =
-        Integer.parseInt(getProperties().getProperty(OPERATION_RETRY_PROPERTY,
-            OPERATION_RETRY_PROPERTY_DEFAULT));
-
-    String username = getProperties().getProperty(USERNAME_PROPERTY);
-    String password = getProperties().getProperty(PASSWORD_PROPERTY);
-
-    readConsistencyLevel = ConsistencyLevel
-        .valueOf(getProperties().getProperty(READ_CONSISTENCY_LEVEL_PROPERTY,
-            READ_CONSISTENCY_LEVEL_PROPERTY_DEFAULT));
-    writeConsistencyLevel = ConsistencyLevel
-        .valueOf(getProperties().getProperty(WRITE_CONSISTENCY_LEVEL_PROPERTY,
-            WRITE_CONSISTENCY_LEVEL_PROPERTY_DEFAULT));
-    scanConsistencyLevel = ConsistencyLevel
-        .valueOf(getProperties().getProperty(SCAN_CONSISTENCY_LEVEL_PROPERTY,
-            SCAN_CONSISTENCY_LEVEL_PROPERTY_DEFAULT));
-    deleteConsistencyLevel = ConsistencyLevel
-        .valueOf(getProperties().getProperty(DELETE_CONSISTENCY_LEVEL_PROPERTY,
-            DELETE_CONSISTENCY_LEVEL_PROPERTY_DEFAULT));
-
-    debug = Boolean.parseBoolean(getProperties().getProperty("debug", "false"));
-
-    String[] allhosts = hosts.split(",");
-    String myhost = allhosts[Utils.random().nextInt(allhosts.length)];
-
-    Exception connectexception = null;
-
-    for (int retry = 0; retry < connectionRetries; retry++) {
-      tr = new TFramedTransport(new TSocket(myhost,
-          Integer.parseInt(getProperties().getProperty("port", "9160"))));
-      TProtocol proto = new TBinaryProtocol(tr);
-      client = new Cassandra.Client(proto);
-      try {
-        tr.open();
-        connectexception = null;
-        break;
-      } catch (Exception e) {
-        connectexception = e;
-      }
-      try {
-        Thread.sleep(1000);
-      } catch (InterruptedException e) {
-        Thread.currentThread().interrupt();
-      }
-    }
-    if (connectexception != null) {
-      System.err.println("Unable to connect to " + myhost + " after "
-          + connectionRetries + " tries");
-      throw new DBException(connectexception);
-    }
-
-    if (username != null && password != null) {
-      Map<String, String> cred = new HashMap<String, String>();
-      cred.put("username", username);
-      cred.put("password", password);
-      AuthenticationRequest req = new AuthenticationRequest(cred);
-      try {
-        client.login(req);
-      } catch (Exception e) {
-        throw new DBException(e);
-      }
-    }
-  }
-
-  /**
-   * Cleanup any state for this DB. Called once per DB instance; there is one DB
-   * instance per client thread.
-   */
-  public void cleanup() throws DBException {
-    tr.close();
-  }
-
-  /**
-   * Read a record from the database. Each field/value pair from the result will
-   * be stored in a HashMap.
-   *
-   * @param table
-   *          The name of the table
-   * @param key
-   *          The record key of the record to read.
-   * @param fields
-   *          The list of fields to read, or null for all of them
-   * @param result
-   *          A HashMap of field/value pairs for the result
-   * @return Zero on success, a non-zero error code on error
-   */
-  public Status read(String table, String key, Set<String> fields,
-      HashMap<String, ByteIterator> result) {
-    if (!tableName.equals(table)) {
-      try {
-        client.set_keyspace(table);
-        tableName = table;
-      } catch (Exception e) {
-        e.printStackTrace();
-        e.printStackTrace(System.out);
-        return Status.ERROR;
-      }
-    }
-
-    for (int i = 0; i < operationRetries; i++) {
-
-      try {
-        SlicePredicate predicate;
-        if (fields == null) {
-          predicate = new SlicePredicate().setSlice_range(new SliceRange(
-              EMPTY_BYTE_BUFFER, EMPTY_BYTE_BUFFER, false, 1000000));
-
-        } else {
-          ArrayList<ByteBuffer> fieldlist =
-              new ArrayList<ByteBuffer>(fields.size());
-          for (String s : fields) {
-            fieldlist.add(ByteBuffer.wrap(s.getBytes("UTF-8")));
-          }
-
-          predicate = new SlicePredicate().setColumn_names(fieldlist);
-        }
-
-        List<ColumnOrSuperColumn> results =
-            client.get_slice(ByteBuffer.wrap(key.getBytes("UTF-8")), parent,
-                predicate, readConsistencyLevel);
-
-        if (debug) {
-          System.out.print("Reading key: " + key);
-        }
-
-        Column column;
-        String name;
-        ByteIterator value;
-        for (ColumnOrSuperColumn oneresult : results) {
-
-          column = oneresult.column;
-          name = new String(column.name.array(),
-              column.name.position() + column.name.arrayOffset(),
-              column.name.remaining());
-          value = new ByteArrayByteIterator(column.value.array(),
-              column.value.position() + column.value.arrayOffset(),
-              column.value.remaining());
-
-          result.put(name, value);
-
-          if (debug) {
-            System.out.print("(" + name + "=" + value + ")");
-          }
-        }
-
-        if (debug) {
-          System.out.println();
-          System.out
-              .println("ConsistencyLevel=" + readConsistencyLevel.toString());
-        }
-
-        return Status.OK;
-      } catch (Exception e) {
-        errorexception = e;
-      }
-
-      try {
-        Thread.sleep(500);
-      } catch (InterruptedException e) {
-        Thread.currentThread().interrupt();
-      }
-    }
-    errorexception.printStackTrace();
-    errorexception.printStackTrace(System.out);
-    return Status.ERROR;
-
-  }
-
-  /**
-   * Perform a range scan for a set of records in the database. Each field/value
-   * pair from the result will be stored in a HashMap.
-   *
-   * @param table
-   *          The name of the table
-   * @param startkey
-   *          The record key of the first record to read.
-   * @param recordcount
-   *          The number of records to read
-   * @param fields
-   *          The list of fields to read, or null for all of them
-   * @param result
-   *          A Vector of HashMaps, where each HashMap is a set field/value
-   *          pairs for one record
-   * @return Zero on success, a non-zero error code on error
-   */
-  public Status scan(String table, String startkey, int recordcount,
-      Set<String> fields, Vector<HashMap<String, ByteIterator>> result) {
-    if (!tableName.equals(table)) {
-      try {
-        client.set_keyspace(table);
-        tableName = table;
-      } catch (Exception e) {
-        e.printStackTrace();
-        e.printStackTrace(System.out);
-        return Status.ERROR;
-      }
-    }
-
-    for (int i = 0; i < operationRetries; i++) {
-
-      try {
-        SlicePredicate predicate;
-        if (fields == null) {
-          predicate = new SlicePredicate().setSlice_range(new SliceRange(
-              EMPTY_BYTE_BUFFER, EMPTY_BYTE_BUFFER, false, 1000000));
-
-        } else {
-          ArrayList<ByteBuffer> fieldlist =
-              new ArrayList<ByteBuffer>(fields.size());
-          for (String s : fields) {
-            fieldlist.add(ByteBuffer.wrap(s.getBytes("UTF-8")));
-          }
-
-          predicate = new SlicePredicate().setColumn_names(fieldlist);
-        }
-
-        KeyRange kr = new KeyRange().setStart_key(startkey.getBytes("UTF-8"))
-            .setEnd_key(new byte[] {}).setCount(recordcount);
-
-        List<KeySlice> results = client.get_range_slices(parent, predicate, kr,
-            scanConsistencyLevel);
-
-        if (debug) {
-          System.out.println("Scanning startkey: " + startkey);
-        }
-
-        HashMap<String, ByteIterator> tuple;
-        for (KeySlice oneresult : results) {
-          tuple = new HashMap<String, ByteIterator>();
-
-          Column column;
-          String name;
-          ByteIterator value;
-          for (ColumnOrSuperColumn onecol : oneresult.columns) {
-            column = onecol.column;
-            name = new String(column.name.array(),
-                column.name.position() + column.name.arrayOffset(),
-                column.name.remaining());
-            value = new ByteArrayByteIterator(column.value.array(),
-                column.value.position() + column.value.arrayOffset(),
-                column.value.remaining());
-
-            tuple.put(name, value);
-
-            if (debug) {
-              System.out.print("(" + name + "=" + value + ")");
-            }
-          }
-
-          result.add(tuple);
-          if (debug) {
-            System.out.println();
-            System.out
-                .println("ConsistencyLevel=" + scanConsistencyLevel.toString());
-          }
-        }
-
-        return Status.OK;
-      } catch (Exception e) {
-        errorexception = e;
-      }
-      try {
-        Thread.sleep(500);
-      } catch (InterruptedException e) {
-        Thread.currentThread().interrupt();
-      }
-    }
-    errorexception.printStackTrace();
-    errorexception.printStackTrace(System.out);
-    return Status.ERROR;
-  }
-
-  /**
-   * Update a record in the database. Any field/value pairs in the specified
-   * values HashMap will be written into the record with the specified record
-   * key, overwriting any existing values with the same field name.
-   *
-   * @param table
-   *          The name of the table
-   * @param key
-   *          The record key of the record to write.
-   * @param values
-   *          A HashMap of field/value pairs to update in the record
-   * @return Zero on success, a non-zero error code on error
-   */
-  public Status update(String table, String key,
-      HashMap<String, ByteIterator> values) {
-    return insert(table, key, values);
-  }
-
-  /**
-   * Insert a record in the database. Any field/value pairs in the specified
-   * values HashMap will be written into the record with the specified record
-   * key.
-   *
-   * @param table
-   *          The name of the table
-   * @param key
-   *          The record key of the record to insert.
-   * @param values
-   *          A HashMap of field/value pairs to insert in the record
-   * @return Zero on success, a non-zero error code on error
-   */
-  public Status insert(String table, String key,
-      HashMap<String, ByteIterator> values) {
-    if (!tableName.equals(table)) {
-      try {
-        client.set_keyspace(table);
-        tableName = table;
-      } catch (Exception e) {
-        e.printStackTrace();
-        e.printStackTrace(System.out);
-        return Status.ERROR;
-      }
-    }
-
-    for (int i = 0; i < operationRetries; i++) {
-      mutations.clear();
-      mutationMap.clear();
-      record.clear();
-
-      if (debug) {
-        System.out.println("Inserting key: " + key);
-      }
-
-      try {
-        ByteBuffer wrappedKey = ByteBuffer.wrap(key.getBytes("UTF-8"));
-
-        Column col;
-        ColumnOrSuperColumn column;
-        for (Map.Entry<String, ByteIterator> entry : values.entrySet()) {
-          col = new Column();
-          col.setName(ByteBuffer.wrap(entry.getKey().getBytes("UTF-8")));
-          col.setValue(ByteBuffer.wrap(entry.getValue().toArray()));
-          col.setTimestamp(System.currentTimeMillis());
-
-          column = new ColumnOrSuperColumn();
-          column.setColumn(col);
-
-          mutations.add(new Mutation().setColumn_or_supercolumn(column));
-        }
-
-        mutationMap.put(columnFamily, mutations);
-        record.put(wrappedKey, mutationMap);
-
-        client.batch_mutate(record, writeConsistencyLevel);
-
-        if (debug) {
-          System.out
-              .println("ConsistencyLevel=" + writeConsistencyLevel.toString());
-        }
-
-        return Status.OK;
-      } catch (Exception e) {
-        errorexception = e;
-      }
-      try {
-        Thread.sleep(500);
-      } catch (InterruptedException e) {
-        Thread.currentThread().interrupt();
-      }
-    }
-
-    errorexception.printStackTrace();
-    errorexception.printStackTrace(System.out);
-    return Status.ERROR;
-  }
-
-  /**
-   * Delete a record from the database.
-   *
-   * @param table
-   *          The name of the table
-   * @param key
-   *          The record key of the record to delete.
-   * @return Zero on success, a non-zero error code on error
-   */
-  public Status delete(String table, String key) {
-    if (!tableName.equals(table)) {
-      try {
-        client.set_keyspace(table);
-        tableName = table;
-      } catch (Exception e) {
-        e.printStackTrace();
-        e.printStackTrace(System.out);
-        return Status.ERROR;
-      }
-    }
-
-    for (int i = 0; i < operationRetries; i++) {
-      try {
-        client.remove(ByteBuffer.wrap(key.getBytes("UTF-8")),
-            new ColumnPath(columnFamily), System.currentTimeMillis(),
-            deleteConsistencyLevel);
-
-        if (debug) {
-          System.out.println("Delete key: " + key);
-          System.out
-              .println("ConsistencyLevel=" + deleteConsistencyLevel.toString());
-        }
-
-        return Status.OK;
-      } catch (Exception e) {
-        errorexception = e;
-      }
-      try {
-        Thread.sleep(500);
-      } catch (InterruptedException e) {
-        Thread.currentThread().interrupt();
-      }
-    }
-    errorexception.printStackTrace();
-    errorexception.printStackTrace(System.out);
-    return Status.ERROR;
-  }
-
-  public static void main(String[] args) {
-    CassandraClient10 cli = new CassandraClient10();
-
-    Properties props = new Properties();
-
-    props.setProperty("hosts", args[0]);
-    cli.setProperties(props);
-
-    try {
-      cli.init();
-    } catch (Exception e) {
-      e.printStackTrace();
-      System.exit(0);
-    }
-
-    HashMap<String, ByteIterator> vals = new HashMap<String, ByteIterator>();
-    vals.put("age", new StringByteIterator("57"));
-    vals.put("middlename", new StringByteIterator("bradley"));
-    vals.put("favoritecolor", new StringByteIterator("blue"));
-    Status res = cli.insert("usertable", "BrianFrankCooper", vals);
-    System.out.println("Result of insert: " + res);
-
-    HashMap<String, ByteIterator> result = new HashMap<String, ByteIterator>();
-    HashSet<String> fields = new HashSet<String>();
-    fields.add("middlename");
-    fields.add("age");
-    fields.add("favoritecolor");
-    res = cli.read("usertable", "BrianFrankCooper", null, result);
-    System.out.println("Result of read: " + res);
-    for (Map.Entry<String, ByteIterator> entry : result.entrySet()) {
-      System.out.println("[" + entry.getKey() + "]=[" + entry.getValue() + "]");
-    }
-
-    res = cli.delete("usertable", "BrianFrankCooper");
-    System.out.println("Result of delete: " + res);
-  }
-}
diff --git a/cassandra/src/main/java/com/yahoo/ycsb/db/CassandraClient7.java b/cassandra/src/main/java/com/yahoo/ycsb/db/CassandraClient7.java
deleted file mode 100644
index f2075e7f..00000000
--- a/cassandra/src/main/java/com/yahoo/ycsb/db/CassandraClient7.java
+++ /dev/null
@@ -1,549 +0,0 @@
-/**
- * Copyright (c) 2010 Yahoo! Inc. All rights reserved.
- *
- * Licensed 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. See accompanying
- * LICENSE file.
- */
-
-package com.yahoo.ycsb.db;
-
-import com.yahoo.ycsb.ByteArrayByteIterator;
-import com.yahoo.ycsb.ByteIterator;
-import com.yahoo.ycsb.DB;
-import com.yahoo.ycsb.DBException;
-import com.yahoo.ycsb.Status;
-import com.yahoo.ycsb.StringByteIterator;
-import com.yahoo.ycsb.Utils;
-
-import org.apache.cassandra.thrift.AuthenticationRequest;
-import org.apache.cassandra.thrift.Cassandra;
-import org.apache.cassandra.thrift.Column;
-import org.apache.cassandra.thrift.ColumnOrSuperColumn;
-import org.apache.cassandra.thrift.ColumnParent;
-import org.apache.cassandra.thrift.ColumnPath;
-import org.apache.cassandra.thrift.ConsistencyLevel;
-import org.apache.cassandra.thrift.KeyRange;
-import org.apache.cassandra.thrift.KeySlice;
-import org.apache.cassandra.thrift.Mutation;
-import org.apache.cassandra.thrift.SlicePredicate;
-import org.apache.cassandra.thrift.SliceRange;
-import org.apache.thrift.protocol.TBinaryProtocol;
-import org.apache.thrift.protocol.TProtocol;
-import org.apache.thrift.transport.TFramedTransport;
-import org.apache.thrift.transport.TSocket;
-import org.apache.thrift.transport.TTransport;
-
-import java.nio.ByteBuffer;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
-import java.util.Vector;
-
-//XXXX if we do replication, fix the consistency levels
-/**
- * Cassandra 0.7 client for YCSB framework.
- */
-public class CassandraClient7 extends DB {
-  public static final ByteBuffer EMPTY_BYTE_BUFFER =
-      ByteBuffer.wrap(new byte[0]);
-
-  public static final String CONNECTION_RETRY_PROPERTY =
-      "cassandra.connectionretries";
-  public static final String CONNECTION_RETRY_PROPERTY_DEFAULT = "300";
-
-  public static final String OPERATION_RETRY_PROPERTY =
-      "cassandra.operationretries";
-  public static final String OPERATION_RETRY_PROPERTY_DEFAULT = "300";
-
-  public static final String USERNAME_PROPERTY = "cassandra.username";
-  public static final String PASSWORD_PROPERTY = "cassandra.password";
-
-  public static final String COLUMN_FAMILY_PROPERTY = "cassandra.columnfamily";
-  public static final String COLUMN_FAMILY_PROPERTY_DEFAULT = "data";
-
-  private int connectionRetries;
-  private int operationRetries;
-  private String columnFamily;
-
-  private TTransport tr;
-  private Cassandra.Client client;
-
-  private boolean debug = false;
-
-  private String tableName = "";
-  private Exception errorexception = null;
-
-  private List<Mutation> mutations = new ArrayList<Mutation>();
-  private Map<String, List<Mutation>> mutationMap =
-      new HashMap<String, List<Mutation>>();
-  private Map<ByteBuffer, Map<String, List<Mutation>>> record =
-      new HashMap<ByteBuffer, Map<String, List<Mutation>>>();
-
-  private ColumnParent parent;
-
-  /**
-   * Initialize any state for this DB. Called once per DB instance; there is one
-   * DB instance per client thread.
-   */
-  public void init() throws DBException {
-    String hosts = getProperties().getProperty("hosts");
-    if (hosts == null) {
-      throw new DBException(
-          "Required property \"hosts\" missing for CassandraClient");
-    }
-
-    columnFamily = getProperties().getProperty(COLUMN_FAMILY_PROPERTY,
-        COLUMN_FAMILY_PROPERTY_DEFAULT);
-    parent = new ColumnParent(columnFamily);
-
-    connectionRetries =
-        Integer.parseInt(getProperties().getProperty(CONNECTION_RETRY_PROPERTY,
-            CONNECTION_RETRY_PROPERTY_DEFAULT));
-    operationRetries =
-        Integer.parseInt(getProperties().getProperty(OPERATION_RETRY_PROPERTY,
-            OPERATION_RETRY_PROPERTY_DEFAULT));
-
-    String username = getProperties().getProperty(USERNAME_PROPERTY);
-    String password = getProperties().getProperty(PASSWORD_PROPERTY);
-
-    debug = Boolean.parseBoolean(getProperties().getProperty("debug", "false"));
-
-    String[] allhosts = hosts.split(",");
-    String myhost = allhosts[Utils.random().nextInt(allhosts.length)];
-
-    Exception connectexception = null;
-
-    for (int retry = 0; retry < connectionRetries; retry++) {
-      tr = new TFramedTransport(new TSocket(myhost, 9160));
-      TProtocol proto = new TBinaryProtocol(tr);
-      client = new Cassandra.Client(proto);
-      try {
-        tr.open();
-        connectexception = null;
-        break;
-      } catch (Exception e) {
-        connectexception = e;
-      }
-      try {
-        Thread.sleep(1000);
-      } catch (InterruptedException e) {
-        Thread.currentThread().interrupt();
-      }
-    }
-    if (connectexception != null) {
-      System.err.println("Unable to connect to " + myhost + " after "
-          + connectionRetries + " tries");
-      System.out.println("Unable to connect to " + myhost + " after "
-          + connectionRetries + " tries");
-      throw new DBException(connectexception);
-    }
-
-    if (username != null && password != null) {
-      Map<String, String> cred = new HashMap<String, String>();
-      cred.put("username", username);
-      cred.put("password", password);
-      AuthenticationRequest req = new AuthenticationRequest(cred);
-      try {
-        client.login(req);
-      } catch (Exception e) {
-        throw new DBException(e);
-      }
-    }
-  }
-
-  /**
-   * Cleanup any state for this DB. Called once per DB instance; there is one DB
-   * instance per client thread.
-   */
-  public void cleanup() throws DBException {
-    tr.close();
-  }
-
-  /**
-   * Read a record from the database. Each field/value pair from the result will
-   * be stored in a HashMap.
-   * 
-   * @param table
-   *          The name of the table
-   * @param key
-   *          The record key of the record to read.
-   * @param fields
-   *          The list of fields to read, or null for all of them
-   * @param result
-   *          A HashMap of field/value pairs for the result
-   * @return Zero on success, a non-zero error code on error
-   */
-  public Status read(String table, String key, Set<String> fields,
-      HashMap<String, ByteIterator> result) {
-    if (!tableName.equals(table)) {
-      try {
-        client.set_keyspace(table);
-        tableName = table;
-      } catch (Exception e) {
-        e.printStackTrace();
-        e.printStackTrace(System.out);
-        return Status.ERROR;
-      }
-    }
-
-    for (int i = 0; i < operationRetries; i++) {
-
-      try {
-        SlicePredicate predicate;
-        if (fields == null) {
-          SliceRange range = new SliceRange(EMPTY_BYTE_BUFFER,
-              EMPTY_BYTE_BUFFER, false, 1000000);
-
-          predicate = new SlicePredicate().setSlice_range(range);
-
-        } else {
-          ArrayList<ByteBuffer> fieldlist =
-              new ArrayList<ByteBuffer>(fields.size());
-          for (String s : fields) {
-            fieldlist.add(ByteBuffer.wrap(s.getBytes("UTF-8")));
-          }
-
-          predicate = new SlicePredicate().setColumn_names(fieldlist);
-        }
-
-        List<ColumnOrSuperColumn> results =
-            client.get_slice(ByteBuffer.wrap(key.getBytes("UTF-8")), parent,
-                predicate, ConsistencyLevel.ONE);
-
-        if (debug) {
-          System.out.print("Reading key: " + key);
-        }
-
-        Column column;
-        String name;
-        ByteIterator value;
-        for (ColumnOrSuperColumn oneresult : results) {
-
-          column = oneresult.column;
-          name = new String(column.name.array(),
-              column.name.position() + column.name.arrayOffset(),
-              column.name.remaining());
-          value = new ByteArrayByteIterator(column.value.array(),
-              column.value.position() + column.value.arrayOffset(),
-              column.value.remaining());
-
-          result.put(name, value);
-
-          if (debug) {
-            System.out.print("(" + name + "=" + value + ")");
-          }
-        }
-
-        if (debug) {
-          System.out.println();
-        }
-
-        return Status.OK;
-      } catch (Exception e) {
-        errorexception = e;
-      }
-
-      try {
-        Thread.sleep(500);
-      } catch (InterruptedException e) {
-        Thread.currentThread().interrupt();
-      }
-    }
-    errorexception.printStackTrace();
-    errorexception.printStackTrace(System.out);
-    return Status.ERROR;
-
-  }
-
-  /**
-   * Perform a range scan for a set of records in the database. Each field/value
-   * pair from the result will be stored in a HashMap.
-   * 
-   * @param table
-   *          The name of the table
-   * @param startkey
-   *          The record key of the first record to read.
-   * @param recordcount
-   *          The number of records to read
-   * @param fields
-   *          The list of fields to read, or null for all of them
-   * @param result
-   *          A Vector of HashMaps, where each HashMap is a set field/value
-   *          pairs for one record
-   * @return Zero on success, a non-zero error code on error
-   */
-  public Status scan(String table, String startkey, int recordcount,
-      Set<String> fields, Vector<HashMap<String, ByteIterator>> result) {
-    if (!tableName.equals(table)) {
-      try {
-        client.set_keyspace(table);
-        tableName = table;
-      } catch (Exception e) {
-        e.printStackTrace();
-        e.printStackTrace(System.out);
-        return Status.ERROR;
-      }
-    }
-
-    for (int i = 0; i < operationRetries; i++) {
-
-      try {
-        SlicePredicate predicate;
-        if (fields == null) {
-          SliceRange range = new SliceRange(EMPTY_BYTE_BUFFER,
-              EMPTY_BYTE_BUFFER, false, 1000000);
-
-          predicate = new SlicePredicate().setSlice_range(range);
-
-        } else {
-          ArrayList<ByteBuffer> fieldlist =
-              new ArrayList<ByteBuffer>(fields.size());
-          for (String s : fields) {
-            fieldlist.add(ByteBuffer.wrap(s.getBytes("UTF-8")));
-          }
-
-          predicate = new SlicePredicate().setColumn_names(fieldlist);
-        }
-
-        KeyRange kr = new KeyRange().setStart_key(startkey.getBytes("UTF-8"))
-            .setEnd_key(new byte[] {}).setCount(recordcount);
-
-        List<KeySlice> results = client.get_range_slices(parent, predicate, kr,
-            ConsistencyLevel.ONE);
-
-        if (debug) {
-          System.out.println("Scanning startkey: " + startkey);
-        }
-
-        HashMap<String, ByteIterator> tuple;
-        for (KeySlice oneresult : results) {
-          tuple = new HashMap<String, ByteIterator>();
-
-          Column column;
-          String name;
-          ByteIterator value;
-          for (ColumnOrSuperColumn onecol : oneresult.columns) {
-            column = onecol.column;
-            name = new String(column.name.array(),
-                column.name.position() + column.name.arrayOffset(),
-                column.name.remaining());
-            value = new ByteArrayByteIterator(column.value.array(),
-                column.value.position() + column.value.arrayOffset(),
-                column.value.remaining());
-
-            tuple.put(name, value);
-
-            if (debug) {
-              System.out.print("(" + name + "=" + value + ")");
-            }
-          }
-
-          result.add(tuple);
-          if (debug) {
-            System.out.println();
-          }
-        }
-
-        return Status.OK;
-      } catch (Exception e) {
-        errorexception = e;
-      }
-      try {
-        Thread.sleep(500);
-      } catch (InterruptedException e) {
-        Thread.currentThread().interrupt();
-      }
-    }
-    errorexception.printStackTrace();
-    errorexception.printStackTrace(System.out);
-    return Status.ERROR;
-  }
-
-  /**
-   * Update a record in the database. Any field/value pairs in the specified
-   * values HashMap will be written into the record with the specified record
-   * key, overwriting any existing values with the same field name.
-   * 
-   * @param table
-   *          The name of the table
-   * @param key
-   *          The record key of the record to write.
-   * @param values
-   *          A HashMap of field/value pairs to update in the record
-   * @return Zero on success, a non-zero error code on error
-   */
-  public Status update(String table, String key,
-      HashMap<String, ByteIterator> values) {
-    return insert(table, key, values);
-  }
-
-  /**
-   * Insert a record in the database. Any field/value pairs in the specified
-   * values HashMap will be written into the record with the specified record
-   * key.
-   * 
-   * @param table
-   *          The name of the table
-   * @param key
-   *          The record key of the record to insert.
-   * @param values
-   *          A HashMap of field/value pairs to insert in the record
-   * @return Zero on success, a non-zero error code on error
-   */
-  public Status insert(String table, String key,
-      HashMap<String, ByteIterator> values) {
-    if (!tableName.equals(table)) {
-      try {
-        client.set_keyspace(table);
-        tableName = table;
-      } catch (Exception e) {
-        e.printStackTrace();
-        e.printStackTrace(System.out);
-        return Status.ERROR;
-      }
-    }
-
-    for (int i = 0; i < operationRetries; i++) {
-      mutations.clear();
-      mutationMap.clear();
-      record.clear();
-
-      if (debug) {
-        System.out.println("Inserting key: " + key);
-      }
-
-      try {
-        ByteBuffer wrappedKey = ByteBuffer.wrap(key.getBytes("UTF-8"));
-
-        Column col;
-        ColumnOrSuperColumn column;
-        for (Map.Entry<String, ByteIterator> entry : values.entrySet()) {
-          col = new Column();
-          col.setName(ByteBuffer.wrap(entry.getKey().getBytes("UTF-8")));
-          col.setValue(ByteBuffer.wrap(entry.getValue().toArray()));
-          col.setTimestamp(System.currentTimeMillis());
-
-          column = new ColumnOrSuperColumn();
-          column.setColumn(col);
-
-          mutations.add(new Mutation().setColumn_or_supercolumn(column));
-        }
-
-        mutationMap.put(columnFamily, mutations);
-        record.put(wrappedKey, mutationMap);
-
-        client.batch_mutate(record, ConsistencyLevel.ONE);
-
-        return Status.OK;
-      } catch (Exception e) {
-        errorexception = e;
-      }
-      try {
-        Thread.sleep(500);
-      } catch (InterruptedException e) {
-        Thread.currentThread().interrupt();
-      }
-    }
-
-    errorexception.printStackTrace();
-    errorexception.printStackTrace(System.out);
-    return Status.ERROR;
-  }
-
-  /**
-   * Delete a record from the database.
-   * 
-   * @param table
-   *          The name of the table
-   * @param key
-   *          The record key of the record to delete.
-   * @return Zero on success, a non-zero error code on error
-   */
-  public Status delete(String table, String key) {
-    if (!tableName.equals(table)) {
-      try {
-        client.set_keyspace(table);
-        tableName = table;
-      } catch (Exception e) {
-        e.printStackTrace();
-        e.printStackTrace(System.out);
-        return Status.ERROR;
-      }
-    }
-
-    for (int i = 0; i < operationRetries; i++) {
-      try {
-        client.remove(ByteBuffer.wrap(key.getBytes("UTF-8")),
-            new ColumnPath(columnFamily), System.currentTimeMillis(),
-            ConsistencyLevel.ONE);
-
-        if (debug) {
-          System.out.println("Delete key: " + key);
-        }
-
-        return Status.OK;
-      } catch (Exception e) {
-        errorexception = e;
-      }
-      try {
-        Thread.sleep(500);
-      } catch (InterruptedException e) {
-        Thread.currentThread().interrupt();
-      }
-    }
-    errorexception.printStackTrace();
-    errorexception.printStackTrace(System.out);
-    return Status.ERROR;
-  }
-
-  public static void main(String[] args) {
-    CassandraClient7 cli = new CassandraClient7();
-
-    Properties props = new Properties();
-
-    props.setProperty("hosts", args[0]);
-    cli.setProperties(props);
-
-    try {
-      cli.init();
-    } catch (Exception e) {
-      e.printStackTrace();
-      System.exit(0);
-    }
-
-    HashMap<String, ByteIterator> vals = new HashMap<String, ByteIterator>();
-    vals.put("age", new StringByteIterator("57"));
-    vals.put("middlename", new StringByteIterator("bradley"));
-    vals.put("favoritecolor", new StringByteIterator("blue"));
-    Status res = cli.insert("usertable", "BrianFrankCooper", vals);
-    System.out.println("Result of insert: " + res.getName());
-
-    HashMap<String, ByteIterator> result = new HashMap<String, ByteIterator>();
-    HashSet<String> fields = new HashSet<String>();
-    fields.add("middlename");
-    fields.add("age");
-    fields.add("favoritecolor");
-    res = cli.read("usertable", "BrianFrankCooper", null, result);
-    System.out.println("Result of read: " + res.getName());
-    for (Map.Entry<String, ByteIterator> entry : result.entrySet()) {
-      System.out.println("[" + entry.getKey() + "]=[" + entry.getValue() + "]");
-    }
-
-    res = cli.delete("usertable", "BrianFrankCooper");
-    System.out.println("Result of delete: " + res.getName());
-  }
-}
diff --git a/cassandra/src/main/java/com/yahoo/ycsb/db/CassandraClient8.java b/cassandra/src/main/java/com/yahoo/ycsb/db/CassandraClient8.java
deleted file mode 100644
index ca72c339..00000000
--- a/cassandra/src/main/java/com/yahoo/ycsb/db/CassandraClient8.java
+++ /dev/null
@@ -1,528 +0,0 @@
-/**
- * Copyright (c) 2010 Yahoo! Inc. All rights reserved.
- *
- * Licensed 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. See accompanying
- * LICENSE file.
- */
-
-package com.yahoo.ycsb.db;
-
-import com.yahoo.ycsb.*;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Vector;
-import java.util.Properties;
-import java.nio.ByteBuffer;
-
-import org.apache.thrift.transport.TTransport;
-import org.apache.thrift.transport.TFramedTransport;
-import org.apache.thrift.transport.TSocket;
-import org.apache.thrift.protocol.TProtocol;
-import org.apache.thrift.protocol.TBinaryProtocol;
-import org.apache.cassandra.thrift.*;
-
-//XXXX if we do replication, fix the consistency levels
-/**
- * Cassandra 0.8 client for YCSB framework.
- */
-public class CassandraClient8 extends DB {
-  public static final ByteBuffer EMPTY_BYTE_BUFFER =
-      ByteBuffer.wrap(new byte[0]);
-
-  public static final String CONNECTION_RETRY_PROPERTY =
-      "cassandra.connectionretries";
-  public static final String CONNECTION_RETRY_PROPERTY_DEFAULT = "300";
-
-  public static final String OPERATION_RETRY_PROPERTY =
-      "cassandra.operationretries";
-  public static final String OPERATION_RETRY_PROPERTY_DEFAULT = "300";
-
-  public static final String USERNAME_PROPERTY = "cassandra.username";
-  public static final String PASSWORD_PROPERTY = "cassandra.password";
-
-  public static final String COLUMN_FAMILY_PROPERTY = "cassandra.columnfamily";
-  public static final String COLUMN_FAMILY_PROPERTY_DEFAULT = "data";
-
-  private int connectionRetries;
-  private int operationRetries;
-  private String columnFamily;
-
-  private TTransport tr;
-  private Cassandra.Client client;
-
-  private boolean debug = false;
-
-  private String tableName = "";
-  private Exception errorexception = null;
-
-  private List<Mutation> mutations = new ArrayList<Mutation>();
-  private Map<String, List<Mutation>> mutationMap =
-      new HashMap<String, List<Mutation>>();
-  private Map<ByteBuffer, Map<String, List<Mutation>>> record =
-      new HashMap<ByteBuffer, Map<String, List<Mutation>>>();
-
-  private ColumnParent parent;
-
-  /**
-   * Initialize any state for this DB. Called once per DB instance; there is one
-   * DB instance per client thread.
-   */
-  public void init() throws DBException {
-    String hosts = getProperties().getProperty("hosts");
-    if (hosts == null) {
-      throw new DBException(
-          "Required property \"hosts\" missing for CassandraClient");
-    }
-
-    columnFamily = getProperties().getProperty(COLUMN_FAMILY_PROPERTY,
-        COLUMN_FAMILY_PROPERTY_DEFAULT);
-    parent = new ColumnParent(columnFamily);
-
-    connectionRetries =
-        Integer.parseInt(getProperties().getProperty(CONNECTION_RETRY_PROPERTY,
-            CONNECTION_RETRY_PROPERTY_DEFAULT));
-    operationRetries =
-        Integer.parseInt(getProperties().getProperty(OPERATION_RETRY_PROPERTY,
-            OPERATION_RETRY_PROPERTY_DEFAULT));
-
-    String username = getProperties().getProperty(USERNAME_PROPERTY);
-    String password = getProperties().getProperty(PASSWORD_PROPERTY);
-
-    debug = Boolean.parseBoolean(getProperties().getProperty("debug", "false"));
-
-    String[] allhosts = hosts.split(",");
-    String myhost = allhosts[Utils.random().nextInt(allhosts.length)];
-
-    Exception connectexception = null;
-
-    for (int retry = 0; retry < connectionRetries; retry++) {
-      tr = new TFramedTransport(new TSocket(myhost, 9160));
-      TProtocol proto = new TBinaryProtocol(tr);
-      client = new Cassandra.Client(proto);
-      try {
-        tr.open();
-        connectexception = null;
-        break;
-      } catch (Exception e) {
-        connectexception = e;
-      }
-      try {
-        Thread.sleep(1000);
-      } catch (InterruptedException e) {
-        Thread.currentThread().interrupt();
-      }
-    }
-    if (connectexception != null) {
-      System.err.println("Unable to connect to " + myhost + " after "
-          + connectionRetries + " tries");
-      System.out.println("Unable to connect to " + myhost + " after "
-          + connectionRetries + " tries");
-      throw new DBException(connectexception);
-    }
-
-    if (username != null && password != null) {
-      Map<String, String> cred = new HashMap<String, String>();
-      cred.put("username", username);
-      cred.put("password", password);
-      AuthenticationRequest req = new AuthenticationRequest(cred);
-      try {
-        client.login(req);
-      } catch (Exception e) {
-        throw new DBException(e);
-      }
-    }
-  }
-
-  /**
-   * Cleanup any state for this DB. Called once per DB instance; there is one DB
-   * instance per client thread.
-   */
-  public void cleanup() throws DBException {
-    tr.close();
-  }
-
-  /**
-   * Read a record from the database. Each field/value pair from the result will
-   * be stored in a HashMap.
-   * 
-   * @param table
-   *          The name of the table
-   * @param key
-   *          The record key of the record to read.
-   * @param fields
-   *          The list of fields to read, or null for all of them
-   * @param result
-   *          A HashMap of field/value pairs for the result
-   * @return Zero on success, a non-zero error code on error
-   */
-  public Status read(String table, String key, Set<String> fields,
-      HashMap<String, ByteIterator> result) {
-    if (!tableName.equals(table)) {
-      try {
-        client.set_keyspace(table);
-        tableName = table;
-      } catch (Exception e) {
-        e.printStackTrace();
-        e.printStackTrace(System.out);
-        return Status.ERROR;
-      }
-    }
-
-    for (int i = 0; i < operationRetries; i++) {
-
-      try {
-        SlicePredicate predicate;
-        if (fields == null) {
-          predicate = new SlicePredicate().setSlice_range(new SliceRange(
-              EMPTY_BYTE_BUFFER, EMPTY_BYTE_BUFFER, false, 1000000));
-
-        } else {
-          ArrayList<ByteBuffer> fieldlist =
-              new ArrayList<ByteBuffer>(fields.size());
-          for (String s : fields) {
-            fieldlist.add(ByteBuffer.wrap(s.getBytes("UTF-8")));
-          }
-
-          predicate = new SlicePredicate().setColumn_names(fieldlist);
-        }
-
-        List<ColumnOrSuperColumn> results =
-            client.get_slice(ByteBuffer.wrap(key.getBytes("UTF-8")), parent,
-                predicate, ConsistencyLevel.ONE);
-
-        if (debug) {
-          System.out.print("Reading key: " + key);
-        }
-
-        Column column;
-        String name;
-        ByteIterator value;
-        for (ColumnOrSuperColumn oneresult : results) {
-
-          column = oneresult.column;
-          name = new String(column.name.array(),
-              column.name.position() + column.name.arrayOffset(),
-              column.name.remaining());
-          value = new ByteArrayByteIterator(column.value.array(),
-              column.value.position() + column.value.arrayOffset(),
-              column.value.remaining());
-
-          result.put(name, value);
-
-          if (debug) {
-            System.out.print("(" + name + "=" + value + ")");
-          }
-        }
-
-        if (debug) {
-          System.out.println();
-        }
-
-        return Status.OK;
-      } catch (Exception e) {
-        errorexception = e;
-      }
-
-      try {
-        Thread.sleep(500);
-      } catch (InterruptedException e) {
-        Thread.currentThread().interrupt();
-      }
-    }
-    errorexception.printStackTrace();
-    errorexception.printStackTrace(System.out);
-    return Status.ERROR;
-
-  }
-
-  /**
-   * Perform a range scan for a set of records in the database. Each field/value
-   * pair from the result will be stored in a HashMap.
-   * 
-   * @param table
-   *          The name of the table
-   * @param startkey
-   *          The record key of the first record to read.
-   * @param recordcount
-   *          The number of records to read
-   * @param fields
-   *          The list of fields to read, or null for all of them
-   * @param result
-   *          A Vector of HashMaps, where each HashMap is a set field/value
-   *          pairs for one record
-   * @return Zero on success, a non-zero error code on error
-   */
-  public Status scan(String table, String startkey, int recordcount,
-      Set<String> fields, Vector<HashMap<String, ByteIterator>> result) {
-    if (!tableName.equals(table)) {
-      try {
-        client.set_keyspace(table);
-        tableName = table;
-      } catch (Exception e) {
-        e.printStackTrace();
-        e.printStackTrace(System.out);
-        return Status.ERROR;
-      }
-    }
-
-    for (int i = 0; i < operationRetries; i++) {
-
-      try {
-        SlicePredicate predicate;
-        if (fields == null) {
-          predicate = new SlicePredicate().setSlice_range(new SliceRange(
-              EMPTY_BYTE_BUFFER, EMPTY_BYTE_BUFFER, false, 1000000));
-
-        } else {
-          ArrayList<ByteBuffer> fieldlist =
-              new ArrayList<ByteBuffer>(fields.size());
-          for (String s : fields) {
-            fieldlist.add(ByteBuffer.wrap(s.getBytes("UTF-8")));
-          }
-
-          predicate = new SlicePredicate().setColumn_names(fieldlist);
-        }
-
-        KeyRange kr = new KeyRange().setStart_key(startkey.getBytes("UTF-8"))
-            .setEnd_key(new byte[] {}).setCount(recordcount);
-
-        List<KeySlice> results = client.get_range_slices(parent, predicate, kr,
-            ConsistencyLevel.ONE);
-
-        if (debug) {
-          System.out.println("Scanning startkey: " + startkey);
-        }
-
-        HashMap<String, ByteIterator> tuple;
-        for (KeySlice oneresult : results) {
-          tuple = new HashMap<String, ByteIterator>();
-
-          Column column;
-          String name;
-          ByteIterator value;
-          for (ColumnOrSuperColumn onecol : oneresult.columns) {
-            column = onecol.column;
-            name = new String(column.name.array(),
-                column.name.position() + column.name.arrayOffset(),
-                column.name.remaining());
-            value = new ByteArrayByteIterator(column.value.array(),
-                column.value.position() + column.value.arrayOffset(),
-                column.value.remaining());
-
-            tuple.put(name, value);
-
-            if (debug) {
-              System.out.print("(" + name + "=" + value + ")");
-            }
-          }
-
-          result.add(tuple);
-          if (debug) {
-            System.out.println();
-          }
-        }
-
-        return Status.OK;
-      } catch (Exception e) {
-        errorexception = e;
-      }
-      try {
-        Thread.sleep(500);
-      } catch (InterruptedException e) {
-        Thread.currentThread().interrupt();
-      }
-    }
-    errorexception.printStackTrace();
-    errorexception.printStackTrace(System.out);
-    return Status.ERROR;
-  }
-
-  /**
-   * Update a record in the database. Any field/value pairs in the specified
-   * values HashMap will be written into the record with the specified record
-   * key, overwriting any existing values with the same field name.
-   * 
-   * @param table
-   *          The name of the table
-   * @param key
-   *          The record key of the record to write.
-   * @param values
-   *          A HashMap of field/value pairs to update in the record
-   * @return Zero on success, a non-zero error code on error
-   */
-  public Status update(String table, String key,
-      HashMap<String, ByteIterator> values) {
-    return insert(table, key, values);
-  }
-
-  /**
-   * Insert a record in the database. Any field/value pairs in the specified
-   * values HashMap will be written into the record with the specified record
-   * key.
-   * 
-   * @param table
-   *          The name of the table
-   * @param key
-   *          The record key of the record to insert.
-   * @param values
-   *          A HashMap of field/value pairs to insert in the record
-   * @return Zero on success, a non-zero error code on error
-   */
-  public Status insert(String table, String key,
-      HashMap<String, ByteIterator> values) {
-    if (!tableName.equals(table)) {
-      try {
-        client.set_keyspace(table);
-        tableName = table;
-      } catch (Exception e) {
-        e.printStackTrace();
-        e.printStackTrace(System.out);
-        return Status.ERROR;
-      }
-    }
-
-    for (int i = 0; i < operationRetries; i++) {
-      mutations.clear();
-      mutationMap.clear();
-      record.clear();
-
-      if (debug) {
-        System.out.println("Inserting key: " + key);
-      }
-
-      try {
-        ByteBuffer wrappedKey = ByteBuffer.wrap(key.getBytes("UTF-8"));
-
-        Column col;
-        ColumnOrSuperColumn column;
-        for (Map.Entry<String, ByteIterator> entry : values.entrySet()) {
-          col = new Column();
-          col.setName(ByteBuffer.wrap(entry.getKey().getBytes("UTF-8")));
-          col.setValue(ByteBuffer.wrap(entry.getValue().toArray()));
-          col.setTimestamp(System.currentTimeMillis());
-
-          column = new ColumnOrSuperColumn();
-          column.setColumn(col);
-
-          mutations.add(new Mutation().setColumn_or_supercolumn(column));
-        }
-
-        mutationMap.put(columnFamily, mutations);
-        record.put(wrappedKey, mutationMap);
-
-        client.batch_mutate(record, ConsistencyLevel.ONE);
-
-        return Status.OK;
-      } catch (Exception e) {
-        errorexception = e;
-      }
-      try {
-        Thread.sleep(500);
-      } catch (InterruptedException e) {
-        Thread.currentThread().interrupt();
-      }
-    }
-
-    errorexception.printStackTrace();
-    errorexception.printStackTrace(System.out);
-    return Status.ERROR;
-  }
-
-  /**
-   * Delete a record from the database.
-   * 
-   * @param table
-   *          The name of the table
-   * @param key
-   *          The record key of the record to delete.
-   * @return Zero on success, a non-zero error code on error
-   */
-  public Status delete(String table, String key) {
-    if (!tableName.equals(table)) {
-      try {
-        client.set_keyspace(table);
-        tableName = table;
-      } catch (Exception e) {
-        e.printStackTrace();
-        e.printStackTrace(System.out);
-        return Status.ERROR;
-      }
-    }
-
-    for (int i = 0; i < operationRetries; i++) {
-      try {
-        client.remove(ByteBuffer.wrap(key.getBytes("UTF-8")),
-            new ColumnPath(columnFamily), System.currentTimeMillis(),
-            ConsistencyLevel.ONE);
-
-        if (debug) {
-          System.out.println("Delete key: " + key);
-        }
-
-        return Status.OK;
-      } catch (Exception e) {
-        errorexception = e;
-      }
-      try {
-        Thread.sleep(500);
-      } catch (InterruptedException e) {
-        Thread.currentThread().interrupt();
-      }
-    }
-    errorexception.printStackTrace();
-    errorexception.printStackTrace(System.out);
-    return Status.ERROR;
-  }
-
-  public static void main(String[] args) {
-    CassandraClient8 cli = new CassandraClient8();
-
-    Properties props = new Properties();
-
-    props.setProperty("hosts", args[0]);
-    cli.setProperties(props);
-
-    try {
-      cli.init();
-    } catch (Exception e) {
-      e.printStackTrace();
-      System.exit(0);
-    }
-
-    HashMap<String, ByteIterator> vals = new HashMap<String, ByteIterator>();
-    vals.put("age", new StringByteIterator("57"));
-    vals.put("middlename", new StringByteIterator("bradley"));
-    vals.put("favoritecolor", new StringByteIterator("blue"));
-    Status res = cli.insert("usertable", "BrianFrankCooper", vals);
-    System.out.println("Result of insert: " + res);
-
-    HashMap<String, ByteIterator> result = new HashMap<String, ByteIterator>();
-    HashSet<String> fields = new HashSet<String>();
-    fields.add("middlename");
-    fields.add("age");
-    fields.add("favoritecolor");
-    res = cli.read("usertable", "BrianFrankCooper", null, result);
-    System.out.println("Result of read: " + res);
-    for (Map.Entry<String, ByteIterator> entry : result.entrySet()) {
-      System.out.println("[" + entry.getKey() + "]=[" + entry.getValue() + "]");
-    }
-
-    res = cli.delete("usertable", "BrianFrankCooper");
-    System.out.println("Result of delete: " + res);
-  }
-}
diff --git a/cassandra/src/main/java/com/yahoo/ycsb/db/package-info.java b/cassandra/src/main/java/com/yahoo/ycsb/db/package-info.java
deleted file mode 100644
index 88ce1f01..00000000
--- a/cassandra/src/main/java/com/yahoo/ycsb/db/package-info.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright (c) 2014, Yahoo!, Inc. All rights reserved.
- *
- * Licensed 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. See accompanying
- * LICENSE file.
- */
-
-/**
- * The YCSB binding for <a href="http://cassandra.apache.org/">Cassandra</a> 
- * versions 0.7, 0.8, and 1.0.X.
- */
-package com.yahoo.ycsb.db;
-
diff --git a/distribution/pom.xml b/distribution/pom.xml
index 5f04b4a5..df89c1fb 100644
--- a/distribution/pom.xml
+++ b/distribution/pom.xml
@@ -56,7 +56,7 @@ LICENSE file.
     </dependency>
     <dependency>
       <groupId>com.yahoo.ycsb</groupId>
-      <artifactId>cassandra-binding</artifactId>
+      <artifactId>cassandra2-binding</artifactId>
       <version>${project.version}</version>
     </dependency>
     <dependency>
diff --git a/pom.xml b/pom.xml
index 2966efdc..dd25d8e7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -73,8 +73,6 @@ LICENSE file.
     <hbase098.version>0.98.14-hadoop2</hbase098.version>
     <hbase10.version>1.0.2</hbase10.version>
     <accumulo.version>1.6.0</accumulo.version>
-    <cassandra.version>1.2.9</cassandra.version>
-    <cassandra.cql.version>1.0.3</cassandra.cql.version>
     <cassandra2.cql.version>3.0.0</cassandra2.cql.version>
     <geode.version>1.0.0-incubating.M2</geode.version>
     <googlebigtable.version>0.2.3</googlebigtable.version>
@@ -107,7 +105,6 @@ LICENSE file.
     <module>accumulo</module>
     <module>aerospike</module>
     <module>asynchbase</module>
-    <module>cassandra</module>
     <module>cassandra2</module>
     <module>couchbase</module>
     <module>couchbase2</module>
-- 
GitLab