Boyi Dai created SOLR-18559:
-------------------------------

             Summary: Updates to a routed alias fail on a node whose cached 
aliases are stale
                 Key: SOLR-18559
                 URL: https://issues.apache.org/jira/browse/SOLR-18559
             Project: Solr
          Issue Type: Bug
          Components: SolrCloud
            Reporter: Boyi Dai


RoutedAliasUpdateProcessor.getAliasProps() reads the routed alias properties 
only from the node's cached aliases (ZkStateReader.getAliases()). If the cache 
doesn't have the alias yet, the update is rejected right away with "Routed 
alias <name> appears to have been removed during request processing", even 
though the alias exists in ZooKeeper.

A node's cached aliases can be stale when it misses a change to /aliases.json. 
For example, AliasesManager.process() catches ConnectionLossException while 
re-reading the node after a watch event, logs it, and doesn't re-register the 
watch. The cache then stays stale until something else refreshes it. This was 
found with fault-injection testing: a ZK connection loss injected while a node 
processed the aliases.json watch event made later updates to the routed alias 
fail on that node.

This is the same kind of problem as SOLR-12258 and SOLR-12256, which made the 
request dispatch path refresh aliases (with sync()) before reporting an unknown 
collection or alias. The routed alias update processor doesn't do that.

*Steps to reproduce:*
# Create a routed alias.
# Make one node's cached aliases miss the change (e.g. a ZK connection loss 
while it handles the aliases.json watch).
# Send an update for the alias's collection to that node.
# Result: the update fails with "Routed alias ... appears to have been removed 
during request processing".

*Expected:* before rejecting the update, refresh the aliases from ZooKeeper 
(AliasesManager.update(), which syncs first) and only fail if the alias is 
still missing.

*Proposed fix:* do that one refresh in getAliasProps(). I have a patch with a 
test and will open a PR.

The watch not being re-registered after a connection loss is a separate issue 
(the other watchers in ZkStateReader handle it the same way); this ticket only 
covers the update path.



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

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to