On Thu, Jun 13, 2013 at 11:20 PM, Edward Capriolo <edlinuxg...@gmail.com> wrote: > CL.ONE requests for rows which do not exist are very fast. > > http://adrianotto.com/2010/08/dev-null-unlimited-scale/ >
Yep, /dev/null is a might force ;-) I took a look at the YCSB source code and spotted the line of code that caused our confusion: it's in file https://github.com/brianfrankcooper/YCSB/blob/master/core/src/main/java/com/yahoo/ycsb/workloads/CoreWorkload.java in the "public boolean doTransaction(DB db, Object threadstate)" method in line 497. No matter what the result of a YCSB transaction operation is, the method always returns "true". Not sure if this is a desirable behavior of a benchmarking tool. It makes it difficult to spot these kind of mistakes. The problem can also be observed by running this piece of code: public static void main(String[] args) { CassandraClient10 cli = new CassandraClient10(); Properties props = new Properties(); props.setProperty("hosts", args[0]); cli.setProperties(props); try { cli.init(); } catch (Exception e) { e.printStackTrace(); System.exit(0); } HashMap<String, ByteIterator> vals = new HashMap<String, ByteIterator>(); vals.put("age", new StringByteIterator("57")); vals.put("middlename", new StringByteIterator("bradley")); vals.put("favoritecolor", new StringByteIterator("blue")); int res = cli.insert("usertable", "BrianFrankCooper", vals); System.out.println("Result of insert: " + res); HashMap<String, ByteIterator> result = new HashMap<String, ByteIterator>(); HashSet<String> fields = new HashSet<String>(); fields.add("middlename"); fields.add("age"); fields.add("favoritecolor"); res = cli.read("usertable", "BrianFrankCooper", null, result); System.out.println("Result of read: " + res); for (String s : result.keySet()) { System.out.println("[" + s + "]=[" + result.get(s) + "]"); } res = cli.delete("usertable", "BrianFrankCooper"); System.out.println("Result of delete: " + res); res = cli.read("usertable", "BrianFrankCooper", null, result); System.out.println("Result of read: " + res); for (String s : result.keySet()) { System.out.println("[" + s + "]=[" + result.get(s) + "]"); } } which results in: Result of insert: 0 Result of read: 0 [middlename]=[bradley] [favoritecolor]=[blue] [age]=[57] Result of delete: 0 Result of read: 0 [middlename]=[] [favoritecolor]=[] [age]=[] The second read should not return "true" ("0"). @Robert & Edward, thanks for your help, -Markus