This is an automated email from the ASF dual-hosted git repository.
abhay pushed a commit to branch ranger-2.2
in repository https://gitbox.apache.org/repos/asf/ranger.git
The following commit(s) were added to refs/heads/ranger-2.2 by this push:
new 1eb702a RANGER-3253: Make incremental policy change computation more
resilient
1eb702a is described below
commit 1eb702ab45f43636a45961135286214b41bbcd17
Author: Abhay Kulkarni <[email protected]>
AuthorDate: Thu Apr 29 09:04:17 2021 -0700
RANGER-3253: Make incremental policy change computation more resilient
---
.../ranger/plugin/model/RangerPolicyDelta.java | 13 ++--
.../policyengine/RangerPolicyRepository.java | 25 ++++--
.../ranger/plugin/util/RangerPolicyDeltaUtil.java | 55 ++++++++++----
.../java/org/apache/ranger/biz/ServiceDBStore.java | 16 +++-
.../ranger/common/RangerServicePoliciesCache.java | 88 ++++++----------------
.../org/apache/ranger/db/XXPolicyChangeLogDao.java | 32 ++++----
6 files changed, 116 insertions(+), 113 deletions(-)
diff --git
a/agents-common/src/main/java/org/apache/ranger/plugin/model/RangerPolicyDelta.java
b/agents-common/src/main/java/org/apache/ranger/plugin/model/RangerPolicyDelta.java
index 1d2b143..5292a98 100644
---
a/agents-common/src/main/java/org/apache/ranger/plugin/model/RangerPolicyDelta.java
+++
b/agents-common/src/main/java/org/apache/ranger/plugin/model/RangerPolicyDelta.java
@@ -50,23 +50,24 @@ public class RangerPolicyDelta implements
java.io.Serializable {
private Long id;
private Integer changeType;
+ private Long policiesVersion;
private RangerPolicy policy;
public RangerPolicyDelta() {
- this(null, null, null);
+ this(null, null, null, null);
}
- public RangerPolicyDelta(final Long id, final Integer changeType, final
RangerPolicy policy) {
+ public RangerPolicyDelta(final Long id, final Integer changeType, final
Long policiesVersion, final RangerPolicy policy) {
setId(id);
setChangeType(changeType);
+ setPoliciesVersion(policiesVersion);
setPolicy(policy);
}
public Long getId() { return id; }
public Integer getChangeType() { return changeType; }
- @JsonIgnore
- public Long getPolicyVersion() { return policy != null ?
policy.getVersion() : null; }
+ public Long getPoliciesVersion() { return policiesVersion; }
@JsonIgnore
public String getServiceType() { return policy != null ?
policy.getServiceType() : null; }
@@ -86,13 +87,15 @@ public class RangerPolicyDelta implements
java.io.Serializable {
private void setChangeType(Integer changeType) { this.changeType =
changeType; }
+ private void setPoliciesVersion(Long policiesVersion) {
this.policiesVersion = policiesVersion; }
+
public void setPolicy(RangerPolicy policy) { this.policy = policy; }
@Override
public String toString() {
return "id:" + id
+ ", changeType:" + changeTypeNames[changeType]
- + ", policyVersion:" + getPolicyVersion()
+ + ", policiesVersion:" + getPoliciesVersion()
+ ", serviceType:" + getServiceType()
+ ", policyType:" + getPolicyType()
+ ", policyId:[" + getPolicyId() + "]"
diff --git
a/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerPolicyRepository.java
b/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerPolicyRepository.java
index 20c1a36..caff33a 100644
---
a/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerPolicyRepository.java
+++
b/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerPolicyRepository.java
@@ -1208,6 +1208,7 @@ public class RangerPolicyRepository {
}
if (policyDeltaType ==
RangerPolicyDelta.CHANGE_TYPE_POLICY_CREATE) {
+ removeEvaluatorFromTrie(oldEvaluator, trie, resourceDefName);
addEvaluatorToTrie(newEvaluator, trie, resourceDefName);
} else if (policyDeltaType ==
RangerPolicyDelta.CHANGE_TYPE_POLICY_DELETE) {
removeEvaluatorFromTrie(oldEvaluator, trie, resourceDefName);
@@ -1227,6 +1228,8 @@ public class RangerPolicyRepository {
if (newEvaluator != null) {
RangerPolicy.RangerPolicyResource resource =
newEvaluator.getPolicyResource().get(resourceDefName);
trie.add(resource, newEvaluator);
+ } else {
+ LOG.warn("Unexpected: newPolicyEvaluator is null for resource:[" +
resourceDefName + "]");
}
}
@@ -1298,7 +1301,7 @@ public class RangerPolicyRepository {
while (iterator.hasNext()) {
if (id.equals(iterator.next().getId())) {
iterator.remove();
- break;
+ //break;
}
}
@@ -1353,12 +1356,17 @@ public class RangerPolicyRepository {
switch (changeType) {
case RangerPolicyDelta.CHANGE_TYPE_POLICY_CREATE:
+ if (currentEvaluator != null) {
+ removePolicy(policyId);
+ }
if (policy != null) {
newEvaluator = addPolicy(policy);
}
break;
case RangerPolicyDelta.CHANGE_TYPE_POLICY_UPDATE: {
- removePolicy(policyId);
+ if (currentEvaluator != null) {
+ removePolicy(policyId);
+ }
if (policy != null) {
newEvaluator = addPolicy(policy);
}
@@ -1469,24 +1477,25 @@ public class RangerPolicyRepository {
continue;
}
+ evaluator = getPolicyEvaluator(policyId);
+ if (evaluator != null) {
+ LOG.warn("Unexpected: Found evaluator for policy-id:["
+ policyId + "], changeType=CHANGE_TYPE_POLICY_CREATE");
+ }
+
break;
case RangerPolicyDelta.CHANGE_TYPE_POLICY_UPDATE:
evaluator = getPolicyEvaluator(policyId);
if (evaluator == null) {
- if (LOG.isDebugEnabled()) {
- LOG.debug("Could not find evaluator for
policy-id:[" + policyId + "]");
- }
+ LOG.warn("Unexpected: Did not find evaluator for
policy-id:[" + policyId + "], changeType=CHANGE_TYPE_POLICY_UPDATE");
}
break;
case RangerPolicyDelta.CHANGE_TYPE_POLICY_DELETE:
evaluator = getPolicyEvaluator(policyId);
if (evaluator == null) {
- if (LOG.isDebugEnabled()) {
- LOG.debug("Could not find evaluator for
policy-id:[" + policyId + "]");
- }
+ LOG.warn("Unexpected: Did not find evaluator for
policy-id:[" + policyId + "], changeType=CHANGE_TYPE_POLICY_DELETE");
}
break;
diff --git
a/agents-common/src/main/java/org/apache/ranger/plugin/util/RangerPolicyDeltaUtil.java
b/agents-common/src/main/java/org/apache/ranger/plugin/util/RangerPolicyDeltaUtil.java
index 4661f79..7088e83 100644
---
a/agents-common/src/main/java/org/apache/ranger/plugin/util/RangerPolicyDeltaUtil.java
+++
b/agents-common/src/main/java/org/apache/ranger/plugin/util/RangerPolicyDeltaUtil.java
@@ -78,26 +78,49 @@ public class RangerPolicyDeltaUtil {
int changeType = delta.getChangeType();
if (changeType ==
RangerPolicyDelta.CHANGE_TYPE_POLICY_CREATE || changeType ==
RangerPolicyDelta.CHANGE_TYPE_POLICY_UPDATE || changeType ==
RangerPolicyDelta.CHANGE_TYPE_POLICY_DELETE) {
- if (changeType ==
RangerPolicyDelta.CHANGE_TYPE_POLICY_CREATE) {
- if (delta.getPolicy() != null) {
- ret.add(delta.getPolicy());
+ Long policyId = delta.getPolicyId();
+
+ if (policyId == null) {
+ continue;
+ }
+
+ List<RangerPolicy> deletedPolicies = new
ArrayList<>();
+
+ Iterator<RangerPolicy> iter = ret.iterator();
+
+ while (iter.hasNext()) {
+ RangerPolicy policy = iter.next();
+ if (policyId.equals(policy.getId())) {
+ deletedPolicies.add(policy);
+ iter.remove();
}
- } else {
- // Either UPDATE or DELETE
- Long policyId = delta.getPolicyId();
-
- Iterator<RangerPolicy> iter = ret.iterator();
- while (iter.hasNext()) {
- if (policyId.equals(iter.next().getId())) {
- iter.remove();
- break;
+ }
+
+ switch(changeType) {
+ case RangerPolicyDelta.CHANGE_TYPE_POLICY_CREATE: {
+ if
(CollectionUtils.isNotEmpty(deletedPolicies)) {
+ LOG.warn("Unexpected: found existing
policy for CHANGE_TYPE_POLICY_CREATE: " +
Arrays.toString(deletedPolicies.toArray()));
+ }
+ break;
+ }
+ case RangerPolicyDelta.CHANGE_TYPE_POLICY_UPDATE: {
+ if (CollectionUtils.isEmpty(deletedPolicies)
|| deletedPolicies.size() > 1) {
+ LOG.warn("Unexpected: found no policy or
multiple policies for CHANGE_TYPE_POLICY_UPDATE: " +
Arrays.toString(deletedPolicies.toArray()));
}
+ break;
}
- if (changeType ==
RangerPolicyDelta.CHANGE_TYPE_POLICY_UPDATE) {
- if (delta.getPolicy() != null) {
- ret.add(delta.getPolicy());
+ case RangerPolicyDelta.CHANGE_TYPE_POLICY_DELETE: {
+ if (CollectionUtils.isEmpty(deletedPolicies)
|| deletedPolicies.size() > 1) {
+ LOG.warn("Unexpected: found no policy or
multiple policies for CHANGE_TYPE_POLICY_DELETE: " +
Arrays.toString(deletedPolicies.toArray()));
}
+ break;
}
+ default:
+ break;
+ }
+
+ if (changeType !=
RangerPolicyDelta.CHANGE_TYPE_POLICY_DELETE) {
+ ret.add(delta.getPolicy());
}
} else {
LOG.warn("Found unexpected changeType in
policyDelta:[" + delta + "]. Ignoring delta");
@@ -111,7 +134,7 @@ public class RangerPolicyDeltaUtil {
}
} else {
if (LOG.isDebugEnabled()) {
- LOG.debug("applyDeltas(deltas=null, serviceType=" +
serviceType + ")");
+ LOG.warn("Unexpected : applyDeltas called with deltas=null");
}
ret = policies;
}
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 4fb71f0..52e0c6f 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
@@ -2931,11 +2931,9 @@ public class ServiceDBStore extends AbstractServiceStore
{
}
if (ret != null) {
- ret.setPolicyVersion(serviceVersionInfoDbObj == null ?
null : serviceVersionInfoDbObj.getPolicyVersion());
ret.setPolicyUpdateTime(serviceVersionInfoDbObj == null
? null : serviceVersionInfoDbObj.getPolicyUpdateTime());
ret.setAuditMode(auditMode);
if (ret.getTagPolicies() != null) {
-
ret.getTagPolicies().setPolicyVersion(tagServiceVersionInfoDbObj == null ? null
: tagServiceVersionInfoDbObj.getPolicyVersion());
ret.getTagPolicies().setPolicyUpdateTime(tagServiceVersionInfoDbObj == null ?
null : tagServiceVersionInfoDbObj.getPolicyUpdateTime());
ret.getTagPolicies().setAuditMode(auditMode);
}
@@ -3131,6 +3129,8 @@ public class ServiceDBStore extends AbstractServiceStore {
List<RangerPolicyDelta> resourcePolicyDeltas;
List<RangerPolicyDelta> tagPolicyDeltas = null;
+ Long retrievedPolicyVersion = null;
+ Long retrievedTagPolicyVersion =
null;
String componentServiceType = serviceDef.getName();
@@ -3140,7 +3140,9 @@ public class ServiceDBStore extends AbstractServiceStore {
if (CollectionUtils.isNotEmpty(resourcePolicyDeltas)) {
isValid =
RangerPolicyDeltaUtil.isValidDeltas(resourcePolicyDeltas, componentServiceType);
- if (!isValid) {
+ if (isValid) {
+ retrievedPolicyVersion =
resourcePolicyDeltas.get(resourcePolicyDeltas.size() - 1).getPoliciesVersion();
+ } else {
LOG.warn("Resource policy-Deltas :[" +
resourcePolicyDeltas + "] from version :[" + lastKnownVersion + "] are not
valid");
}
@@ -3154,7 +3156,9 @@ public class ServiceDBStore extends AbstractServiceStore {
isValid =
RangerPolicyDeltaUtil.isValidDeltas(tagPolicyDeltas, tagServiceType);
- if (!isValid) {
+ if (isValid) {
+
retrievedTagPolicyVersion = tagPolicyDeltas.get(tagPolicyDeltas.size() -
1).getPoliciesVersion();
+ } else {
LOG.warn("Tag
policy-Deltas :[" + tagPolicyDeltas + "] for service-version :[" +
lastKnownVersion + "] and delta-id :[" + id + "] are not valid");
}
}
@@ -3167,7 +3171,9 @@ public class ServiceDBStore extends AbstractServiceStore {
resourcePolicyDeltas.addAll(tagPolicyDeltas);
}
+
List<RangerPolicyDelta>
compressedDeltas = compressDeltas(resourcePolicyDeltas);
+
if (compressedDeltas != null) {
ret = new ServicePolicies();
ret.setServiceId(service.getId());
@@ -3175,6 +3181,7 @@ public class ServiceDBStore extends AbstractServiceStore {
ret.setServiceDef(serviceDef);
ret.setPolicies(null);
ret.setPolicyDeltas(compressedDeltas);
+
ret.setPolicyVersion(retrievedPolicyVersion);
if (tagServiceDef != null &&
tagService != null) {
ServicePolicies.TagPolicies tagPolicies = new ServicePolicies.TagPolicies();
@@ -3182,6 +3189,7 @@ public class ServiceDBStore extends AbstractServiceStore {
tagPolicies.setServiceId(tagService.getId());
tagPolicies.setServiceName(tagService.getName());
tagPolicies.setPolicies(null);
+
tagPolicies.setPolicyVersion(retrievedTagPolicyVersion);
ret.setTagPolicies(tagPolicies);
}
} else {
diff --git
a/security-admin/src/main/java/org/apache/ranger/common/RangerServicePoliciesCache.java
b/security-admin/src/main/java/org/apache/ranger/common/RangerServicePoliciesCache.java
index 1176e0b..04aa472 100644
---
a/security-admin/src/main/java/org/apache/ranger/common/RangerServicePoliciesCache.java
+++
b/security-admin/src/main/java/org/apache/ranger/common/RangerServicePoliciesCache.java
@@ -35,6 +35,7 @@ import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Objects;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.ReentrantLock;
@@ -307,34 +308,28 @@ public class RangerServicePoliciesCache {
final List<RangerPolicy>
policies = servicePolicies.getPolicies() == null ? new ArrayList<>() :
servicePolicies.getPolicies();
final List<RangerPolicy>
newPolicies = RangerPolicyDeltaUtil.applyDeltas(policies,
servicePoliciesFromDb.getPolicyDeltas(),
servicePolicies.getServiceDef().getName());
- boolean isSanityCheckPassed =
checkAndLoadCompleteSetOfPolicies(serviceName, serviceStore, newPolicies);
+
servicePolicies.setPolicies(newPolicies);
- if (!isSanityCheckPassed) {
-
isCacheReloadedByDQEvent = true;
- } else {
-
servicePolicies.setPolicies(newPolicies);
+ checkCacheSanity(serviceName,
serviceStore, false);
- // Rebuild tag-policies
from original tag-policies and deltas
- if
(servicePoliciesFromDb.getTagPolicies() != null) {
- if
(LOG.isDebugEnabled()) {
-
LOG.debug("This service has associated tag service. Will compute tagPolicies
from corresponding policy-deltas");
- }
+ // Rebuild tag-policies from
original tag-policies and deltas
+ if
(servicePoliciesFromDb.getTagPolicies() != null) {
+ String tagServiceName =
servicePoliciesFromDb.getTagPolicies().getServiceName();
+ if
(LOG.isDebugEnabled()) {
+ LOG.debug("This
service has associated tag service:[" + tagServiceName + "]. Will compute
tagPolicies from corresponding policy-deltas");
+ }
- final
List<RangerPolicy> tagPolicies = (servicePolicies.getTagPolicies() == null ||
CollectionUtils.isEmpty(servicePolicies.getTagPolicies().getPolicies())) ? new
ArrayList<>() : servicePolicies.getTagPolicies().getPolicies();
- final
List<RangerPolicy> newTagPolicies =
RangerPolicyDeltaUtil.applyDeltas(tagPolicies,
servicePoliciesFromDb.getPolicyDeltas(),
servicePoliciesFromDb.getTagPolicies().getServiceDef().getName());
+ final
List<RangerPolicy> tagPolicies = (servicePolicies.getTagPolicies() == null ||
CollectionUtils.isEmpty(servicePolicies.getTagPolicies().getPolicies())) ? new
ArrayList<>() : servicePolicies.getTagPolicies().getPolicies();
+ final
List<RangerPolicy> newTagPolicies =
RangerPolicyDeltaUtil.applyDeltas(tagPolicies,
servicePoliciesFromDb.getPolicyDeltas(),
servicePoliciesFromDb.getTagPolicies().getServiceDef().getName());
-
isSanityCheckPassed = checkAndLoadCompleteSetOfPolicies(serviceName,
servicePoliciesFromDb.getTagPolicies().getServiceName(), serviceStore,
newTagPolicies);
+
servicePolicies.getTagPolicies().setPolicies(newTagPolicies);
+
servicePolicies.getTagPolicies().setPolicyVersion(servicePoliciesFromDb.getTagPolicies().getPolicyVersion());
- if
(!isSanityCheckPassed) {
-
isCacheReloadedByDQEvent = true;
- } else {
-
servicePolicies.getTagPolicies().setPolicies(newTagPolicies);
- }
+
checkCacheSanity(servicePoliciesFromDb.getTagPolicies().getServiceName(),
serviceStore, true);
- } else {
- if
(LOG.isDebugEnabled()) {
-
LOG.debug("This service has no associated tag service");
- }
+ } else {
+ if
(LOG.isDebugEnabled()) {
+ LOG.debug("This
service has no associated tag service");
}
}
}
@@ -361,50 +356,15 @@ public class RangerServicePoliciesCache {
return isCacheReloadedByDQEvent;
}
- private boolean checkAndLoadCompleteSetOfPolicies(String
serviceName, ServiceStore serviceStore, List<RangerPolicy>
policiesFromIncrementalComputation) {
- boolean ret = checkCacheSanity(serviceName,
serviceStore, policiesFromIncrementalComputation);
-
- if (!ret) {
- loadCompleteSetOfPolicies(serviceName,
serviceStore);
- LOG.warn("Policies loaded from db for service:"
+ serviceName + "] are [" + servicePolicies + "]");
- LOG.warn("Policies in cache for service:[" +
serviceName + "] are [" + policiesFromIncrementalComputation + "]");
-
- }
-
- return ret;
- }
-
- private boolean checkAndLoadCompleteSetOfPolicies(String
serviceName, String tagServiceName, ServiceStore serviceStore,
List<RangerPolicy> policiesFromIncrementalComputation) {
- boolean ret = checkCacheSanity(tagServiceName,
serviceStore, policiesFromIncrementalComputation);
-
- if (!ret) {
- loadCompleteSetOfPolicies(serviceName,
serviceStore);
- LOG.warn("Policies loaded from db for service:"
+ serviceName + "] are [" + servicePolicies + "]");
- LOG.warn("Tag Policies in cache for
tag-service:[" + tagServiceName + "] are [" +
policiesFromIncrementalComputation + "]");
- }
+ private void checkCacheSanity(String serviceName, ServiceStore
serviceStore, boolean isTagService) {
+ final boolean result;
+ Long dbPolicyVersion =
serviceStore.getServicePolicyVersion(serviceName);
+ Long cachedPolicyVersion = isTagService ?
servicePolicies.getTagPolicies().getPolicyVersion() :
servicePolicies.getPolicyVersion();
- return ret;
- }
+ result = Objects.equals(dbPolicyVersion,
cachedPolicyVersion);
- private boolean checkCacheSanity(String serviceName,
ServiceStore serviceStore, List<RangerPolicy>
policiesFromIncrementalComputation) {
- final boolean ret;
- long dbPoliciesCount =
serviceStore.getPoliciesCount(serviceName);
- long cachedPoliciesCount =
(CollectionUtils.isEmpty(policiesFromIncrementalComputation) ? 0 :
policiesFromIncrementalComputation.size());
- ret = dbPoliciesCount == cachedPoliciesCount;
- if (!ret) {
- LOG.warn("For service:[" + serviceName + "]:
dbPoliciesCount:[" + dbPoliciesCount + "], cachedPoliciesCount:[" +
cachedPoliciesCount + "]");
- }
- return ret;
-
- }
-
- private void loadCompleteSetOfPolicies(String serviceName,
ServiceStore serviceStore) {
- LOG.warn("Something went wrong doing incremental
policies for service:[" + serviceName + "]!! Loading all policies!!");
- try {
- servicePolicies =
serviceStore.getServicePolicies(serviceName, -1L);
- pruneUnusedAttributes();
- } catch (Exception ex) {
- LOG.warn("Could not get policies from
database");
+ if (!result) {
+ LOG.info("checkCacheSanity(serviceName=" +
serviceName + "): policy cache has a different version than one in the
database. However, changes from " + cachedPolicyVersion + " to " +
dbPolicyVersion + " will be downloaded in the next download.
policyVersionInDB=" + dbPolicyVersion + ", policyVersionInCache=" +
cachedPolicyVersion);
}
}
diff --git
a/security-admin/src/main/java/org/apache/ranger/db/XXPolicyChangeLogDao.java
b/security-admin/src/main/java/org/apache/ranger/db/XXPolicyChangeLogDao.java
index 0a1d1c1..477129d 100644
---
a/security-admin/src/main/java/org/apache/ranger/db/XXPolicyChangeLogDao.java
+++
b/security-admin/src/main/java/org/apache/ranger/db/XXPolicyChangeLogDao.java
@@ -134,6 +134,7 @@ public class XXPolicyChangeLogDao extends
BaseDao<XXPolicyChangeLog> {
Long logRecordId = (Long)
log[POLICY_CHANGE_LOG_RECORD_ID_COLUMN_NUMBER];
Integer policyChangeType = (Integer)
log[POLICY_CHANGE_LOG_RECORD_CHANGE_TYPE_COLUMN_NUMBER];
+ Long policiesVersion = (Long)
log[POLICY_CHANGE_LOG_RECORD_POLICY_VERSION_COLUMN_NUMBER];
String serviceType = (String)
log[POLICY_CHANGE_LOG_RECORD_SERVICE_TYPE_COLUMN_NUMBER];
Long policyId = (Long)
log[POLICY_CHANGE_LOG_RECORD_POLICY_ID_COLUMN_NUMBER];
@@ -145,30 +146,29 @@ public class XXPolicyChangeLogDao extends
BaseDao<XXPolicyChangeLog> {
} catch (Exception e) {
LOG.error("Cannot read policy:[" + policyId + "].
Should not have come here!! Offending log-record-id:[" + logRecordId + "] and
returning...", e);
ret.clear();
- ret.add(new RangerPolicyDelta(logRecordId,
RangerPolicyDelta.CHANGE_TYPE_LOG_ERROR, null));
+ ret.add(new RangerPolicyDelta(logRecordId,
RangerPolicyDelta.CHANGE_TYPE_LOG_ERROR, null, null));
break;
}
} else {
- if (LOG.isDebugEnabled()) {
- LOG.debug("Policy:[" + policyId + "] not found -
log-record - id:[" + logRecordId + "], PolicyChangeType:[" + policyChangeType +
"]");
+ LOG.warn("Policy:[" + policyId + "] not found -
log-record - id:[" + logRecordId + "], PolicyChangeType:[" + policyChangeType +
"]");
+ if (policyChangeType ==
RangerPolicyDelta.CHANGE_TYPE_POLICY_CREATE || policyChangeType ==
RangerPolicyDelta.CHANGE_TYPE_POLICY_UPDATE) {
+ LOG.warn("Ignoring POLICY_CREATE or POLICY_UPDATE
type change for policy-id:[" + policyId + "] as it was not found.. probably
already deleted");
+ continue;
+ } else {
+ // policyChangeType is DELETE
+ policy = new RangerPolicy();
+ policy.setId(policyId);
+ policy.setServiceType(serviceType);
+ policy.setPolicyType((Integer)
log[POLICY_CHANGE_LOG_RECORD_POLICY_TYPE_COLUMN_NUMBER]);
+ policy.setZoneName((String)
log[POLICY_CHANGE_LOG_RECORD_ZONE_NAME_COLUMN_NUMBER]);
}
-
- // Create a dummy policy as the policy cannot be found
- probably already deleted
- policy = new RangerPolicy();
- policy.setId(policyId);
- policy.setVersion((Long)
log[POLICY_CHANGE_LOG_RECORD_POLICY_VERSION_COLUMN_NUMBER]);
- policy.setPolicyType((Integer)
log[POLICY_CHANGE_LOG_RECORD_POLICY_TYPE_COLUMN_NUMBER]);
- policy.setZoneName((String)
log[POLICY_CHANGE_LOG_RECORD_ZONE_NAME_COLUMN_NUMBER]);
}
- policy.setServiceType(serviceType);
- ret.add(new RangerPolicyDelta(logRecordId,
policyChangeType, policy));
+ ret.add(new RangerPolicyDelta(logRecordId,
policyChangeType, policiesVersion, policy));
} else {
- if (LOG.isDebugEnabled()) {
- LOG.debug("policyId is null! log-record-id:[" +
logRecordId + ", service-type:[" +
log[POLICY_CHANGE_LOG_RECORD_SERVICE_TYPE_COLUMN_NUMBER] + "],
policy-change-type:[" + log[POLICY_CHANGE_LOG_RECORD_CHANGE_TYPE_COLUMN_NUMBER]
+ "]");
- }
+ LOG.info("delta-reset-event: log-record-id=" + logRecordId
+ "; service-type=" + serviceType + "; policy-change-type=" + policyChangeType
+ ". Discarding " + ret.size() + " deltas");
ret.clear();
- ret.add(new RangerPolicyDelta(logRecordId,
policyChangeType, null));
+ ret.add(new RangerPolicyDelta(logRecordId,
policyChangeType, null, null));
break;
}
}