Repository: ranger Updated Branches: refs/heads/master 626f92a92 -> ab6cb3935
RANGER-2085: fix in resource lookup (entity-id) in Atlas service Signed-off-by: Madhan Neethiraj <mad...@apache.org> Project: http://git-wip-us.apache.org/repos/asf/ranger/repo Commit: http://git-wip-us.apache.org/repos/asf/ranger/commit/ab6cb393 Tree: http://git-wip-us.apache.org/repos/asf/ranger/tree/ab6cb393 Diff: http://git-wip-us.apache.org/repos/asf/ranger/diff/ab6cb393 Branch: refs/heads/master Commit: ab6cb3935ad48948047028750fe8167c66111f87 Parents: 626f92a Author: nixonrodrigues <ni...@apache.org> Authored: Fri May 11 19:19:46 2018 +0530 Committer: Madhan Neethiraj <mad...@apache.org> Committed: Tue May 15 11:14:14 2018 -0700 ---------------------------------------------------------------------- .../services/atlas/RangerServiceAtlas.java | 94 ++++++++++---------- 1 file changed, 47 insertions(+), 47 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ranger/blob/ab6cb393/plugin-atlas/src/main/java/org/apache/ranger/services/atlas/RangerServiceAtlas.java ---------------------------------------------------------------------- diff --git a/plugin-atlas/src/main/java/org/apache/ranger/services/atlas/RangerServiceAtlas.java b/plugin-atlas/src/main/java/org/apache/ranger/services/atlas/RangerServiceAtlas.java index fb3688b..aba4b8c 100644 --- a/plugin-atlas/src/main/java/org/apache/ranger/services/atlas/RangerServiceAtlas.java +++ b/plugin-atlas/src/main/java/org/apache/ranger/services/atlas/RangerServiceAtlas.java @@ -69,7 +69,7 @@ public class RangerServiceAtlas extends RangerBaseService { private static final String URL_LOGIN = "/j_spring_security_check"; private static final String URL_GET_TYPESDEF_HEADERS = "/api/atlas/v2/types/typedefs/headers"; - private static final String URl_ENTITY_SEARCH = "v2/search/attribute?attrName=qualifiedName"; + private static final String URl_ENTITY_SEARCH = "v2/search/attribute?attrName=qualifiedName"; private static final String WEB_RESOURCE_CONTENT_TYPE = "application/x-www-form-urlencoded"; private static final String CONNECTION_ERROR_MSG = " You can still save the repository and start creating" @@ -91,12 +91,11 @@ public class RangerServiceAtlas extends RangerBaseService { LOG.debug("==> RangerServiceAtlas.validateConfig()"); } - AtlasServiceClient client = new AtlasServiceClient(getServiceName(), configs); - - Map<String, Object> ret = client.validateConfig(); + AtlasServiceClient client = new AtlasServiceClient(getServiceName(), configs); + Map<String, Object> ret = client.validateConfig(); if (LOG.isDebugEnabled()) { - LOG.debug("<== RangerServiceAtlas.validateConfig(): "+ ret ); + LOG.debug("<== RangerServiceAtlas.validateConfig(): " + ret ); } return ret; @@ -105,12 +104,11 @@ public class RangerServiceAtlas extends RangerBaseService { @Override public List<String> lookupResource(ResourceLookupContext context)throws Exception { if (LOG.isDebugEnabled()) { - LOG.debug("==> RangerServiceAtlas.lookupResource("+ context + ")"); + LOG.debug("==> RangerServiceAtlas.lookupResource(" + context + ")"); } AtlasServiceClient client = new AtlasServiceClient(getServiceName(), configs); - - List<String> ret = client.lookupResource(context); + List<String> ret = client.lookupResource(context); if (LOG.isDebugEnabled()) { LOG.debug("<== RangerServiceAtlas.lookupResource("+ context + "): " + ret); @@ -122,28 +120,29 @@ public class RangerServiceAtlas extends RangerBaseService { @Override public List<RangerPolicy> getDefaultRangerPolicies() throws Exception { if (LOG.isDebugEnabled()) { - LOG.debug("==> RangerServiceAtlas.getDefaultRangerPolicies() "); + LOG.debug("==> RangerServiceAtlas.getDefaultRangerPolicies()"); } List<RangerPolicy> ret = super.getDefaultRangerPolicies(); for (RangerPolicy defaultPolicy : ret) { for (RangerPolicy.RangerPolicyItem defaultPolicyItem : defaultPolicy.getPolicyItems()) { - List<String> users = defaultPolicyItem.getUsers(); + List<String> users = defaultPolicyItem.getUsers(); + String adminUser = service.getConfigs().get("atlas.admin.user"); - String atlasAdminUser = service.getConfigs().get("atlas.admin.user"); - if (StringUtils.isBlank(atlasAdminUser)) { - atlasAdminUser = "admin"; + if (StringUtils.isBlank(adminUser)) { + adminUser = "admin"; } - users.add(atlasAdminUser); + users.add(adminUser); defaultPolicyItem.setUsers(users); } } if (LOG.isDebugEnabled()) { - LOG.debug("<== RangerServiceAtlas.getDefaultRangerPolicies() "); + LOG.debug("<== RangerServiceAtlas.getDefaultRangerPolicies()"); } + return ret; } @@ -171,8 +170,6 @@ public class RangerServiceAtlas extends RangerBaseService { final String userInput = lookupContext.getUserInput(); final List<String> currentValues = lookupContext.getResources().get(lookupContext.getResourceName()); - - switch(lookupContext.getResourceName()) { case RESOURCE_TYPE_CATEGORY: { for (String typeCategory : TYPE_CATEGORIES) { @@ -224,9 +221,12 @@ public class RangerServiceAtlas extends RangerBaseService { case RESOURCE_ENTITY_ID: { List<String> searchTypes = lookupContext.getResources().get("entity-type"); - List<String> values = searchEntities(userInput , searchTypes); - addIfStartsWithAndNotExcluded(ret, values, userInput, currentValues); + if (searchTypes != null && searchTypes.size() == 1) { + List<String> values = searchEntities(userInput, searchTypes.get(0)); + + addIfStartsWithAndNotExcluded(ret, values, userInput, currentValues); + } } break; @@ -279,6 +279,7 @@ public class RangerServiceAtlas extends RangerBaseService { LOG.error(msgDesc, t); excp = new HadoopException(msgDesc, t); + excp.generateResponseDataMap(false, BaseClient.getMessage(t), msgDesc + CONNECTION_ERROR_MSG, null, null); } } @@ -288,6 +289,7 @@ public class RangerServiceAtlas extends RangerBaseService { String msgDesc = "Exception while login to Atlas at : " + loginUrl; excp = new HadoopException(msgDesc); + excp.generateResponseDataMap(false, "", msgDesc + CONNECTION_ERROR_MSG, null, null); } @@ -298,8 +300,7 @@ public class RangerServiceAtlas extends RangerBaseService { } private boolean refreshTypesDefs() { - boolean ret = false; - + boolean ret = false; Subject subj = getLoginSubject(); if (subj == null) { @@ -336,8 +337,7 @@ public class RangerServiceAtlas extends RangerBaseService { for (Object type : types) { if (type instanceof Map) { - Map typeDef = (Map) type; - + Map typeDef = (Map) type; Object name = typeDef.get("name"); Object category = typeDef.get("category"); @@ -360,6 +360,7 @@ public class RangerServiceAtlas extends RangerBaseService { } } catch (Throwable t) { String msgDesc = "Exception while getting Atlas Resource List."; + LOG.error(msgDesc, t); } finally { if (client != null) { @@ -374,18 +375,17 @@ public class RangerServiceAtlas extends RangerBaseService { if (typesDef != null) { this.typesDef = typesDef; + ret = true; } return ret; } - private List<String> searchEntities(String userInput, List<String> types) { - + private List<String> searchEntities(String userInput, String entityType) { if( LOG.isDebugEnabled()) { - LOG.info(" RangerServiceAtlas.searchEntities ==>> userInput" + userInput +" types "+ types); + LOG.debug("==> RangerServiceAtlas.searchEntities(userInput=" + userInput + ", entityType=" + entityType + ")"); } - List<String> list = null; Subject subj = getLoginSubject(); @@ -393,34 +393,29 @@ public class RangerServiceAtlas extends RangerBaseService { return null; } - list = Subject.doAs(subj, new PrivilegedAction<List<String>>() { + List<String> list = Subject.doAs(subj, new PrivilegedAction<List<String>>() { @Override public List<String> run() { List<String> ret = null; - String entityType = ""; - if (types != null && types.size() == 1) { - entityType = types.get(0); - } else { - return null; - } + for (String atlasUrl : getAtlasUrls()) { Client client = null; try { client = Client.create(); - ClientResponse loginResponse = loginToAtlas(client); - String entitySearcApiUrl = atlasUrl + "/api/atlas/" + URl_ENTITY_SEARCH; - StringBuilder searchUrl = new StringBuilder(); + ClientResponse loginResponse = loginToAtlas(client); + String entitySearcApiUrl = atlasUrl + "/api/atlas/" + URl_ENTITY_SEARCH; + StringBuilder searchUrl = new StringBuilder(); searchUrl.append(entitySearcApiUrl) - .append("&typeName=") - .append(entityType) - .append("&attrValuePrefix=" + userInput + "&limit=25"); + .append("&typeName=") + .append(entityType) + .append("&attrValuePrefix=" + userInput + "&limit=25"); - WebResource webResource = client.resource(searchUrl.toString()); - WebResource.Builder builder = webResource.getRequestBuilder(); + WebResource webResource = client.resource(searchUrl.toString()); + WebResource.Builder builder = webResource.getRequestBuilder(); for (NewCookie cook : loginResponse.getCookies()) { builder = builder.cookie(cook); @@ -429,14 +424,15 @@ public class RangerServiceAtlas extends RangerBaseService { ClientResponse response = builder.get(ClientResponse.class); if (response != null) { - String jsonString = response.getEntity(String.class); - Gson gson = new Gson(); + String jsonString = response.getEntity(String.class); + Gson gson = new Gson(); AtlasSearchResult searchResult = gson.fromJson(jsonString, AtlasSearchResult.class); ret = new ArrayList<>(); if (searchResult != null) { List<AtlasEntityHeader> entityHeaderList = searchResult.getEntities(); + for (AtlasEntityHeader entity : entityHeaderList) { ret.add((String) entity.getAttribute("qualifiedName")); } @@ -444,6 +440,7 @@ public class RangerServiceAtlas extends RangerBaseService { } } catch (Throwable t) { String msgDesc = "Exception while getting Atlas Entity Resource List."; + LOG.error(msgDesc, t); } finally { if (client != null) { @@ -456,13 +453,16 @@ public class RangerServiceAtlas extends RangerBaseService { } }); + if (LOG.isDebugEnabled()) { + LOG.debug("<== RangerServiceAtlas.searchEntities(userInput=" + userInput + ", entityType=" + entityType + "): " + list); + } + return list; } String[] getAtlasUrls() { - String urlString = connectionProperties.get(CONFIG_REST_ADDRESS); - - String[] ret = urlString == null ? new String[0] : urlString.split(","); + String urlString = connectionProperties.get(CONFIG_REST_ADDRESS); + String[] ret = urlString == null ? new String[0] : urlString.split(","); // remove separator at the end for (int i = 0; i < ret.length; i++) {