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();
}