Currently, some operations that throw IOException on the NameNode are evaluated by RetryPolicy as FAILOVER_AND_RETRY, but they should just fail fast.
For example, when calling getXAttr("user.some_attr", file") where the file does not have the attribute, NN throws an IOException with message "could not find attr". The current client retry policy determines the action for that to be FAILOVER_AND_RETRY. The client then fails over and retries until it reaches the maximum number of retries. Supposedly, the client should be able to tell that this exception is normal and fail fast.
Moreover, even if the action was FAIL, the RetryInvocationHandler looks at all the retry actions from all requests, and FAILOVER_AND_RETRY takes precedence over FAIL action.