You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ranger.apache.org by ab...@apache.org on 2018/03/18 21:17:57 UTC

ranger git commit: RANGER-2025: tagsync updates to handle hbase namespace entity notification

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 <ak...@hortonworks.com>
Authored: Sun Mar 18 14:17:47 2018 -0700
Committer: Abhay Kulkarni <ak...@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);