You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ranger.apache.org by "Naoki Takezoe (Jira)" <ji...@apache.org> on 2026/01/31 00:22:00 UTC
[jira] [Updated] (RANGER-5476) PolicyRefresher.stopRefresher() can deadlock when retrying HTTP request
[ https://issues.apache.org/jira/browse/RANGER-5476?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Naoki Takezoe updated RANGER-5476:
----------------------------------
Description:
PolicyRefresher.stopRefresher() can deadlock when it's called while RangerRESTClient is retying server error, because it interrupts itself and wait for the completion of the thread:
https://github.com/apache/ranger/blob/fe379d0a40aa4ae93c978a2c4d3a77fc9df2fbbb/agents-common/src/main/java/org/apache/ranger/plugin/util/PolicyRefresher.java#L167-L175
But this interruption is caught and ignored in RangerRESTClient when it's retrying server error, so PolicyRefresher will never get control back.
https://github.com/apache/ranger/blob/fe379d0a40aa4ae93c978a2c4d3a77fc9df2fbbb/agents-common/src/main/java/org/apache/ranger/plugin/util/RangerRESTClient.java#L665-L669
It looks like RangerRESTClient shouldn't ignore InterruptedException but I wonder if it affect the existing use case. Rather, it might be better to provide a way to stop RangerAdminClient safely and call it from PolicyRefresher.stopRefresher().
was:
`PolicyRefresher.stopRefresher()` can deadlock when it's called while `RangerRESTClient` is retying server error, because it interrupts itself and wait for the completion of the thread:
https://github.com/apache/ranger/blob/fe379d0a40aa4ae93c978a2c4d3a77fc9df2fbbb/agents-common/src/main/java/org/apache/ranger/plugin/util/PolicyRefresher.java#L167-L175
But this interruption is caught and ignored in `RangerRESTClient` when it's retrying server error, so `PolicyRefresher` will never get control back.
https://github.com/apache/ranger/blob/fe379d0a40aa4ae93c978a2c4d3a77fc9df2fbbb/agents-common/src/main/java/org/apache/ranger/plugin/util/RangerRESTClient.java#L665-L669
It looks like `RangerRESTClient` shouldn't ignore `RangerRESTClient` but I wonder if it affect the existing use case. Rather, it might be better to provide a way to stop `RangerAdminClient` safely and call it from `PolicyRefresher.stopRefresher()`.
> PolicyRefresher.stopRefresher() can deadlock when retrying HTTP request
> -----------------------------------------------------------------------
>
> Key: RANGER-5476
> URL: https://issues.apache.org/jira/browse/RANGER-5476
> Project: Ranger
> Issue Type: Bug
> Components: Ranger
> Affects Versions: 2.7.0
> Reporter: Naoki Takezoe
> Priority: Major
>
> PolicyRefresher.stopRefresher() can deadlock when it's called while RangerRESTClient is retying server error, because it interrupts itself and wait for the completion of the thread:
> https://github.com/apache/ranger/blob/fe379d0a40aa4ae93c978a2c4d3a77fc9df2fbbb/agents-common/src/main/java/org/apache/ranger/plugin/util/PolicyRefresher.java#L167-L175
> But this interruption is caught and ignored in RangerRESTClient when it's retrying server error, so PolicyRefresher will never get control back.
> https://github.com/apache/ranger/blob/fe379d0a40aa4ae93c978a2c4d3a77fc9df2fbbb/agents-common/src/main/java/org/apache/ranger/plugin/util/RangerRESTClient.java#L665-L669
> It looks like RangerRESTClient shouldn't ignore InterruptedException but I wonder if it affect the existing use case. Rather, it might be better to provide a way to stop RangerAdminClient safely and call it from PolicyRefresher.stopRefresher().
--
This message was sent by Atlassian Jira
(v8.20.10#820010)