You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@hbase.apache.org by Randy Fox <ra...@connexity.com> on 2014/05/01 18:37:02 UTC

Re: Off-heap block cache fails in 0.94.6

Sorry it took us so long.  I tried the patch and got the same results:

java.lang.IllegalStateException: Schema metrics requested before 
table/CF name initialization: {"tableName":"null","cfName":"null"}
         at 
org.apache.hadoop.hbase.regionserver.metrics.SchemaConfigured.getSchemaMetrics(SchemaConfigured.java:180)
         at 
org.apache.hadoop.hbase.io.hfile.LruBlockCache.updateSizeMetrics(LruBlockCache.java:337)
         at 
org.apache.hadoop.hbase.io.hfile.LruBlockCache.cacheBlock(LruBlockCache.java:292)
         at 
org.apache.hadoop.hbase.io.hfile.LruBlockCache.cacheBlock(LruBlockCache.java:320)
         at 
org.apache.hadoop.hbase.io.hfile.DoubleBlockCache.getBlock(DoubleBlockCache.java:102)
         at 
org.apache.hadoop.hbase.io.hfile.HFileReaderV2.readBlock(HFileReaderV2.java:303)
         at 
org.apache.hadoop.hbase.io.hfile.HFileBlockIndex$BlockIndexReader.loadDataBlockWithScanInfo(HFileBlockIndex.java:254)
         at 
org.apache.hadoop.hbase.io.hfile.HFileReaderV2$AbstractScannerV2.seekTo(HFileReaderV2.java:480)
         at 
org.apache.hadoop.hbase.io.hfile.HFileReaderV2$AbstractScannerV2.seekTo(HFileReaderV2.java:501)
         at 
org.apache.hadoop.hbase.regionserver.StoreFileScanner.seekAtOrAfter(StoreFileScanner.java:220)
         at 
org.apache.hadoop.hbase.regionserver.StoreFileScanner.seek(StoreFileScanner.java:140)
         at 
org.apache.hadoop.hbase.regionserver.StoreScanner.<init>(StoreScanner.java:131)
         at 
org.apache.hadoop.hbase.regionserver.Store.getScanner(Store.java:2135)
         at 
org.apache.hadoop.hbase.regionserver.HRegion$RegionScannerImpl.<init>(HRegion.java:3738)
         at 
org.apache.hadoop.hbase.regionserver.HRegion.instantiateRegionScanner(HRegion.java:1762)
         at 
org.apache.hadoop.hbase.regionserver.HRegion.getScanner(HRegion.java:1754)
         at 
org.apache.hadoop.hbase.regionserver.HRegion.getScanner(HRegion.java:1731)
         at 
org.apache.hadoop.hbase.regionserver.HRegion.get(HRegion.java:4759)
         at 
org.apache.hadoop.hbase.regionserver.HRegion.get(HRegion.java:4733)
         at 
org.apache.hadoop.hbase.regionserver.HRegionServer.get(HRegionServer.java:2072)
         at sun.reflect.GeneratedMethodAccessor57.invoke(Unknown Source)
         at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
         at java.lang.reflect.Method.invoke(Method.java:597)
         at 
org.apache.hadoop.hbase.ipc.WritableRpcEngine$Server.call(WritableRpcEngine.java:320)
         at 
org.apache.hadoop.hbase.ipc.HBaseServer$Handler.run(HBaseServer.java:1428)

 >git diff .
diff --git 
a/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileBlock.java 
b/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileBlock.java
index 6bf7437..fc4e8ed 100644
--- a/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileBlock.java
+++ b/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileBlock.java
@@ -41,6 +41,7 @@ import 
org.apache.hadoop.hbase.io.encoding.DataBlockEncoding;
  import org.apache.hadoop.hbase.io.hfile.Compression.Algorithm;
  import org.apache.hadoop.hbase.regionserver.MemStore;
  import org.apache.hadoop.hbase.regionserver.metrics.SchemaConfigured;
+import org.apache.hadoop.hbase.regionserver.metrics.SchemaMetrics;
  import org.apache.hadoop.hbase.util.Bytes;
  import org.apache.hadoop.hbase.util.ChecksumType;
  import org.apache.hadoop.hbase.util.ClassSize;
@@ -138,6 +139,9 @@ public class HFileBlock extends SchemaConfigured 
implements Cacheable {
     */
    static final int CHECKSUM_SIZE = Bytes.SIZEOF_INT;

+  private static SchemaConfigured UNKNOWN_TABLE_AND_CF = new 
SchemaConfigured(
+      SchemaMetrics.UNKNOWN, SchemaMetrics.UNKNOWN);
+
    private static final CacheableDeserializer<Cacheable> 
blockDeserializer =
        new CacheableDeserializer<Cacheable>() {
          public HFileBlock deserialize(ByteBuffer buf) throws IOException{
@@ -153,6 +157,7 @@ public class HFileBlock extends SchemaConfigured 
implements Cacheable {
            buf.limit(buf.limit() + HFileBlock.EXTRA_SERIALIZATION_SPACE);
            ourBuffer.offset = buf.getLong();
            ourBuffer.nextBlockOnDiskSizeWithHeader = buf.getInt();
+          UNKNOWN_TABLE_AND_CF.passSchemaMetricsTo(ourBuffer);
            return ourBuffer;
          }
        };
diff --git 
a/src/main/java/org/apache/hadoop/hbase/regionserver/metrics/SchemaConfigured.java 
b/src/main/java/org/apache/hadoop/hbase/regionserver/metrics/SchemaConfigured.java
index 7493951..0764ec8 100644
--- 
a/src/main/java/org/apache/hadoop/hbase/regionserver/metrics/SchemaConfigured.java
+++ 
b/src/main/java/org/apache/hadoop/hbase/regionserver/metrics/SchemaConfigured.java
@@ -163,6 +163,11 @@ public class SchemaConfigured implements HeapSize, 
SchemaAware {
      schemaMetrics = that.getSchemaMetrics();
    }

+  public SchemaConfigured(String tableName, String cfName) {
+    this.tableName = tableName != null ? tableName.intern() : tableName;
+    this.cfName = cfName != null ? cfName.intern() : cfName;
+  }
+
    @Override
    public String getTableName() {
      return tableName;
On 2/18/14 5:37 PM, Nick Dimiduk wrote:
> Hi Dean,
>
> Any chance you've tested Ram's patch? Does it work for you?
>
> Thanks,
> Nick
>
>
> On Mon, Jan 27, 2014 at 8:28 AM, Dean <hi...@gmail.com> wrote:
>
>> Hi Ram,
>>
>> We'll give it a shot, thanks!
>>
>> -Dean
>>