You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ap...@apache.org on 2009/07/29 22:55:11 UTC

svn commit: r799074 - in /hadoop/hbase/trunk: ./ src/java/org/apache/hadoop/hbase/ src/java/org/apache/hadoop/hbase/regionserver/ src/test/org/apache/hadoop/hbase/regionserver/

Author: apurtell
Date: Wed Jul 29 20:55:10 2009
New Revision: 799074

URL: http://svn.apache.org/viewvc?rev=799074&view=rev
Log:
HBASE-1719 hold a reference to the region in stores instead of only the region info

Modified:
    hadoop/hbase/trunk/CHANGES.txt
    hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/HRegionInfo.java
    hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HRegion.java
    hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
    hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/Store.java
    hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/regionserver/TestStore.java

Modified: hadoop/hbase/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/CHANGES.txt?rev=799074&r1=799073&r2=799074&view=diff
==============================================================================
--- hadoop/hbase/trunk/CHANGES.txt (original)
+++ hadoop/hbase/trunk/CHANGES.txt Wed Jul 29 20:55:10 2009
@@ -533,6 +533,8 @@
    HBASE-1683  OOME on master splitting logs; stuck, won't go down
    HBASE-1704  Better zk error when failed connect
    HBASE-1714  Thrift server: prefix scan API
+   HBASE-1719  hold a reference to the region in stores instead of only the
+               region info
 
   OPTIMIZATIONS
    HBASE-1412  Change values for delete column and column family in KeyValue

Modified: hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/HRegionInfo.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/HRegionInfo.java?rev=799074&r1=799073&r2=799074&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/HRegionInfo.java (original)
+++ hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/HRegionInfo.java Wed Jul 29 20:55:10 2009
@@ -69,7 +69,6 @@
   //TODO: Move NO_HASH to HStoreFile which is really the only place it is used.
   public static final int NO_HASH = -1;
   private volatile int encodedName = NO_HASH;
-  private boolean splitRequest = false;
 
   private void setHashCode() {
     int result = Arrays.hashCode(this.regionName);
@@ -457,17 +456,6 @@
   }
 
   /**
-   * For internal use in forcing splits ahead of file size limit.
-   * @param b
-   * @return previous value
-   */
-  public boolean shouldSplit(boolean b) {
-    boolean old = this.splitRequest;
-    this.splitRequest = b;
-    return old;
-  }
-
-  /**
    * @return Comparator to use comparing {@link KeyValue}s.
    */
   public KVComparator getComparator() {

Modified: hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HRegion.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HRegion.java?rev=799074&r1=799073&r2=799074&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HRegion.java (original)
+++ hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HRegion.java Wed Jul 29 20:55:10 2009
@@ -199,6 +199,7 @@
     new ReentrantReadWriteLock();
   private final Object splitLock = new Object();
   private long minSequenceId;
+  private boolean splitRequest;
   
   /**
    * Name of the region info file that resides just under the region directory.
@@ -1507,7 +1508,7 @@
   protected Store instantiateHStore(Path baseDir, 
     HColumnDescriptor c, Path oldLogFile, Progressable reporter)
   throws IOException {
-    return new Store(baseDir, this.regionInfo, c, this.fs, oldLogFile,
+    return new Store(baseDir, this, c, this.fs, oldLogFile,
       this.conf, reporter);
   }
 
@@ -2450,6 +2451,17 @@
   }
 
   /**
+   * For internal use in forcing splits ahead of file size limit.
+   * @param b
+   * @return previous value
+   */
+  public boolean shouldSplit(boolean b) {
+    boolean old = this.splitRequest;
+    this.splitRequest = b;
+    return old;
+  }
+
+  /**
    * Facility for dumping and compacting catalog tables.
    * Only does catalog tables since these are only tables we for sure know
    * schema on.  For usage run:

Modified: hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java?rev=799074&r1=799073&r2=799074&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java (original)
+++ hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java Wed Jul 29 20:55:10 2009
@@ -1482,7 +1482,7 @@
             case MSG_REGION_SPLIT:
               region = getRegion(info.getRegionName());
               region.flushcache();
-              region.regionInfo.shouldSplit(true);
+              region.shouldSplit(true);
               // force a compaction; split will be side-effect.
               compactSplitThread.compactionRequested(region,
                 e.msg.getType().name());

Modified: hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/Store.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/Store.java?rev=799074&r1=799073&r2=799074&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/Store.java (original)
+++ hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/Store.java Wed Jul 29 20:55:10 2009
@@ -95,7 +95,7 @@
   protected final MemStore memstore;
   // This stores directory in the filesystem.
   private final Path homedir;
-  private final HRegionInfo regioninfo;
+  private final HRegion region;
   private final HColumnDescriptor family;
   final FileSystem fs;
   private final HBaseConfiguration conf;
@@ -154,13 +154,14 @@
    * failed.  Can be null.
    * @throws IOException
    */
-  protected Store(Path basedir, HRegionInfo info, HColumnDescriptor family,
+  protected Store(Path basedir, HRegion region, HColumnDescriptor family,
     FileSystem fs, Path reconstructionLog, HBaseConfiguration conf,
     final Progressable reporter)
-  throws IOException {  
+  throws IOException {
+    HRegionInfo info = region.regionInfo;
     this.homedir = getStoreHomedir(basedir, info.getEncodedName(),
       family.getName());
-    this.regioninfo = info;
+    this.region = region;
     this.family = family;
     this.fs = fs;
     this.conf = conf;
@@ -317,7 +318,7 @@
         // METACOLUMN info such as HBASE::CACHEFLUSH entries
         if (/* commented out for now - stack via jgray key.isTransactionEntry() || */
             val.matchingFamily(HLog.METAFAMILY) ||
-          !Bytes.equals(key.getRegionName(), regioninfo.getRegionName()) ||
+          !Bytes.equals(key.getRegionName(), region.regionInfo.getRegionName()) ||
           !val.matchingFamily(family.getName())) {
           continue;
         }
@@ -536,7 +537,7 @@
         ", sequenceid=" + logCacheFlushId +
         ", memsize=" + StringUtils.humanReadableInt(flushed) +
         ", filesize=" + StringUtils.humanReadableInt(r.length()) +
-        " to " + this.regioninfo.getRegionNameAsString());
+        " to " + this.region.regionInfo.getRegionNameAsString());
     }
     return sf;
   }
