hbase-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From st...@apache.org
Subject svn commit: r813138 - in /hadoop/hbase/trunk: CHANGES.txt src/java/org/apache/hadoop/hbase/io/hfile/HFile.java
Date Wed, 09 Sep 2009 22:19:22 GMT
Author: stack
Date: Wed Sep  9 22:19:22 2009
New Revision: 813138

URL: http://svn.apache.org/viewvc?rev=813138&view=rev
Log:
HBASE-1818 HFile code review and refinement

Modified:
    hadoop/hbase/trunk/CHANGES.txt
    hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/io/hfile/HFile.java

Modified: hadoop/hbase/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/CHANGES.txt?rev=813138&r1=813137&r2=813138&view=diff
==============================================================================
--- hadoop/hbase/trunk/CHANGES.txt (original)
+++ hadoop/hbase/trunk/CHANGES.txt Wed Sep  9 22:19:22 2009
@@ -34,6 +34,7 @@
    HBASE-1800  Too many ZK connections
    HBASE-1819  Update to 0.20.1 hadoop and zk 3.2.1
    HBASE-1820  Update jruby from 1.2 to 1.3.1
+   HBASE-1818  HFile code review and refinement (Shubert Zhang via Stack)
 
   OPTIMIZATIONS
 

Modified: hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/io/hfile/HFile.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/io/hfile/HFile.java?rev=813138&r1=813137&r2=813138&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/io/hfile/HFile.java (original)
+++ hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/io/hfile/HFile.java Wed Sep  9 22:19:22
2009
@@ -168,7 +168,7 @@
     protected String name;
 
     // Total uncompressed bytes, maybe calculate a compression ratio later.
-    private int totalBytes = 0;
+    private long totalBytes = 0;
 
     // Total # of key/value entries, ie: how many times add() was called.
     private int entryCount = 0;
@@ -320,13 +320,12 @@
      */
     private void finishBlock() throws IOException {
       if (this.out == null) return;
-      long size = releaseCompressingStream(this.out);
+      int size = releaseCompressingStream(this.out);
       this.out = null;
       blockKeys.add(firstKey);
-      int written = longToInt(size);
       blockOffsets.add(Long.valueOf(blockBegin));
-      blockDataSizes.add(Integer.valueOf(written));
-      this.totalBytes += written;
+      blockDataSizes.add(Integer.valueOf(size));
+      this.totalBytes += size;
     }
 
     /*
@@ -335,10 +334,10 @@
      */
     private void newBlock() throws IOException {
       // This is where the next block begins.
-      blockBegin = outputStream.getPos();
+      this.blockBegin = outputStream.getPos();
       this.out = getCompressingStream();
       this.out.write(DATABLOCKMAGIC);
-      firstKey = null;
+      this.firstKey = null;
     }
 
     /*
@@ -513,7 +512,7 @@
       }
       if (this.lastKeyBuffer != null) {
         if (this.comparator.compare(this.lastKeyBuffer, this.lastKeyOffset,
-            this.lastKeyLength, key, offset, length) > 0) {
+            this.lastKeyLength, key, offset, length) >= 0) {
           throw new IOException("Added a key not lexically larger than" +
             " previous key=" + Bytes.toString(key, offset, length) +
             ", lastkey=" + Bytes.toString(this.lastKeyBuffer, this.lastKeyOffset,
@@ -620,7 +619,7 @@
       appendFileInfo(this.fileinfo, FileInfo.AVG_KEY_LEN,
         Bytes.toBytes(avgKeyLen), false);
       int avgValueLen = this.entryCount == 0? 0:
-        (int)(this.keylength/this.entryCount);
+        (int)(this.valuelength/this.entryCount);
       appendFileInfo(this.fileinfo, FileInfo.AVG_VALUE_LEN,
         Bytes.toBytes(avgValueLen), false);
       appendFileInfo(this.fileinfo, FileInfo.COMPARATOR,
@@ -860,7 +859,7 @@
       if (trailer.metaIndexCount == 0) {
         return null; // there are no meta blocks
       }
-      if (metaIndex == null) {
+      if ((metaIndex == null) || (metaIndex.count == 0)) {
         throw new IOException("Meta index not loaded");
       }
       byte [] mbname = Bytes.toBytes(metaBlockName);
@@ -876,16 +875,14 @@
       
       ByteBuffer buf = decompress(metaIndex.blockOffsets[block],
         longToInt(blockSize), metaIndex.blockDataSizes[block]);
+      if (buf == null)
+    	return null;
       byte [] magic = new byte[METABLOCKMAGIC.length];
       buf.get(magic, 0, magic.length);
 
       if (! Arrays.equals(magic, METABLOCKMAGIC)) {
         throw new IOException("Meta magic is bad in block " + block);
       }
-      // Toss the header. May have to remove later due to performance.
-      buf.compact();
-      buf.limit(buf.limit() - METABLOCKMAGIC.length);
-      buf.rewind();
       return buf;
     }
     /**
@@ -898,7 +895,7 @@
       if (blockIndex == null) {
         throw new IOException("Block index not loaded");
       }
-      if (block < 0 || block > blockIndex.count) {
+      if (block < 0 || block >= blockIndex.count) {
         throw new IOException("Requested block is out of range: " + block +
           ", max: " + blockIndex.count);
       }
@@ -935,16 +932,15 @@
         }
         ByteBuffer buf = decompress(blockIndex.blockOffsets[block],
             longToInt(onDiskBlockSize), this.blockIndex.blockDataSizes[block]);
+        if (buf == null) {
+          throw new IOException("Decompress block failure " + block);
+        }
 
         byte [] magic = new byte[DATABLOCKMAGIC.length];
         buf.get(magic, 0, magic.length);
         if (!Arrays.equals(magic, DATABLOCKMAGIC)) {
           throw new IOException("Data magic is bad in block " + block);
         }
-        // Toss the header. May have to remove later due to performance.
-        buf.compact();
-        buf.limit(buf.limit() - DATABLOCKMAGIC.length);
-        buf.rewind();
 
         // Cache the block
         if(cacheBlock && cache != null) {
@@ -1249,8 +1245,10 @@
         }
         if (block != null && currBlock == 0) {
           block.rewind();
+          block.position(DATABLOCKMAGIC.length);
           currKeyLen = block.getInt();
           currValueLen = block.getInt();
+          return true;
         }
         currBlock = 0;
         block = reader.readBlock(currBlock, cacheBlocks);
@@ -1273,6 +1271,7 @@
           } else {
             // we are already in the same block, just rewind to seek again.
             block.rewind();
+            block.position(DATABLOCKMAGIC.length);
           }
         }
       }
@@ -1366,7 +1365,7 @@
   }
 
   /*
-   * The block index for a RFile.
+   * The block index for a HFile.
    * Used reading.
    */
   static class BlockIndex implements HeapSize {



Mime
View raw message