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/03/30 19:16:46 UTC

svn commit: r929195 - in /hadoop/hbase/trunk: CHANGES.txt core/src/main/java/org/apache/hadoop/hbase/regionserver/wal/WALEdit.java

Author: jdcryans
Date: Tue Mar 30 17:16:46 2010
New Revision: 929195

URL: http://svn.apache.org/viewvc?rev=929195&view=rev
Log:
HBASE-2361  WALEdit broke replication scope

Modified:
    hadoop/hbase/trunk/CHANGES.txt
    hadoop/hbase/trunk/core/src/main/java/org/apache/hadoop/hbase/regionserver/wal/WALEdit.java

Modified: hadoop/hbase/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/CHANGES.txt?rev=929195&r1=929194&r2=929195&view=diff
==============================================================================
--- hadoop/hbase/trunk/CHANGES.txt (original)
+++ hadoop/hbase/trunk/CHANGES.txt Tue Mar 30 17:16:46 2010
@@ -256,6 +256,7 @@ Release 0.21.0 - Unreleased
    HBASE-2358  Store doReconstructionLog will fail if oldlogfile.log is empty
                and won't load region (Cosmin Lehene via Stack)
    HBASE-2370  saveVersion.sh doesnt properly grab the git revision
+   HBASE-2361  WALEdit broke replication scope
 
   IMPROVEMENTS
    HBASE-1760  Cleanup TODOs in HTable

Modified: hadoop/hbase/trunk/core/src/main/java/org/apache/hadoop/hbase/regionserver/wal/WALEdit.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/core/src/main/java/org/apache/hadoop/hbase/regionserver/wal/WALEdit.java?rev=929195&r1=929194&r2=929195&view=diff
==============================================================================
--- hadoop/hbase/trunk/core/src/main/java/org/apache/hadoop/hbase/regionserver/wal/WALEdit.java (original)
+++ hadoop/hbase/trunk/core/src/main/java/org/apache/hadoop/hbase/regionserver/wal/WALEdit.java Tue Mar 30 17:16:46 2010
@@ -24,8 +24,11 @@ import java.io.DataOutput;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.NavigableMap;
+import java.util.TreeMap;
 
 import org.apache.hadoop.hbase.KeyValue;
+import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.hadoop.hbase.util.ClassSize;
 import org.apache.hadoop.io.Writable;
 
@@ -67,7 +70,8 @@ public class WALEdit implements Writable
   
   private final int VERSION_2 = -1;
   
-  private List<KeyValue> kvs = new ArrayList<KeyValue>();
+  private final ArrayList<KeyValue> kvs = new ArrayList<KeyValue>();
+  private NavigableMap<byte[], Integer> scopes;
   
   public WALEdit() {
   }
@@ -88,13 +92,23 @@ public class WALEdit implements Writable
     return kvs;
   }
 
-  public void readFields(DataInput in) throws IOException {
-    
-    // ignore any old state in case caller is recycling an instance of this object.
-    kvs = new ArrayList<KeyValue>();
+  public NavigableMap<byte[], Integer> getScopes() {
+    return scopes;
+  }
 
-    int versionOrLength = in.readInt();
 
+  public void setScopes (NavigableMap<byte[], Integer> scopes) {
+    // We currently process the map outside of WALEdit,
+    // TODO revisit when replication is part of core
+    this.scopes = scopes;
+  }
+
+  public void readFields(DataInput in) throws IOException {
+    kvs.clear();
+    if (scopes != null) {
+      scopes.clear();
+    }
+    int versionOrLength = in.readInt();
     if (versionOrLength == VERSION_2) {
       // this is new style HLog entry containing multiple KeyValues.
       int numEdits = in.readInt();
@@ -103,9 +117,20 @@ public class WALEdit implements Writable
         kv.readFields(in);
         this.add(kv);
       }
+      int numFamilies = in.readInt();
+      if (numFamilies > 0) {
+        if (scopes == null) {
+          scopes = new TreeMap<byte[], Integer>(Bytes.BYTES_COMPARATOR);
+        }
+        for (int i = 0; i < numFamilies; i++) {
+          byte[] fam = Bytes.readByteArray(in);
+          int scope = in.readInt();
+          scopes.put(fam, scope);
+        }
+      }
     } else {
       // this is an old style HLog entry. The int that we just
-      // read is actually the length of a single KeyValye.
+      // read is actually the length of a single KeyValue.
       KeyValue kv = new KeyValue();
       kv.readFields(versionOrLength, in);
       this.add(kv);
@@ -116,9 +141,20 @@ public class WALEdit implements Writable
   public void write(DataOutput out) throws IOException {
     out.writeInt(VERSION_2);
     out.writeInt(kvs.size());
+    // We interleave the two lists for code simplicity
     for (KeyValue kv : kvs) {
       kv.write(out);
     }
+    if (scopes == null) {
+      out.writeInt(0);
+    } else {
+      out.writeInt(scopes.size());
+      for (byte[] key : scopes.keySet()) {
+        Bytes.writeByteArray(out, key);
+        out.writeInt(scopes.get(key));
+      }
+    }
+
   }
 
   public String toString() {
@@ -129,6 +165,9 @@ public class WALEdit implements Writable
       sb.append(kv.toString());
       sb.append("; ");
     }
+    if (scopes != null) {
+      sb.append(" scopes: " + scopes.toString());
+    }
     sb.append(">]");
     return sb.toString();
   }