@@ -637,7 +638,7 @@
    * @throws IOException
    */
   StoreSize compact(final boolean mc) throws IOException {
-    boolean forceSplit = this.regioninfo.shouldSplit(false);
+    boolean forceSplit = this.region.shouldSplit(false);
     boolean majorcompaction = mc;
     synchronized (compactLock) {
       // filesToCompact are sorted oldest to newest.
@@ -868,13 +869,17 @@
           more = scanner.next(kvs);
           // output to writer:
           for (KeyValue kv : kvs) {
-            if (writer == null) writer = getWriter(this.regionCompactionDir);
+            if (writer == null) {
+              writer = getWriter(this.regionCompactionDir);
+            }
             writer.append(kv);
           }
           kvs.clear();
         }
       } finally {
-        if (scanner != null) scanner.close();
+        if (scanner != null) {
+          scanner.close();
+        }
       }
     } else {
       MinorCompactingStoreScanner scanner = null;
@@ -1473,8 +1478,12 @@
     }
   }
 
+  HRegion getHRegion() {
+    return this.region;
+  }
+
   HRegionInfo getHRegionInfo() {
-    return this.regioninfo;
+    return this.region.regionInfo;
   }
 
   /**

Modified: hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/regionserver/TestStore.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/regionserver/TestStore.java?rev=799074&r1=799073&r2=799074&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/regionserver/TestStore.java (original)
+++ hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/regionserver/TestStore.java Wed Jul 29 20:55:10 2009
@@ -70,17 +70,22 @@
   private void init(String methodName) throws IOException {
     //Setting up a Store
     Path basedir = new Path(DIR+methodName);
+    Path logdir = new Path(DIR+methodName+"/logs");
     HColumnDescriptor hcd = new HColumnDescriptor(family);
     HBaseConfiguration conf = new HBaseConfiguration();
     FileSystem fs = FileSystem.get(conf);
     Path reconstructionLog = null; 
     Progressable reporter = null;
 
+    fs.delete(logdir, true);
+
     HTableDescriptor htd = new HTableDescriptor(table);
     htd.addFamily(hcd);
     HRegionInfo info = new HRegionInfo(htd, null, null, false);
-
-    store = new Store(basedir, info, hcd, fs, reconstructionLog, conf,
+    HLog hlog = new HLog(fs, logdir, conf, null);
+    HRegion region = new HRegion(basedir, hlog, fs, conf, info, null);
+    
+    store = new Store(basedir, region, hcd, fs, reconstructionLog, conf,
         reporter);
   }
 
@@ -112,7 +117,7 @@
     this.store.close();
     // Reopen it... should pick up two files
     this.store = new Store(storedir.getParent().getParent(),
-      this.store.getHRegionInfo(),
+      this.store.getHRegion(),
       this.store.getFamily(), fs, null, c, null);
     System.out.println(this.store.getHRegionInfo().getEncodedName());
     assertEquals(2, this.store.getStorefilesCount());