ACCUMULO-3718 Avoid copying underlying Mutation data when possible and added documention to the behavior of Mutation#toThrift
Project: http://git-wip-us.apache.org/repos/asf/accumulo/repo Commit: http://git-wip-us.apache.org/repos/asf/accumulo/commit/91326110 Tree: http://git-wip-us.apache.org/repos/asf/accumulo/tree/91326110 Diff: http://git-wip-us.apache.org/repos/asf/accumulo/diff/91326110 Branch: refs/heads/master Commit: 91326110532008b4fb307690cd77cff4d7fa28b8 Parents: 73ce9cf Author: Bill Slacum <ujustgotbi...@apache.org> Authored: Sun Apr 12 13:50:56 2015 -0400 Committer: Bill Slacum <ujustgotbi...@apache.org> Committed: Sun Apr 12 13:50:56 2015 -0400 ---------------------------------------------------------------------- .../org/apache/accumulo/core/data/Mutation.java | 28 ++++++++++++-------- 1 file changed, 17 insertions(+), 11 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/accumulo/blob/91326110/core/src/main/java/org/apache/accumulo/core/data/Mutation.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/accumulo/core/data/Mutation.java b/core/src/main/java/org/apache/accumulo/core/data/Mutation.java index 81ad531..27b590e 100644 --- a/core/src/main/java/org/apache/accumulo/core/data/Mutation.java +++ b/core/src/main/java/org/apache/accumulo/core/data/Mutation.java @@ -197,11 +197,11 @@ public class Mutation implements Writable { * called previously. Otherwise, this.data will be returned since the buffer is * null and will not change. */ - private byte[] serializedSnapshot() { + private java.nio.ByteBuffer serializedSnapshot() { if (buffer != null) { - return buffer.toArray(); + return java.nio.ByteBuffer.wrap(this.buffer.data, 0, this.buffer.offset); } else { - return this.data; + return java.nio.ByteBuffer.wrap(this.data); } } @@ -709,9 +709,9 @@ public class Mutation implements Writable { } public boolean equals(Mutation m) { - byte[] myData = serializedSnapshot(); - byte[] otherData = m.serializedSnapshot(); - if (Arrays.equals(row, m.row) && entries == m.entries && Arrays.equals(myData, otherData)) { + java.nio.ByteBuffer myData = serializedSnapshot(); + java.nio.ByteBuffer otherData = m.serializedSnapshot(); + if (Arrays.equals(row, m.row) && entries == m.entries && myData.equals(otherData)) { if (values == null && m.values == null) return true; @@ -729,19 +729,25 @@ public class Mutation implements Writable { return false; } + /** + * Creates a {@link org.apache.accumulo.core.data.thrift.TMutation} object + * containing this Mutation's data. + * + * Note that this method will move the Mutation into a "serialized" state + * that will prevent users from adding more data via Mutation#put(). + * + * @return a thrift form of this Mutation + */ public TMutation toThrift() { return toThrift(true); } private TMutation toThrift(boolean serialize) { - byte[] data; if (serialize) { this.serialize(); - data = this.data; - } else { - data = serializedSnapshot(); } - return new TMutation(java.nio.ByteBuffer.wrap(row), java.nio.ByteBuffer.wrap(data), ByteBufferUtil.toByteBuffers(values), entries); + java.nio.ByteBuffer data = serializedSnapshot(); + return new TMutation(java.nio.ByteBuffer.wrap(row), data, ByteBufferUtil.toByteBuffers(values), entries); } protected SERIALIZED_FORMAT getSerializedFormat() {