-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/73579/
-----------------------------------------------------------

Review request for ranger and Abhay Kulkarni.


Bugs: RANGER-3371
    https://issues.apache.org/jira/browse/RANGER-3371


Repository: ranger


Description
-------

**Problem Statement-1:** While converting policy json text to object, an error 
is thrown because stored date/time format is not matched with the expected 
format. 
Due to this delta policies calculation fails and delta policies are not 
returned, Since delta policy result is empty ranger is fetching all ranger 
policies.

Exception thrown during the conversion:

ERROR org.apache.ranger.db.XXPolicyChangeLogDao: Cannot read policy:[45]. 
Should not have come here!! Offending log-record-id:[47] and returning...
org.codehaus.jackson.map.JsonMappingException: Can not construct instance of 
java.util.Date from String value '20210913-05:12:16.000-+0000': not a valid 
representation (error: Can not parse date "20210913-05:12:16.000-+0000": not 
compatible with any of standard forms ("yyyy-MM-dd'T'HH:mm:ss.SSSZ", 
"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", "EEE, dd MMM yyyy HH:mm:ss zzz", "yyyy-MM-dd"))
 at [Source: java.io.StringReader@4b7b45c7; line: 1, column: 911] (through 
reference chain: org.apache.ranger.plugin.model.RangerPolicy["createTime"])
 
**Proposed Solution:** Parsing method to handle this issue need to be changed. 
Current code : policy = JsonUtilsV2.jsonToObj(xxPolicy.getPolicyText(), 
RangerPolicy.class);
Proposed fix : policy = policy = 
JsonUtils.jsonToObject(xxPolicy.getPolicyText(), RangerPolicy.class);

JsonUtils can accepts a json string having date/time format as 
'yyyyMMdd-HH:mm:ss.SSS-Z' which is the same format used during the conversion 
from object to json at line 150 of RangerPolicyServiceBase.java


**Behaviour after proposed change:** After proposed fix, delta was calculated 
and it was observed that returned policy json may contain duplicate entries of 
the same policy.


**Problem Statement-2:** After a policy is created, In Case of multiple update 
operations on the same policy, when call goes to 
RangerPolicyDeltaUtil.applyDeltas() method then existing list of policies will 
contain the policy object and the list of delta policy objects shall also 
contain delta of the policy which was updated. in this case when existing 
policy and delta policy object are added for the same policy then final list of 
policies may contain more than one entry for the same policy.

**Proposed Solution:** for each delta policy object entries of the existing 
policy objects should be checked for the same policy id, and only delta policy 
object should be consider/prioritize. If record matches then entry for the same 
policy id can be removed from list of existing policy objects and delta policy 
can be added.


Diffs
-----

  
agents-common/src/main/java/org/apache/ranger/plugin/util/RangerPolicyDeltaUtil.java
 42143d06b 
  security-admin/src/main/java/org/apache/ranger/db/XXPolicyChangeLogDao.java 
6136bd304 


Diff: https://reviews.apache.org/r/73579/diff/1/


Testing
-------

Tested the updated patch by replacing the respective class/jar files in the 
existing env and restarted ranger-admin. Parsing is working fine and result was 
returned as expected.


Thanks,

Pradeep Agrawal

Reply via email to