diff --git a/accumulo/src/main/java/com/yahoo/ycsb/db/AccumuloClient.java b/accumulo/src/main/java/com/yahoo/ycsb/db/AccumuloClient.java index e4e79f929c82c4ee336eae58c83bf499b6158d59..79be7d9154a23b3e285599886cd9867410a6f0b9 100644 --- a/accumulo/src/main/java/com/yahoo/ycsb/db/AccumuloClient.java +++ b/accumulo/src/main/java/com/yahoo/ycsb/db/AccumuloClient.java @@ -18,16 +18,11 @@ package com.yahoo.ycsb.db; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Hashtable; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Random; -import java.util.Set; -import java.util.TreeSet; -import java.util.Vector; -import java.util.concurrent.TimeUnit; +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 org.apache.accumulo.core.client.AccumuloException; import org.apache.accumulo.core.client.AccumuloSecurityException; @@ -49,20 +44,21 @@ import org.apache.accumulo.core.util.CleanUp; import org.apache.hadoop.io.Text; import org.apache.zookeeper.KeeperException; -import com.yahoo.ycsb.ByteArrayByteIterator; -import com.yahoo.ycsb.ByteIterator; -import com.yahoo.ycsb.DB; -import com.yahoo.ycsb.DBException; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Hashtable; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Random; +import java.util.Set; +import java.util.TreeSet; +import java.util.Vector; +import java.util.concurrent.TimeUnit; /** * <a href="https://accumulo.apache.org/">Accumulo</a> binding for YCSB. */ public class AccumuloClient extends DB { - // Error code constants. - public static final int OK = 0; - public static final int SERVER_ERROR = -1; - public static final int HTTP_ERROR = -2; - public static final int NO_MATCHING_RECORD = -3; private ZooKeeperInstance inst; private Connector connector; @@ -203,14 +199,14 @@ public class AccumuloClient extends DB { } @Override - public int read(String t, String key, Set<String> fields, + public Status read(String t, String key, Set<String> fields, HashMap<String, ByteIterator> result) { try { checkTable(t); } catch (TableNotFoundException e) { System.err.println("Error trying to connect to Accumulo table." + e); - return SERVER_ERROR; + return Status.ERROR; } try { @@ -223,20 +219,20 @@ public class AccumuloClient extends DB { } } catch (Exception e) { System.err.println("Error trying to reading Accumulo table" + key + e); - return SERVER_ERROR; + return Status.ERROR; } - return OK; + return Status.OK; } @Override - public int scan(String t, String startkey, int recordcount, + public Status scan(String t, String startkey, int recordcount, Set<String> fields, Vector<HashMap<String, ByteIterator>> result) { try { checkTable(t); } catch (TableNotFoundException e) { System.err.println("Error trying to connect to Accumulo table." + e); - return SERVER_ERROR; + return Status.ERROR; } // There doesn't appear to be a way to create a range for a given @@ -287,17 +283,17 @@ public class AccumuloClient extends DB { new ByteArrayByteIterator(buf)); } - return OK; + return Status.OK; } @Override - public int update(String t, String key, + public Status update(String t, String key, HashMap<String, ByteIterator> values) { try { checkTable(t); } catch (TableNotFoundException e) { System.err.println("Error trying to connect to Accumulo table." + e); - return SERVER_ERROR; + return Status.ERROR; } Mutation mutInsert = new Mutation(new Text(key)); @@ -319,29 +315,29 @@ public class AccumuloClient extends DB { } catch (MutationsRejectedException e) { System.err.println("Error performing update."); e.printStackTrace(); - return SERVER_ERROR; + return Status.ERROR; } catch (KeeperException e) { System.err.println("Error notifying the Zookeeper Queue."); e.printStackTrace(); - return SERVER_ERROR; + return Status.ERROR; } - return OK; + return Status.OK; } @Override - public int insert(String t, String key, + public Status insert(String t, String key, HashMap<String, ByteIterator> values) { return update(t, key, values); } @Override - public int delete(String t, String key) { + public Status delete(String t, String key) { try { checkTable(t); } catch (TableNotFoundException e) { System.err.println("Error trying to connect to Accumulo table." + e); - return SERVER_ERROR; + return Status.ERROR; } try { @@ -349,14 +345,14 @@ public class AccumuloClient extends DB { } catch (MutationsRejectedException e) { System.err.println("Error performing delete."); e.printStackTrace(); - return SERVER_ERROR; + return Status.ERROR; } catch (RuntimeException e) { System.err.println("Error performing delete."); e.printStackTrace(); - return SERVER_ERROR; + return Status.ERROR; } - return OK; + return Status.OK; } // These functions are adapted from RowOperations.java: @@ -416,7 +412,7 @@ public class AccumuloClient extends DB { HashMap<String, ByteIterator> result = new HashMap<String, ByteIterator>(); - int retval = read(usertable, strKey, fields, result); + read(usertable, strKey, fields, result); // If the results are empty, the key is enqueued in // Zookeeper // and tried again, until the results are found. @@ -442,15 +438,15 @@ public class AccumuloClient extends DB { } - public int presplit(String t, String[] keys) + public Status presplit(String t, String[] keys) throws TableNotFoundException, AccumuloException, AccumuloSecurityException { TreeSet<Text> splits = new TreeSet<Text>(); for (int i = 0; i < keys.length; i++) { splits.add(new Text(keys[i])); } - connector.tableOperations().addSplits(t, splits); - return OK; + connector.tableOperations().addSplits(t, splits); + return Status.OK; } } diff --git a/aerospike/src/main/java/com/yahoo/ycsb/db/AerospikeClient.java b/aerospike/src/main/java/com/yahoo/ycsb/db/AerospikeClient.java index 858c69b40d28c721ec2503b9d892e9fc751c815c..5aa80e46cfc9dfcb7de2ed6ff9d4e1589c759c08 100644 --- a/aerospike/src/main/java/com/yahoo/ycsb/db/AerospikeClient.java +++ b/aerospike/src/main/java/com/yahoo/ycsb/db/AerospikeClient.java @@ -17,12 +17,6 @@ package com.yahoo.ycsb.db; -import java.util.HashMap; -import java.util.Map; -import java.util.Properties; -import java.util.Set; -import java.util.Vector; - import com.aerospike.client.AerospikeException; import com.aerospike.client.Bin; import com.aerospike.client.Key; @@ -31,10 +25,16 @@ import com.aerospike.client.policy.ClientPolicy; import com.aerospike.client.policy.Policy; import com.aerospike.client.policy.RecordExistsAction; import com.aerospike.client.policy.WritePolicy; - import com.yahoo.ycsb.ByteArrayByteIterator; import com.yahoo.ycsb.ByteIterator; import com.yahoo.ycsb.DBException; +import com.yahoo.ycsb.Status; + +import java.util.HashMap; +import java.util.Map; +import java.util.Properties; +import java.util.Set; +import java.util.Vector; /** * YCSB binding for <a href="http://www.aerospike.com/">Areospike</a>. @@ -45,9 +45,6 @@ public class AerospikeClient extends com.yahoo.ycsb.DB { private static final String DEFAULT_TIMEOUT = "10000"; private static final String DEFAULT_NAMESPACE = "ycsb"; - private static final int RESULT_OK = 0; - private static final int RESULT_ERROR = -1; - private String namespace = null; private com.aerospike.client.AerospikeClient client = null; @@ -100,7 +97,7 @@ public class AerospikeClient extends com.yahoo.ycsb.DB { } @Override - public int read(String table, String key, Set<String> fields, + public Status read(String table, String key, Set<String> fields, HashMap<String, ByteIterator> result) { try { Record record; @@ -114,7 +111,7 @@ public class AerospikeClient extends com.yahoo.ycsb.DB { if (record == null) { System.err.println("Record key " + key + " not found (read)"); - return RESULT_ERROR; + return Status.ERROR; } for (Map.Entry<String, Object> entry: record.bins.entrySet()) { @@ -122,21 +119,21 @@ public class AerospikeClient extends com.yahoo.ycsb.DB { new ByteArrayByteIterator((byte[])entry.getValue())); } - return RESULT_OK; + return Status.OK; } catch (AerospikeException e) { System.err.println("Error while reading key " + key + ": " + e); - return RESULT_ERROR; + return Status.ERROR; } } @Override - public int scan(String table, String start, int count, Set<String> fields, + public Status scan(String table, String start, int count, Set<String> fields, Vector<HashMap<String, ByteIterator>> result) { System.err.println("Scan not implemented"); - return RESULT_ERROR; + return Status.ERROR; } - private int write(String table, String key, WritePolicy writePolicy, + private Status write(String table, String key, WritePolicy writePolicy, HashMap<String, ByteIterator> values) { Bin[] bins = new Bin[values.size()]; int index = 0; @@ -150,37 +147,37 @@ public class AerospikeClient extends com.yahoo.ycsb.DB { try { client.put(writePolicy, keyObj, bins); - return RESULT_OK; + return Status.OK; } catch (AerospikeException e) { System.err.println("Error while writing key " + key + ": " + e); - return RESULT_ERROR; + return Status.ERROR; } } @Override - public int update(String table, String key, + public Status update(String table, String key, HashMap<String, ByteIterator> values) { return write(table, key, updatePolicy, values); } @Override - public int insert(String table, String key, + public Status insert(String table, String key, HashMap<String, ByteIterator> values) { return write(table, key, insertPolicy, values); } @Override - public int delete(String table, String key) { + public Status delete(String table, String key) { try { if (!client.delete(deletePolicy, new Key(namespace, table, key))) { System.err.println("Record key " + key + " not found (delete)"); - return RESULT_ERROR; + return Status.ERROR; } - return RESULT_OK; + return Status.OK; } catch (AerospikeException e) { System.err.println("Error while deleting key " + key + ": " + e); - return RESULT_ERROR; + return Status.ERROR; } } } diff --git a/cassandra/src/main/java/com/yahoo/ycsb/db/CassandraCQLClient.java b/cassandra/src/main/java/com/yahoo/ycsb/db/CassandraCQLClient.java index 33fdcea04c079e1e107617dd0c556d2de0315c9b..29f9a33f974efcd73866641332c268d0280640f2 100755 --- a/cassandra/src/main/java/com/yahoo/ycsb/db/CassandraCQLClient.java +++ b/cassandra/src/main/java/com/yahoo/ycsb/db/CassandraCQLClient.java @@ -46,9 +46,6 @@ public class CassandraCQLClient extends DB { private static ConsistencyLevel readConsistencyLevel = ConsistencyLevel.ONE; private static ConsistencyLevel writeConsistencyLevel = ConsistencyLevel.ONE; - public static final int OK = 0; - public static final int ERR = -1; - public static final String YCSB_KEY = "y_id"; public static final String KEYSPACE_PROPERTY = "cassandra.keyspace"; public static final String KEYSPACE_PROPERTY_DEFAULT = "ycsb"; @@ -190,7 +187,7 @@ public class CassandraCQLClient extends DB { * @return Zero on success, a non-zero error code on error */ @Override - public int read(String table, String key, Set<String> fields, + public Status read(String table, String key, Set<String> fields, HashMap<String, ByteIterator> result) { try { @@ -232,12 +229,12 @@ public class CassandraCQLClient extends DB { } - return OK; + return Status.OK; } catch (Exception e) { e.printStackTrace(); System.out.println("Error reading key: " + key); - return ERR; + return Status.ERROR; } } @@ -263,7 +260,7 @@ public class CassandraCQLClient extends DB { * @return Zero on success, a non-zero error code on error */ @Override - public int scan(String table, String startkey, int recordcount, + public Status scan(String table, String startkey, int recordcount, Set<String> fields, Vector<HashMap<String, ByteIterator>> result) { try { @@ -323,12 +320,12 @@ public class CassandraCQLClient extends DB { result.add(tuple); } - return OK; + return Status.OK; } catch (Exception e) { e.printStackTrace(); System.out.println("Error scanning with startkey: " + startkey); - return ERR; + return Status.ERROR; } } @@ -347,7 +344,7 @@ public class CassandraCQLClient extends DB { * @return Zero on success, a non-zero error code on error */ @Override - public int update(String table, String key, + public Status update(String table, String key, HashMap<String, ByteIterator> values) { // Insert and updates provide the same functionality return insert(table, key, values); @@ -367,7 +364,7 @@ public class CassandraCQLClient extends DB { * @return Zero on success, a non-zero error code on error */ @Override - public int insert(String table, String key, + public Status insert(String table, String key, HashMap<String, ByteIterator> values) { try { @@ -393,12 +390,12 @@ public class CassandraCQLClient extends DB { ResultSet rs = session.execute(insertStmt); - return OK; + return Status.OK; } catch (Exception e) { e.printStackTrace(); } - return ERR; + return Status.ERROR; } /** @@ -411,7 +408,7 @@ public class CassandraCQLClient extends DB { * @return Zero on success, a non-zero error code on error */ @Override - public int delete(String table, String key) { + public Status delete(String table, String key) { try { Statement stmt; @@ -424,15 +421,15 @@ public class CassandraCQLClient extends DB { System.out.println(stmt.toString()); } - ResultSet rs = session.execute(stmt); + session.execute(stmt); - return OK; + return Status.OK; } catch (Exception e) { e.printStackTrace(); System.out.println("Error deleting key: " + key); } - return ERR; + 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 index 30349ef4de10ecba213228dedba1adaa58f15b0b..8253ad2a8df4850d9fbdccd547692532881231f7 100644 --- a/cassandra/src/main/java/com/yahoo/ycsb/db/CassandraClient10.java +++ b/cassandra/src/main/java/com/yahoo/ycsb/db/CassandraClient10.java @@ -17,15 +17,13 @@ package com.yahoo.ycsb.db; -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; +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; @@ -45,12 +43,15 @@ import org.apache.thrift.transport.TFramedTransport; import org.apache.thrift.transport.TSocket; import org.apache.thrift.transport.TTransport; -import com.yahoo.ycsb.ByteArrayByteIterator; -import com.yahoo.ycsb.ByteIterator; -import com.yahoo.ycsb.DB; -import com.yahoo.ycsb.DBException; -import com.yahoo.ycsb.StringByteIterator; -import com.yahoo.ycsb.Utils; +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 /** @@ -221,7 +222,7 @@ public class CassandraClient10 extends DB { * A HashMap of field/value pairs for the result * @return Zero on success, a non-zero error code on error */ - public int read(String table, String key, Set<String> fields, + public Status read(String table, String key, Set<String> fields, HashMap<String, ByteIterator> result) { if (!tableName.equals(table)) { try { @@ -230,7 +231,7 @@ public class CassandraClient10 extends DB { } catch (Exception e) { e.printStackTrace(); e.printStackTrace(System.out); - return ERROR; + return Status.ERROR; } } @@ -286,7 +287,7 @@ public class CassandraClient10 extends DB { .println("ConsistencyLevel=" + readConsistencyLevel.toString()); } - return OK; + return Status.OK; } catch (Exception e) { errorexception = e; } @@ -299,7 +300,7 @@ public class CassandraClient10 extends DB { } errorexception.printStackTrace(); errorexception.printStackTrace(System.out); - return ERROR; + return Status.ERROR; } @@ -320,7 +321,7 @@ public class CassandraClient10 extends DB { * pairs for one record * @return Zero on success, a non-zero error code on error */ - public int scan(String table, String startkey, int recordcount, + public Status scan(String table, String startkey, int recordcount, Set<String> fields, Vector<HashMap<String, ByteIterator>> result) { if (!tableName.equals(table)) { try { @@ -329,7 +330,7 @@ public class CassandraClient10 extends DB { } catch (Exception e) { e.printStackTrace(); e.printStackTrace(System.out); - return ERROR; + return Status.ERROR; } } @@ -392,7 +393,7 @@ public class CassandraClient10 extends DB { } } - return OK; + return Status.OK; } catch (Exception e) { errorexception = e; } @@ -404,7 +405,7 @@ public class CassandraClient10 extends DB { } errorexception.printStackTrace(); errorexception.printStackTrace(System.out); - return ERROR; + return Status.ERROR; } /** @@ -420,7 +421,7 @@ public class CassandraClient10 extends DB { * A HashMap of field/value pairs to update in the record * @return Zero on success, a non-zero error code on error */ - public int update(String table, String key, + public Status update(String table, String key, HashMap<String, ByteIterator> values) { return insert(table, key, values); } @@ -438,7 +439,7 @@ public class CassandraClient10 extends DB { * A HashMap of field/value pairs to insert in the record * @return Zero on success, a non-zero error code on error */ - public int insert(String table, String key, + public Status insert(String table, String key, HashMap<String, ByteIterator> values) { if (!tableName.equals(table)) { try { @@ -447,7 +448,7 @@ public class CassandraClient10 extends DB { } catch (Exception e) { e.printStackTrace(); e.printStackTrace(System.out); - return ERROR; + return Status.ERROR; } } @@ -487,7 +488,7 @@ public class CassandraClient10 extends DB { .println("ConsistencyLevel=" + writeConsistencyLevel.toString()); } - return OK; + return Status.OK; } catch (Exception e) { errorexception = e; } @@ -500,7 +501,7 @@ public class CassandraClient10 extends DB { errorexception.printStackTrace(); errorexception.printStackTrace(System.out); - return ERROR; + return Status.ERROR; } /** @@ -512,7 +513,7 @@ public class CassandraClient10 extends DB { * The record key of the record to delete. * @return Zero on success, a non-zero error code on error */ - public int delete(String table, String key) { + public Status delete(String table, String key) { if (!tableName.equals(table)) { try { client.set_keyspace(table); @@ -520,7 +521,7 @@ public class CassandraClient10 extends DB { } catch (Exception e) { e.printStackTrace(); e.printStackTrace(System.out); - return ERROR; + return Status.ERROR; } } @@ -536,7 +537,7 @@ public class CassandraClient10 extends DB { .println("ConsistencyLevel=" + deleteConsistencyLevel.toString()); } - return OK; + return Status.OK; } catch (Exception e) { errorexception = e; } @@ -548,7 +549,7 @@ public class CassandraClient10 extends DB { } errorexception.printStackTrace(); errorexception.printStackTrace(System.out); - return ERROR; + return Status.ERROR; } public static void main(String[] args) { @@ -570,7 +571,7 @@ public class CassandraClient10 extends DB { vals.put("age", new StringByteIterator("57")); vals.put("middlename", new StringByteIterator("bradley")); vals.put("favoritecolor", new StringByteIterator("blue")); - int res = cli.insert("usertable", "BrianFrankCooper", vals); + Status res = cli.insert("usertable", "BrianFrankCooper", vals); System.out.println("Result of insert: " + res); HashMap<String, ByteIterator> result = new HashMap<String, ByteIterator>(); diff --git a/cassandra/src/main/java/com/yahoo/ycsb/db/CassandraClient7.java b/cassandra/src/main/java/com/yahoo/ycsb/db/CassandraClient7.java index 2840460019edfb359873b8deb393bedc64162cb5..4af8c35f1070bcce587ea72bbaae1be292c41e48 100644 --- a/cassandra/src/main/java/com/yahoo/ycsb/db/CassandraClient7.java +++ b/cassandra/src/main/java/com/yahoo/ycsb/db/CassandraClient7.java @@ -17,15 +17,13 @@ package com.yahoo.ycsb.db; -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; +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; @@ -45,20 +43,21 @@ import org.apache.thrift.transport.TFramedTransport; import org.apache.thrift.transport.TSocket; import org.apache.thrift.transport.TTransport; -import com.yahoo.ycsb.ByteArrayByteIterator; -import com.yahoo.ycsb.ByteIterator; -import com.yahoo.ycsb.DB; -import com.yahoo.ycsb.DBException; -import com.yahoo.ycsb.StringByteIterator; -import com.yahoo.ycsb.Utils; +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 int OK = 0; - public static final int ERROR = -1; public static final ByteBuffer EMPTY_BYTE_BUFFER = ByteBuffer.wrap(new byte[0]); @@ -188,7 +187,7 @@ public class CassandraClient7 extends DB { * A HashMap of field/value pairs for the result * @return Zero on success, a non-zero error code on error */ - public int read(String table, String key, Set<String> fields, + public Status read(String table, String key, Set<String> fields, HashMap<String, ByteIterator> result) { if (!tableName.equals(table)) { try { @@ -197,7 +196,7 @@ public class CassandraClient7 extends DB { } catch (Exception e) { e.printStackTrace(); e.printStackTrace(System.out); - return ERROR; + return Status.ERROR; } } @@ -253,7 +252,7 @@ public class CassandraClient7 extends DB { System.out.println(); } - return OK; + return Status.OK; } catch (Exception e) { errorexception = e; } @@ -266,7 +265,7 @@ public class CassandraClient7 extends DB { } errorexception.printStackTrace(); errorexception.printStackTrace(System.out); - return ERROR; + return Status.ERROR; } @@ -287,7 +286,7 @@ public class CassandraClient7 extends DB { * pairs for one record * @return Zero on success, a non-zero error code on error */ - public int scan(String table, String startkey, int recordcount, + public Status scan(String table, String startkey, int recordcount, Set<String> fields, Vector<HashMap<String, ByteIterator>> result) { if (!tableName.equals(table)) { try { @@ -296,7 +295,7 @@ public class CassandraClient7 extends DB { } catch (Exception e) { e.printStackTrace(); e.printStackTrace(System.out); - return ERROR; + return Status.ERROR; } } @@ -359,7 +358,7 @@ public class CassandraClient7 extends DB { } } - return OK; + return Status.OK; } catch (Exception e) { errorexception = e; } @@ -371,7 +370,7 @@ public class CassandraClient7 extends DB { } errorexception.printStackTrace(); errorexception.printStackTrace(System.out); - return ERROR; + return Status.ERROR; } /** @@ -387,7 +386,7 @@ public class CassandraClient7 extends DB { * A HashMap of field/value pairs to update in the record * @return Zero on success, a non-zero error code on error */ - public int update(String table, String key, + public Status update(String table, String key, HashMap<String, ByteIterator> values) { return insert(table, key, values); } @@ -405,7 +404,7 @@ public class CassandraClient7 extends DB { * A HashMap of field/value pairs to insert in the record * @return Zero on success, a non-zero error code on error */ - public int insert(String table, String key, + public Status insert(String table, String key, HashMap<String, ByteIterator> values) { if (!tableName.equals(table)) { try { @@ -414,7 +413,7 @@ public class CassandraClient7 extends DB { } catch (Exception e) { e.printStackTrace(); e.printStackTrace(System.out); - return ERROR; + return Status.ERROR; } } @@ -449,7 +448,7 @@ public class CassandraClient7 extends DB { mutationMap.clear(); record.clear(); - return OK; + return Status.OK; } catch (Exception e) { errorexception = e; } @@ -462,7 +461,7 @@ public class CassandraClient7 extends DB { errorexception.printStackTrace(); errorexception.printStackTrace(System.out); - return ERROR; + return Status.ERROR; } /** @@ -474,7 +473,7 @@ public class CassandraClient7 extends DB { * The record key of the record to delete. * @return Zero on success, a non-zero error code on error */ - public int delete(String table, String key) { + public Status delete(String table, String key) { if (!tableName.equals(table)) { try { client.set_keyspace(table); @@ -482,7 +481,7 @@ public class CassandraClient7 extends DB { } catch (Exception e) { e.printStackTrace(); e.printStackTrace(System.out); - return ERROR; + return Status.ERROR; } } @@ -496,7 +495,7 @@ public class CassandraClient7 extends DB { System.out.println("Delete key: " + key); } - return OK; + return Status.OK; } catch (Exception e) { errorexception = e; } @@ -508,7 +507,7 @@ public class CassandraClient7 extends DB { } errorexception.printStackTrace(); errorexception.printStackTrace(System.out); - return ERROR; + return Status.ERROR; } public static void main(String[] args) { @@ -530,8 +529,8 @@ public class CassandraClient7 extends DB { vals.put("age", new StringByteIterator("57")); vals.put("middlename", new StringByteIterator("bradley")); vals.put("favoritecolor", new StringByteIterator("blue")); - int res = cli.insert("usertable", "BrianFrankCooper", vals); - System.out.println("Result of insert: " + res); + 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>(); @@ -539,12 +538,12 @@ public class CassandraClient7 extends DB { fields.add("age"); fields.add("favoritecolor"); res = cli.read("usertable", "BrianFrankCooper", null, result); - System.out.println("Result of read: " + res); + System.out.println("Result of read: " + res.getName()); for (String s : result.keySet()) { System.out.println("[" + s + "]=[" + result.get(s) + "]"); } res = cli.delete("usertable", "BrianFrankCooper"); - System.out.println("Result of delete: " + res); + 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 index afcaf283fe93df832cc20d09f6b3a7b84eeee83d..5aafff511775925562e6869195342a2ca05d1c78 100644 --- a/cassandra/src/main/java/com/yahoo/ycsb/db/CassandraClient8.java +++ b/cassandra/src/main/java/com/yahoo/ycsb/db/CassandraClient8.java @@ -41,8 +41,6 @@ import org.apache.cassandra.thrift.*; * Cassandra 0.8 client for YCSB framework. */ public class CassandraClient8 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]); @@ -172,7 +170,7 @@ public class CassandraClient8 extends DB { * A HashMap of field/value pairs for the result * @return Zero on success, a non-zero error code on error */ - public int read(String table, String key, Set<String> fields, + public Status read(String table, String key, Set<String> fields, HashMap<String, ByteIterator> result) { if (!tableName.equals(table)) { try { @@ -181,7 +179,7 @@ public class CassandraClient8 extends DB { } catch (Exception e) { e.printStackTrace(); e.printStackTrace(System.out); - return ERROR; + return Status.ERROR; } } @@ -235,7 +233,7 @@ public class CassandraClient8 extends DB { System.out.println(); } - return OK; + return Status.OK; } catch (Exception e) { errorexception = e; } @@ -248,7 +246,7 @@ public class CassandraClient8 extends DB { } errorexception.printStackTrace(); errorexception.printStackTrace(System.out); - return ERROR; + return Status.ERROR; } @@ -269,7 +267,7 @@ public class CassandraClient8 extends DB { * pairs for one record * @return Zero on success, a non-zero error code on error */ - public int scan(String table, String startkey, int recordcount, + public Status scan(String table, String startkey, int recordcount, Set<String> fields, Vector<HashMap<String, ByteIterator>> result) { if (!tableName.equals(table)) { try { @@ -278,7 +276,7 @@ public class CassandraClient8 extends DB { } catch (Exception e) { e.printStackTrace(); e.printStackTrace(System.out); - return ERROR; + return Status.ERROR; } } @@ -339,7 +337,7 @@ public class CassandraClient8 extends DB { } } - return OK; + return Status.OK; } catch (Exception e) { errorexception = e; } @@ -351,7 +349,7 @@ public class CassandraClient8 extends DB { } errorexception.printStackTrace(); errorexception.printStackTrace(System.out); - return ERROR; + return Status.ERROR; } /** @@ -367,7 +365,7 @@ public class CassandraClient8 extends DB { * A HashMap of field/value pairs to update in the record * @return Zero on success, a non-zero error code on error */ - public int update(String table, String key, + public Status update(String table, String key, HashMap<String, ByteIterator> values) { return insert(table, key, values); } @@ -385,7 +383,7 @@ public class CassandraClient8 extends DB { * A HashMap of field/value pairs to insert in the record * @return Zero on success, a non-zero error code on error */ - public int insert(String table, String key, + public Status insert(String table, String key, HashMap<String, ByteIterator> values) { if (!tableName.equals(table)) { try { @@ -394,7 +392,7 @@ public class CassandraClient8 extends DB { } catch (Exception e) { e.printStackTrace(); e.printStackTrace(System.out); - return ERROR; + return Status.ERROR; } } @@ -429,7 +427,7 @@ public class CassandraClient8 extends DB { mutationMap.clear(); record.clear(); - return OK; + return Status.OK; } catch (Exception e) { errorexception = e; } @@ -442,7 +440,7 @@ public class CassandraClient8 extends DB { errorexception.printStackTrace(); errorexception.printStackTrace(System.out); - return ERROR; + return Status.ERROR; } /** @@ -454,7 +452,7 @@ public class CassandraClient8 extends DB { * The record key of the record to delete. * @return Zero on success, a non-zero error code on error */ - public int delete(String table, String key) { + public Status delete(String table, String key) { if (!tableName.equals(table)) { try { client.set_keyspace(table); @@ -462,7 +460,7 @@ public class CassandraClient8 extends DB { } catch (Exception e) { e.printStackTrace(); e.printStackTrace(System.out); - return ERROR; + return Status.ERROR; } } @@ -476,7 +474,7 @@ public class CassandraClient8 extends DB { System.out.println("Delete key: " + key); } - return OK; + return Status.OK; } catch (Exception e) { errorexception = e; } @@ -488,7 +486,7 @@ public class CassandraClient8 extends DB { } errorexception.printStackTrace(); errorexception.printStackTrace(System.out); - return ERROR; + return Status.ERROR; } public static void main(String[] args) { @@ -510,7 +508,7 @@ public class CassandraClient8 extends DB { vals.put("age", new StringByteIterator("57")); vals.put("middlename", new StringByteIterator("bradley")); vals.put("favoritecolor", new StringByteIterator("blue")); - int res = cli.insert("usertable", "BrianFrankCooper", vals); + Status res = cli.insert("usertable", "BrianFrankCooper", vals); System.out.println("Result of insert: " + res); HashMap<String, ByteIterator> result = new HashMap<String, ByteIterator>(); diff --git a/cassandra2/src/main/java/com/yahoo/ycsb/db/CassandraCQLClient.java b/cassandra2/src/main/java/com/yahoo/ycsb/db/CassandraCQLClient.java index eca2a6779fec791e7bc4313c5e41312bfda9e073..9f093daf89aa9d2d27f6fce34eeaadb87f01467a 100644 --- a/cassandra2/src/main/java/com/yahoo/ycsb/db/CassandraCQLClient.java +++ b/cassandra2/src/main/java/com/yahoo/ycsb/db/CassandraCQLClient.java @@ -35,6 +35,7 @@ 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 java.nio.ByteBuffer; import java.util.HashMap; @@ -58,10 +59,6 @@ public class CassandraCQLClient extends DB { private static ConsistencyLevel readConsistencyLevel = ConsistencyLevel.ONE; private static ConsistencyLevel writeConsistencyLevel = ConsistencyLevel.ONE; - public static final int OK = 0; - public static final int ERR = -1; - public static final int NOT_FOUND = -3; - public static final String YCSB_KEY = "y_id"; public static final String KEYSPACE_PROPERTY = "cassandra.keyspace"; public static final String KEYSPACE_PROPERTY_DEFAULT = "ycsb"; @@ -214,7 +211,7 @@ public class CassandraCQLClient extends DB { * @return Zero on success, a non-zero error code on error */ @Override - public int read(String table, String key, Set<String> fields, + public Status read(String table, String key, Set<String> fields, HashMap<String, ByteIterator> result) { try { Statement stmt; @@ -240,7 +237,7 @@ public class CassandraCQLClient extends DB { ResultSet rs = session.execute(stmt); if (rs.isExhausted()) { - return NOT_FOUND; + return Status.NOT_FOUND; } // Should be only 1 row @@ -256,12 +253,12 @@ public class CassandraCQLClient extends DB { } } - return OK; + return Status.OK; } catch (Exception e) { e.printStackTrace(); System.out.println("Error reading key: " + key); - return ERR; + return Status.ERROR; } } @@ -287,7 +284,7 @@ public class CassandraCQLClient extends DB { * @return Zero on success, a non-zero error code on error */ @Override - public int scan(String table, String startkey, int recordcount, + public Status scan(String table, String startkey, int recordcount, Set<String> fields, Vector<HashMap<String, ByteIterator>> result) { try { @@ -347,12 +344,12 @@ public class CassandraCQLClient extends DB { result.add(tuple); } - return OK; + return Status.OK; } catch (Exception e) { e.printStackTrace(); System.out.println("Error scanning with startkey: " + startkey); - return ERR; + return Status.ERROR; } } @@ -371,7 +368,7 @@ public class CassandraCQLClient extends DB { * @return Zero on success, a non-zero error code on error */ @Override - public int update(String table, String key, + public Status update(String table, String key, HashMap<String, ByteIterator> values) { // Insert and updates provide the same functionality return insert(table, key, values); @@ -391,7 +388,7 @@ public class CassandraCQLClient extends DB { * @return Zero on success, a non-zero error code on error */ @Override - public int insert(String table, String key, + public Status insert(String table, String key, HashMap<String, ByteIterator> values) { try { @@ -417,12 +414,12 @@ public class CassandraCQLClient extends DB { ResultSet rs = session.execute(insertStmt); - return OK; + return Status.OK; } catch (Exception e) { e.printStackTrace(); } - return ERR; + return Status.ERROR; } /** @@ -435,7 +432,7 @@ public class CassandraCQLClient extends DB { * @return Zero on success, a non-zero error code on error */ @Override - public int delete(String table, String key) { + public Status delete(String table, String key) { try { Statement stmt; @@ -450,13 +447,13 @@ public class CassandraCQLClient extends DB { ResultSet rs = session.execute(stmt); - return OK; + return Status.OK; } catch (Exception e) { e.printStackTrace(); System.out.println("Error deleting key: " + key); } - return ERR; + return Status.ERROR; } } diff --git a/cassandra2/src/test/java/com/yahoo/ycsb/db/CassandraCQLClientTest.java b/cassandra2/src/test/java/com/yahoo/ycsb/db/CassandraCQLClientTest.java index f4339d55a7f0a1540d6475fe2cc45627a3860fd4..bc73a73710506b957e39ce80ab730da908ea6654 100644 --- a/cassandra2/src/test/java/com/yahoo/ycsb/db/CassandraCQLClientTest.java +++ b/cassandra2/src/test/java/com/yahoo/ycsb/db/CassandraCQLClientTest.java @@ -33,6 +33,7 @@ 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.ByteIterator; +import com.yahoo.ycsb.Status; import com.yahoo.ycsb.StringByteIterator; import com.yahoo.ycsb.measurements.Measurements; import com.yahoo.ycsb.workloads.CoreWorkload; @@ -101,9 +102,9 @@ public class CassandraCQLClientTest { @Test public void testReadMissingRow() throws Exception { final HashMap<String, ByteIterator> result = new HashMap<String, ByteIterator>(); - final int status = client.read(TABLE, "Missing row", null, result); + final Status status = client.read(TABLE, "Missing row", null, result); assertThat(result.size(), is(0)); - assertThat(status, is(CassandraCQLClient.NOT_FOUND)); + assertThat(status, is(Status.NOT_FOUND)); } private void insertRow() { @@ -121,8 +122,8 @@ public class CassandraCQLClientTest { insertRow(); final HashMap<String, ByteIterator> result = new HashMap<String, ByteIterator>(); - final int status = client.read(CoreWorkload.table, DEFAULT_ROW_KEY, null, result); - assertThat(status, is(CassandraCQLClient.OK)); + final Status status = client.read(CoreWorkload.table, DEFAULT_ROW_KEY, null, result); + assertThat(status, is(Status.OK)); assertThat(result.entrySet(), hasSize(11)); assertThat(result, hasEntry("field2", null)); @@ -142,8 +143,8 @@ public class CassandraCQLClientTest { insertRow(); final HashMap<String, ByteIterator> result = new HashMap<String, ByteIterator>(); final Set<String> fields = Sets.newHashSet("field1"); - final int status = client.read(CoreWorkload.table, DEFAULT_ROW_KEY, fields, result); - assertThat(status, is(CassandraCQLClient.OK)); + final Status status = client.read(CoreWorkload.table, DEFAULT_ROW_KEY, fields, result); + assertThat(status, is(Status.OK)); assertThat(result.entrySet(), hasSize(1)); final Map<String, String> strResult = StringByteIterator.getStringMap(result); assertThat(strResult, hasEntry("field1", "value2")); @@ -156,8 +157,8 @@ public class CassandraCQLClientTest { input.put("field0", "value1"); input.put("field1", "value2"); - final int status = client.insert(TABLE, key, StringByteIterator.getByteIteratorMap(input)); - assertThat(status, is(CassandraCQLClient.OK)); + final Status status = client.insert(TABLE, key, StringByteIterator.getByteIteratorMap(input)); + assertThat(status, is(Status.OK)); // Verify result final Select selectStmt = diff --git a/core/src/main/java/com/yahoo/ycsb/BasicDB.java b/core/src/main/java/com/yahoo/ycsb/BasicDB.java index 0eff6f3808f0197439a581c36b05a384846e367e..dc34500a2117263c72bc40208e01a8eba6cdba8d 100644 --- a/core/src/main/java/com/yahoo/ycsb/BasicDB.java +++ b/core/src/main/java/com/yahoo/ycsb/BasicDB.java @@ -109,7 +109,7 @@ public class BasicDB extends DB * @param result A HashMap of field/value pairs for the result * @return Zero on success, a non-zero error code on error */ - public int read(String table, String key, Set<String> fields, HashMap<String,ByteIterator> result) + public Status read(String table, String key, Set<String> fields, HashMap<String,ByteIterator> result) { delay(); @@ -131,7 +131,7 @@ public class BasicDB extends DB System.out.println("]"); } - return 0; + return Status.OK; } /** @@ -144,7 +144,7 @@ public class BasicDB extends DB * @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 int scan(String table, String startkey, int recordcount, Set<String> fields, Vector<HashMap<String,ByteIterator>> result) + public Status scan(String table, String startkey, int recordcount, Set<String> fields, Vector<HashMap<String,ByteIterator>> result) { delay(); @@ -166,7 +166,7 @@ public class BasicDB extends DB System.out.println("]"); } - return 0; + return Status.OK; } /** @@ -178,7 +178,7 @@ public class BasicDB extends DB * @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 int update(String table, String key, HashMap<String,ByteIterator> values) + public Status update(String table, String key, HashMap<String,ByteIterator> values) { delay(); @@ -195,7 +195,7 @@ public class BasicDB extends DB System.out.println("]"); } - return 0; + return Status.OK; } /** @@ -207,7 +207,7 @@ public class BasicDB extends DB * @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 int insert(String table, String key, HashMap<String,ByteIterator> values) + public Status insert(String table, String key, HashMap<String,ByteIterator> values) { delay(); @@ -225,7 +225,7 @@ public class BasicDB extends DB System.out.println("]"); } - return 0; + return Status.OK; } @@ -236,7 +236,7 @@ public class BasicDB extends DB * @param key The record key of the record to delete. * @return Zero on success, a non-zero error code on error */ - public int delete(String table, String key) + public Status delete(String table, String key) { delay(); @@ -245,7 +245,7 @@ public class BasicDB extends DB System.out.println("DELETE "+table+" "+key); } - return 0; + return Status.OK; } /** diff --git a/core/src/main/java/com/yahoo/ycsb/CommandLine.java b/core/src/main/java/com/yahoo/ycsb/CommandLine.java index c3f06549900263c8012d402d639b9d7deb3fb941..02885730ec76ce1d4ceab0aa50b3247543bd1c19 100644 --- a/core/src/main/java/com/yahoo/ycsb/CommandLine.java +++ b/core/src/main/java/com/yahoo/ycsb/CommandLine.java @@ -295,8 +295,8 @@ public class CommandLine } HashMap<String,ByteIterator> result=new HashMap<String,ByteIterator>(); - int ret=db.read(table,tokens[1],fields,result); - System.out.println("Return code: "+ret); + Status ret=db.read(table,tokens[1],fields,result); + System.out.println("Return code: "+ret.getName()); for (Map.Entry<String,ByteIterator> ent : result.entrySet()) { System.out.println(ent.getKey()+"="+ent.getValue()); @@ -324,8 +324,8 @@ public class CommandLine } Vector<HashMap<String,ByteIterator>> results=new Vector<HashMap<String,ByteIterator>>(); - int ret=db.scan(table,tokens[1],Integer.parseInt(tokens[2]),fields,results); - System.out.println("Return code: "+ret); + Status ret=db.scan(table,tokens[1],Integer.parseInt(tokens[2]),fields,results); + System.out.println("Result: "+ret.getName()); int record=0; if (results.size()==0) { @@ -362,8 +362,8 @@ public class CommandLine values.put(nv[0],new StringByteIterator(nv[1])); } - int ret=db.update(table,tokens[1],values); - System.out.println("Return code: "+ret); + Status ret=db.update(table,tokens[1],values); + System.out.println("Result: "+ret.getName()); } } else if (tokens[0].compareTo("insert")==0) @@ -382,8 +382,8 @@ public class CommandLine values.put(nv[0],new StringByteIterator(nv[1])); } - int ret=db.insert(table,tokens[1],values); - System.out.println("Return code: "+ret); + Status ret=db.insert(table,tokens[1],values); + System.out.println("Result: "+ret.getName()); } } else if (tokens[0].compareTo("delete")==0) @@ -394,8 +394,8 @@ public class CommandLine } else { - int ret=db.delete(table,tokens[1]); - System.out.println("Return code: "+ret); + Status ret=db.delete(table,tokens[1]); + System.out.println("Return result: "+ret.getName()); } } else diff --git a/core/src/main/java/com/yahoo/ycsb/DB.java b/core/src/main/java/com/yahoo/ycsb/DB.java index 91a695f140623729b7a7dbd8b8ebf087ff91ba9f..f9fec3a93922c5297ae89899f1c1a2f61e3f768c 100644 --- a/core/src/main/java/com/yahoo/ycsb/DB.java +++ b/core/src/main/java/com/yahoo/ycsb/DB.java @@ -88,9 +88,9 @@ public abstract class DB * @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 or "not found". + * @return The result of the operation. */ - public abstract int read(String table, String key, Set<String> fields, HashMap<String,ByteIterator> result); + public abstract Status read(String table, String key, Set<String> fields, HashMap<String,ByteIterator> result); /** * 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. @@ -100,9 +100,9 @@ public abstract class DB * @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. See this class's description for a discussion of error codes. + * @return The result of the operation. */ - public abstract int scan(String table, String startkey, int recordcount, Set<String> fields, Vector<HashMap<String,ByteIterator>> result); + public abstract Status scan(String table, String startkey, int recordcount, Set<String> fields, Vector<HashMap<String,ByteIterator>> result); /** * Update a record in the database. Any field/value pairs in the specified values HashMap will be written into the record with the specified @@ -111,9 +111,9 @@ public abstract class DB * @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. See this class's description for a discussion of error codes. + * @return The result of the operation. */ - public abstract int update(String table, String key, HashMap<String,ByteIterator> values); + public abstract Status update(String table, String key, HashMap<String,ByteIterator> 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 @@ -122,16 +122,16 @@ public abstract class DB * @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. See this class's description for a discussion of error codes. + * @return The result of the operation. */ - public abstract int insert(String table, String key, HashMap<String,ByteIterator> values); + public abstract Status insert(String table, String key, HashMap<String,ByteIterator> values); /** * 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. See this class's description for a discussion of error codes. + * @return The result of the operation. */ - public abstract int delete(String table, String key); + public abstract Status delete(String table, String key); } diff --git a/core/src/main/java/com/yahoo/ycsb/DBWrapper.java b/core/src/main/java/com/yahoo/ycsb/DBWrapper.java index 50b314bb75196708eca4b030e9d66d78e9954ddc..35cf26a5dfce891f13cb77914325a49b35ea6005 100644 --- a/core/src/main/java/com/yahoo/ycsb/DBWrapper.java +++ b/core/src/main/java/com/yahoo/ycsb/DBWrapper.java @@ -83,16 +83,16 @@ public class DBWrapper extends DB * @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 + * @return The result of the operation. */ - public int read(String table, String key, Set<String> fields, HashMap<String,ByteIterator> result) + public Status read(String table, String key, Set<String> fields, HashMap<String,ByteIterator> result) { long ist=_measurements.getIntendedtartTimeNs(); long st = System.nanoTime(); - int res=_db.read(table,key,fields,result); + Status res=_db.read(table,key,fields,result); long en=System.nanoTime(); measure("READ",ist, st, en); - _measurements.reportReturnCode("READ",res); + _measurements.reportStatus("READ",res); return res; } @@ -104,16 +104,16 @@ public class DBWrapper extends DB * @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 + * @return The result of the operation. */ - public int scan(String table, String startkey, int recordcount, Set<String> fields, Vector<HashMap<String,ByteIterator>> result) + public Status scan(String table, String startkey, int recordcount, Set<String> fields, Vector<HashMap<String,ByteIterator>> result) { long ist=_measurements.getIntendedtartTimeNs(); long st = System.nanoTime(); - int res=_db.scan(table,startkey,recordcount,fields,result); + Status res=_db.scan(table,startkey,recordcount,fields,result); long en=System.nanoTime(); measure("SCAN",ist, st, en); - _measurements.reportReturnCode("SCAN",res); + _measurements.reportStatus("SCAN",res); return res; } @@ -129,16 +129,16 @@ public class DBWrapper extends DB * @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 + * @return The result of the operation. */ - public int update(String table, String key, HashMap<String,ByteIterator> values) + public Status update(String table, String key, HashMap<String,ByteIterator> values) { long ist=_measurements.getIntendedtartTimeNs(); long st = System.nanoTime(); - int res=_db.update(table,key,values); + Status res=_db.update(table,key,values); long en=System.nanoTime(); measure("UPDATE",ist, st, en); - _measurements.reportReturnCode("UPDATE",res); + _measurements.reportStatus("UPDATE",res); return res; } @@ -149,16 +149,16 @@ public class DBWrapper extends DB * @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 + * @return The result of the operation. */ - public int insert(String table, String key, HashMap<String,ByteIterator> values) + public Status insert(String table, String key, HashMap<String,ByteIterator> values) { long ist=_measurements.getIntendedtartTimeNs(); long st = System.nanoTime(); - int res=_db.insert(table,key,values); + Status res=_db.insert(table,key,values); long en=System.nanoTime(); measure("INSERT",ist, st, en); - _measurements.reportReturnCode("INSERT",res); + _measurements.reportStatus("INSERT",res); return res; } @@ -167,16 +167,16 @@ public class DBWrapper extends DB * * @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 + * @return The result of the operation. */ - public int delete(String table, String key) + public Status delete(String table, String key) { long ist=_measurements.getIntendedtartTimeNs(); long st = System.nanoTime(); - int res=_db.delete(table,key); + Status res=_db.delete(table,key); long en=System.nanoTime(); measure("DELETE",ist, st, en); - _measurements.reportReturnCode("DELETE",res); + _measurements.reportStatus("DELETE",res); return res; } } diff --git a/core/src/main/java/com/yahoo/ycsb/GoodBadUglyDB.java b/core/src/main/java/com/yahoo/ycsb/GoodBadUglyDB.java index 706438eb879bf93515dd31cefa6252696481c409..e576a84268b104a12410bc80dae0a36098a6f5d5 100644 --- a/core/src/main/java/com/yahoo/ycsb/GoodBadUglyDB.java +++ b/core/src/main/java/com/yahoo/ycsb/GoodBadUglyDB.java @@ -96,9 +96,9 @@ public class GoodBadUglyDB extends DB { * @param result A HashMap of field/value pairs for the result * @return Zero on success, a non-zero error code on error */ - public int read(String table, String key, Set<String> fields, HashMap<String, ByteIterator> result) { + public Status read(String table, String key, Set<String> fields, HashMap<String, ByteIterator> result) { delay(); - return 0; + return Status.OK; } /** @@ -112,11 +112,11 @@ public class GoodBadUglyDB extends DB { * @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 int scan(String table, String startkey, int recordcount, Set<String> fields, + public Status scan(String table, String startkey, int recordcount, Set<String> fields, Vector<HashMap<String, ByteIterator>> result) { delay(); - return 0; + return Status.OK; } /** @@ -128,10 +128,10 @@ public class GoodBadUglyDB extends DB { * @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 int update(String table, String key, HashMap<String, ByteIterator> values) { + public Status update(String table, String key, HashMap<String, ByteIterator> values) { delay(); - return 0; + return Status.OK; } /** @@ -143,9 +143,9 @@ public class GoodBadUglyDB extends DB { * @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 int insert(String table, String key, HashMap<String, ByteIterator> values) { + public Status insert(String table, String key, HashMap<String, ByteIterator> values) { delay(); - return 0; + return Status.OK; } /** @@ -155,8 +155,8 @@ public class GoodBadUglyDB extends DB { * @param key The record key of the record to delete. * @return Zero on success, a non-zero error code on error */ - public int delete(String table, String key) { + public Status delete(String table, String key) { delay(); - return 0; + return Status.OK; } } diff --git a/core/src/main/java/com/yahoo/ycsb/Status.java b/core/src/main/java/com/yahoo/ycsb/Status.java new file mode 100644 index 0000000000000000000000000000000000000000..cda81477114dcd93b9f69bc8291ce427360f415e --- /dev/null +++ b/core/src/main/java/com/yahoo/ycsb/Status.java @@ -0,0 +1,72 @@ +package com.yahoo.ycsb; + +/** + * The result of an operation. + */ +public class Status { + private final String name; + private final String description; + + + /** + * @param name A short name for the status. + * @param description A description of the status. + */ + public Status(String name, String description) { + super(); + this.name = name; + this.description = description; + } + + public String getName() { + return name; + } + + public String getDescription() { + return description; + } + + @Override + public String toString() { + return "Status [name=" + name + ", description=" + description + "]"; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((description == null) ? 0 : description.hashCode()); + result = prime * result + ((name == null) ? 0 : name.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Status other = (Status) obj; + if (description == null) { + if (other.description != null) + return false; + } else if (!description.equals(other.description)) + return false; + if (name == null) { + if (other.name != null) + return false; + } else if (!name.equals(other.name)) + return false; + return true; + } + + public static final Status OK = new Status("OK", "The operation completed successfully."); + public static final Status ERROR = new Status("ERROR", "The operation failed."); + public static final Status NOT_FOUND = new Status("NOT_FOUND", "The requested record was not found."); + public static final Status NOT_IMPLEMENTED = new Status("NOT_IMPLEMENTED", "The operation is not implemented for the current binding."); + public static final Status UNEXPECTED_STATE = new Status("UNEXPECTED_STATE", "The operation reported success, but the result was not as expected."); + +} + diff --git a/core/src/main/java/com/yahoo/ycsb/measurements/Measurements.java b/core/src/main/java/com/yahoo/ycsb/measurements/Measurements.java index e91375849e09c018bdd8f61bfa69f4e308086e17..c1b072701fa2a654a358ec3d31b2cbf478f388d5 100644 --- a/core/src/main/java/com/yahoo/ycsb/measurements/Measurements.java +++ b/core/src/main/java/com/yahoo/ycsb/measurements/Measurements.java @@ -17,12 +17,13 @@ package com.yahoo.ycsb.measurements; +import com.yahoo.ycsb.Status; +import com.yahoo.ycsb.measurements.exporter.MeasurementsExporter; + import java.io.IOException; import java.util.Properties; import java.util.concurrent.ConcurrentHashMap; -import com.yahoo.ycsb.measurements.exporter.MeasurementsExporter; - /** * Collects latency measurements, and reports them when requested. * @@ -237,12 +238,12 @@ public class Measurements /** * Report a return code for a single DB operation. */ - public void reportReturnCode(String operation, int code) + public void reportStatus(final String operation, final Status status) { OneMeasurement m = _measurementInterval==1 ? getOpIntendedMeasurement(operation) : getOpMeasurement(operation); - m.reportReturnCode(code); + m.reportStatus(status); } /** diff --git a/core/src/main/java/com/yahoo/ycsb/measurements/OneMeasurement.java b/core/src/main/java/com/yahoo/ycsb/measurements/OneMeasurement.java index 3c613fe30c707e11079eb0ca4e9f11e36db35b4c..8d4d22da2754712d95c91e352012cd3c15f0f783 100644 --- a/core/src/main/java/com/yahoo/ycsb/measurements/OneMeasurement.java +++ b/core/src/main/java/com/yahoo/ycsb/measurements/OneMeasurement.java @@ -17,20 +17,21 @@ package com.yahoo.ycsb.measurements; +import com.yahoo.ycsb.Status; +import com.yahoo.ycsb.measurements.exporter.MeasurementsExporter; + import java.io.IOException; -import java.util.concurrent.ConcurrentHashMap; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicInteger; -import com.yahoo.ycsb.measurements.exporter.MeasurementsExporter; - /** * A single measured metric (such as READ LATENCY) */ public abstract class OneMeasurement { private final String _name; - private final ConcurrentHashMap<Integer, AtomicInteger> _returncodes; + private final ConcurrentHashMap<Status, AtomicInteger> _returncodes; public String getName() { return _name; @@ -41,7 +42,7 @@ public abstract class OneMeasurement { */ public OneMeasurement(String _name) { this._name = _name; - this._returncodes = new ConcurrentHashMap<Integer, AtomicInteger>(); + this._returncodes = new ConcurrentHashMap<Status, AtomicInteger>(); } public abstract void measure(int latency); @@ -51,12 +52,11 @@ public abstract class OneMeasurement { /** * No need for synchronization, using CHM to deal with that */ - public void reportReturnCode(int code) { - Integer Icode = code; - AtomicInteger counter = _returncodes.get(Icode); + public void reportStatus(Status status) { + AtomicInteger counter = _returncodes.get(status); if (counter == null) { - AtomicInteger other = _returncodes.putIfAbsent(Icode, counter = new AtomicInteger()); + AtomicInteger other = _returncodes.putIfAbsent(status, counter = new AtomicInteger()); if (other != null) { counter = other; } @@ -73,9 +73,9 @@ public abstract class OneMeasurement { */ public abstract void exportMeasurements(MeasurementsExporter exporter) throws IOException; - protected final void exportReturnCodes(MeasurementsExporter exporter) throws IOException { - for (Map.Entry<Integer, AtomicInteger> entry : _returncodes.entrySet()) { - exporter.write(getName(), "Return=" + entry.getKey(), entry.getValue().get()); + protected final void exportStatusCounts(MeasurementsExporter exporter) throws IOException { + for (Map.Entry<Status, AtomicInteger> entry : _returncodes.entrySet()) { + exporter.write(getName(), "Return=" + entry.getKey().getName(), entry.getValue().get()); } } } diff --git a/core/src/main/java/com/yahoo/ycsb/measurements/OneMeasurementHdrHistogram.java b/core/src/main/java/com/yahoo/ycsb/measurements/OneMeasurementHdrHistogram.java index 0f20ae675d9b12022b1c1e1897705d2ffef7b4e5..a88c2b81a97f297f0e8295e7bf7cf36fcd6c6f8c 100644 --- a/core/src/main/java/com/yahoo/ycsb/measurements/OneMeasurementHdrHistogram.java +++ b/core/src/main/java/com/yahoo/ycsb/measurements/OneMeasurementHdrHistogram.java @@ -118,7 +118,7 @@ public class OneMeasurementHdrHistogram extends OneMeasurement { exporter.write(getName(), ordinal(percentile) + "PercentileLatency(us)", totalHistogram.getValueAtPercentile(percentile)); } - exportReturnCodes(exporter); + exportStatusCounts(exporter); } /** diff --git a/core/src/main/java/com/yahoo/ycsb/measurements/OneMeasurementHistogram.java b/core/src/main/java/com/yahoo/ycsb/measurements/OneMeasurementHistogram.java index 1c96e8db94e0e20815357b576fb9b6ee72c24c35..b03499f247b57abf288558954e4a328b53bb2715 100644 --- a/core/src/main/java/com/yahoo/ycsb/measurements/OneMeasurementHistogram.java +++ b/core/src/main/java/com/yahoo/ycsb/measurements/OneMeasurementHistogram.java @@ -119,7 +119,7 @@ public class OneMeasurementHistogram extends OneMeasurement } } - exportReturnCodes(exporter); + exportStatusCounts(exporter); for (int i=0; i<_buckets; i++) { diff --git a/core/src/main/java/com/yahoo/ycsb/measurements/OneMeasurementTimeSeries.java b/core/src/main/java/com/yahoo/ycsb/measurements/OneMeasurementTimeSeries.java index 8794f89639e1af72bac55b2013f7ba21175bb135..34805bc428b5b872caedc6cc2780ede0395727e8 100644 --- a/core/src/main/java/com/yahoo/ycsb/measurements/OneMeasurementTimeSeries.java +++ b/core/src/main/java/com/yahoo/ycsb/measurements/OneMeasurementTimeSeries.java @@ -135,7 +135,7 @@ public class OneMeasurementTimeSeries extends OneMeasurement // TODO: 95th and 99th percentile latency - exportReturnCodes(exporter); + exportStatusCounts(exporter); for (SeriesUnit unit : _measurements) { exporter.write(getName(), Long.toString(unit.time), unit.average); } diff --git a/core/src/main/java/com/yahoo/ycsb/measurements/TwoInOneMeasurement.java b/core/src/main/java/com/yahoo/ycsb/measurements/TwoInOneMeasurement.java index 0a191e4edccd9730c9eced2f8c2e9b94fe4052d0..37a385bb177c002171025a7d74e8dec743f6d99f 100644 --- a/core/src/main/java/com/yahoo/ycsb/measurements/TwoInOneMeasurement.java +++ b/core/src/main/java/com/yahoo/ycsb/measurements/TwoInOneMeasurement.java @@ -17,11 +17,12 @@ package com.yahoo.ycsb.measurements; -import java.io.IOException; +import com.yahoo.ycsb.Status; +import com.yahoo.ycsb.measurements.exporter.MeasurementsExporter; import org.HdrHistogram.Recorder; -import com.yahoo.ycsb.measurements.exporter.MeasurementsExporter; +import java.io.IOException; /** * delegates to 2 measurement instances. @@ -40,10 +41,11 @@ public class TwoInOneMeasurement extends OneMeasurement { /** * No need for synchronization, using CHM to deal with that * - * @see com.yahoo.ycsb.OneMeasurement#reportReturnCode(int) + * @see com.yahoo.ycsb.OneMeasurement#reportStatus(int) */ - public void reportReturnCode(int code) { - thing1.reportReturnCode(code); + @Override + public void reportStatus(final Status status) { + thing1.reportStatus(status); } /** @@ -52,6 +54,7 @@ public class TwoInOneMeasurement extends OneMeasurement { * * @see com.yahoo.ycsb.OneMeasurement#measure(int) */ + @Override public void measure(int latencyInMicros) { thing1.measure(latencyInMicros); thing2.measure(latencyInMicros); diff --git a/core/src/main/java/com/yahoo/ycsb/workloads/CoreWorkload.java b/core/src/main/java/com/yahoo/ycsb/workloads/CoreWorkload.java index ac625b74dda1395bad58e92dc2431135ce3a3e65..08d9b7b1b7b661bf578ed2073da98b81c8f525ef 100644 --- a/core/src/main/java/com/yahoo/ycsb/workloads/CoreWorkload.java +++ b/core/src/main/java/com/yahoo/ycsb/workloads/CoreWorkload.java @@ -546,7 +546,7 @@ public class CoreWorkload extends Workload int keynum=keysequence.nextInt(); String dbkey = buildKeyName(keynum); HashMap<String, ByteIterator> values = buildValues(dbkey); - if (db.insert(table,dbkey,values) == 0) + if (db.insert(table,dbkey,values).equals(Status.OK)) return true; else return false; diff --git a/couchbase/src/main/java/com/yahoo/ycsb/db/CouchbaseClient.java b/couchbase/src/main/java/com/yahoo/ycsb/db/CouchbaseClient.java index 6b072536be1f3c375a0f2053802478045b52c216..fb29c456006770257dcc66c4f0667d0bd3234c8e 100644 --- a/couchbase/src/main/java/com/yahoo/ycsb/db/CouchbaseClient.java +++ b/couchbase/src/main/java/com/yahoo/ycsb/db/CouchbaseClient.java @@ -25,17 +25,26 @@ import com.fasterxml.jackson.databind.node.ObjectNode; 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 net.spy.memcached.PersistTo; import net.spy.memcached.ReplicateTo; import net.spy.memcached.internal.OperationFuture; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.StringWriter; import java.io.Writer; import java.net.URI; -import java.util.*; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import java.util.Properties; +import java.util.Set; +import java.util.Vector; /** * A class that wraps the CouchbaseClient to allow it to be interfaced with YCSB. @@ -65,9 +74,6 @@ public class CouchbaseClient extends DB { public static final String REPLICATE_PROPERTY = "couchbase.replicateTo"; public static final String JSON_PROPERTY = "couchbase.json"; - public static final int OK = 0; - public static final int FAILURE = 1; - protected static final ObjectMapper JSON_MAPPER = new ObjectMapper(); private com.couchbase.client.CouchbaseClient client; @@ -156,7 +162,7 @@ public class CouchbaseClient extends DB { } @Override - public int read(final String table, final String key, final Set<String> fields, + public Status read(final String table, final String key, final Set<String> fields, final HashMap<String, ByteIterator> result) { String formattedKey = formatKey(table, key); @@ -164,16 +170,16 @@ public class CouchbaseClient extends DB { Object loaded = client.get(formattedKey); if (loaded == null) { - return FAILURE; + return Status.ERROR; } decode(loaded, fields, result); - return OK; + return Status.OK; } catch (Exception e) { if (log.isErrorEnabled()) { log.error("Could not read value for key " + formattedKey, e); } - return FAILURE; + return Status.ERROR; } } @@ -185,16 +191,16 @@ public class CouchbaseClient extends DB { * @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 FAILURE, because not implemented yet. + * @return Status.ERROR, because not implemented yet. */ @Override - public int scan(final String table, final String startkey, final int recordcount, + public Status scan(final String table, final String startkey, final int recordcount, final Set<String> fields, final Vector<HashMap<String, ByteIterator>> result) { - return FAILURE; + return Status.ERROR; } @Override - public int update(final String table, final String key, final HashMap<String, ByteIterator> values) { + public Status update(final String table, final String key, final HashMap<String, ByteIterator> values) { String formattedKey = formatKey(table, key); try { @@ -209,12 +215,12 @@ public class CouchbaseClient extends DB { if (log.isErrorEnabled()) { log.error("Could not update value for key " + formattedKey, e); } - return FAILURE; + return Status.ERROR; } } @Override - public int insert(final String table, final String key, final HashMap<String, ByteIterator> values) { + public Status insert(final String table, final String key, final HashMap<String, ByteIterator> values) { String formattedKey = formatKey(table, key); try { @@ -229,12 +235,12 @@ public class CouchbaseClient extends DB { if (log.isErrorEnabled()) { log.error("Could not insert value for key " + formattedKey, e); } - return FAILURE; + return Status.ERROR; } } @Override - public int delete(final String table, final String key) { + public Status delete(final String table, final String key) { String formattedKey = formatKey(table, key); try { @@ -244,7 +250,7 @@ public class CouchbaseClient extends DB { if (log.isErrorEnabled()) { log.error("Could not delete value for key " + formattedKey, e); } - return FAILURE; + return Status.ERROR; } } @@ -265,11 +271,11 @@ public class CouchbaseClient extends DB { * @param future the future to potentially verify. * @return the status of the future result. */ - private int checkFutureStatus(final OperationFuture<?> future) { + private Status checkFutureStatus(final OperationFuture<?> future) { if (checkFutures) { - return future.getStatus().isSuccess() ? OK : FAILURE; + return future.getStatus().isSuccess() ? Status.OK : Status.ERROR; } else { - return OK; + return Status.OK; } } diff --git a/dynamodb/src/main/java/com/yahoo/ycsb/db/DynamoDBClient.java b/dynamodb/src/main/java/com/yahoo/ycsb/db/DynamoDBClient.java index 56808b8ccfa07d8a8070e10acd4bf75cd62aec94..8ff6652a56cb1a1689a54c9d0908690cd12d0553 100644 --- a/dynamodb/src/main/java/com/yahoo/ycsb/db/DynamoDBClient.java +++ b/dynamodb/src/main/java/com/yahoo/ycsb/db/DynamoDBClient.java @@ -16,24 +16,12 @@ package com.yahoo.ycsb.db; -import java.io.FileInputStream; -import java.util.HashMap; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Properties; -import java.util.Set; -import java.util.Vector; -import java.io.File; - -import org.apache.log4j.Level; -import org.apache.log4j.Logger; - +import com.amazonaws.AmazonClientException; +import com.amazonaws.AmazonServiceException; +import com.amazonaws.ClientConfiguration; import com.amazonaws.auth.AWSCredentials; import com.amazonaws.auth.PropertiesCredentials; -import com.amazonaws.ClientConfiguration; import com.amazonaws.services.dynamodb.AmazonDynamoDBClient; -import com.amazonaws.AmazonClientException; -import com.amazonaws.AmazonServiceException; import com.amazonaws.services.dynamodb.model.AttributeValue; import com.amazonaws.services.dynamodb.model.AttributeValueUpdate; import com.amazonaws.services.dynamodb.model.DeleteItemRequest; @@ -49,17 +37,25 @@ import com.amazonaws.services.dynamodb.model.UpdateItemRequest; 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 org.apache.log4j.Level; +import org.apache.log4j.Logger; + +import java.io.File; +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; +import java.util.Vector; + /** * DynamoDB v1.3.14 client for YCSB */ public class DynamoDBClient extends DB { - private static final int OK = 0; - private static final int SERVER_ERROR = 1; - private static final int CLIENT_ERROR = 2; private AmazonDynamoDBClient dynamoDB; private String primaryKeyName; private boolean debug = false; @@ -119,7 +115,7 @@ public class DynamoDBClient extends DB { } @Override - public int read(String table, String key, Set<String> fields, + public Status read(String table, String key, Set<String> fields, HashMap<String, ByteIterator> result) { logger.debug("readkey: " + key + " from table: " + table); @@ -132,7 +128,7 @@ public class DynamoDBClient extends DB { res = dynamoDB.getItem(req); }catch (AmazonServiceException ex) { logger.error(ex.getMessage()); - return SERVER_ERROR; + return Status.ERROR; }catch (AmazonClientException ex){ logger.error(ex.getMessage()); return CLIENT_ERROR; @@ -143,11 +139,11 @@ public class DynamoDBClient extends DB { result.putAll(extractResult(res.getItem())); logger.debug("Result: " + res.toString()); } - return OK; + return Status.OK; } @Override - public int scan(String table, String startkey, int recordcount, + public Status scan(String table, String startkey, int recordcount, Set<String> fields, Vector<HashMap<String, ByteIterator>> result) { logger.debug("scan " + recordcount + " records from key: " + startkey + " on table: " + table); /* @@ -163,7 +159,7 @@ public class DynamoDBClient extends DB { gres = dynamoDB.getItem(greq); }catch (AmazonServiceException ex) { logger.error(ex.getMessage()); - return SERVER_ERROR; + return Status.ERROR; }catch (AmazonClientException ex){ logger.error(ex.getMessage()); return CLIENT_ERROR; @@ -187,7 +183,7 @@ public class DynamoDBClient extends DB { }catch (AmazonServiceException ex) { logger.error(ex.getMessage()); ex.printStackTrace(); - return SERVER_ERROR; + return Status.ERROR; }catch (AmazonClientException ex){ logger.error(ex.getMessage()); ex.printStackTrace(); @@ -202,11 +198,11 @@ public class DynamoDBClient extends DB { } - return OK; + return Status.OK; } @Override - public int update(String table, String key, HashMap<String, ByteIterator> values) { + public Status update(String table, String key, HashMap<String, ByteIterator> values) { logger.debug("updatekey: " + key + " from table: " + table); Map<String, AttributeValueUpdate> attributes = new HashMap<String, AttributeValueUpdate>( @@ -223,16 +219,16 @@ public class DynamoDBClient extends DB { dynamoDB.updateItem(req); }catch (AmazonServiceException ex) { logger.error(ex.getMessage()); - return SERVER_ERROR; + return Status.ERROR; }catch (AmazonClientException ex){ logger.error(ex.getMessage()); return CLIENT_ERROR; } - return OK; + return Status.OK; } @Override - public int insert(String table, String key,HashMap<String, ByteIterator> values) { + public Status insert(String table, String key,HashMap<String, ByteIterator> values) { logger.debug("insertkey: " + primaryKeyName + "-" + key + " from table: " + table); Map<String, AttributeValue> attributes = createAttributes(values); // adding primary key @@ -244,16 +240,16 @@ public class DynamoDBClient extends DB { res = dynamoDB.putItem(putItemRequest); }catch (AmazonServiceException ex) { logger.error(ex.getMessage()); - return SERVER_ERROR; + return Status.ERROR; }catch (AmazonClientException ex){ logger.error(ex.getMessage()); return CLIENT_ERROR; } - return OK; + return Status.OK; } @Override - public int delete(String table, String key) { + public Status delete(String table, String key) { logger.debug("deletekey: " + key + " from table: " + table); DeleteItemRequest req = new DeleteItemRequest(table, createPrimaryKey(key)); DeleteItemResult res = null; @@ -262,12 +258,12 @@ public class DynamoDBClient extends DB { res = dynamoDB.deleteItem(req); }catch (AmazonServiceException ex) { logger.error(ex.getMessage()); - return SERVER_ERROR; + return Status.ERROR; }catch (AmazonClientException ex){ logger.error(ex.getMessage()); return CLIENT_ERROR; } - return OK; + return Status.OK; } private static Map<String, AttributeValue> createAttributes( @@ -297,4 +293,6 @@ public class DynamoDBClient extends DB { Key k = new Key().withHashKeyElement(new AttributeValue().withS(key)); return k; } + + private final static Status CLIENT_ERROR = new Status("CLIENT_ERROR", "An error occurred on the client."); } diff --git a/elasticsearch/src/main/java/com/yahoo/ycsb/db/ElasticSearchClient.java b/elasticsearch/src/main/java/com/yahoo/ycsb/db/ElasticSearchClient.java index c86baf7f3dba1402356fb7addad297f302785306..927b304c9be19f7889425122870a387e70846d2b 100644 --- a/elasticsearch/src/main/java/com/yahoo/ycsb/db/ElasticSearchClient.java +++ b/elasticsearch/src/main/java/com/yahoo/ycsb/db/ElasticSearchClient.java @@ -17,33 +17,36 @@ package com.yahoo.ycsb.db; +import static org.elasticsearch.common.settings.ImmutableSettings.settingsBuilder; +import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder; +import static org.elasticsearch.index.query.FilterBuilders.rangeFilter; +import static org.elasticsearch.index.query.QueryBuilders.matchAllQuery; +import static org.elasticsearch.node.NodeBuilder.nodeBuilder; + 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 java.util.HashMap; -import java.util.Map.Entry; -import java.util.Properties; -import java.util.Set; -import java.util.Vector; + import org.elasticsearch.action.get.GetResponse; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.client.Client; import org.elasticsearch.client.Requests; -import static org.elasticsearch.common.settings.ImmutableSettings.*; - import org.elasticsearch.client.transport.TransportClient; import org.elasticsearch.common.settings.ImmutableSettings.Builder; import org.elasticsearch.common.transport.InetSocketTransportAddress; import org.elasticsearch.common.xcontent.XContentBuilder; -import static org.elasticsearch.common.xcontent.XContentFactory.*; -import static org.elasticsearch.index.query.FilterBuilders.*; -import static org.elasticsearch.index.query.QueryBuilders.*; import org.elasticsearch.index.query.RangeFilterBuilder; import org.elasticsearch.node.Node; -import static org.elasticsearch.node.NodeBuilder.*; import org.elasticsearch.search.SearchHit; +import java.util.HashMap; +import java.util.Map.Entry; +import java.util.Properties; +import java.util.Set; +import java.util.Vector; + /** * ElasticSearch client for YCSB framework. * @@ -152,7 +155,7 @@ public class ElasticSearchClient extends DB { * description for a discussion of error codes. */ @Override - public int insert(String table, String key, HashMap<String, ByteIterator> values) { + public Status insert(String table, String key, HashMap<String, ByteIterator> values) { try { final XContentBuilder doc = jsonBuilder().startObject(); @@ -167,11 +170,11 @@ public class ElasticSearchClient extends DB { .execute() .actionGet(); - return 0; + return Status.OK; } catch (Exception e) { e.printStackTrace(); } - return 1; + return Status.ERROR; } /** @@ -183,16 +186,16 @@ public class ElasticSearchClient extends DB { * description for a discussion of error codes. */ @Override - public int delete(String table, String key) { + public Status delete(String table, String key) { try { client.prepareDelete(indexKey, table, key) .execute() .actionGet(); - return 0; + return Status.OK; } catch (Exception e) { e.printStackTrace(); } - return 1; + return Status.ERROR; } /** @@ -206,7 +209,7 @@ public class ElasticSearchClient extends DB { * @return Zero on success, a non-zero error code on error or "not found". */ @Override - public int read(String table, String key, Set<String> fields, HashMap<String, ByteIterator> result) { + public Status read(String table, String key, Set<String> fields, HashMap<String, ByteIterator> result) { try { final GetResponse response = client.prepareGet(indexKey, table, key) .execute() @@ -222,12 +225,12 @@ public class ElasticSearchClient extends DB { result.put(field, new StringByteIterator((String) response.getSource().get(field))); } } - return 0; + return Status.OK; } } catch (Exception e) { e.printStackTrace(); } - return 1; + return Status.ERROR; } /** @@ -242,7 +245,7 @@ public class ElasticSearchClient extends DB { * description for a discussion of error codes. */ @Override - public int update(String table, String key, HashMap<String, ByteIterator> values) { + public Status update(String table, String key, HashMap<String, ByteIterator> values) { try { final GetResponse response = client.prepareGet(indexKey, table, key) .execute() @@ -258,13 +261,13 @@ public class ElasticSearchClient extends DB { .execute() .actionGet(); - return 0; + return Status.OK; } } catch (Exception e) { e.printStackTrace(); } - return 1; + return Status.ERROR; } /** @@ -281,7 +284,7 @@ public class ElasticSearchClient extends DB { * description for a discussion of error codes. */ @Override - public int scan(String table, String startkey, int recordcount, Set<String> fields, Vector<HashMap<String, ByteIterator>> result) { + public Status scan(String table, String startkey, int recordcount, Set<String> fields, Vector<HashMap<String, ByteIterator>> result) { try { final RangeFilterBuilder filter = rangeFilter("_id").gte(startkey); final SearchResponse response = client.prepareSearch(indexKey) @@ -304,10 +307,10 @@ public class ElasticSearchClient extends DB { result.add(entry); } - return 0; + return Status.OK; } catch (Exception e) { e.printStackTrace(); } - return 1; + return Status.ERROR; } } diff --git a/elasticsearch/src/test/java/com/yahoo/ycsb/db/ElasticSearchClientTest.java b/elasticsearch/src/test/java/com/yahoo/ycsb/db/ElasticSearchClientTest.java index 72177f494c3f21ad57706d470fa49d6629f2f0db..cc559c7f39d9df27972098efeec7dfefab9fbe08 100644 --- a/elasticsearch/src/test/java/com/yahoo/ycsb/db/ElasticSearchClientTest.java +++ b/elasticsearch/src/test/java/com/yahoo/ycsb/db/ElasticSearchClientTest.java @@ -21,19 +21,23 @@ */ package com.yahoo.ycsb.db; +import static org.testng.AssertJUnit.assertEquals; + import com.yahoo.ycsb.ByteIterator; import com.yahoo.ycsb.DBException; +import com.yahoo.ycsb.Status; import com.yahoo.ycsb.StringByteIterator; -import java.util.HashMap; -import java.util.Set; -import java.util.Vector; -import static org.testng.AssertJUnit.*; + import org.testng.annotations.AfterClass; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeClass; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; +import java.util.HashMap; +import java.util.Set; +import java.util.Vector; + /** * * @author saden @@ -82,9 +86,8 @@ public class ElasticSearchClientTest { @Test public void testInsert() { System.out.println("insert"); - int expResult = 0; - int result = instance.insert(MOCK_TABLE, MOCK_KEY0, MOCK_DATA); - assertEquals(expResult, result); + Status result = instance.insert(MOCK_TABLE, MOCK_KEY0, MOCK_DATA); + assertEquals(Status.OK, result); } /** @@ -93,9 +96,8 @@ public class ElasticSearchClientTest { @Test public void testDelete() { System.out.println("delete"); - int expResult = 0; - int result = instance.delete(MOCK_TABLE, MOCK_KEY1); - assertEquals(expResult, result); + Status result = instance.delete(MOCK_TABLE, MOCK_KEY1); + assertEquals(Status.OK, result); } /** @@ -106,9 +108,8 @@ public class ElasticSearchClientTest { System.out.println("read"); Set<String> fields = MOCK_DATA.keySet(); HashMap<String, ByteIterator> resultParam = new HashMap<String, ByteIterator>(10); - int expResult = 0; - int result = instance.read(MOCK_TABLE, MOCK_KEY1, fields, resultParam); - assertEquals(expResult, result); + Status result = instance.read(MOCK_TABLE, MOCK_KEY1, fields, resultParam); + assertEquals(Status.OK, result); } /** @@ -124,9 +125,8 @@ public class ElasticSearchClientTest { newValues.put("field" + i, new StringByteIterator("newvalue" + i)); } - int expResult = 0; - int result = instance.update(MOCK_TABLE, MOCK_KEY1, newValues); - assertEquals(expResult, result); + Status result = instance.update(MOCK_TABLE, MOCK_KEY1, newValues); + assertEquals(Status.OK, result); //validate that the values changed HashMap<String, ByteIterator> resultParam = new HashMap<String, ByteIterator>(10); @@ -147,8 +147,7 @@ public class ElasticSearchClientTest { int recordcount = 10; Set<String> fields = MOCK_DATA.keySet(); Vector<HashMap<String, ByteIterator>> resultParam = new Vector<HashMap<String, ByteIterator>>(10); - int expResult = 0; - int result = instance.scan(MOCK_TABLE, MOCK_KEY1, recordcount, fields, resultParam); - assertEquals(expResult, result); + Status result = instance.scan(MOCK_TABLE, MOCK_KEY1, recordcount, fields, resultParam); + assertEquals(Status.OK, result); } } diff --git a/gemfire/src/main/java/com/yahoo/ycsb/db/GemFireClient.java b/gemfire/src/main/java/com/yahoo/ycsb/db/GemFireClient.java index 7e61bbeb60b0f65555ccc81d3b5ae3026a827455..e9b172c990b0f7d43f2778f8a39c998cb90843e9 100644 --- a/gemfire/src/main/java/com/yahoo/ycsb/db/GemFireClient.java +++ b/gemfire/src/main/java/com/yahoo/ycsb/db/GemFireClient.java @@ -17,12 +17,6 @@ package com.yahoo.ycsb.db; -import java.util.HashMap; -import java.util.Map; -import java.util.Properties; -import java.util.Set; -import java.util.Vector; - import com.gemstone.gemfire.cache.Cache; import com.gemstone.gemfire.cache.CacheFactory; import com.gemstone.gemfire.cache.GemFireCache; @@ -39,7 +33,13 @@ import com.yahoo.ycsb.ByteArrayByteIterator; import com.yahoo.ycsb.ByteIterator; import com.yahoo.ycsb.DB; import com.yahoo.ycsb.DBException; -import com.yahoo.ycsb.StringByteIterator; +import com.yahoo.ycsb.Status; + +import java.util.HashMap; +import java.util.Map; +import java.util.Properties; +import java.util.Set; +import java.util.Vector; /** * VMware vFabric GemFire client for the YCSB benchmark.<br /> @@ -66,12 +66,6 @@ import com.yahoo.ycsb.StringByteIterator; */ public class GemFireClient extends DB { - /** Return code when operation succeeded */ - private static final int SUCCESS = 0; - - /** Return code when operation did not succeed */ - private static final int ERROR = -1; - /** property name of the port where GemFire server is listening for connections */ private static final String SERVERPORT_PROPERTY_NAME = "gemfire.serverport"; @@ -143,7 +137,7 @@ public class GemFireClient extends DB { } @Override - public int read(String table, String key, Set<String> fields, + public Status read(String table, String key, Set<String> fields, HashMap<String, ByteIterator> result) { Region<String, Map<String, byte[]>> r = getRegion(table); Map<String, byte[]> val = r.get(key); @@ -157,34 +151,34 @@ public class GemFireClient extends DB { result.put(field, new ByteArrayByteIterator(val.get(field))); } } - return SUCCESS; + return Status.OK; } - return ERROR; + return Status.ERROR; } @Override - public int scan(String table, String startkey, int recordcount, + public Status scan(String table, String startkey, int recordcount, Set<String> fields, Vector<HashMap<String, ByteIterator>> result) { // GemFire does not support scan - return ERROR; + return Status.ERROR; } @Override - public int update(String table, String key, HashMap<String, ByteIterator> values) { + public Status update(String table, String key, HashMap<String, ByteIterator> values) { getRegion(table).put(key, convertToBytearrayMap(values)); - return 0; + return Status.OK; } @Override - public int insert(String table, String key, HashMap<String, ByteIterator> values) { + public Status insert(String table, String key, HashMap<String, ByteIterator> values) { getRegion(table).put(key, convertToBytearrayMap(values)); - return 0; + return Status.OK; } @Override - public int delete(String table, String key) { + public Status delete(String table, String key) { getRegion(table).destroy(key); - return 0; + return Status.OK; } private Map<String, byte[]> convertToBytearrayMap(Map<String,ByteIterator> values) { diff --git a/hbase098/src/main/java/com/yahoo/ycsb/db/HBaseClient.java b/hbase098/src/main/java/com/yahoo/ycsb/db/HBaseClient.java index 35735ad4bb804e117bf8b578ac93093f45c690f5..e469e43a19eab4c956cef09f7618c19c55cdb26e 100644 --- a/hbase098/src/main/java/com/yahoo/ycsb/db/HBaseClient.java +++ b/hbase098/src/main/java/com/yahoo/ycsb/db/HBaseClient.java @@ -17,27 +17,35 @@ package com.yahoo.ycsb.db; -import com.yahoo.ycsb.DBException; -import com.yahoo.ycsb.ByteIterator; import com.yahoo.ycsb.ByteArrayByteIterator; +import com.yahoo.ycsb.ByteIterator; +import com.yahoo.ycsb.DBException; +import com.yahoo.ycsb.Status; import com.yahoo.ycsb.measurements.Measurements; -import java.io.IOException; -import java.util.*; - import org.apache.hadoop.conf.Configuration; -import org.apache.hadoop.hbase.KeyValue; +import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.HTableDescriptor; -import org.apache.hadoop.hbase.client.HTable; +import org.apache.hadoop.hbase.KeyValue; +import org.apache.hadoop.hbase.client.Delete; import org.apache.hadoop.hbase.client.Get; +import org.apache.hadoop.hbase.client.HTable; import org.apache.hadoop.hbase.client.Put; -import org.apache.hadoop.hbase.client.Delete; -import org.apache.hadoop.hbase.client.Scan; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.client.ResultScanner; +import org.apache.hadoop.hbase.client.Scan; import org.apache.hadoop.hbase.filter.PageFilter; import org.apache.hadoop.hbase.util.Bytes; -import org.apache.hadoop.hbase.HBaseConfiguration; + +import java.io.IOException; +import java.util.ConcurrentModificationException; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Properties; +import java.util.Random; +import java.util.Set; +import java.util.Vector; /** * HBase client for YCSB framework @@ -59,10 +67,7 @@ public class HBaseClient extends com.yahoo.ycsb.DB /** Whether or not a page filter should be used to limit scan length. */ public boolean _usePageFilter = true; - public static final int Ok=0; - public static final int ServerError=-1; public static final int HttpError=-2; - public static final int NoMatchingRecord=-3; public static final Object tableLock = new Object(); @@ -155,7 +160,7 @@ public class HBaseClient extends com.yahoo.ycsb.DB * @param result A HashMap of field/value pairs for the result * @return Zero on success, a non-zero error code on error */ - public int read(String table, String key, Set<String> fields, HashMap<String,ByteIterator> result) + public Status read(String table, String key, Set<String> fields, HashMap<String,ByteIterator> result) { //if this is a "new" table, init HTable object. Else, use existing one if (!_table.equals(table)) { @@ -168,7 +173,7 @@ public class HBaseClient extends com.yahoo.ycsb.DB catch (IOException e) { System.err.println("Error accessing HBase table: "+e); - return ServerError; + return Status.ERROR; } } @@ -192,12 +197,12 @@ public class HBaseClient extends com.yahoo.ycsb.DB catch (IOException e) { System.err.println("Error doing get: "+e); - return ServerError; + return Status.ERROR; } catch (ConcurrentModificationException e) { //do nothing for now...need to understand HBase concurrency model better - return ServerError; + return Status.ERROR; } for (KeyValue kv : r.raw()) { @@ -210,7 +215,7 @@ public class HBaseClient extends com.yahoo.ycsb.DB } } - return Ok; + return Status.OK; } /** @@ -223,7 +228,7 @@ public class HBaseClient extends com.yahoo.ycsb.DB * @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 int scan(String table, String startkey, int recordcount, Set<String> fields, Vector<HashMap<String,ByteIterator>> result) + public Status scan(String table, String startkey, int recordcount, Set<String> fields, Vector<HashMap<String,ByteIterator>> result) { //if this is a "new" table, init HTable object. Else, use existing one if (!_table.equals(table)) { @@ -236,7 +241,7 @@ public class HBaseClient extends com.yahoo.ycsb.DB catch (IOException e) { System.err.println("Error accessing HBase table: "+e); - return ServerError; + return Status.ERROR; } } @@ -301,14 +306,14 @@ public class HBaseClient extends com.yahoo.ycsb.DB { System.out.println("Error in getting/parsing scan result: "+e); } - return ServerError; + return Status.ERROR; } finally { scanner.close(); } - return Ok; + return Status.OK; } /** @@ -320,7 +325,7 @@ public class HBaseClient extends com.yahoo.ycsb.DB * @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 int update(String table, String key, HashMap<String,ByteIterator> values) + public Status update(String table, String key, HashMap<String,ByteIterator> values) { //if this is a "new" table, init HTable object. Else, use existing one if (!_table.equals(table)) { @@ -333,7 +338,7 @@ public class HBaseClient extends com.yahoo.ycsb.DB catch (IOException e) { System.err.println("Error accessing HBase table: "+e); - return ServerError; + return Status.ERROR; } } @@ -361,15 +366,15 @@ public class HBaseClient extends com.yahoo.ycsb.DB if (_debug) { System.err.println("Error doing put: "+e); } - return ServerError; + return Status.ERROR; } catch (ConcurrentModificationException e) { //do nothing for now...hope this is rare - return ServerError; + return Status.ERROR; } - return Ok; + return Status.OK; } /** @@ -381,7 +386,7 @@ public class HBaseClient extends com.yahoo.ycsb.DB * @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 int insert(String table, String key, HashMap<String,ByteIterator> values) + public Status insert(String table, String key, HashMap<String,ByteIterator> values) { return update(table,key,values); } @@ -393,7 +398,7 @@ public class HBaseClient extends com.yahoo.ycsb.DB * @param key The record key of the record to delete. * @return Zero on success, a non-zero error code on error */ - public int delete(String table, String key) + public Status delete(String table, String key) { //if this is a "new" table, init HTable object. Else, use existing one if (!_table.equals(table)) { @@ -406,7 +411,7 @@ public class HBaseClient extends com.yahoo.ycsb.DB catch (IOException e) { System.err.println("Error accessing HBase table: "+e); - return ServerError; + return Status.ERROR; } } @@ -424,10 +429,10 @@ public class HBaseClient extends com.yahoo.ycsb.DB if (_debug) { System.err.println("Error doing delete: "+e); } - return ServerError; + return Status.ERROR; } - return Ok; + return Status.OK; } public static void main(String[] args) @@ -477,7 +482,7 @@ public class HBaseClient extends com.yahoo.ycsb.DB int keynum=random.nextInt(keyspace); String key="user"+keynum; long st=System.currentTimeMillis(); - int rescode; + Status result; /* HashMap hm = new HashMap(); hm.put("field1","value1"); @@ -496,15 +501,15 @@ public class HBaseClient extends com.yahoo.ycsb.DB scanFields.add("field1"); scanFields.add("field3"); Vector<HashMap<String,ByteIterator>> scanResults = new Vector<HashMap<String,ByteIterator>>(); - rescode = cli.scan("table1","user2",20,null,scanResults); + result = cli.scan("table1","user2",20,null,scanResults); long en=System.currentTimeMillis(); accum+=(en-st); - if (rescode!=Ok) + if (!result.equals(Status.OK)) { - System.out.println("Error "+rescode+" for "+key); + System.out.println("Error "+result+" for "+key); } if (i%1==0) diff --git a/hbase10/src/main/java/com/yahoo/ycsb/db/HBaseClient10.java b/hbase10/src/main/java/com/yahoo/ycsb/db/HBaseClient10.java index 378b30f9a5d4f35b05f13941ed54ddf6dbd5786e..d047b4aaf44860ed6cb296453da4d16aae431866 100644 --- a/hbase10/src/main/java/com/yahoo/ycsb/db/HBaseClient10.java +++ b/hbase10/src/main/java/com/yahoo/ycsb/db/HBaseClient10.java @@ -22,6 +22,7 @@ import com.google.common.base.Preconditions; import com.yahoo.ycsb.ByteArrayByteIterator; import com.yahoo.ycsb.ByteIterator; import com.yahoo.ycsb.DBException; +import com.yahoo.ycsb.Status; import com.yahoo.ycsb.measurements.Measurements; import org.apache.hadoop.conf.Configuration; @@ -93,10 +94,7 @@ public class HBaseClient10 extends com.yahoo.ycsb.DB public boolean _clientSideBuffering = false; public long _writeBufferSize = 1024 * 1024 * 12; - public static final int Ok=0; - public static final int ServerError=-1; - public static final int HttpError=-2; - public static final int NoMatchingRecord=-3; + public static final int HTTP_ERROR = -2; /** * Initialize any state for this DB. @@ -204,7 +202,7 @@ public class HBaseClient10 extends com.yahoo.ycsb.DB * @param result A HashMap of field/value pairs for the result * @return Zero on success, a non-zero error code on error */ - public int read(String table, String key, Set<String> fields, HashMap<String,ByteIterator> result) + public Status read(String table, String key, Set<String> fields, HashMap<String,ByteIterator> result) { //if this is a "new" table, init HTable object. Else, use existing one if (!_tableName.equals(table)) { @@ -217,7 +215,7 @@ public class HBaseClient10 extends com.yahoo.ycsb.DB catch (IOException e) { System.err.println("Error accessing HBase table: " + e); - return ServerError; + return Status.ERROR; } } @@ -243,16 +241,16 @@ public class HBaseClient10 extends com.yahoo.ycsb.DB if (_debug) { System.err.println("Error doing get: "+e); } - return ServerError; + return Status.ERROR; } catch (ConcurrentModificationException e) { //do nothing for now...need to understand HBase concurrency model better - return ServerError; + return Status.ERROR; } if (r.isEmpty()) { - return NoMatchingRecord; + return Status.NOT_FOUND; } while (r.advance()) { @@ -264,7 +262,7 @@ public class HBaseClient10 extends com.yahoo.ycsb.DB " is: "+Bytes.toString(CellUtil.cloneValue(c))); } } - return Ok; + return Status.OK; } /** @@ -278,7 +276,7 @@ public class HBaseClient10 extends com.yahoo.ycsb.DB * @return Zero on success, a non-zero error code on error */ @Override - public int scan(String table, String startkey, int recordcount, Set<String> fields, Vector<HashMap<String,ByteIterator>> result) + public Status scan(String table, String startkey, int recordcount, Set<String> fields, Vector<HashMap<String,ByteIterator>> result) { //if this is a "new" table, init HTable object. Else, use existing one if (!_tableName.equals(table)) { @@ -291,7 +289,7 @@ public class HBaseClient10 extends com.yahoo.ycsb.DB catch (IOException e) { System.err.println("Error accessing HBase table: "+e); - return ServerError; + return Status.ERROR; } } @@ -359,7 +357,7 @@ public class HBaseClient10 extends com.yahoo.ycsb.DB { System.out.println("Error in getting/parsing scan result: "+e); } - return ServerError; + return Status.ERROR; } finally { @@ -369,7 +367,7 @@ public class HBaseClient10 extends com.yahoo.ycsb.DB } } - return Ok; + return Status.OK; } /** @@ -382,7 +380,7 @@ public class HBaseClient10 extends com.yahoo.ycsb.DB * @return Zero on success, a non-zero error code on error */ @Override - public int update(String table, String key, HashMap<String,ByteIterator> values) + public Status update(String table, String key, HashMap<String,ByteIterator> values) { //if this is a "new" table, init HTable object. Else, use existing one if (!_tableName.equals(table)) { @@ -395,7 +393,7 @@ public class HBaseClient10 extends com.yahoo.ycsb.DB catch (IOException e) { System.err.println("Error accessing HBase table: "+e); - return ServerError; + return Status.ERROR; } } @@ -429,15 +427,15 @@ public class HBaseClient10 extends com.yahoo.ycsb.DB if (_debug) { System.err.println("Error doing put: "+e); } - return ServerError; + return Status.ERROR; } catch (ConcurrentModificationException e) { //do nothing for now...hope this is rare - return ServerError; + return Status.ERROR; } - return Ok; + return Status.OK; } /** @@ -450,7 +448,7 @@ public class HBaseClient10 extends com.yahoo.ycsb.DB * @return Zero on success, a non-zero error code on error */ @Override - public int insert(String table, String key, HashMap<String,ByteIterator> values) + public Status insert(String table, String key, HashMap<String,ByteIterator> values) { return update(table,key,values); } @@ -463,7 +461,7 @@ public class HBaseClient10 extends com.yahoo.ycsb.DB * @return Zero on success, a non-zero error code on error */ @Override - public int delete(String table, String key) + public Status delete(String table, String key) { //if this is a "new" table, init HTable object. Else, use existing one if (!_tableName.equals(table)) { @@ -476,7 +474,7 @@ public class HBaseClient10 extends com.yahoo.ycsb.DB catch (IOException e) { System.err.println("Error accessing HBase table: "+e); - return ServerError; + return Status.ERROR; } } @@ -500,10 +498,10 @@ public class HBaseClient10 extends com.yahoo.ycsb.DB if (_debug) { System.err.println("Error doing delete: "+e); } - return ServerError; + return Status.ERROR; } - return Ok; + return Status.OK; } @VisibleForTesting diff --git a/hbase10/src/test/java/com/yahoo/ycsb/db/HBaseClient10Test.java b/hbase10/src/test/java/com/yahoo/ycsb/db/HBaseClient10Test.java index df5fd7469b7230e2f796172ffd4ad51e6ff7ea75..631e822710d70d2227ab327e9eb0a97b5817b8e4 100644 --- a/hbase10/src/test/java/com/yahoo/ycsb/db/HBaseClient10Test.java +++ b/hbase10/src/test/java/com/yahoo/ycsb/db/HBaseClient10Test.java @@ -15,10 +15,14 @@ package com.yahoo.ycsb.db; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; import static org.junit.Assume.assumeTrue; -import static org.junit.Assert.*; import com.yahoo.ycsb.ByteIterator; +import com.yahoo.ycsb.Status; import com.yahoo.ycsb.StringByteIterator; import com.yahoo.ycsb.measurements.Measurements; import com.yahoo.ycsb.workloads.CoreWorkload; @@ -31,7 +35,6 @@ import org.apache.hadoop.hbase.client.Put; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.client.Table; import org.apache.hadoop.hbase.util.Bytes; - import org.junit.After; import org.junit.AfterClass; import org.junit.Before; @@ -126,8 +129,8 @@ public class HBaseClient10Test { table.put(p); final HashMap<String, ByteIterator> result = new HashMap<String, ByteIterator>(); - final int status = client.read(CoreWorkload.table, rowKey, null, result); - assertEquals(HBaseClient10.Ok, status); + final Status status = client.read(CoreWorkload.table, rowKey, null, result); + assertEquals(Status.OK, status); assertEquals(2, result.size()); assertEquals("value1", result.get("column1").toString()); assertEquals("value2", result.get("column2").toString()); @@ -136,8 +139,8 @@ public class HBaseClient10Test { @Test public void testReadMissingRow() throws Exception { final HashMap<String, ByteIterator> result = new HashMap<String, ByteIterator>(); - final int status = client.read(CoreWorkload.table, "Missing row", null, result); - assertEquals(HBaseClient10.NoMatchingRecord, status); + final Status status = client.read(CoreWorkload.table, "Missing row", null, result); + assertEquals(Status.NOT_FOUND, status); assertEquals(0, result.size()); } @@ -182,8 +185,8 @@ public class HBaseClient10Test { final HashMap<String, String> input = new HashMap<String, String>(); input.put("column1", "value1"); input.put("column2", "value2"); - final int status = client.insert(CoreWorkload.table, key, StringByteIterator.getByteIteratorMap(input)); - assertEquals(HBaseClient10.Ok, status); + final Status status = client.insert(CoreWorkload.table, key, StringByteIterator.getByteIteratorMap(input)); + assertEquals(Status.OK, status); // Verify result final Get get = new Get(Bytes.toBytes(key)); diff --git a/hypertable/src/main/java/com/yahoo/ycsb/db/HypertableClient.java b/hypertable/src/main/java/com/yahoo/ycsb/db/HypertableClient.java index 44ac15da345c59b4e74333d91e4adfabf4c858d1..5d3f8998c3aa34c023230601f27f9c0d17078a07 100644 --- a/hypertable/src/main/java/com/yahoo/ycsb/db/HypertableClient.java +++ b/hypertable/src/main/java/com/yahoo/ycsb/db/HypertableClient.java @@ -16,14 +16,14 @@ package com.yahoo.ycsb.db; -import java.nio.ByteBuffer; -import java.util.HashMap; -import java.util.Map; -import java.util.Set; -import java.util.Vector; +import com.yahoo.ycsb.ByteArrayByteIterator; +import com.yahoo.ycsb.ByteIterator; +import com.yahoo.ycsb.DBException; +import com.yahoo.ycsb.Status; import org.apache.thrift.TException; import org.hypertable.thrift.SerializedCellsFlag; +import org.hypertable.thrift.SerializedCellsReader; import org.hypertable.thrift.SerializedCellsWriter; import org.hypertable.thrift.ThriftClient; import org.hypertable.thriftgen.Cell; @@ -32,11 +32,12 @@ import org.hypertable.thriftgen.Key; import org.hypertable.thriftgen.KeyFlag; import org.hypertable.thriftgen.RowInterval; import org.hypertable.thriftgen.ScanSpec; -import org.hypertable.thrift.SerializedCellsReader; -import com.yahoo.ycsb.ByteArrayByteIterator; -import com.yahoo.ycsb.ByteIterator; -import com.yahoo.ycsb.DBException; +import java.nio.ByteBuffer; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; +import java.util.Vector; /** * Hypertable client for YCSB framework @@ -49,9 +50,6 @@ public class HypertableClient extends com.yahoo.ycsb.DB private long ns; private String _columnFamily = ""; - - public static final int OK = 0; - public static final int SERVERERROR = -1; public static final String NAMESPACE = "/ycsb"; public static final int THRIFTBROKER_PORT = 38080; @@ -122,7 +120,7 @@ public class HypertableClient extends com.yahoo.ycsb.DB * @return Zero on success, a non-zero error code on error */ @Override - public int read(String table, String key, Set<String> fields, + public Status read(String table, String key, Set<String> fields, HashMap<String, ByteIterator> result) { //SELECT _column_family:field[i] @@ -138,8 +136,8 @@ public class HypertableClient extends com.yahoo.ycsb.DB if (null != fields) { Vector<HashMap<String, ByteIterator>> resMap = new Vector<HashMap<String, ByteIterator>>(); - if (0 != scan(table, key, 1, fields, resMap)) { - return SERVERERROR; + if (!scan(table, key, 1, fields, resMap).equals(Status.OK)) { + return Status.ERROR; } if (!resMap.isEmpty()) result.putAll(resMap.firstElement()); @@ -155,14 +153,14 @@ public class HypertableClient extends com.yahoo.ycsb.DB if (_debug) { System.err.println("Error doing read: " + e.message); } - return SERVERERROR; + return Status.ERROR; } catch (TException e) { if (_debug) System.err.println("Error doing read"); - return SERVERERROR; + return Status.ERROR; } - return OK; + return Status.OK; } /** @@ -178,7 +176,7 @@ public class HypertableClient extends com.yahoo.ycsb.DB * @return Zero on success, a non-zero error code on error */ @Override - public int scan(String table, String startkey, int recordcount, + public Status scan(String table, String startkey, int recordcount, Set<String> fields, Vector<HashMap<String, ByteIterator>> result) { @@ -230,14 +228,14 @@ public class HypertableClient extends com.yahoo.ycsb.DB if (_debug) { System.err.println("Error doing scan: " + e.message); } - return SERVERERROR; + return Status.ERROR; } catch (TException e) { if (_debug) System.err.println("Error doing scan"); - return SERVERERROR; + return Status.ERROR; } - return OK; + return Status.OK; } /** @@ -251,7 +249,7 @@ public class HypertableClient extends com.yahoo.ycsb.DB * @return Zero on success, a non-zero error code on error */ @Override - public int update(String table, String key, + public Status update(String table, String key, HashMap<String, ByteIterator> values) { return insert(table, key, values); @@ -268,7 +266,7 @@ public class HypertableClient extends com.yahoo.ycsb.DB * @return Zero on success, a non-zero error code on error */ @Override - public int insert(String table, String key, + public Status insert(String table, String key, HashMap<String, ByteIterator> values) { //INSERT INTO table VALUES @@ -294,14 +292,14 @@ public class HypertableClient extends com.yahoo.ycsb.DB if (_debug) { System.err.println("Error doing set: " + e.message); } - return SERVERERROR; + return Status.ERROR; } catch (TException e) { if (_debug) System.err.println("Error doing set"); - return SERVERERROR; + return Status.ERROR; } - return OK; + return Status.OK; } /** @@ -312,7 +310,7 @@ public class HypertableClient extends com.yahoo.ycsb.DB * @return Zero on success, a non-zero error code on error */ @Override - public int delete(String table, String key) + public Status delete(String table, String key) { //DELETE * FROM table WHERE ROW=key; @@ -331,14 +329,14 @@ public class HypertableClient extends com.yahoo.ycsb.DB if (_debug) { System.err.println("Error doing delete: " + e.message); } - return SERVERERROR; + return Status.ERROR; } catch (TException e) { if (_debug) System.err.println("Error doing delete"); - return SERVERERROR; + return Status.ERROR; } - return OK; + return Status.OK; } } diff --git a/infinispan/src/main/java/com/yahoo/ycsb/db/InfinispanClient.java b/infinispan/src/main/java/com/yahoo/ycsb/db/InfinispanClient.java index efc0deb035bd3192a9772986de74c5c4f7a691c2..3abf7f6501456be2ca32b143bd8bab37a8f25be5 100644 --- a/infinispan/src/main/java/com/yahoo/ycsb/db/InfinispanClient.java +++ b/infinispan/src/main/java/com/yahoo/ycsb/db/InfinispanClient.java @@ -17,9 +17,10 @@ package com.yahoo.ycsb.db; +import com.yahoo.ycsb.ByteIterator; import com.yahoo.ycsb.DB; import com.yahoo.ycsb.DBException; -import com.yahoo.ycsb.ByteIterator; +import com.yahoo.ycsb.Status; import com.yahoo.ycsb.StringByteIterator; import org.infinispan.Cache; @@ -45,10 +46,6 @@ import java.util.Vector; */ public class InfinispanClient extends DB { - private static final int OK = 0; - private static final int ERROR = -1; - private static final int NOT_FOUND = -2; - // An optimisation for clustered mode private final boolean clustered; @@ -73,7 +70,7 @@ public class InfinispanClient extends DB { infinispanManager = null; } - public int read(String table, String key, Set<String> fields, HashMap<String, ByteIterator> result) { + public Status read(String table, String key, Set<String> fields, HashMap<String, ByteIterator> result) { try { Map<String, String> row; if (clustered) { @@ -90,18 +87,18 @@ public class InfinispanClient extends DB { for (String field : fields) result.put(field, new StringByteIterator(row.get(field))); } } - return OK; + return Status.OK; } catch (Exception e) { - return ERROR; + return Status.ERROR; } } - public int scan(String table, String startkey, int recordcount, Set<String> fields, Vector<HashMap<String, ByteIterator>> result) { + public Status scan(String table, String startkey, int recordcount, Set<String> fields, Vector<HashMap<String, ByteIterator>> result) { logger.warn("Infinispan does not support scan semantics"); - return OK; + return Status.OK; } - public int update(String table, String key, HashMap<String, ByteIterator> values) { + public Status update(String table, String key, HashMap<String, ByteIterator> values) { try { if (clustered) { AtomicMap<String, String> row = AtomicMapLookup.getAtomicMap(infinispanManager.getCache(table), key); @@ -117,13 +114,13 @@ public class InfinispanClient extends DB { } } - return OK; + return Status.OK; } catch (Exception e) { - return ERROR; + return Status.ERROR; } } - public int insert(String table, String key, HashMap<String, ByteIterator> values) { + public Status insert(String table, String key, HashMap<String, ByteIterator> values) { try { if (clustered) { AtomicMap<String, String> row = AtomicMapLookup.getAtomicMap(infinispanManager.getCache(table), key); @@ -133,21 +130,21 @@ public class InfinispanClient extends DB { infinispanManager.getCache(table).put(key, values); } - return OK; + return Status.OK; } catch (Exception e) { - return ERROR; + return Status.ERROR; } } - public int delete(String table, String key) { + public Status delete(String table, String key) { try { if (clustered) AtomicMapLookup.removeAtomicMap(infinispanManager.getCache(table), key); else infinispanManager.getCache(table).remove(key); - return OK; + return Status.OK; } catch (Exception e) { - return ERROR; + return Status.ERROR; } } } diff --git a/infinispan/src/main/java/com/yahoo/ycsb/db/InfinispanRemoteClient.java b/infinispan/src/main/java/com/yahoo/ycsb/db/InfinispanRemoteClient.java index 5f79f417c1a0c1025d293b6b7231906d19f3ccef..fb969e4905ba5839bb789b82a552e477ac4c36af 100644 --- a/infinispan/src/main/java/com/yahoo/ycsb/db/InfinispanRemoteClient.java +++ b/infinispan/src/main/java/com/yahoo/ycsb/db/InfinispanRemoteClient.java @@ -17,20 +17,21 @@ package com.yahoo.ycsb.db; -import java.util.HashMap; -import java.util.Map; -import java.util.Set; -import java.util.Vector; +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 org.infinispan.client.hotrod.RemoteCache; import org.infinispan.client.hotrod.RemoteCacheManager; import org.infinispan.util.logging.Log; import org.infinispan.util.logging.LogFactory; -import com.yahoo.ycsb.ByteIterator; -import com.yahoo.ycsb.DB; -import com.yahoo.ycsb.DBException; -import com.yahoo.ycsb.StringByteIterator; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; +import java.util.Vector; /** * This is a client implementation for Infinispan 5.x in client-server mode. @@ -63,7 +64,7 @@ public class InfinispanRemoteClient extends DB { } @Override - public int insert(String table, String recordKey, HashMap<String, ByteIterator> values) { + public Status insert(String table, String recordKey, HashMap<String, ByteIterator> values) { String compositKey = createKey(table, recordKey); Map<String, String> stringValues = new HashMap<String,String>(); StringByteIterator.putAllAsStrings(stringValues, values); @@ -76,7 +77,7 @@ public class InfinispanRemoteClient extends DB { } @Override - public int read(String table, String recordKey, Set<String> fields, HashMap<String, ByteIterator> result) { + public Status read(String table, String recordKey, Set<String> fields, HashMap<String, ByteIterator> result) { String compositKey = createKey(table, recordKey); try { Map<String, String> values = cache().get(compositKey); @@ -103,13 +104,13 @@ public class InfinispanRemoteClient extends DB { } @Override - public int scan(String table, String startkey, int recordcount, Set<String> fields, Vector<HashMap<String, ByteIterator>> result) { + public Status scan(String table, String startkey, int recordcount, Set<String> fields, Vector<HashMap<String, ByteIterator>> result) { logger.warn("Infinispan does not support scan semantics"); - return Status.NOT_SUPPORT; + return Status.NOT_IMPLEMENTED; } @Override - public int update(String table, String recordKey, HashMap<String, ByteIterator> values) { + public Status update(String table, String recordKey, HashMap<String, ByteIterator> values) { String compositKey = createKey(table, recordKey); try { Map<String, String> stringValues = new HashMap<String, String>(); @@ -121,7 +122,7 @@ public class InfinispanRemoteClient extends DB { } } @Override - public int delete(String table, String recordKey) { + public Status delete(String table, String recordKey) { String compositKey = createKey(table, recordKey); try { cache().remove(compositKey); diff --git a/infinispan/src/main/java/com/yahoo/ycsb/db/Status.java b/infinispan/src/main/java/com/yahoo/ycsb/db/Status.java deleted file mode 100644 index 00a08a02050bae23de9a93c5a6eb4740f28766dc..0000000000000000000000000000000000000000 --- a/infinispan/src/main/java/com/yahoo/ycsb/db/Status.java +++ /dev/null @@ -1,26 +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. - */ - -package com.yahoo.ycsb.db; - -public class Status { - public static final int OK = 0; - public static final int ERROR = 1; - public static final int NOT_FOUND = 2; - public static final int CONFLICT = 3; - public static final int NOT_SUPPORT = 4; -} diff --git a/jdbc/src/main/java/com/yahoo/ycsb/db/JdbcDBClient.java b/jdbc/src/main/java/com/yahoo/ycsb/db/JdbcDBClient.java index e59111de9f44234088183d5c0def42de638b81d6..968d7322591a03bced55c5619f1a5f9e59f2ca93 100644 --- a/jdbc/src/main/java/com/yahoo/ycsb/db/JdbcDBClient.java +++ b/jdbc/src/main/java/com/yahoo/ycsb/db/JdbcDBClient.java @@ -20,6 +20,7 @@ package com.yahoo.ycsb.db; import com.yahoo.ycsb.DB; import com.yahoo.ycsb.DBException; import com.yahoo.ycsb.ByteIterator; +import com.yahoo.ycsb.Status; import com.yahoo.ycsb.StringByteIterator; import java.sql.*; @@ -316,14 +317,8 @@ public class JdbcDBClient extends DB implements JdbcDBClientConstants { } @Override - public int read(String tableName, String key, Set<String> fields, + public Status read(String tableName, String key, Set<String> fields, HashMap<String, ByteIterator> result) { - if (tableName == null) { - return -1; - } - if (key == null) { - return -1; - } try { StatementType type = new StatementType(StatementType.Type.READ, tableName, 1, getShardIndexByKey(key)); PreparedStatement readStatement = cachedStatements.get(type); @@ -334,7 +329,7 @@ public class JdbcDBClient extends DB implements JdbcDBClientConstants { ResultSet resultSet = readStatement.executeQuery(); if (!resultSet.next()) { resultSet.close(); - return 1; + return Status.NOT_FOUND; } if (result != null && fields != null) { for (String field : fields) { @@ -343,22 +338,16 @@ public class JdbcDBClient extends DB implements JdbcDBClientConstants { } } resultSet.close(); - return SUCCESS; + return Status.OK; } catch (SQLException e) { System.err.println("Error in processing read of table " + tableName + ": "+e); - return -2; + return Status.ERROR; } } @Override - public int scan(String tableName, String startKey, int recordcount, + public Status scan(String tableName, String startKey, int recordcount, Set<String> fields, Vector<HashMap<String, ByteIterator>> result) { - if (tableName == null) { - return -1; - } - if (startKey == null) { - return -1; - } try { StatementType type = new StatementType(StatementType.Type.SCAN, tableName, 1, getShardIndexByKey(startKey)); PreparedStatement scanStatement = cachedStatements.get(type); @@ -379,21 +368,15 @@ public class JdbcDBClient extends DB implements JdbcDBClientConstants { } } resultSet.close(); - return SUCCESS; + return Status.OK; } catch (SQLException e) { System.err.println("Error in processing scan of table: " + tableName + e); - return -2; + return Status.ERROR; } } @Override - public int update(String tableName, String key, HashMap<String, ByteIterator> values) { - if (tableName == null) { - return -1; - } - if (key == null) { - return -1; - } + public Status update(String tableName, String key, HashMap<String, ByteIterator> values) { try { int numFields = values.size(); StatementType type = new StatementType(StatementType.Type.UPDATE, tableName, numFields, getShardIndexByKey(key)); @@ -407,22 +390,16 @@ public class JdbcDBClient extends DB implements JdbcDBClientConstants { } updateStatement.setString(index, key); int result = updateStatement.executeUpdate(); - if (result == 1) return SUCCESS; - else return 1; + if (result == 1) return Status.OK; + else return Status.UNEXPECTED_STATE; } catch (SQLException e) { System.err.println("Error in processing update to table: " + tableName + e); - return -1; + return Status.ERROR; } } @Override - public int insert(String tableName, String key, HashMap<String, ByteIterator> values) { - if (tableName == null) { - return -1; - } - if (key == null) { - return -1; - } + public Status insert(String tableName, String key, HashMap<String, ByteIterator> values) { try { int numFields = values.size(); StatementType type = new StatementType(StatementType.Type.INSERT, tableName, numFields, getShardIndexByKey(key)); @@ -437,22 +414,16 @@ public class JdbcDBClient extends DB implements JdbcDBClientConstants { insertStatement.setString(index++, field); } int result = insertStatement.executeUpdate(); - if (result == 1) return SUCCESS; - else return 1; + if (result == 1) return Status.OK; + else return Status.UNEXPECTED_STATE; } catch (SQLException e) { System.err.println("Error in processing insert to table: " + tableName + e); - return -1; + return Status.ERROR; } } @Override - public int delete(String tableName, String key) { - if (tableName == null) { - return -1; - } - if (key == null) { - return -1; - } + public Status delete(String tableName, String key) { try { StatementType type = new StatementType(StatementType.Type.DELETE, tableName, 1, getShardIndexByKey(key)); PreparedStatement deleteStatement = cachedStatements.get(type); @@ -461,11 +432,11 @@ public class JdbcDBClient extends DB implements JdbcDBClientConstants { } deleteStatement.setString(1, key); int result = deleteStatement.executeUpdate(); - if (result == 1) return SUCCESS; - else return 1; + if (result == 1) return Status.OK; + else return Status.UNEXPECTED_STATE; } catch (SQLException e) { System.err.println("Error in processing delete to table: " + tableName + e); - return -1; + return Status.ERROR; } } } diff --git a/jdbc/src/main/java/com/yahoo/ycsb/db/JdbcDBClientConstants.java b/jdbc/src/main/java/com/yahoo/ycsb/db/JdbcDBClientConstants.java index 120cb6452758ab21f8c425fc11b4c96f1bed59ea..4d396ac13c8787cbc7398b651cc10098197a32b8 100644 --- a/jdbc/src/main/java/com/yahoo/ycsb/db/JdbcDBClientConstants.java +++ b/jdbc/src/main/java/com/yahoo/ycsb/db/JdbcDBClientConstants.java @@ -16,6 +16,7 @@ */ package com.yahoo.ycsb.db; + /** * Constants used by the JDBC client. * @@ -51,9 +52,6 @@ public interface JdbcDBClientConstants { /** Representing a NULL value. */ public static final String NULL_VALUE = "NULL"; - /** The code to return when the call succeeds. */ - public static final int SUCCESS = 0; - /** The primary key in the user table.*/ public static String PRIMARY_KEY = "YCSB_KEY"; diff --git a/kudu/src/main/java/com/yahoo/ycsb/db/KuduYCSBClient.java b/kudu/src/main/java/com/yahoo/ycsb/db/KuduYCSBClient.java index 9e65407a826507d11da6c4b447ed494f56270bc5..d823ff465de5920f7be667ff3a6888abc48da47d 100644 --- a/kudu/src/main/java/com/yahoo/ycsb/db/KuduYCSBClient.java +++ b/kudu/src/main/java/com/yahoo/ycsb/db/KuduYCSBClient.java @@ -20,6 +20,7 @@ package com.yahoo.ycsb.db; import com.stumbleupon.async.TimeoutException; import com.yahoo.ycsb.ByteIterator; import com.yahoo.ycsb.DBException; +import com.yahoo.ycsb.Status; import com.yahoo.ycsb.StringByteIterator; import com.yahoo.ycsb.workloads.CoreWorkload; import org.kududb.ColumnSchema; @@ -45,10 +46,7 @@ import static org.kududb.Type.STRING; */ public class KuduYCSBClient extends com.yahoo.ycsb.DB { public static final String KEY = "key"; - public static final int OK = 0; - public static final int SERVER_ERROR = -1; - public static final int NO_MATCHING_RECORD = -2; - public static final int TIMEOUT = -3; + public static final Status TIMEOUT = new Status("TIMEOUT", "The operation timed out."); public static final int MAX_TABLETS = 9000; public static final long DEFAULT_SLEEP = 60000; private static final String SYNC_OPS_OPT = "kudu_sync_ops"; @@ -190,18 +188,18 @@ public class KuduYCSBClient extends com.yahoo.ycsb.DB { } @Override - public int read(String table, String key, Set<String> fields, + public Status read(String table, String key, Set<String> fields, HashMap<String,ByteIterator> result) { Vector<HashMap<String, ByteIterator>> results = new Vector<HashMap<String, ByteIterator>>(); - int ret = scan(table, key, 1, fields, results); - if (ret != OK) return ret; - if (results.size() != 1) return NO_MATCHING_RECORD; + final Status status = scan(table, key, 1, fields, results); + if (!status.equals(Status.OK)) return status; + if (results.size() != 1) return Status.NOT_FOUND; result.putAll(results.firstElement()); - return OK; + return Status.OK; } @Override - public int scan(String table, String startkey, int recordcount, Set<String> fields, + public Status scan(String table, String startkey, int recordcount, Set<String> fields, Vector<HashMap<String, ByteIterator>> result) { try { KuduScanner.KuduScannerBuilder scannerBuilder = client.newScannerBuilder(this.table); @@ -243,9 +241,9 @@ public class KuduYCSBClient extends com.yahoo.ycsb.DB { } catch (Exception e) { System.err.println("Unexpected exception " + e); e.printStackTrace(); - return SERVER_ERROR; + return Status.ERROR; } - return OK; + return Status.OK; } private void addAllRowsToResult(RowResultIterator it, int recordcount, @@ -268,7 +266,7 @@ public class KuduYCSBClient extends com.yahoo.ycsb.DB { } @Override - public int update(String table, String key, HashMap<String, ByteIterator> values) { + public Status update(String table, String key, HashMap<String, ByteIterator> values) { Update update = this.table.newUpdate(); PartialRow row = update.getRow(); row.addString(KEY, key); @@ -280,11 +278,11 @@ public class KuduYCSBClient extends com.yahoo.ycsb.DB { } } apply(update); - return OK; + return Status.OK; } @Override - public int insert(String table, String key, HashMap<String, ByteIterator> values) { + public Status insert(String table, String key, HashMap<String, ByteIterator> values) { Insert insert = this.table.newInsert(); PartialRow row = insert.getRow(); row.addString(KEY, key); @@ -292,16 +290,16 @@ public class KuduYCSBClient extends com.yahoo.ycsb.DB { row.addString(i, new String(values.get(schema.getColumnByIndex(i).getName()).toArray())); } apply(insert); - return OK; + return Status.OK; } @Override - public int delete(String table, String key) { + public Status delete(String table, String key) { Delete delete = this.table.newDelete(); PartialRow row = delete.getRow(); row.addString(KEY, key); apply(delete); - return OK; + return Status.OK; } private void apply(Operation op) { diff --git a/mongodb/src/main/java/com/yahoo/ycsb/db/AsyncMongoDbClient.java b/mongodb/src/main/java/com/yahoo/ycsb/db/AsyncMongoDbClient.java index fb2721b981bea5e168db89b902e96f8845a59f26..d8fe38843a34b176a0ea5b0d9bfa0adfc8f8d915 100644 --- a/mongodb/src/main/java/com/yahoo/ycsb/db/AsyncMongoDbClient.java +++ b/mongodb/src/main/java/com/yahoo/ycsb/db/AsyncMongoDbClient.java @@ -18,14 +18,6 @@ package com.yahoo.ycsb.db; import static com.allanbank.mongodb.builder.QueryBuilder.where; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; -import java.util.Properties; -import java.util.Set; -import java.util.Vector; -import java.util.concurrent.atomic.AtomicInteger; - import com.allanbank.mongodb.Durability; import com.allanbank.mongodb.LockType; import com.allanbank.mongodb.MongoClient; @@ -49,6 +41,15 @@ import com.allanbank.mongodb.builder.Sort; import com.yahoo.ycsb.ByteIterator; import com.yahoo.ycsb.DB; import com.yahoo.ycsb.DBException; +import com.yahoo.ycsb.Status; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import java.util.Properties; +import java.util.Set; +import java.util.Vector; +import java.util.concurrent.atomic.AtomicInteger; /** * MongoDB asynchronous client for YCSB framework using the <a @@ -139,19 +140,19 @@ public class AsyncMongoDbClient extends DB { * description for a discussion of error codes. */ @Override - public final int delete(final String table, final String key) { + public final Status delete(final String table, final String key) { try { final MongoCollection collection = database.getCollection(table); final Document q = BuilderFactory.start().add("_id", key).build(); final long res = collection.delete(q, writeConcern); if (res == 0) { System.err.println("Nothing deleted for key " + key); - return 1; + return Status.NOT_FOUND; } - return 0; + return Status.OK; } catch (final Exception e) { System.err.println(e.toString()); - return 1; + return Status.ERROR; } } @@ -249,7 +250,7 @@ public class AsyncMongoDbClient extends DB { * class's description for a discussion of error codes. */ @Override - public final int insert(final String table, final String key, + public final Status insert(final String table, final String key, final HashMap<String, ByteIterator> values) { try { final MongoCollection collection = database.getCollection(table); @@ -271,7 +272,7 @@ public class AsyncMongoDbClient extends DB { collection.insert(writeConcern, toInsert); result = 1; } - return result == 1 ? 0 : 1; + return result == 1 ? Status.OK : Status.NOT_FOUND; } // Use a bulk insert. @@ -285,30 +286,30 @@ public class AsyncMongoDbClient extends DB { batchedWriteCount += 1; if (batchedWriteCount < batchSize) { - return 0; + return Status.OK; } long count = collection.write(batchedWrite); if (count == batchedWriteCount) { batchedWrite.reset().mode(BatchedWriteMode.REORDERED); batchedWriteCount = 0; - return 0; + return Status.OK; } System.err.println("Number of inserted documents doesn't match the " + "number sent, " + count + " inserted, sent " + batchedWriteCount); batchedWrite.reset().mode(BatchedWriteMode.REORDERED); batchedWriteCount = 0; - return 1; + return Status.ERROR; } catch (Exception e) { System.err.println("Exception while trying bulk insert with " + batchedWriteCount); e.printStackTrace(); - return 1; + return Status.ERROR; } } catch (final Exception e) { e.printStackTrace(); - return 1; + return Status.ERROR; } } @@ -327,7 +328,7 @@ public class AsyncMongoDbClient extends DB { * @return Zero on success, a non-zero error code on error or "not found". */ @Override - public final int read(final String table, final String key, + public final Status read(final String table, final String key, final Set<String> fields, final HashMap<String, ByteIterator> result) { try { final MongoCollection collection = database.getCollection(table); @@ -360,10 +361,10 @@ public class AsyncMongoDbClient extends DB { if (queryResult != null) { fillMap(result, queryResult); } - return queryResult != null ? 0 : 1; + return queryResult != null ? Status.OK : Status.NOT_FOUND; } catch (final Exception e) { System.err.println(e.toString()); - return 1; + return Status.ERROR; } } @@ -387,7 +388,7 @@ public class AsyncMongoDbClient extends DB { * class's description for a discussion of error codes. */ @Override - public final int scan(final String table, final String startkey, + public final Status scan(final String table, final String startkey, final int recordcount, final Set<String> fields, final Vector<HashMap<String, ByteIterator>> result) { try { @@ -412,7 +413,7 @@ public class AsyncMongoDbClient extends DB { final MongoIterator<Document> cursor = collection.find(find); if (!cursor.hasNext()) { System.err.println("Nothing found in scan for key " + startkey); - return 1; + return Status.NOT_FOUND; } while (cursor.hasNext()) { // toMap() returns a Map but result.add() expects a @@ -426,10 +427,10 @@ public class AsyncMongoDbClient extends DB { result.add(docAsMap); } - return 0; + return Status.OK; } catch (final Exception e) { System.err.println(e.toString()); - return 1; + return Status.ERROR; } } @@ -448,7 +449,7 @@ public class AsyncMongoDbClient extends DB { * class's description for a discussion of error codes. */ @Override - public final int update(final String table, final String key, + public final Status update(final String table, final String key, final HashMap<String, ByteIterator> values) { try { final MongoCollection collection = database.getCollection(table); @@ -461,10 +462,10 @@ public class AsyncMongoDbClient extends DB { } final long res = collection.update(query, update, false, false, writeConcern); - return res == 1 ? 0 : 1; + return res == 1 ? Status.OK : Status.NOT_FOUND; } catch (final Exception e) { System.err.println(e.toString()); - return 1; + return Status.ERROR; } } diff --git a/mongodb/src/main/java/com/yahoo/ycsb/db/MongoDbClient.java b/mongodb/src/main/java/com/yahoo/ycsb/db/MongoDbClient.java index 6a7650b6c5a2c4e30974a9fdc5522fab4dc15e7c..e0654aa2fa8029f9a9da4ec86dfdedf7d96b95a7 100644 --- a/mongodb/src/main/java/com/yahoo/ycsb/db/MongoDbClient.java +++ b/mongodb/src/main/java/com/yahoo/ycsb/db/MongoDbClient.java @@ -24,21 +24,6 @@ */ package com.yahoo.ycsb.db; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Properties; -import java.util.Set; -import java.util.Vector; -import java.util.concurrent.atomic.AtomicInteger; - -import com.mongodb.client.model.InsertManyOptions; -import com.mongodb.client.model.UpdateOneModel; - -import org.bson.Document; -import org.bson.types.Binary; - import com.mongodb.MongoClient; import com.mongodb.MongoClientURI; import com.mongodb.ReadPreference; @@ -47,6 +32,8 @@ import com.mongodb.client.FindIterable; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoCursor; import com.mongodb.client.MongoDatabase; +import com.mongodb.client.model.InsertManyOptions; +import com.mongodb.client.model.UpdateOneModel; import com.mongodb.client.model.UpdateOptions; import com.mongodb.client.result.DeleteResult; import com.mongodb.client.result.UpdateResult; @@ -54,6 +41,19 @@ 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 org.bson.Document; +import org.bson.types.Binary; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Properties; +import java.util.Set; +import java.util.Vector; +import java.util.concurrent.atomic.AtomicInteger; /** * MongoDB asynchronous client for YCSB framework using the MongoDB Inc. <a @@ -143,7 +143,7 @@ public class MongoDbClient extends DB { * class's description for a discussion of error codes. */ @Override - public int delete(String table, String key) { + public Status delete(String table, String key) { try { MongoCollection<Document> collection = database.getCollection(table); @@ -152,12 +152,12 @@ public class MongoDbClient extends DB { collection.withWriteConcern(writeConcern).deleteOne(query); if (result.wasAcknowledged() && result.getDeletedCount() == 0) { System.err.println("Nothing deleted for key " + key); - return 1; + return Status.NOT_FOUND; } - return 0; + return Status.OK; } catch (Exception e) { System.err.println(e.toString()); - return 1; + return Status.ERROR; } } @@ -250,7 +250,7 @@ public class MongoDbClient extends DB { * class's description for a discussion of error codes. */ @Override - public int insert(String table, String key, + public Status insert(String table, String key, HashMap<String, ByteIterator> values) { try { MongoCollection<Document> collection = database.getCollection(table); @@ -287,12 +287,12 @@ public class MongoDbClient extends DB { bulkInserts.clear(); } } - return 0; + return Status.OK; } catch (Exception e) { System.err.println("Exception while trying bulk insert with " + bulkInserts.size()); e.printStackTrace(); - return 1; + return Status.ERROR; } } @@ -312,7 +312,7 @@ public class MongoDbClient extends DB { * @return Zero on success, a non-zero error code on error or "not found". */ @Override - public int read(String table, String key, Set<String> fields, + public Status read(String table, String key, Set<String> fields, HashMap<String, ByteIterator> result) { try { MongoCollection<Document> collection = database.getCollection(table); @@ -333,10 +333,10 @@ public class MongoDbClient extends DB { if (queryResult != null) { fillMap(result, queryResult); } - return queryResult != null ? 0 : 1; + return queryResult != null ? Status.OK : Status.NOT_FOUND; } catch (Exception e) { System.err.println(e.toString()); - return 1; + return Status.ERROR; } } @@ -359,7 +359,7 @@ public class MongoDbClient extends DB { * class's description for a discussion of error codes. */ @Override - public int scan(String table, String startkey, int recordcount, + public Status scan(String table, String startkey, int recordcount, Set<String> fields, Vector<HashMap<String, ByteIterator>> result) { MongoCursor<Document> cursor = null; try { @@ -384,7 +384,7 @@ public class MongoDbClient extends DB { if (!cursor.hasNext()) { System.err.println("Nothing found in scan for key " + startkey); - return 1; + return Status.ERROR; } result.ensureCapacity(recordcount); @@ -399,10 +399,10 @@ public class MongoDbClient extends DB { result.add(resultMap); } - return 0; + return Status.OK; } catch (Exception e) { System.err.println(e.toString()); - return 1; + return Status.ERROR; } finally { if (cursor != null) { cursor.close(); @@ -425,7 +425,7 @@ public class MongoDbClient extends DB { * description for a discussion of error codes. */ @Override - public int update(String table, String key, + public Status update(String table, String key, HashMap<String, ByteIterator> values) { try { MongoCollection<Document> collection = database.getCollection(table); @@ -440,12 +440,12 @@ public class MongoDbClient extends DB { UpdateResult result = collection.updateOne(query, update); if (result.wasAcknowledged() && result.getMatchedCount() == 0) { System.err.println("Nothing updated for key " + key); - return 1; + return Status.NOT_FOUND; } - return 0; + return Status.OK; } catch (Exception e) { System.err.println(e.toString()); - return 1; + return Status.ERROR; } } diff --git a/mongodb/src/test/java/com/yahoo/ycsb/db/AbstractDBTestCases.java b/mongodb/src/test/java/com/yahoo/ycsb/db/AbstractDBTestCases.java index 1f0d2e85f372886c2558d1dd0ad18afc62acd204..9a0b095f3d7c36a864b31744cd4714167704e9f6 100644 --- a/mongodb/src/test/java/com/yahoo/ycsb/db/AbstractDBTestCases.java +++ b/mongodb/src/test/java/com/yahoo/ycsb/db/AbstractDBTestCases.java @@ -24,6 +24,14 @@ import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import static org.junit.Assume.assumeNoException; +import com.yahoo.ycsb.ByteArrayByteIterator; +import com.yahoo.ycsb.ByteIterator; +import com.yahoo.ycsb.DB; +import com.yahoo.ycsb.Status; + +import org.junit.BeforeClass; +import org.junit.Test; + import java.io.IOException; import java.net.InetAddress; import java.net.Socket; @@ -33,13 +41,6 @@ import java.util.Properties; import java.util.Set; import java.util.Vector; -import org.junit.BeforeClass; -import org.junit.Test; - -import com.yahoo.ycsb.ByteArrayByteIterator; -import com.yahoo.ycsb.ByteIterator; -import com.yahoo.ycsb.DB; - /** * MongoDbClientTest provides runs the basic DB test cases. * <p> @@ -93,13 +94,13 @@ public abstract class AbstractDBTestCases { HashMap<String, ByteIterator> inserted = new HashMap<String, ByteIterator>(); inserted.put("a", new ByteArrayByteIterator(new byte[] { 1, 2, 3, 4 })); - int result = client.insert(table, id, inserted); - assertThat("Insert did not return success (0).", result, is(0)); + Status result = client.insert(table, id, inserted); + assertThat("Insert did not return success (0).", result, is(Status.OK)); HashMap<String, ByteIterator> read = new HashMap<String, ByteIterator>(); Set<String> keys = Collections.singleton("a"); result = client.read(table, id, keys, read); - assertThat("Read did not return success (0).", result, is(0)); + assertThat("Read did not return success (0).", result, is(Status.OK)); for (String key : keys) { ByteIterator iter = read.get(key); @@ -117,16 +118,16 @@ public abstract class AbstractDBTestCases { } result = client.delete(table, id); - assertThat("Delete did not return success (0).", result, is(0)); + assertThat("Delete did not return success (0).", result, is(Status.OK)); read.clear(); result = client.read(table, id, null, read); assertThat("Read, after delete, did not return not found (1).", result, - is(1)); + is(Status.NOT_FOUND)); assertThat("Found the deleted fields.", read.size(), is(0)); result = client.delete(table, id); - assertThat("Delete did not return not found (1).", result, is(1)); + assertThat("Delete did not return not found (1).", result, is(Status.NOT_FOUND)); } /** @@ -142,13 +143,13 @@ public abstract class AbstractDBTestCases { HashMap<String, ByteIterator> inserted = new HashMap<String, ByteIterator>(); inserted.put("a", new ByteArrayByteIterator(new byte[] { 1, 2, 3, 4 })); - int result = client.insert(table, id, inserted); - assertThat("Insert did not return success (0).", result, is(0)); + Status result = client.insert(table, id, inserted); + assertThat("Insert did not return success (0).", result, is(Status.OK)); HashMap<String, ByteIterator> read = new HashMap<String, ByteIterator>(); Set<String> keys = Collections.singleton("a"); result = client.read(table, id, keys, read); - assertThat("Read did not return success (0).", result, is(0)); + assertThat("Read did not return success (0).", result, is(Status.OK)); for (String key : keys) { ByteIterator iter = read.get(key); @@ -168,11 +169,11 @@ public abstract class AbstractDBTestCases { HashMap<String, ByteIterator> updated = new HashMap<String, ByteIterator>(); updated.put("a", new ByteArrayByteIterator(new byte[] { 5, 6, 7, 8 })); result = client.update(table, id, updated); - assertThat("Update did not return success (0).", result, is(0)); + assertThat("Update did not return success (0).", result, is(Status.OK)); read.clear(); result = client.read(table, id, null, read); - assertThat("Read, after update, did not return success (0).", result, is(0)); + assertThat("Read, after update, did not return success (0).", result, is(Status.OK)); for (String key : keys) { ByteIterator iter = read.get(key); @@ -205,13 +206,13 @@ public abstract class AbstractDBTestCases { HashMap<String, ByteIterator> inserted = new HashMap<String, ByteIterator>(); inserted.put("a", new ByteArrayByteIterator(new byte[] { 1, 2, 3, 4 })); - int result = client.insert(table, id, inserted); - assertThat("Insert did not return success (0).", result, is(0)); + Status result = client.insert(table, id, inserted); + assertThat("Insert did not return success (0).", result, is(Status.OK)); HashMap<String, ByteIterator> read = new HashMap<String, ByteIterator>(); Set<String> keys = Collections.singleton("a"); result = client.read(table, id, keys, read); - assertThat("Read did not return success (0).", result, is(0)); + assertThat("Read did not return success (0).", result, is(Status.OK)); for (String key : keys) { ByteIterator iter = read.get(key); @@ -231,11 +232,11 @@ public abstract class AbstractDBTestCases { HashMap<String, ByteIterator> updated = new HashMap<String, ByteIterator>(); updated.put("a", new ByteArrayByteIterator(new byte[] { 5, 6, 7, 8 })); result = client.update(table, id, updated); - assertThat("Update did not return success (0).", result, is(0)); + assertThat("Update did not return success (0).", result, is(Status.OK)); read.clear(); result = client.read(table, id, null, read); - assertThat("Read, after update, did not return success (0).", result, is(0)); + assertThat("Read, after update, did not return success (0).", result, is(Status.OK)); for (String key : keys) { ByteIterator iter = read.get(key); @@ -269,15 +270,15 @@ public abstract class AbstractDBTestCases { inserted.put("a", new ByteArrayByteIterator(new byte[] { (byte) (i & 0xFF), (byte) (i >> 8 & 0xFF), (byte) (i >> 16 & 0xFF), (byte) (i >> 24 & 0xFF) })); - int result = client.insert(table, padded(i), inserted); - assertThat("Insert did not return success (0).", result, is(0)); + Status result = client.insert(table, padded(i), inserted); + assertThat("Insert did not return success (0).", result, is(Status.OK)); } Set<String> keys = Collections.singleton("a"); Vector<HashMap<String, ByteIterator>> results = new Vector<HashMap<String, ByteIterator>>(); - int result = client.scan(table, "00050", 5, null, results); - assertThat("Read did not return success (0).", result, is(0)); + Status result = client.scan(table, "00050", 5, null, results); + assertThat("Read did not return success (0).", result, is(Status.OK)); assertThat(results.size(), is(5)); for (int i = 0; i < 5; ++i) { HashMap<String, ByteIterator> read = results.get(i); diff --git a/orientdb/src/main/java/com/yahoo/ycsb/db/OrientDBClient.java b/orientdb/src/main/java/com/yahoo/ycsb/db/OrientDBClient.java index fb0d7dd6ed14e4d80fc53cdf16d842821ece1d40..2d8706e99cf62feed6dc0ee62bbfcec479afe14e 100644 --- a/orientdb/src/main/java/com/yahoo/ycsb/db/OrientDBClient.java +++ b/orientdb/src/main/java/com/yahoo/ycsb/db/OrientDBClient.java @@ -35,6 +35,7 @@ import com.orientechnologies.orient.core.record.impl.ODocument; 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 java.util.HashMap; @@ -130,7 +131,7 @@ public class OrientDBClient extends DB { * @param values A HashMap of field/value pairs to insert in the record * @return Zero on success, a non-zero error code on error. See this class's description for a discussion of error codes. */ - public int insert(String table, String key, HashMap<String, ByteIterator> values) { + public Status insert(String table, String key, HashMap<String, ByteIterator> values) { try { final ODocument document = new ODocument(CLASS); for (Entry<String, String> entry : StringByteIterator.getStringMap(values).entrySet()) @@ -138,11 +139,11 @@ public class OrientDBClient extends DB { document.save(); dictionary.put(key, document); - return 0; + return Status.OK; } catch (Exception e) { e.printStackTrace(); } - return 1; + return Status.ERROR; } @Override @@ -153,14 +154,14 @@ public class OrientDBClient extends DB { * @param key The record key of the record to delete. * @return Zero on success, a non-zero error code on error. See this class's description for a discussion of error codes. */ - public int delete(String table, String key) { + public Status delete(String table, String key) { try { dictionary.remove(key); - return 0; + return Status.OK; } catch (Exception e) { e.printStackTrace(); } - return 1; + return Status.ERROR; } @Override @@ -173,7 +174,7 @@ public class OrientDBClient extends DB { * @param result A HashMap of field/value pairs for the result * @return Zero on success, a non-zero error code on error or "not found". */ - public int read(String table, String key, Set<String> fields, HashMap<String, ByteIterator> result) { + public Status read(String table, String key, Set<String> fields, HashMap<String, ByteIterator> result) { try { final ODocument document = dictionary.get(key); if (document != null) { @@ -183,12 +184,12 @@ public class OrientDBClient extends DB { else for (String field : document.fieldNames()) result.put(field, new StringByteIterator((String) document.field(field))); - return 0; + return Status.OK; } } catch (Exception e) { e.printStackTrace(); } - return 1; + return Status.ERROR; } @Override @@ -201,19 +202,19 @@ public class OrientDBClient extends DB { * @param values A HashMap of field/value pairs to update in the record * @return Zero on success, a non-zero error code on error. See this class's description for a discussion of error codes. */ - public int update(String table, String key, HashMap<String, ByteIterator> values) { + public Status update(String table, String key, HashMap<String, ByteIterator> values) { try { final ODocument document = dictionary.get(key); if (document != null) { for (Entry<String, String> entry : StringByteIterator.getStringMap(values).entrySet()) document.field(entry.getKey(), entry.getValue()); document.save(); - return 0; + return Status.OK; } } catch (Exception e) { e.printStackTrace(); } - return 1; + return Status.ERROR; } @Override @@ -227,7 +228,7 @@ public class OrientDBClient extends DB { * @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. See this class's description for a discussion of error codes. */ - public int scan(String table, String startkey, int recordcount, Set<String> fields, Vector<HashMap<String, ByteIterator>> result) { + public Status scan(String table, String startkey, int recordcount, Set<String> fields, Vector<HashMap<String, ByteIterator>> result) { try { final OIndexCursor entries = dictionary.getIndex().iterateEntriesMajor(startkey, true, true); while (entries.hasNext()) { @@ -241,10 +242,10 @@ public class OrientDBClient extends DB { map.put(field, new StringByteIterator((String) document.field(field))); } - return 0; + return Status.OK; } catch (Exception e) { e.printStackTrace(); } - return 1; + return Status.ERROR; } } diff --git a/redis/src/main/java/com/yahoo/ycsb/db/RedisClient.java b/redis/src/main/java/com/yahoo/ycsb/db/RedisClient.java index ed6f1ec5d935d00d4a28317cd8d38ed6a210eaa9..8d0d4e2ad3f1cfbb36c141e38199a6ec891196da 100644 --- a/redis/src/main/java/com/yahoo/ycsb/db/RedisClient.java +++ b/redis/src/main/java/com/yahoo/ycsb/db/RedisClient.java @@ -23,12 +23,15 @@ */ package com.yahoo.ycsb.db; +import com.yahoo.ycsb.ByteIterator; import com.yahoo.ycsb.DB; import com.yahoo.ycsb.DBException; -import com.yahoo.ycsb.ByteIterator; +import com.yahoo.ycsb.Status; import com.yahoo.ycsb.StringByteIterator; -import java.util.Map; +import redis.clients.jedis.Jedis; +import redis.clients.jedis.Protocol; + import java.util.HashMap; import java.util.Iterator; import java.util.List; @@ -36,9 +39,6 @@ import java.util.Properties; import java.util.Set; import java.util.Vector; -import redis.clients.jedis.Jedis; -import redis.clients.jedis.Protocol; - public class RedisClient extends DB { private Jedis jedis; @@ -87,7 +87,7 @@ public class RedisClient extends DB { //XXX jedis.select(int index) to switch to `table` @Override - public int read(String table, String key, Set<String> fields, + public Status read(String table, String key, Set<String> fields, HashMap<String, ByteIterator> result) { if (fields == null) { StringByteIterator.putAllAsByteIterators(result, jedis.hgetAll(key)); @@ -105,32 +105,33 @@ public class RedisClient extends DB { } assert !fieldIterator.hasNext() && !valueIterator.hasNext(); } - return result.isEmpty() ? 1 : 0; + return result.isEmpty() ? Status.ERROR : Status.OK; } @Override - public int insert(String table, String key, HashMap<String, ByteIterator> values) { + public Status insert(String table, String key, HashMap<String, ByteIterator> values) { if (jedis.hmset(key, StringByteIterator.getStringMap(values)).equals("OK")) { jedis.zadd(INDEX_KEY, hash(key), key); - return 0; + return Status.OK; } - return 1; + return Status.ERROR; } @Override - public int delete(String table, String key) { + public Status delete(String table, String key) { return jedis.del(key) == 0 && jedis.zrem(INDEX_KEY, key) == 0 - ? 1 : 0; + ? Status.ERROR : Status.OK; } @Override - public int update(String table, String key, HashMap<String, ByteIterator> values) { - return jedis.hmset(key, StringByteIterator.getStringMap(values)).equals("OK") ? 0 : 1; + public Status update(String table, String key, HashMap<String, ByteIterator> values) { + return jedis.hmset(key, StringByteIterator.getStringMap(values)).equals("OK") ? + Status.OK : Status.ERROR; } @Override - public int scan(String table, String startkey, int recordcount, + public Status scan(String table, String startkey, int recordcount, Set<String> fields, Vector<HashMap<String, ByteIterator>> result) { Set<String> keys = jedis.zrangeByScore(INDEX_KEY, hash(startkey), Double.POSITIVE_INFINITY, 0, recordcount); @@ -142,7 +143,7 @@ public class RedisClient extends DB { result.add(values); } - return 0; + return Status.OK; } } diff --git a/tarantool/src/main/java/com/yahoo/ycsb/db/TarantoolClient.java b/tarantool/src/main/java/com/yahoo/ycsb/db/TarantoolClient.java index aa26b13b742929b54265040742602544035cd410..442a007143727f30f3087f439c805874034e7465 100644 --- a/tarantool/src/main/java/com/yahoo/ycsb/db/TarantoolClient.java +++ b/tarantool/src/main/java/com/yahoo/ycsb/db/TarantoolClient.java @@ -16,24 +16,25 @@ */ package com.yahoo.ycsb.db; -import java.util.Map; -import java.util.Set; -import java.util.List; -import java.util.Arrays; -import java.util.Vector; -import java.util.HashMap; -import java.util.Properties; -import java.util.logging.Level; -import java.util.logging.Logger; +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 org.tarantool.TarantoolConnection16; import org.tarantool.TarantoolConnection16Impl; import org.tarantool.TarantoolException; -import com.yahoo.ycsb.DB; -import com.yahoo.ycsb.DBException; -import com.yahoo.ycsb.ByteIterator; -import com.yahoo.ycsb.StringByteIterator; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Properties; +import java.util.Set; +import java.util.Vector; +import java.util.logging.Level; +import java.util.logging.Logger; public class TarantoolClient extends DB { @@ -82,7 +83,7 @@ public class TarantoolClient extends DB { } @Override - public int insert(String table, String key, HashMap<String, ByteIterator> values) { + public Status insert(String table, String key, HashMap<String, ByteIterator> values) { int j = 0; String[] tuple = new String[1 + 2 * values.size()]; tuple[0] = key; @@ -95,9 +96,9 @@ public class TarantoolClient extends DB { this.connection.replace(this.spaceNo, tuple); } catch (TarantoolException exc) { logger.log(Level.SEVERE,"Can't insert element", exc); - return 1; + return Status.ERROR; } - return 0; + return Status.OK; } private HashMap<String, ByteIterator> tuple_convert_filter (List<String> input, @@ -112,23 +113,23 @@ public class TarantoolClient extends DB { } @Override - public int read(String table, String key, Set<String> fields, + public Status read(String table, String key, Set<String> fields, HashMap<String, ByteIterator> result) { try { List<String> response; response = this.connection.select(this.spaceNo, 0, Arrays.asList(key), 0, 1, 0); result = tuple_convert_filter(response, fields); - return 0; + return Status.OK; } catch (TarantoolException exc) { logger.log(Level.SEVERE,"Can't select element", exc); - return 1; + return Status.ERROR; } catch (NullPointerException exc) { - return 1; + return Status.ERROR; } } @Override - public int scan(String table, String startkey, + public Status scan(String table, String startkey, int recordcount, Set<String> fields, Vector<HashMap<String, ByteIterator>> result) { List<List<String>> response; @@ -136,32 +137,32 @@ public class TarantoolClient extends DB { response = this.connection.select(this.spaceNo, 0, Arrays.asList(startkey), 0, recordcount, 6); } catch (TarantoolException exc) { logger.log(Level.SEVERE,"Can't select range elements", exc); - return 1; + return Status.ERROR; } catch (NullPointerException exc) { - return 1; + return Status.ERROR; } for(List<String> i: response) { HashMap<String, ByteIterator> temp = tuple_convert_filter(i, fields); if (!temp.isEmpty()) result.add((HashMap<String, ByteIterator>) temp.clone()); } - return 0; + return Status.OK; } @Override - public int delete(String table, String key) { + public Status delete(String table, String key) { try { this.connection.delete(this.spaceNo, Arrays.asList(key)); } catch (TarantoolException exc) { logger.log(Level.SEVERE,"Can't delete element", exc); - return 1; + return Status.ERROR; } catch (NullPointerException e) { - return 1; + return Status.ERROR; } - return 0; + return Status.OK; } @Override - public int update(String table, String key, + public Status update(String table, String key, HashMap<String, ByteIterator> values) { int j = 0; String[] tuple = new String[1 + 2 * values.size()]; @@ -175,9 +176,9 @@ public class TarantoolClient extends DB { this.connection.replace(this.spaceNo, tuple); } catch (TarantoolException exc) { logger.log(Level.SEVERE,"Can't replace element", exc); - return 1; + return Status.ERROR; } - return 0; + return Status.OK; } }