Skip to content

Commit

Permalink
HBASE-27422: Support replication for hbase:acl (#4827)
Browse files Browse the repository at this point in the history
Signed-off-by: Ankit Singhal <[email protected]>
Signed-off-by: Duo Zhang <[email protected]>
Signed-off-by: Tak Lon (Stephen) Wu <[email protected]>
Signed-off-by: Wellington Chevreuil <[email protected]>

(cherry picked from commit 856fa14)
  • Loading branch information
Kota-SH authored and wchevreuil committed Apr 14, 2023
1 parent 3e6e9c5 commit b75c72d
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,28 @@
*/
package org.apache.hadoop.hbase.replication;

import org.apache.hadoop.hbase.security.access.PermissionStorage;
import org.apache.hadoop.hbase.security.visibility.VisibilityConstants;
import org.apache.hadoop.hbase.wal.WAL.Entry;
import org.apache.yetus.audience.InterfaceAudience;

/**
* Skips WAL edits for all System tables including hbase:meta.
* Skips WAL edits for all System tables including hbase:meta except hbase:acl. As of now, only 2
* tables can be allowed for replication - hbase:acl and hbase:labels. Other tables which not be
* replicated are 1. hbase:meta - not to be replicated 2. hbase:canary - for current cluster 3.
* hbase:namespace - Deprecated and moved to meta 4. hbase:quota - related to namespace, quota for
* the current cluster usage 5. hbase:rsgroup - contains hostnames
*/
@InterfaceAudience.Private
public class SystemTableWALEntryFilter implements WALEntryFilter {
@Override
public Entry filter(Entry entry) {
if (
entry.getKey().getTableName().equals(PermissionStorage.ACL_TABLE_NAME)
|| entry.getKey().getTableName().equals(VisibilityConstants.LABELS_TABLE_NAME)
) {
return entry;
}
return entry.getKey().getTableName().isSystemTable() ? null : entry;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@
import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.RegionInfoBuilder;
import org.apache.hadoop.hbase.security.access.PermissionStorage;
import org.apache.hadoop.hbase.security.visibility.VisibilityConstants;
import org.apache.hadoop.hbase.testclassification.ReplicationTests;
import org.apache.hadoop.hbase.testclassification.SmallTests;
import org.apache.hadoop.hbase.util.Bytes;
Expand Down Expand Up @@ -87,6 +89,18 @@ public void testSystemTableWALEntryFilter() {
Entry userEntry = new Entry(key3, null);

assertEquals(userEntry, filter.filter(userEntry));

// hbase:acl should be allowed through the filter
WALKeyImpl key4 =
new WALKeyImpl(new byte[0], PermissionStorage.ACL_TABLE_NAME, System.currentTimeMillis());
Entry aclEntry = new Entry(key4, null);
assertEquals(aclEntry, filter.filter(aclEntry));

// hbase:labels should be allowed through the filter
WALKeyImpl key5 = new WALKeyImpl(new byte[0], VisibilityConstants.LABELS_TABLE_NAME,
System.currentTimeMillis());
Entry labelsEntry = new Entry(key5, null);
assertEquals(labelsEntry, filter.filter(labelsEntry));
}

@Test
Expand Down

0 comments on commit b75c72d

Please sign in to comment.