[ 
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 existing use cases. 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 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().


> 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 existing use cases. 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)

Reply via email to