Repository: ranger Updated Branches: refs/heads/master 54fab186a -> a1a989d17
RANGER-2025: tagsync updates to handle hbase namespace entity notification Project: http://git-wip-us.apache.org/repos/asf/ranger/repo Commit: http://git-wip-us.apache.org/repos/asf/ranger/commit/a1a989d1 Tree: http://git-wip-us.apache.org/repos/asf/ranger/tree/a1a989d1 Diff: http://git-wip-us.apache.org/repos/asf/ranger/diff/a1a989d1 Branch: refs/heads/master Commit: a1a989d1751204ff216479f96f730ccc1648d679 Parents: 54fab18 Author: Abhay Kulkarni <akulka...@hortonworks.com> Authored: Sun Mar 18 14:17:47 2018 -0700 Committer: Abhay Kulkarni <akulka...@hortonworks.com> Committed: Sun Mar 18 14:17:47 2018 -0700 ---------------------------------------------------------------------- .../source/atlas/AtlasHbaseResourceMapper.java | 24 ++++-- .../process/TestHbaseResourceMapper.java | 82 +++++++++++++++++--- 2 files changed, 87 insertions(+), 19 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ranger/blob/a1a989d1/tagsync/src/main/java/org/apache/ranger/tagsync/source/atlas/AtlasHbaseResourceMapper.java ---------------------------------------------------------------------- diff --git a/tagsync/src/main/java/org/apache/ranger/tagsync/source/atlas/AtlasHbaseResourceMapper.java b/tagsync/src/main/java/org/apache/ranger/tagsync/source/atlas/AtlasHbaseResourceMapper.java index 33e804a..8d712d9 100644 --- a/tagsync/src/main/java/org/apache/ranger/tagsync/source/atlas/AtlasHbaseResourceMapper.java +++ b/tagsync/src/main/java/org/apache/ranger/tagsync/source/atlas/AtlasHbaseResourceMapper.java @@ -28,6 +28,7 @@ import org.apache.ranger.plugin.model.RangerServiceResource; import org.apache.ranger.tagsync.source.atlasrest.RangerAtlasEntity; public class AtlasHbaseResourceMapper extends AtlasResourceMapper { + public static final String ENTITY_TYPE_HBASE_NAMESPACE = "hbase_namespace"; public static final String ENTITY_TYPE_HBASE_TABLE = "hbase_table"; public static final String ENTITY_TYPE_HBASE_COLUMN_FAMILY = "hbase_column_family"; public static final String ENTITY_TYPE_HBASE_COLUMN = "hbase_column"; @@ -36,6 +37,8 @@ public class AtlasHbaseResourceMapper extends AtlasResourceMapper { public static final String RANGER_TYPE_HBASE_COLUMN_FAMILY = "column-family"; public static final String RANGER_TYPE_HBASE_COLUMN = "column"; + public static final String RANGER_NAMESPACE_TABLE_DELIMITER = ":"; + public static final String[] SUPPORTED_ENTITY_TYPES = { ENTITY_TYPE_HBASE_TABLE, ENTITY_TYPE_HBASE_COLUMN_FAMILY, ENTITY_TYPE_HBASE_COLUMN }; public AtlasHbaseResourceMapper() { @@ -65,10 +68,16 @@ public class AtlasHbaseResourceMapper extends AtlasResourceMapper { Map<String, RangerPolicyResource> elements = new HashMap<String, RangerPolicyResource>(); - if (StringUtils.equals(entityType, ENTITY_TYPE_HBASE_TABLE)) { - String tblName = resourceStr; - if (StringUtils.isNotEmpty(tblName)) { - elements.put(RANGER_TYPE_HBASE_TABLE, new RangerPolicyResource(tblName)); + if (StringUtils.equals(entityType, ENTITY_TYPE_HBASE_NAMESPACE)) { + if (StringUtils.isNotEmpty(resourceStr)) { + String namespaceName = StringUtils.strip(resourceStr); + if (StringUtils.isNotEmpty(namespaceName)) { + elements.put(RANGER_TYPE_HBASE_TABLE, new RangerPolicyResource(namespaceName + RANGER_NAMESPACE_TABLE_DELIMITER + "*")); + } + } + } else if (StringUtils.equals(entityType, ENTITY_TYPE_HBASE_TABLE)) { + if (StringUtils.isNotEmpty(resourceStr)) { + elements.put(RANGER_TYPE_HBASE_TABLE, new RangerPolicyResource(resourceStr)); } } else if (StringUtils.equals(entityType, ENTITY_TYPE_HBASE_COLUMN_FAMILY)) { String[] resources = resourceStr.split(QUALIFIED_NAME_DELIMITER); @@ -79,7 +88,7 @@ public class AtlasHbaseResourceMapper extends AtlasResourceMapper { tblName = resources[0]; familyName = resources[1]; } else if (resources.length > 2) { - StringBuffer tblNameBuf = new StringBuffer(resources[0]); + StringBuilder tblNameBuf = new StringBuilder(resources[0]); for (int i = 1; i < resources.length - 1; i++) { tblNameBuf.append(QUALIFIED_NAME_DELIMITER_CHAR).append(resources[i]); @@ -104,7 +113,7 @@ public class AtlasHbaseResourceMapper extends AtlasResourceMapper { familyName = resources[1]; colName = resources[2]; } else if (resources.length > 3) { - StringBuffer tblNameBuf = new StringBuffer(resources[0]); + StringBuilder tblNameBuf = new StringBuilder(resources[0]); for (int i = 1; i < resources.length - 2; i++) { tblNameBuf.append(QUALIFIED_NAME_DELIMITER_CHAR).append(resources[i]); @@ -128,8 +137,7 @@ public class AtlasHbaseResourceMapper extends AtlasResourceMapper { throwExceptionWithMessage("invalid qualifiedName for entity-type '" + entityType + "': " + qualifiedName); } - RangerServiceResource ret = new RangerServiceResource(entityGuid, serviceName, elements); + return new RangerServiceResource(entityGuid, serviceName, elements); - return ret; } } http://git-wip-us.apache.org/repos/asf/ranger/blob/a1a989d1/tagsync/src/test/java/org/apache/ranger/tagsync/process/TestHbaseResourceMapper.java ---------------------------------------------------------------------- diff --git a/tagsync/src/test/java/org/apache/ranger/tagsync/process/TestHbaseResourceMapper.java b/tagsync/src/test/java/org/apache/ranger/tagsync/process/TestHbaseResourceMapper.java index 499247c..0a2b814 100644 --- a/tagsync/src/test/java/org/apache/ranger/tagsync/process/TestHbaseResourceMapper.java +++ b/tagsync/src/test/java/org/apache/ranger/tagsync/process/TestHbaseResourceMapper.java @@ -32,24 +32,53 @@ import java.util.Map; import static org.apache.ranger.tagsync.source.atlas.AtlasHbaseResourceMapper.ENTITY_ATTRIBUTE_QUALIFIED_NAME; public class TestHbaseResourceMapper { - private static final String TABLE_QUALIFIED_NAME = "table@cl1"; - private static final String COLUMN_FAMILY_QUALIFIED_NAME = "table.family@cl1"; - private static final String COLUMN_QUALIFIED_NAME = "table.family.column@cl1"; + private static final String NAMESPACE_QUALIFIED_NAME = "namespace@cl1"; + private static final String TABLE_QUALIFIED_NAME = "table@cl1"; + private static final String COLUMN_FAMILY_QUALIFIED_NAME = "table.family@cl1"; + private static final String COLUMN_QUALIFIED_NAME = "table.family.column@cl1"; - private static final String DOTTED_TABLE_QUALIFIED_NAME = "table.prefix.1@cl1"; - private static final String DOTTED_COLUMN_FAMILY_QUALIFIED_NAME = "table.prefix.1.family@cl1"; - private static final String DOTTED_COLUMN_QUALIFIED_NAME = "table.prefix.1.family.column@cl1"; + private static final String DOTTED_TABLE_QUALIFIED_NAME = "table.prefix.1@cl1"; + private static final String DOTTED_COLUMN_FAMILY_QUALIFIED_NAME = "table.prefix.1.family@cl1"; + private static final String DOTTED_COLUMN_QUALIFIED_NAME = "table.prefix.1.family.column@cl1"; - private static final String SERVICE_NAME = "cl1_hbase"; - private static final String RANGER_TABLE = "table"; - private static final String RANGER_COLUMN_FAMILY = "family"; - private static final String RANGER_COLUMN = "column"; + private static final String TABLE_WITH_NAMESPACE_QUALIFIED_NAME = "namespace:table@cl1"; - private static final String DOTTED_RANGER_TABLE = "table.prefix.1"; + private static final String SERVICE_NAME = "cl1_hbase"; + private static final String RANGER_NAMESPACE = "namespace:*"; + private static final String RANGER_TABLE = "table"; + private static final String RANGER_COLUMN_FAMILY = "family"; + private static final String RANGER_COLUMN = "column"; + + private static final String DOTTED_RANGER_TABLE = "table.prefix.1"; + private static final String RANGER_TABLE_WITH_NAMESPACE = "namespace:table"; AtlasHbaseResourceMapper resourceMapper = new AtlasHbaseResourceMapper(); @Test + public void testHbaseNamespace() throws Exception { + Map<String, Object> entAttribs = new HashMap<String, Object>(); + + entAttribs.put(ENTITY_ATTRIBUTE_QUALIFIED_NAME, NAMESPACE_QUALIFIED_NAME); + + RangerAtlasEntity entity = getHbaseNamespaceEntity(entAttribs); + RangerServiceResource resource = resourceMapper.buildResource(entity); + + assertNamespaceResource(resource); + } + + @Test + public void testHbaseNamespaceAndTable() throws Exception { + Map<String, Object> entAttribs = new HashMap<String, Object>(); + + entAttribs.put(ENTITY_ATTRIBUTE_QUALIFIED_NAME, TABLE_WITH_NAMESPACE_QUALIFIED_NAME); + + RangerAtlasEntity entity = getHbaseTableEntity(entAttribs); + RangerServiceResource resource = resourceMapper.buildResource(entity); + + assertTableWithNamespaceResource(resource); + } + + @Test public void testHbaseTable() throws Exception { Map<String, Object> entAttribs = new HashMap<String, Object>(); @@ -170,6 +199,15 @@ public class TestHbaseResourceMapper { assertColumnResource(resource, true); } + private RangerAtlasEntity getHbaseNamespaceEntity(Map<String, Object> entAttribs) throws Exception { + RangerAtlasEntity entity = Mockito.mock(RangerAtlasEntity.class); + + Mockito.when(entity.getTypeName()).thenReturn(AtlasHbaseResourceMapper.ENTITY_TYPE_HBASE_NAMESPACE); + Mockito.when(entity.getAttributes()).thenReturn(entAttribs); + + return entity; + } + private RangerAtlasEntity getHbaseTableEntity(Map<String, Object> entAttribs) throws Exception { RangerAtlasEntity entity = Mockito.mock(RangerAtlasEntity.class); @@ -203,6 +241,28 @@ public class TestHbaseResourceMapper { Assert.assertNotNull(resource.getResourceElements()); } + private void assertNamespaceResource(RangerServiceResource resource) { + assertServiceResource(resource); + + Assert.assertEquals(1, resource.getResourceElements().size()); + + Assert.assertTrue(resource.getResourceElements().containsKey(AtlasHbaseResourceMapper.RANGER_TYPE_HBASE_TABLE)); + Assert.assertNotNull(resource.getResourceElements().get(AtlasHbaseResourceMapper.RANGER_TYPE_HBASE_TABLE).getValues()); + Assert.assertEquals(1, resource.getResourceElements().get(AtlasHbaseResourceMapper.RANGER_TYPE_HBASE_TABLE).getValues().size()); + Assert.assertEquals(RANGER_NAMESPACE, resource.getResourceElements().get(AtlasHbaseResourceMapper.RANGER_TYPE_HBASE_TABLE).getValues().get(0)); + } + + private void assertTableWithNamespaceResource(RangerServiceResource resource) { + assertServiceResource(resource); + + Assert.assertEquals(1, resource.getResourceElements().size()); + + Assert.assertTrue(resource.getResourceElements().containsKey(AtlasHbaseResourceMapper.RANGER_TYPE_HBASE_TABLE)); + Assert.assertNotNull(resource.getResourceElements().get(AtlasHbaseResourceMapper.RANGER_TYPE_HBASE_TABLE).getValues()); + Assert.assertEquals(1, resource.getResourceElements().get(AtlasHbaseResourceMapper.RANGER_TYPE_HBASE_TABLE).getValues().size()); + Assert.assertEquals(RANGER_TABLE_WITH_NAMESPACE, resource.getResourceElements().get(AtlasHbaseResourceMapper.RANGER_TYPE_HBASE_TABLE).getValues().get(0)); + } + private void assertTableResource(RangerServiceResource resource, boolean isDottedTable) { assertServiceResource(resource);