[ https://issues.apache.org/jira/browse/RANGER-4956?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Madhan Neethiraj updated RANGER-4956: ------------------------------------- Attachment: RANGER-4956.patch > RangerBasePlugin is not getting initialised when tag dedup feature is enabled > ----------------------------------------------------------------------------- > > Key: RANGER-4956 > URL: https://issues.apache.org/jira/browse/RANGER-4956 > Project: Ranger > Issue Type: Bug > Components: plugins > Affects Versions: 2.5.0 > Reporter: Anand Nadar > Assignee: Madhan Neethiraj > Priority: Major > Fix For: 3.0.0, 2.6.0 > > Attachments: RANGER-4956.patch > > > When ranger.admin.supports.tags.dedup is set to true, i.e tag dedup feature > is enabled, we have found that the ranger plugin is not getting initialised > using the below rangerbaseplugin constructor. > public RangerBasePlugin(RangerPluginConfig pluginConfig, ServicePolicies > policies, ServiceTags tags, RangerRoles roles, RangerUserStore userStore, > ServiceGdsInfo gdsInfo) > Here we have tags data as below which is provided in the above constructor > {code:java} > { > "op": "add_or_update", > "serviceName": "hive", > "tagVersion": 7, > "tagDefinitions": { > "2": { > "id": 2, > "isEnabled": true, > "name": "TAG2", > "source": "Internal" > } > }, > "tags": { > "10": { > "id": 10, > "isEnabled": true, > "type": "TAG2" > } > }, > "serviceResources": [ > { > "id": 8, > "isEnabled": true, > "resourceElements": { > "database": { > "values": [ > "db1" > ], > "isExcludes": false, > "isRecursive": false > } > }, > "resourceSignature": > "7ea12bf936f94ba73833373104ca818c249dfea758ed3366b675e86f42f01983" > } > ], > "resourceToTagIds": { > "8": [ > 10 > ] > }, > "isDelta": false, > "tagsChangeExtent": "ALL", > "isTagsDeduped": true, > "id": 0 > }{code} > and therefore we set the tags in the tag enricher using the below > tagEnricher.setServiceTags(tags); > Now in the below method > protected void setServiceTags(final ServiceTags serviceTags, final boolean > rebuildOnlyIndex) > we have this piece of code > {code:java} > if (!serviceTags.getIsDelta()) { > if (serviceTags.getIsTagsDeduped()) { > final int countOfDuplicateTags = > serviceTags.dedupTags(); > LOG.info("Number of duplicate tags removed from the received serviceTags:[" + > countOfDuplicateTags + "]. Number of tags in the de-duplicated serviceTags > :[" + serviceTags.getTags().size() + "]."); > } processServiceTags(serviceTags); > }{code} > Here if serviceTags.getIsTagsDeduped() is true, we are deduping the tags > again. > And when this is being triggered, an infinite for loop is triggered > inserviceTags serviceTags.dedupTags() method > Below is the code which goes in infinite loop > {code:java} > for (Long replacerTagId = replacedIds.get(tagId); replacerTagId != null; > replacerTagId = replacedIds.get(tagId)) { > tagId = replacerTagId; > } {code} > {10, 1} was already available in cachedTags. > Here replacedIds has \{10=10} > tagId is 10 > and for this as data, the the for loop goes into infinite. > {*}Note{*}: This behaviour is seen in the below case: > 1. We initialise the plugin with the above available tag data and > Rangerbaseplugin constructor. This works fine > 2. Now we are trying to initialise a new Rangerbaseplugin with the same tags > and this is when the plugin is not initialised and the for loop goes into an > infinite state. > Suggestion: > {code:java} > if (!serviceTags.getIsDelta()) { > if (serviceTags.getIsTagsDeduped()) { final int countOfDuplicateTags = > serviceTags.dedupTags(); LOG.info("Number of duplicate tags removed from the > received serviceTags:[" + countOfDuplicateTags + "]. Number of tags in the > de-duplicated serviceTags :[" + serviceTags.getTags().size() + "]."); } > processServiceTags(serviceTags); } {code} > Should the above piece of code in RangerTagEnricher be modified to > {code:java} > if (!serviceTags.getIsDelta()) { > processServiceTags(serviceTags); > } {code} > Since tags are already deduped in ranger admin, I feel there is no need to > dedup it in the plugin end. > -- This message was sent by Atlassian Jira (v8.20.10#820010)