Author: jbellis
Date: Wed Dec 22 17:31:58 2010
New Revision: 1052002

URL: http://svn.apache.org/viewvc?rev=1052002&view=rev
Log:
clean up ReadResponse
patch by jbellis; reviewed by tjake for CASSANDRA-1885

Modified:
    
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ReadResponse.java
    
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ReadVerbHandler.java

Modified: 
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ReadResponse.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ReadResponse.java?rev=1052002&r1=1052001&r2=1052002&view=diff
==============================================================================
--- 
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ReadResponse.java
 (original)
+++ 
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ReadResponse.java
 Wed Dec 22 17:31:58 2010
@@ -47,20 +47,21 @@ private static ICompactSerializer<ReadRe
         return serializer_;
     }
     
-       private Row row_;
-       private ByteBuffer digest_ = FBUtilities.EMPTY_BYTE_BUFFER;
-    private boolean isDigestQuery_ = false;
+       private final Row row_;
+       private final ByteBuffer digest_;
 
        public ReadResponse(ByteBuffer digest )
     {
         assert digest != null;
                digest_= digest;
+        row_ = null;
        }
 
        public ReadResponse(Row row)
     {
         assert row != null;
                row_ = row;
+        digest_ = null;
        }
 
        public Row row() 
@@ -75,12 +76,7 @@ private static ICompactSerializer<ReadRe
 
        public boolean isDigestQuery()
     {
-       return isDigestQuery_;
-    }
-    
-    public void setIsDigestQuery(boolean isDigestQuery)
-    {
-       isDigestQuery_ = isDigestQuery;
+       return digest_ != null;
     }
 }
 
@@ -88,31 +84,35 @@ class ReadResponseSerializer implements 
 {
        public void serialize(ReadResponse rm, DataOutputStream dos) throws 
IOException
        {
-        dos.writeInt(rm.digest().remaining());
-        dos.write(rm.digest().array(), rm.digest().position() + 
rm.digest().arrayOffset(), rm.digest().remaining());
+        dos.writeInt(rm.isDigestQuery() ? rm.digest().remaining() : 0);
+        ByteBuffer buffer = rm.isDigestQuery() ? rm.digest() : 
FBUtilities.EMPTY_BYTE_BUFFER;
+        dos.write(buffer.array(), buffer.position() + buffer.arrayOffset(), 
buffer.remaining());
         dos.writeBoolean(rm.isDigestQuery());
-        
-        if( !rm.isDigestQuery() && rm.row() != null )
-        {            
+
+        if (!rm.isDigestQuery())
+        {
             Row.serializer().serialize(rm.row(), dos);
-        }                              
-       }
+        }
+    }
        
     public ReadResponse deserialize(DataInputStream dis) throws IOException
     {
+        byte[] digest = null;
         int digestSize = dis.readInt();
-        byte[] digest = new byte[digestSize];
-        dis.read(digest, 0 , digestSize);
+        if (digestSize > 0)
+        {
+            digest = new byte[digestSize];
+            dis.readFully(digest, 0, digestSize);
+        }
         boolean isDigest = dis.readBoolean();
-        
+        assert isDigest == digestSize > 0;
+
         Row row = null;
         if (!isDigest)
         {
             row = Row.serializer().deserialize(dis);
         }
 
-        ReadResponse rmsg = isDigest ? new 
ReadResponse(ByteBuffer.wrap(digest)) : new ReadResponse(row);
-        rmsg.setIsDigestQuery(isDigest);
-       return rmsg;
+        return isDigest ? new ReadResponse(ByteBuffer.wrap(digest)) : new 
ReadResponse(row);
     } 
 }

Modified: 
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ReadVerbHandler.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ReadVerbHandler.java?rev=1052002&r1=1052001&r2=1052002&view=diff
==============================================================================
--- 
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ReadVerbHandler.java
 (original)
+++ 
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ReadVerbHandler.java
 Wed Dec 22 17:31:58 2010
@@ -82,7 +82,6 @@ public class ReadVerbHandler implements 
             {
                 readResponse = new ReadResponse(row);
             }
-            readResponse.setIsDigestQuery(command.isDigestQuery());
             /* serialize the ReadResponseMessage. */
             readCtx.bufOut_.reset();
 


Reply via email to