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

Reply via email to