Repository: hbase Updated Branches: refs/heads/0.98 f6e5c3290 -> 4de9a6481
HBASE-15218 On RS crash and replay of WAL, loosing all Tags in Cells (Anoop Sam John) Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/4de9a648 Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/4de9a648 Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/4de9a648 Branch: refs/heads/0.98 Commit: 4de9a6481c62c783f1d5719119dec968789e7126 Parents: f6e5c32 Author: stack <[email protected]> Authored: Fri Feb 5 10:09:13 2016 -0800 Committer: stack <[email protected]> Committed: Fri Feb 5 10:22:32 2016 -0800 ---------------------------------------------------------------------- .../regionserver/wal/SecureWALCellCodec.java | 7 +++--- .../hbase/regionserver/wal/WALCellCodec.java | 4 +-- ...ibilityLabelsWithDefaultVisLabelService.java | 26 ++++++++++++++++++++ 3 files changed, 32 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hbase/blob/4de9a648/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/SecureWALCellCodec.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/SecureWALCellCodec.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/SecureWALCellCodec.java index 821dd09..02d82ee 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/SecureWALCellCodec.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/SecureWALCellCodec.java @@ -29,7 +29,8 @@ import org.apache.hadoop.hbase.classification.InterfaceAudience; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.Cell; import org.apache.hadoop.hbase.KeyValue; -import org.apache.hadoop.hbase.codec.KeyValueCodec; +import org.apache.hadoop.hbase.KeyValueUtil; +import org.apache.hadoop.hbase.codec.KeyValueCodecWithTags; import org.apache.hadoop.hbase.io.crypto.Decryptor; import org.apache.hadoop.hbase.io.crypto.Encryption; import org.apache.hadoop.hbase.io.crypto.Encryptor; @@ -59,7 +60,7 @@ public class SecureWALCellCodec extends WALCellCodec { this.decryptor = decryptor; } - static class EncryptedKvDecoder extends KeyValueCodec.KeyValueDecoder { + static class EncryptedKvDecoder extends KeyValueCodecWithTags.KeyValueDecoder { private Decryptor decryptor; private byte[] iv; @@ -141,7 +142,7 @@ public class SecureWALCellCodec extends WALCellCodec { } - static class EncryptedKvEncoder extends KeyValueCodec.KeyValueEncoder { + static class EncryptedKvEncoder extends KeyValueCodecWithTags.KeyValueEncoder { private Encryptor encryptor; private final ThreadLocal<byte[]> iv = new ThreadLocal<byte[]>() { http://git-wip-us.apache.org/repos/asf/hbase/blob/4de9a648/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.java index 35bbb82..b0c0599 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.java @@ -30,7 +30,7 @@ import org.apache.hadoop.hbase.classification.InterfaceAudience; import org.apache.hadoop.hbase.codec.BaseDecoder; import org.apache.hadoop.hbase.codec.BaseEncoder; import org.apache.hadoop.hbase.codec.Codec; -import org.apache.hadoop.hbase.codec.KeyValueCodec; +import org.apache.hadoop.hbase.codec.KeyValueCodecWithTags; import org.apache.hadoop.hbase.io.util.Dictionary; import org.apache.hadoop.hbase.io.util.StreamUtils; import org.apache.hadoop.hbase.util.Bytes; @@ -349,7 +349,7 @@ public class WALCellCodec implements Codec { @Override public Decoder getDecoder(InputStream is) { return (compression == null) - ? new KeyValueCodec.KeyValueDecoder(is) : new CompressedKvDecoder(is, compression); + ? new KeyValueCodecWithTags.KeyValueDecoder(is) : new CompressedKvDecoder(is, compression); } @Override http://git-wip-us.apache.org/repos/asf/hbase/blob/4de9a648/hbase-server/src/test/java/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDefaultVisLabelService.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDefaultVisLabelService.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDefaultVisLabelService.java index 21b9537..7587512 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDefaultVisLabelService.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDefaultVisLabelService.java @@ -32,6 +32,7 @@ import java.util.concurrent.atomic.AtomicBoolean; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.hadoop.hbase.HConstants; +import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.testclassification.MediumTests; import org.apache.hadoop.hbase.client.HTable; import org.apache.hadoop.hbase.client.Result; @@ -219,4 +220,29 @@ public class TestVisibilityLabelsWithDefaultVisLabelService extends TestVisibili }; SUPERUSER.runAs(action); } + + @Test(timeout = 60 * 1000) + public void testVisibilityLabelsOnWALReplay() throws Exception { + final TableName tableName = TableName.valueOf(TEST_NAME.getMethodName()); + HTable table = null; + try { + table = createTableAndWriteDataWithLabels(tableName, + "(" + SECRET + "|" + CONFIDENTIAL + ")", PRIVATE); + List<RegionServerThread> regionServerThreads = TEST_UTIL.getHBaseCluster() + .getRegionServerThreads(); + for (RegionServerThread rsThread : regionServerThreads) { + rsThread.getRegionServer().abort("Aborting "); + } + // Start one new RS + RegionServerThread rs = TEST_UTIL.getHBaseCluster().startRegionServer(); + waitForLabelsRegionAvailability(rs.getRegionServer()); + Scan s = new Scan(); + s.setAuthorizations(new Authorizations(SECRET)); + ResultScanner scanner = table.getScanner(s); + Result[] next = scanner.next(3); + assertTrue(next.length == 1); + } finally { + table.close(); + } + } }
