You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ranger.apache.org by ma...@apache.org on 2015/10/28 17:00:21 UTC

[45/50] [abbrv] incubator-ranger git commit: RANGER-687: Service update should ignore user provided values for internal fields - like policyVersion

RANGER-687: Service update should ignore user provided values for internal fields - like policyVersion


Project: http://git-wip-us.apache.org/repos/asf/incubator-ranger/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ranger/commit/be03c44b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ranger/tree/be03c44b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ranger/diff/be03c44b

Branch: refs/heads/master
Commit: be03c44b6e978dea70cac629566c3826a835db6a
Parents: d734a21
Author: Madhan Neethiraj <ma...@apache.org>
Authored: Wed Oct 14 23:39:45 2015 -0700
Committer: Madhan Neethiraj <ma...@apache.org>
Committed: Fri Oct 16 08:50:34 2015 -0700

----------------------------------------------------------------------
 .../org/apache/ranger/biz/ServiceDBStore.java   | 56 ++++++++++++++++----
 1 file changed, 45 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/be03c44b/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java b/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java
index 99e58fe..30c0897 100644
--- a/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java
+++ b/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java
@@ -1141,9 +1141,19 @@ public class ServiceDBStore extends AbstractServiceStore {
 		List<XXTrxLog> trxLogList = svcService.getTransactionLog(service, existing, RangerServiceService.OPERATION_UPDATE_CONTEXT);
 
 		boolean hasTagServiceValueChanged = false;
-		Long existingTagServiceValue = existing.getTagService();
-		String newTagServiceName = service.getTagService();
-		Long newTagServiceValue = null;
+		Long    existingTagServiceId      = existing.getTagService();
+		String  newTagServiceName         = service.getTagService(); // null for old clients; empty string to remove existing association
+		Long    newTagServiceId           = null;
+
+		if(newTagServiceName == null) { // old client; don't update existing tagService
+			if(existingTagServiceId != null) {
+				newTagServiceName = getServiceName(existingTagServiceId);
+
+				service.setTagService(newTagServiceName);
+
+				LOG.info("ServiceDBStore.updateService(id=" + service.getId() + "; name=" + service.getName() + "): tagService is null; using existing tagService '" + newTagServiceName + "'");
+			}
+		}
 
 		if (StringUtils.isNotBlank(newTagServiceName)) {
 			RangerService tmp = getServiceByName(newTagServiceName);
@@ -1155,27 +1165,36 @@ public class ServiceDBStore extends AbstractServiceStore {
 				throw restErrorUtil.createRESTException("Invalid tag service name " + newTagServiceName, MessageEnums.ERROR_CREATING_OBJECT);
 
 			} else {
-				newTagServiceValue = tmp.getId();
+				newTagServiceId = tmp.getId();
 			}
 		}
 
-		if (existingTagServiceValue == null) {
-			if (newTagServiceValue != null) {
+		if (existingTagServiceId == null) {
+			if (newTagServiceId != null) {
 				hasTagServiceValueChanged = true;
 			}
-		} else if (!existingTagServiceValue.equals(newTagServiceValue)) {
+		} else if (!existingTagServiceId.equals(newTagServiceId)) {
 			hasTagServiceValueChanged = true;
 		}
 
-		if (hasTagServiceValueChanged) {
-			service.setPolicyVersion(getNextVersion(service.getPolicyVersion()));
-		}
-
 		if(populateExistingBaseFields) {
 			svcServiceWithAssignedId.setPopulateExistingBaseFields(true);
 			service = svcServiceWithAssignedId.update(service);
 			svcServiceWithAssignedId.setPopulateExistingBaseFields(false);
 		} else {
+			service.setCreateTime(existing.getCreateTime());
+			service.setGuid(existing.getGuid());
+			service.setVersion(existing.getVersion());
+			service.setPolicyUpdateTime(existing.getPolicyUpdateTime());
+			service.setPolicyVersion(existing.getPolicyVersion());
+			service.setTagVersion(existing.getTagVersion());
+			service.setTagUpdateTime(existing.getTagUpdateTime());
+
+			if (hasTagServiceValueChanged) {
+				service.setPolicyVersion(getNextVersion(service.getPolicyVersion()));
+			}
+
+
 			service = svcService.update(service);
 		}
 
@@ -2286,4 +2305,19 @@ public class ServiceDBStore extends AbstractServiceStore {
 			}
 		}
 	}
+
+
+	private String getServiceName(Long serviceId) {
+		String ret = null;
+
+		if(serviceId != null) {
+			XXService service = daoMgr.getXXService().getById(serviceId);
+
+			if(service != null) {
+				ret = service.getName();
+			}
+		}
+
+		return ret;
+	}
 }