[
https://issues.apache.org/jira/browse/RANGER-5148?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17927820#comment-17927820
]
gooch commented on RANGER-5148:
-------------------------------
https://reviews.apache.org/r/75363/
> Redundant Role Cache Modification Triggers Caused by Role Version Changes in
> Scenarios with a Large Number of Plugin Clients
> ----------------------------------------------------------------------------------------------------------------------------
>
> Key: RANGER-5148
> URL: https://issues.apache.org/jira/browse/RANGER-5148
> Project: Ranger
> Issue Type: Improvement
> Components: admin
> Affects Versions: 3.0.0
> Reporter: gooch
> Priority: Critical
> Time Spent: 10m
> Remaining Estimate: 0h
>
> This issue will occur when the number of Ranger plugin clients is
> sufficiently large. When the server performs an update operation on roles,
> which in turn causes the role version numbers in the database to be updated,
> multiple clients will concurrently obtain the latest information of all
> roles. During this process, the update of the cached roles in the Ranger
> Admin Server is triggered multiple times. In a concurrent scenario, this
> operation will generate a large number of unnecessary table-scanning updates.
> The relevant code is located at
> {code:java}
> org.apache.ranger.common.RangerRoleCache.RangerRoleCacheWrapper#getLatestRangerRoles.
> {code}
>
> The problem lies in the fact that after lock.tryLock, the thread that
> acquires the lock will definitely call the roleDBStore.getRoles method once.
> In a concurrent scenario, the previous threads have already triggered the
> update.
>
> Specifically, I only made one modification to the role, and the role version
> number increased by one. At this time, one thread holds the lock and is
> performing a table-scanning update, while there are 10 new threads waiting to
> compete for the lock. Subsequently, after each of these 10 threads acquires
> the lock, they will update the cache again.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)