| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| |
| package org.apache.ranger.biz; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| import java.util.Map; |
| |
| import org.apache.commons.collections.CollectionUtils; |
| import org.apache.commons.lang.StringUtils; |
| import org.apache.commons.logging.Log; |
| import org.apache.commons.logging.LogFactory; |
| import org.apache.ranger.authorization.utils.JsonUtils; |
| import org.apache.ranger.common.GUIDUtil; |
| import org.apache.ranger.common.MessageEnums; |
| import org.apache.ranger.common.RESTErrorUtil; |
| import org.apache.ranger.common.RangerAdminTagEnricher; |
| import org.apache.ranger.common.RangerServiceTagsCache; |
| import org.apache.ranger.db.RangerDaoManager; |
| import org.apache.ranger.entity.XXDBBase; |
| import org.apache.ranger.entity.XXService; |
| import org.apache.ranger.entity.XXServiceResource; |
| import org.apache.ranger.entity.XXServiceVersionInfo; |
| import org.apache.ranger.entity.XXTag; |
| import org.apache.ranger.entity.XXTagResourceMap; |
| import org.apache.ranger.plugin.model.*; |
| import org.apache.ranger.plugin.store.AbstractTagStore; |
| import org.apache.ranger.plugin.store.PList; |
| import org.apache.ranger.plugin.store.RangerServiceResourceSignature; |
| import org.apache.ranger.plugin.util.RangerServiceNotFoundException; |
| import org.apache.ranger.plugin.util.SearchFilter; |
| import org.apache.ranger.plugin.util.ServiceTags; |
| import org.apache.ranger.service.RangerAuditFields; |
| import org.apache.ranger.service.RangerTagDefService; |
| import org.apache.ranger.service.RangerTagResourceMapService; |
| import org.apache.ranger.service.RangerTagService; |
| import org.apache.ranger.service.RangerServiceResourceService; |
| import org.springframework.beans.factory.annotation.Autowired; |
| import org.springframework.beans.factory.annotation.Qualifier; |
| import org.springframework.stereotype.Component; |
| import org.springframework.transaction.PlatformTransactionManager; |
| |
| import javax.annotation.PostConstruct; |
| import javax.servlet.http.HttpServletResponse; |
| |
| @Component |
| public class TagDBStore extends AbstractTagStore { |
| private static final Log LOG = LogFactory.getLog(TagDBStore.class); |
| |
| @Autowired |
| RangerTagDefService rangerTagDefService; |
| |
| @Autowired |
| RangerTagService rangerTagService; |
| |
| @Autowired |
| RangerServiceResourceService rangerServiceResourceService; |
| |
| @Autowired |
| RangerTagResourceMapService rangerTagResourceMapService; |
| |
| @Autowired |
| RangerDaoManager daoManager; |
| |
| @Autowired |
| @Qualifier(value = "transactionManager") |
| PlatformTransactionManager txManager; |
| |
| @Autowired |
| RESTErrorUtil errorUtil; |
| |
| @Autowired |
| RangerAuditFields<XXDBBase> rangerAuditFields; |
| |
| @Autowired |
| GUIDUtil guidUtil; |
| |
| @Autowired |
| RESTErrorUtil restErrorUtil; |
| |
| @PostConstruct |
| public void initStore() { |
| RangerAdminTagEnricher.setTagStore(this); |
| } |
| |
| @Override |
| public RangerTagDef createTagDef(RangerTagDef tagDef) throws Exception { |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("==> TagDBStore.createTagDef(" + tagDef + ")"); |
| } |
| |
| RangerTagDef ret = rangerTagDefService.create(tagDef); |
| |
| ret = rangerTagDefService.read(ret.getId()); |
| |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("<== TagDBStore.createTagDef(" + tagDef + "): id=" + (ret == null ? null : ret.getId())); |
| } |
| |
| return ret; |
| } |
| |
| @Override |
| public RangerTagDef updateTagDef(RangerTagDef tagDef) throws Exception { |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("==> TagDBStore.updateTagDef(" + tagDef + ")"); |
| } |
| |
| RangerTagDef existing = rangerTagDefService.read(tagDef.getId()); |
| |
| if (existing == null) { |
| throw errorUtil.createRESTException("failed to update tag-def [" + tagDef.getName() + "], Reason: No TagDef found with id: [" + tagDef.getId() + "]", MessageEnums.DATA_NOT_UPDATABLE); |
| } else if (!existing.getName().equals(tagDef.getName())) { |
| throw errorUtil.createRESTException("Cannot change tag-def name; existing-name:[" + existing.getName() + "], new-name:[" + tagDef.getName() + "]", MessageEnums.DATA_NOT_UPDATABLE); |
| } |
| |
| tagDef.setCreatedBy(existing.getCreatedBy()); |
| tagDef.setCreateTime(existing.getCreateTime()); |
| tagDef.setGuid(existing.getGuid()); |
| tagDef.setVersion(existing.getVersion()); |
| |
| RangerTagDef ret = rangerTagDefService.update(tagDef); |
| |
| ret = rangerTagDefService.read(ret.getId()); |
| |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("<== TagDBStore.updateTagDef(" + tagDef + "): " + ret); |
| } |
| |
| return ret; |
| } |
| |
| @Override |
| public void deleteTagDefByName(String name) throws Exception { |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("==> TagDBStore.deleteTagDef(" + name + ")"); |
| } |
| |
| if (StringUtils.isNotBlank(name)) { |
| RangerTagDef tagDef = getTagDefByName(name); |
| |
| if(tagDef != null) { |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("Deleting tag-def [name=" + name + "; id=" + tagDef.getId() + "]"); |
| } |
| |
| rangerTagDefService.delete(tagDef); |
| } |
| } |
| |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("<== TagDBStore.deleteTagDef(" + name + ")"); |
| } |
| } |
| |
| @Override |
| public void deleteTagDef(Long id) throws Exception { |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("==> TagDBStore.deleteTagDef(" + id + ")"); |
| } |
| |
| if(id != null) { |
| RangerTagDef tagDef = rangerTagDefService.read(id); |
| |
| if(tagDef != null) { |
| rangerTagDefService.delete(tagDef); |
| } |
| } |
| |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("<== TagDBStore.deleteTagDef(" + id + ")"); |
| } |
| } |
| |
| @Override |
| public RangerTagDef getTagDef(Long id) throws Exception { |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("==> TagDBStore.getTagDef(" + id + ")"); |
| } |
| |
| RangerTagDef ret = rangerTagDefService.read(id); |
| |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("<== TagDBStore.getTagDef(" + id + "): " + ret); |
| } |
| |
| return ret; |
| } |
| |
| @Override |
| public RangerTagDef getTagDefByGuid(String guid) throws Exception { |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("==> TagDBStore.getTagDefByGuid(" + guid + ")"); |
| } |
| |
| RangerTagDef ret = rangerTagDefService.getTagDefByGuid(guid); |
| |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("<== TagDBStore.getTagDefByGuid(" + guid + "): " + ret); |
| } |
| |
| return ret; |
| } |
| |
| @Override |
| public RangerTagDef getTagDefByName(String name) throws Exception { |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("==> TagDBStore.getTagDefByName(" + name + ")"); |
| } |
| |
| RangerTagDef ret = null; |
| |
| if (StringUtils.isNotBlank(name)) { |
| ret = rangerTagDefService.getTagDefByName(name); |
| } |
| |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("<== TagDBStore.getTagDefByName(" + name + "): " + ret); |
| } |
| |
| return ret; |
| } |
| |
| @Override |
| public List<RangerTagDef> getTagDefs(SearchFilter filter) throws Exception { |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("==> TagDBStore.getTagDefs(" + filter + ")"); |
| } |
| |
| List<RangerTagDef> ret = getPaginatedTagDefs(filter).getList(); |
| |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("<== TagDBStore.getTagDefs(" + filter + "): " + ret); |
| } |
| |
| return ret; |
| } |
| |
| @Override |
| public PList<RangerTagDef> getPaginatedTagDefs(SearchFilter filter) throws Exception { |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("==> TagDBStore.getPaginatedTagDefs(" + filter + ")"); |
| } |
| |
| PList<RangerTagDef> ret = rangerTagDefService.searchRangerTagDefs(filter); |
| |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("<== TagDBStore.getPaginatedTagDefs(" + filter + "): " + ret); |
| } |
| |
| return ret; |
| } |
| |
| @Override |
| public List<String> getTagTypes() throws Exception { |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("==> TagDBStore.getTagTypes()"); |
| } |
| |
| List<String> ret = daoManager.getXXTagDef().getAllNames(); |
| |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("<== TagDBStore.getTagTypes(): count=" + (ret != null ? ret.size() : 0)); |
| } |
| |
| return ret; |
| } |
| |
| |
| @Override |
| public RangerTag createTag(RangerTag tag) throws Exception { |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("==> TagDBStore.createTag(" + tag + ")"); |
| } |
| |
| RangerTag ret = rangerTagService.create(tag); |
| |
| ret = rangerTagService.read(ret.getId()); |
| |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("<== TagDBStore.createTag(" + tag + "): " + ret); |
| } |
| |
| return ret; |
| } |
| |
| @Override |
| public RangerTag updateTag(RangerTag tag) throws Exception { |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("==> TagDBStore.updateTag(" + tag + ")"); |
| } |
| |
| RangerTag existing = rangerTagService.read(tag.getId()); |
| |
| if (existing == null) { |
| throw errorUtil.createRESTException("failed to update tag [" + tag.getType() + "], Reason: No Tag found with id: [" + tag.getId() + "]", MessageEnums.DATA_NOT_UPDATABLE); |
| } |
| |
| tag.setCreatedBy(existing.getCreatedBy()); |
| tag.setCreateTime(existing.getCreateTime()); |
| tag.setGuid(existing.getGuid()); |
| tag.setVersion(existing.getVersion()); |
| |
| RangerTag ret = rangerTagService.update(tag); |
| |
| ret = rangerTagService.read(ret.getId()); |
| |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("<== TagDBStore.updateTag(" + tag + ") : " + ret); |
| } |
| |
| return ret; |
| } |
| |
| @Override |
| public void deleteTag(Long id) throws Exception { |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("==> TagDBStore.deleteTag(" + id + ")"); |
| } |
| |
| RangerTag tag = rangerTagService.read(id); |
| |
| rangerTagService.delete(tag); |
| |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("<== TagDBStore.deleteTag(" + id + ")"); |
| } |
| } |
| |
| @Override |
| public RangerTag getTag(Long id) throws Exception { |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("==> TagDBStore.getTag(" + id + ")"); |
| } |
| |
| RangerTag ret = rangerTagService.read(id); |
| |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("<== TagDBStore.getTag(" + id + "): " + ret); |
| } |
| |
| return ret; |
| } |
| |
| @Override |
| public RangerTag getTagByGuid(String guid) throws Exception { |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("==> TagDBStore.getTagByGuid(" + guid + ")"); |
| } |
| |
| RangerTag ret = rangerTagService.getTagByGuid(guid); |
| |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("<== TagDBStore.getTagByGuid(" + guid + "): " + ret); |
| } |
| |
| return ret; |
| } |
| |
| @Override |
| public List<RangerTag> getTagsByType(String type) throws Exception { |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("==> TagDBStore.getTagsByType(" + type + ")"); |
| } |
| |
| List<RangerTag> ret = null; |
| |
| if (StringUtils.isNotBlank(type)) { |
| ret = rangerTagService.getTagsByType(type); |
| } |
| |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("<== TagDBStore.getTagsByType(" + type + "): count=" + (ret == null ? 0 : ret.size())); |
| } |
| |
| return ret; |
| } |
| |
| @Override |
| public List<RangerTag> getTagsForResourceId(Long resourceId) throws Exception { |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("==> TagDBStore.getTagsForResourceId(" + resourceId + ")"); |
| } |
| |
| List<RangerTag> ret = null; |
| |
| if (resourceId != null) { |
| ret = rangerTagService.getTagsForResourceId(resourceId); |
| } |
| |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("<== TagDBStore.getTagsForResourceId(" + resourceId + "): count=" + (ret == null ? 0 : ret.size())); |
| } |
| |
| return ret; |
| } |
| |
| @Override |
| public List<RangerTag> getTagsForResourceGuid(String resourceGuid) throws Exception { |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("==> TagDBStore.getTagsForResourceGuid(" + resourceGuid + ")"); |
| } |
| |
| List<RangerTag> ret = null; |
| |
| if (resourceGuid != null) { |
| ret = rangerTagService.getTagsForResourceGuid(resourceGuid); |
| } |
| |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("<== TagDBStore.getTagsForResourceGuid(" + resourceGuid + "): count=" + (ret == null ? 0 : ret.size())); |
| } |
| |
| return ret; |
| } |
| |
| @Override |
| public List<RangerTag> getTags(SearchFilter filter) throws Exception { |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("==> TagDBStore.getTags(" + filter + ")"); |
| } |
| |
| List<RangerTag> ret = rangerTagService.searchRangerTags(filter).getList(); |
| |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("<== TagDBStore.getTags(" + filter + "): count=" + (ret == null ? 0 : ret.size())); |
| } |
| |
| return ret; |
| } |
| |
| @Override |
| public PList<RangerTag> getPaginatedTags(SearchFilter filter) throws Exception { |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("==> TagDBStore.getPaginatedTags(" + filter + ")"); |
| } |
| |
| PList<RangerTag> ret = rangerTagService.searchRangerTags(filter); |
| |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("<== TagDBStore.getPaginatedTags(" + filter + "): count=" + (ret == null ? 0 : ret.getPageSize())); |
| } |
| |
| return ret; |
| } |
| |
| |
| @Override |
| public RangerServiceResource createServiceResource(RangerServiceResource resource) throws Exception { |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("==> TagDBStore.createServiceResource(" + resource + ")"); |
| } |
| |
| if (StringUtils.isEmpty(resource.getResourceSignature())) { |
| RangerServiceResourceSignature serializer = new RangerServiceResourceSignature(resource); |
| |
| resource.setResourceSignature(serializer.getSignature()); |
| } |
| |
| RangerServiceResource ret = rangerServiceResourceService.create(resource); |
| |
| ret = rangerServiceResourceService.read(ret.getId()); |
| |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("<== TagDBStore.createServiceResource(" + resource + ")"); |
| } |
| |
| return ret; |
| } |
| |
| @Override |
| public RangerServiceResource updateServiceResource(RangerServiceResource resource) throws Exception { |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("==> TagDBStore.updateResource(" + resource + ")"); |
| } |
| |
| RangerServiceResource existing = rangerServiceResourceService.read(resource.getId()); |
| |
| if (existing == null) { |
| throw errorUtil.createRESTException("failed to update tag [" + resource.getId() + "], Reason: No resource found with id: [" + resource.getId() + "]", MessageEnums.DATA_NOT_UPDATABLE); |
| } |
| |
| if (StringUtils.isEmpty(resource.getResourceSignature())) { |
| RangerServiceResourceSignature serializer = new RangerServiceResourceSignature(resource); |
| |
| resource.setResourceSignature(serializer.getSignature()); |
| } |
| |
| resource.setCreatedBy(existing.getCreatedBy()); |
| resource.setCreateTime(existing.getCreateTime()); |
| resource.setGuid(existing.getGuid()); |
| resource.setVersion(existing.getVersion()); |
| |
| rangerServiceResourceService.update(resource); |
| |
| RangerServiceResource ret = rangerServiceResourceService.read(existing.getId()); |
| |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("<== TagDBStore.updateResource(" + resource + ") : " + ret); |
| } |
| |
| return ret; |
| } |
| |
| |
| @Override |
| public void refreshServiceResource(Long resourceId) throws Exception { |
| XXServiceResource serviceResourceEntity = daoManager.getXXServiceResource().getById(resourceId); |
| String tagsText = null; |
| |
| List<RangerTagResourceMap> tagResourceMaps = getTagResourceMapsForResourceId(resourceId); |
| if (tagResourceMaps != null) { |
| List<RangerTag> associatedTags = new ArrayList<>(); |
| for (RangerTagResourceMap element : tagResourceMaps) { |
| associatedTags.add(getTag(element.getTagId())); |
| } |
| tagsText = JsonUtils.listToJson(associatedTags); |
| } |
| serviceResourceEntity.setTags(tagsText); |
| daoManager.getXXServiceResource().update(serviceResourceEntity); |
| } |
| |
| @Override |
| public void deleteServiceResource(Long id) throws Exception { |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("==> TagDBStore.deleteServiceResource(" + id + ")"); |
| } |
| |
| RangerServiceResource resource = getServiceResource(id); |
| |
| if(resource != null) { |
| rangerServiceResourceService.delete(resource); |
| } |
| |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("<== TagDBStore.deleteServiceResource(" + id + ")"); |
| } |
| } |
| |
| @Override |
| public void deleteServiceResourceByGuid(String guid) throws Exception { |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("==> TagDBStore.deleteServiceResourceByGuid(" + guid + ")"); |
| } |
| |
| RangerServiceResource resource = getServiceResourceByGuid(guid); |
| |
| if(resource != null) { |
| rangerServiceResourceService.delete(resource); |
| } |
| |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("<== TagDBStore.deleteServiceResourceByGuid(" + guid + ")"); |
| } |
| } |
| |
| @Override |
| public RangerServiceResource getServiceResource(Long id) throws Exception { |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("==> TagDBStore.getServiceResource(" + id + ")"); |
| } |
| |
| RangerServiceResource ret = rangerServiceResourceService.read(id); |
| |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("<== TagDBStore.getServiceResource(" + id + "): " + ret); |
| } |
| |
| return ret; |
| } |
| |
| @Override |
| public RangerServiceResource getServiceResourceByGuid(String guid) throws Exception { |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("==> TagDBStore.getServiceResourceByGuid(" + guid + ")"); |
| } |
| |
| RangerServiceResource ret = rangerServiceResourceService.getServiceResourceByGuid(guid); |
| |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("<== TagDBStore.getServiceResourceByGuid(" + guid + "): " + ret); |
| } |
| |
| return ret; |
| } |
| |
| @Override |
| public List<RangerServiceResource> getServiceResourcesByService(String serviceName) throws Exception { |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("==> TagDBStore.getServiceResourcesByService(" + serviceName + ")"); |
| } |
| |
| List<RangerServiceResource> ret = null; |
| |
| XXService service = daoManager.getXXService().findByName(serviceName); |
| |
| if (service != null) { |
| ret = rangerServiceResourceService.getByServiceId(service.getId()); |
| } |
| |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("<== TagDBStore.getServiceResourcesByService(" + serviceName + "): count=" + (ret == null ? 0 : ret.size())); |
| } |
| |
| return ret; |
| } |
| |
| @Override |
| public List<String> getServiceResourceGuidsByService(String serviceName) { |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("==> TagDBStore.getServiceResourceGuidsByService(" + serviceName + ")"); |
| } |
| |
| List<String> ret = null; |
| |
| XXService service = daoManager.getXXService().findByName(serviceName); |
| |
| if (service != null) { |
| ret = daoManager.getXXServiceResource().findServiceResourceGuidsInServiceId(service.getId()); |
| } |
| |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("<== TagDBStore.getServiceResourceGuidsByService(" + serviceName + "): count=" + (ret == null ? 0 : ret.size())); |
| } |
| |
| return ret; |
| } |
| |
| @Override |
| public RangerServiceResource getServiceResourceByServiceAndResourceSignature(String serviceName, String resourceSignature) throws Exception { |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("==> TagDBStore.getServiceResourceByServiceAndResourceSignature(" + serviceName + ", " + resourceSignature + ")"); |
| } |
| |
| RangerServiceResource ret = null; |
| |
| XXService service = daoManager.getXXService().findByName(serviceName); |
| |
| if (service != null) { |
| ret = rangerServiceResourceService.getByServiceAndResourceSignature(service.getId(), resourceSignature); |
| } |
| |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("<== TagDBStore.getServiceResourceByServiceAndResourceSignature(" + serviceName + ", " + resourceSignature + "): " + ret); |
| } |
| |
| return ret; |
| } |
| |
| @Override |
| public List<RangerServiceResource> getServiceResources(SearchFilter filter) throws Exception { |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("==> TagDBStore.getServiceResources(" + filter + ")"); |
| } |
| |
| List<RangerServiceResource> ret = rangerServiceResourceService.searchServiceResources(filter).getList(); |
| |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("<== TagDBStore.getServiceResources(" + filter + "): count=" + (ret == null ? 0 : ret.size())); |
| } |
| |
| return ret; |
| } |
| |
| @Override |
| public PList<RangerServiceResource> getPaginatedServiceResources(SearchFilter filter) throws Exception { |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("==> TagDBStore.getPaginatedServiceResources(" + filter + ")"); |
| } |
| |
| PList<RangerServiceResource> ret = rangerServiceResourceService.searchServiceResources(filter); |
| |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("<== TagDBStore.getPaginatedServiceResources(" + filter + "): count=" + (ret == null ? 0 : ret.getPageSize())); |
| } |
| |
| return ret; |
| } |
| |
| |
| @Override |
| public RangerTagResourceMap createTagResourceMap(RangerTagResourceMap tagResourceMap) throws Exception { |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("==> TagDBStore.createTagResourceMap(" + tagResourceMap + ")"); |
| } |
| |
| RangerTagResourceMap ret = rangerTagResourceMapService.create(tagResourceMap); |
| |
| // We also need to update tags stored with the resource |
| refreshServiceResource(tagResourceMap.getResourceId()); |
| |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("<== TagDBStore.createTagResourceMap(" + tagResourceMap + "): " + ret); |
| } |
| |
| return ret; |
| } |
| |
| @Override |
| public void deleteTagResourceMap(Long id) throws Exception { |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("==> TagDBStore.deleteTagResourceMap(" + id + ")"); |
| } |
| |
| RangerTagResourceMap tagResourceMap = rangerTagResourceMapService.read(id); |
| Long tagId = tagResourceMap.getTagId(); |
| RangerTag tag = getTag(tagId); |
| |
| rangerTagResourceMapService.delete(tagResourceMap); |
| |
| if (tag.getOwner() == RangerTag.OWNER_SERVICERESOURCE) { |
| deleteTag(tagId); |
| } |
| // We also need to update tags stored with the resource |
| refreshServiceResource(tagResourceMap.getResourceId()); |
| |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("<== TagDBStore.deleteTagResourceMap(" + id + ")"); |
| } |
| } |
| |
| @Override |
| public RangerTagResourceMap getTagResourceMap(Long id) throws Exception { |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("==> TagDBStore.getTagResourceMap(" + id + ")"); |
| } |
| |
| RangerTagResourceMap ret = rangerTagResourceMapService.read(id); |
| |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("<== TagDBStore.getTagResourceMap(" + id + ")"); |
| } |
| |
| return ret; |
| } |
| |
| @Override |
| public RangerTagResourceMap getTagResourceMapByGuid(String guid) throws Exception { |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("==> TagDBStore.getTagResourceMapByGuid(" + guid + ")"); |
| } |
| |
| RangerTagResourceMap ret = rangerTagResourceMapService.getByGuid(guid); |
| |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("<== TagDBStore.getTagResourceMapByGuid(" + guid + ")"); |
| } |
| |
| return ret; |
| } |
| |
| @Override |
| public List<RangerTagResourceMap> getTagResourceMapsForTagId(Long tagId) throws Exception { |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("==> TagDBStore.getTagResourceMapsForTagId(" + tagId + ")"); |
| } |
| |
| List<RangerTagResourceMap> ret = rangerTagResourceMapService.getByTagId(tagId); |
| |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("<== TagDBStore.getTagResourceMapsForTagId(" + tagId + "): count=" + (ret == null ? 0 : ret.size())); |
| } |
| |
| return ret; |
| } |
| |
| @Override |
| public List<RangerTagResourceMap> getTagResourceMapsForTagGuid(String tagGuid) throws Exception { |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("==> TagDBStore.getTagResourceMapsForTagGuid(" + tagGuid + ")"); |
| } |
| |
| List<RangerTagResourceMap> ret = rangerTagResourceMapService.getByTagGuid(tagGuid); |
| |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("<== TagDBStore.getTagResourceMapsForTagGuid(" + tagGuid + "): count=" + (ret == null ? 0 : ret.size())); |
| } |
| |
| return ret; |
| } |
| |
| @Override |
| public List<Long> getTagIdsForResourceId(Long resourceId) throws Exception { |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("==> TagDBStore.getTagIdsForResourceId(" + resourceId + ")"); |
| } |
| |
| List<Long> ret = rangerTagResourceMapService.getTagIdsForResourceId(resourceId); |
| |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("<== TagDBStore.getTagIdsForResourceId(" + resourceId + "): count=" + (ret == null ? 0 : ret.size())); |
| } |
| |
| return ret; |
| } |
| |
| @Override |
| public List<RangerTagResourceMap> getTagResourceMapsForResourceId(Long resourceId) throws Exception { |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("==> TagDBStore.getTagResourceMapsForResourceId(" + resourceId + ")"); |
| } |
| |
| List<RangerTagResourceMap> ret = rangerTagResourceMapService.getByResourceId(resourceId); |
| |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("<== TagDBStore.getTagResourceMapsForResourceId(" + resourceId + "): count=" + (ret == null ? 0 : ret.size())); |
| } |
| |
| return ret; |
| } |
| |
| @Override |
| public List<RangerTagResourceMap> getTagResourceMapsForResourceGuid(String resourceGuid) throws Exception { |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("==> TagDBStore.getTagResourceMapsForResourceGuid(" + resourceGuid + ")"); |
| } |
| |
| List<RangerTagResourceMap> ret = rangerTagResourceMapService.getByResourceGuid(resourceGuid); |
| |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("<== TagDBStore.getTagResourceMapsForResourceGuid(" + resourceGuid + "): count=" + (ret == null ? 0 : ret.size())); |
| } |
| |
| return ret; |
| } |
| |
| @Override |
| public RangerTagResourceMap getTagResourceMapForTagAndResourceId(Long tagId, Long resourceId) throws Exception { |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("==> TagDBStore.getTagResourceMapsForTagAndResourceId(" + tagId + ", " + resourceId + ")"); |
| } |
| |
| RangerTagResourceMap ret = rangerTagResourceMapService.getByTagAndResourceId(tagId, resourceId); |
| |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("<== TagDBStore.getTagResourceMapsForTagAndResourceId(" + tagId + ", " + resourceId + "): " + ret); |
| } |
| |
| return ret; |
| } |
| |
| @Override |
| public RangerTagResourceMap getTagResourceMapForTagAndResourceGuid(String tagGuid, String resourceGuid) throws Exception { |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("==> TagDBStore.getTagResourceMapForTagAndResourceGuid(" + tagGuid + ", " + resourceGuid + ")"); |
| } |
| |
| RangerTagResourceMap ret = rangerTagResourceMapService.getByTagAndResourceGuid(tagGuid, resourceGuid); |
| |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("<== TagDBStore.getTagResourceMapForTagAndResourceGuid(" + tagGuid + ", " + resourceGuid + "): " + ret); |
| } |
| |
| return ret; |
| } |
| |
| |
| @Override |
| public List<RangerTagResourceMap> getTagResourceMaps(SearchFilter filter) throws Exception { |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("==> TagDBStore.getTagResourceMaps(" + filter+ ")"); |
| } |
| |
| List<RangerTagResourceMap> ret = rangerTagResourceMapService.searchRangerTaggedResources(filter).getList(); |
| |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("<== TagDBStore.getTagResourceMaps(" + filter + "): count=" + (ret == null ? 0 : ret.size())); |
| } |
| |
| return ret; |
| } |
| |
| @Override |
| public PList<RangerTagResourceMap> getPaginatedTagResourceMaps(SearchFilter filter) throws Exception { |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("==> TagDBStore.getPaginatedTagResourceMaps(" + filter+ ")"); |
| } |
| |
| PList<RangerTagResourceMap> ret = rangerTagResourceMapService.searchRangerTaggedResources(filter); |
| |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("<== TagDBStore.getPaginatedTagResourceMaps(" + filter + "): count=" + (ret == null ? 0 : ret.getPageSize())); |
| } |
| |
| return ret; |
| } |
| |
| |
| @Override |
| public ServiceTags getServiceTagsIfUpdated(String serviceName, Long lastKnownVersion) throws Exception { |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("==> TagDBStore.getServiceTagsIfUpdated(" + serviceName + ", " + lastKnownVersion + ")"); |
| } |
| |
| ServiceTags ret = null; |
| |
| XXService xxService = daoManager.getXXService().findByName(serviceName); |
| |
| if (xxService == null) { |
| LOG.error("Requested Service not found. serviceName=" + serviceName); |
| throw restErrorUtil.createRESTException(HttpServletResponse.SC_NOT_FOUND, RangerServiceNotFoundException.buildExceptionMsg(serviceName), |
| false); |
| } |
| |
| XXServiceVersionInfo serviceVersionInfoDbObj = daoManager.getXXServiceVersionInfo().findByServiceName(serviceName); |
| |
| if (serviceVersionInfoDbObj == null) { |
| LOG.warn("serviceVersionInfo does not exist. name=" + serviceName); |
| } |
| |
| if (lastKnownVersion == null || serviceVersionInfoDbObj == null || serviceVersionInfoDbObj.getTagVersion() == null || !lastKnownVersion.equals(serviceVersionInfoDbObj.getTagVersion())) { |
| ret = RangerServiceTagsCache.getInstance().getServiceTags(serviceName, xxService.getId(), this); |
| } |
| |
| if (ret != null && lastKnownVersion != null && lastKnownVersion.equals(ret.getTagVersion())) { |
| // ServiceTags are not changed |
| ret = null; |
| } |
| |
| if (LOG.isDebugEnabled()) { |
| RangerServiceTagsCache.getInstance().dump(); |
| } |
| |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("<== TagDBStore.getServiceTagsIfUpdated(" + serviceName + ", " + lastKnownVersion + "): count=" + ((ret == null || ret.getTags() == null) ? 0 : ret.getTags().size())); |
| } |
| |
| return ret; |
| } |
| |
| @Override |
| public Long getTagVersion(String serviceName) { |
| |
| XXServiceVersionInfo serviceVersionInfoDbObj = daoManager.getXXServiceVersionInfo().findByServiceName(serviceName); |
| |
| return serviceVersionInfoDbObj != null ? serviceVersionInfoDbObj.getTagVersion() : null; |
| } |
| |
| @Override |
| public ServiceTags getServiceTags(String serviceName) throws Exception { |
| |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("==> TagDBStore.getServiceTags(" + serviceName + ")"); |
| } |
| |
| ServiceTags ret = null; |
| |
| XXService xxService = daoManager.getXXService().findByName(serviceName); |
| |
| if (xxService == null) { |
| throw new Exception("service does not exist. name=" + serviceName); |
| } |
| |
| XXServiceVersionInfo serviceVersionInfoDbObj = daoManager.getXXServiceVersionInfo().findByServiceName(serviceName); |
| |
| if (serviceVersionInfoDbObj == null) { |
| LOG.warn("serviceVersionInfo does not exist for service [" + serviceName + "]"); |
| } |
| |
| RangerServiceDef serviceDef = svcStore.getServiceDef(xxService.getType()); |
| |
| if (serviceDef == null) { |
| throw new Exception("service-def does not exist. id=" + xxService.getType()); |
| } |
| |
| RangerTagDBRetriever tagDBRetriever = new RangerTagDBRetriever(daoManager, txManager, xxService); |
| |
| Map<Long, RangerTagDef> tagDefMap = tagDBRetriever.getTagDefs(); |
| Map<Long, RangerTag> tagMap = tagDBRetriever.getTags(); |
| List<RangerServiceResource> resources = tagDBRetriever.getServiceResources(); |
| Map<Long, List<Long>> resourceToTagIds = tagDBRetriever.getResourceToTagIds(); |
| |
| ret = new ServiceTags(); |
| |
| ret.setServiceName(xxService.getName()); |
| ret.setTagVersion(serviceVersionInfoDbObj == null ? null : serviceVersionInfoDbObj.getTagVersion()); |
| ret.setTagUpdateTime(serviceVersionInfoDbObj == null ? null : serviceVersionInfoDbObj.getTagUpdateTime()); |
| ret.setTagDefinitions(tagDefMap); |
| ret.setTags(tagMap); |
| ret.setServiceResources(resources); |
| ret.setResourceToTagIds(resourceToTagIds); |
| |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("<== TagDBStore.getServiceTags(" + serviceName + ")"); |
| } |
| return ret; |
| |
| } |
| |
| @Override |
| public void deleteAllTagObjectsForService(String serviceName) throws Exception { |
| |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("==> TagDBStore.deleteAllTagObjectsForService(" + serviceName + ")"); |
| } |
| |
| XXService service = daoManager.getXXService().findByName(serviceName); |
| |
| if (service != null) { |
| Long serviceId = service.getId(); |
| |
| List<XXTag> xxTags = daoManager.getXXTag().findByServiceIdAndOwner(serviceId, RangerTag.OWNER_SERVICERESOURCE); |
| |
| List<XXTagResourceMap> xxTagResourceMaps = daoManager.getXXTagResourceMap().findByServiceId(serviceId); |
| |
| if (CollectionUtils.isNotEmpty(xxTagResourceMaps)) { |
| for (XXTagResourceMap xxTagResourceMap : xxTagResourceMaps) { |
| try { |
| daoManager.getXXTagResourceMap().remove(xxTagResourceMap); |
| } catch (Exception e) { |
| LOG.error("Error deleting RangerTagResourceMap with id=" + xxTagResourceMap.getId(), e); |
| throw e; |
| } |
| } |
| } |
| |
| if (CollectionUtils.isNotEmpty(xxTags)) { |
| for (XXTag xxTag : xxTags) { |
| try { |
| daoManager.getXXTag().remove(xxTag); |
| } catch (Exception e) { |
| LOG.error("Error deleting RangerTag with id=" + xxTag.getId(), e); |
| throw e; |
| } |
| } |
| } |
| |
| List<XXServiceResource> xxServiceResources = daoManager.getXXServiceResource().findByServiceId(serviceId); |
| |
| if (CollectionUtils.isNotEmpty(xxServiceResources)) { |
| for (XXServiceResource xxServiceResource : xxServiceResources) { |
| try { |
| daoManager.getXXServiceResource().remove(xxServiceResource); |
| } catch (Exception e) { |
| LOG.error("Error deleting RangerServiceResource with id=" + xxServiceResource.getId(), e); |
| throw e; |
| } |
| } |
| } |
| |
| } |
| |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("<== TagDBStore.deleteAllTagObjectsForService(" + serviceName + ")"); |
| } |
| } |
| } |