diff --git a/core/src/main/java/com/yahoo/ycsb/BasicDB.java b/core/src/main/java/com/yahoo/ycsb/BasicDB.java index 83eb5e2528355b4ef3da6a09913f965a4360472d..ec12bcda230dc462c78e56ebd57c8f0ef3cf5e50 100644 --- a/core/src/main/java/com/yahoo/ycsb/BasicDB.java +++ b/core/src/main/java/com/yahoo/ycsb/BasicDB.java @@ -80,7 +80,7 @@ public class BasicDB extends DB verbose=Boolean.parseBoolean(getProperties().getProperty(VERBOSE, VERBOSE_DEFAULT)); todelay=Integer.parseInt(getProperties().getProperty(SIMULATE_DELAY, SIMULATE_DELAY_DEFAULT)); randomizedelay=Boolean.parseBoolean(getProperties().getProperty(RANDOMIZE_DELAY, RANDOMIZE_DELAY_DEFAULT)); - if (verbose) + if (verbose) synchronized(System.out) { System.out.println("***************** properties *****************"); Properties p=getProperties(); @@ -96,6 +96,19 @@ public class BasicDB extends DB } } + static final ThreadLocal<StringBuilder> TL_STRING_BUILDER = new ThreadLocal<StringBuilder>() { + @Override + protected StringBuilder initialValue() { + return new StringBuilder(); + } + }; + + static StringBuilder getStringBuilder() { + StringBuilder sb = TL_STRING_BUILDER.get(); + sb.setLength(0); + return sb; + } + /** * Read a record from the database. Each field/value pair from the result will be stored in a HashMap. * @@ -111,21 +124,23 @@ public class BasicDB extends DB if (verbose) { - System.out.print("READ "+table+" "+key+" [ "); + StringBuilder sb = getStringBuilder(); + sb.append("READ ").append(table).append(" ").append(key).append(" [ "); if (fields!=null) { for (String f : fields) { - System.out.print(f+" "); + sb.append(f).append(" "); } } else { - System.out.print("<all fields>"); + sb.append("<all fields>"); } - System.out.println("]"); - } + sb.append("]"); + System.out.println(sb); + } return Status.OK; } @@ -146,21 +161,23 @@ public class BasicDB extends DB if (verbose) { - System.out.print("SCAN "+table+" "+startkey+" "+recordcount+" [ "); + StringBuilder sb = getStringBuilder(); + sb.append("SCAN ").append(table).append(" ").append(startkey).append(" ").append(recordcount).append(" [ "); if (fields!=null) { for (String f : fields) { - System.out.print(f+" "); + sb.append(f).append(" "); } } else { - System.out.print("<all fields>"); + sb.append("<all fields>"); } - System.out.println("]"); - } + sb.append("]"); + System.out.println(sb); + } return Status.OK; } @@ -180,15 +197,17 @@ public class BasicDB extends DB if (verbose) { - System.out.print("UPDATE "+table+" "+key+" [ "); + StringBuilder sb = getStringBuilder(); + sb.append("UPDATE ").append(table).append(" ").append(key).append(" [ "); if (values!=null) { for (Map.Entry<String, ByteIterator> entry : values.entrySet()) { - System.out.print(entry.getKey() +"="+ entry.getValue() +" "); + sb.append(entry.getKey()).append("=").append(entry.getValue()).append(" "); } } - System.out.println("]"); + sb.append("]"); + System.out.println(sb); } return Status.OK; @@ -209,16 +228,18 @@ public class BasicDB extends DB if (verbose) { - System.out.print("INSERT "+table+" "+key+" [ "); + StringBuilder sb = getStringBuilder(); + sb.append("INSERT ").append(table).append(" ").append(key).append(" [ "); if (values!=null) { for (Map.Entry<String, ByteIterator> entry : values.entrySet()) { - System.out.print(entry.getKey() +"="+ entry.getValue() +" "); + sb.append(entry.getKey()).append("=").append(entry.getValue()).append(" "); } } - System.out.println("]"); + sb.append("]"); + System.out.println(sb); } return Status.OK; @@ -238,7 +259,9 @@ public class BasicDB extends DB if (verbose) { - System.out.println("DELETE "+table+" "+key); + StringBuilder sb = getStringBuilder(); + sb.append("DELETE ").append(table).append(" ").append(key); + System.out.println(sb); } return Status.OK; diff --git a/core/src/main/java/com/yahoo/ycsb/RandomByteIterator.java b/core/src/main/java/com/yahoo/ycsb/RandomByteIterator.java index cb0977aa56c8f52f4686d84aaaa23f4f30f160c2..b080ec56a9d0ec54939273bdc60b9daab8959a59 100644 --- a/core/src/main/java/com/yahoo/ycsb/RandomByteIterator.java +++ b/core/src/main/java/com/yahoo/ycsb/RandomByteIterator.java @@ -32,14 +32,23 @@ public class RandomByteIterator extends ByteIterator { private void fillBytesImpl(byte[] buffer, int base) { int bytes = Utils.random().nextInt(); - try { - buffer[base+0] = (byte)(((bytes) & 31) + ' '); - buffer[base+1] = (byte)(((bytes >> 5) & 63) + ' '); - buffer[base+2] = (byte)(((bytes >> 10) & 95) + ' '); - buffer[base+3] = (byte)(((bytes >> 15) & 31) + ' '); - buffer[base+4] = (byte)(((bytes >> 20) & 63) + ' '); - buffer[base+5] = (byte)(((bytes >> 25) & 95) + ' '); - } catch (ArrayIndexOutOfBoundsException e) { /* ignore it */ } + + switch(buffer.length - base) { + default: + buffer[base+5] = (byte)(((bytes >> 25) & 95) + ' '); + case 5: + buffer[base+4] = (byte)(((bytes >> 20) & 63) + ' '); + case 4: + buffer[base+3] = (byte)(((bytes >> 15) & 31) + ' '); + case 3: + buffer[base+2] = (byte)(((bytes >> 10) & 95) + ' '); + case 2: + buffer[base+1] = (byte)(((bytes >> 5) & 63) + ' '); + case 1: + buffer[base+0] = (byte)(((bytes) & 31) + ' '); + case 0: + break; + } } private void fillBytes() {