Naoki Takezoe created RANGER-5476:
-------------------------------------

             Summary: 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


`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()`.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to