You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by jd...@apache.org on 2010/11/09 00:59:40 UTC

svn commit: r1032790 - in /hbase/trunk: CHANGES.txt src/main/java/org/apache/hadoop/hbase/regionserver/wal/HLog.java src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestHLog.java

Author: jdcryans
Date: Mon Nov  8 23:59:39 2010
New Revision: 1032790

URL: http://svn.apache.org/viewvc?rev=1032790&view=rev
Log:
HBASE-3208  HLog.findMemstoresWithEditsOlderThan needs to look for edits
            that are equal to too

Modified:
    hbase/trunk/CHANGES.txt
    hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/wal/HLog.java
    hbase/trunk/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestHLog.java

Modified: hbase/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hbase/trunk/CHANGES.txt?rev=1032790&r1=1032789&r2=1032790&view=diff
==============================================================================
--- hbase/trunk/CHANGES.txt (original)
+++ hbase/trunk/CHANGES.txt Mon Nov  8 23:59:39 2010
@@ -658,6 +658,8 @@ Release 0.90.0 - Unreleased
    HBASE-3204  Reenable deferred log flush
    HBASE-3195  [rest] Fix TestTransform breakage on Hudson
    HBASE-3205  TableRecordReaderImpl.restart NPEs when first next is restarted
+   HBASE-3208  HLog.findMemstoresWithEditsOlderThan needs to look for edits
+               that are equal to too
 
 
   IMPROVEMENTS

Modified: hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/wal/HLog.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/wal/HLog.java?rev=1032790&r1=1032789&r2=1032790&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/wal/HLog.java (original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/wal/HLog.java Mon Nov  8 23:59:39 2010
@@ -642,7 +642,7 @@ public class HLog implements Syncable {
     if (logCount > this.maxLogs && this.outputfiles != null &&
         this.outputfiles.size() > 0) {
       // This is an array of encoded region names.
-      regions = findMemstoresWithEditsOlderThan(this.outputfiles.firstKey(),
+      regions = findMemstoresWithEditsEqualOrOlderThan(this.outputfiles.firstKey(),
         this.lastSeqWritten);
       StringBuilder sb = new StringBuilder();
       for (int i = 0; i < regions.length; i++) {
@@ -657,19 +657,19 @@ public class HLog implements Syncable {
   }
 
   /**
-   * Return regions (memstores) that have edits that are less than the passed
-   * <code>oldestWALseqid</code>.
+   * Return regions (memstores) that have edits that are equal or less than
+   * the passed <code>oldestWALseqid</code>.
    * @param oldestWALseqid
    * @param regionsToSeqids
    * @return All regions whose seqid is < than <code>oldestWALseqid</code> (Not
    * necessarily in order).  Null if no regions found.
    */
-  static byte [][] findMemstoresWithEditsOlderThan(final long oldestWALseqid,
+  static byte [][] findMemstoresWithEditsEqualOrOlderThan(final long oldestWALseqid,
       final Map<byte [], Long> regionsToSeqids) {
     //  This method is static so it can be unit tested the easier.
     List<byte []> regions = null;
     for (Map.Entry<byte [], Long> e: regionsToSeqids.entrySet()) {
-      if (e.getValue().longValue() < oldestWALseqid) {
+      if (e.getValue().longValue() <= oldestWALseqid) {
         if (regions == null) regions = new ArrayList<byte []>();
         regions.add(e.getKey());
       }

Modified: hbase/trunk/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestHLog.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestHLog.java?rev=1032790&r1=1032789&r2=1032790&view=diff
==============================================================================
--- hbase/trunk/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestHLog.java (original)
+++ hbase/trunk/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestHLog.java Mon Nov  8 23:59:39 2010
@@ -262,28 +262,30 @@ public class TestHLog  {
   }
 
   /**
-   * Test the findMemstoresWithEditsOlderThan method.
+   * Test the findMemstoresWithEditsEqualOrOlderThan method.
    * @throws IOException
    */
   @Test
-  public void testFindMemstoresWithEditsOlderThan() throws IOException {
+  public void testFindMemstoresWithEditsEqualOrOlderThan() throws IOException {
     Map<byte [], Long> regionsToSeqids = new HashMap<byte [], Long>();
     for (int i = 0; i < 10; i++) {
       Long l = Long.valueOf(i);
       regionsToSeqids.put(l.toString().getBytes(), l);
     }
     byte [][] regions =
-      HLog.findMemstoresWithEditsOlderThan(1, regionsToSeqids);
-    assertEquals(1, regions.length);
-    assertTrue(Bytes.equals(regions[0], "0".getBytes()));
-    regions = HLog.findMemstoresWithEditsOlderThan(3, regionsToSeqids);
-    int count = 3;
+      HLog.findMemstoresWithEditsEqualOrOlderThan(1, regionsToSeqids);
+    assertEquals(2, regions.length);
+    assertTrue(Bytes.equals(regions[0], "0".getBytes()) ||
+        Bytes.equals(regions[0], "1".getBytes()));
+    regions = HLog.findMemstoresWithEditsEqualOrOlderThan(3, regionsToSeqids);
+    int count = 4;
     assertEquals(count, regions.length);
     // Regions returned are not ordered.
     for (int i = 0; i < count; i++) {
       assertTrue(Bytes.equals(regions[i], "0".getBytes()) ||
         Bytes.equals(regions[i], "1".getBytes()) ||
-        Bytes.equals(regions[i], "2".getBytes()));
+        Bytes.equals(regions[i], "2".getBytes()) ||
+        Bytes.equals(regions[i], "3".getBytes()));
     }
   }