[ 
https://issues.apache.org/jira/browse/SOLR-6550?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Timothy Potter updated SOLR-6550:
---------------------------------
    Attachment: SOLR-6550.patch

Patch for the approach I described above.

> Provide simple mechanism for passing additional metadata / context about a 
> server-side SolrException back to the client-side
> ----------------------------------------------------------------------------------------------------------------------------
>
>                 Key: SOLR-6550
>                 URL: https://issues.apache.org/jira/browse/SOLR-6550
>             Project: Solr
>          Issue Type: Improvement
>          Components: SolrJ
>            Reporter: Timothy Potter
>            Assignee: Timothy Potter
>         Attachments: SOLR-6550.patch
>
>
> While trying to resolve SOLR-6511, it became apparent that I didn't have a 
> good way to convey more information about a particular error occurring on the 
> server-side using SolrException. The specific situation I encountered is a 
> replica took over as leader, but the previous leader wasn't aware of that yet 
> (due to a Zk session expiration). So when the previous leader (the one that 
> experienced the Zk session expiration) sent an update request with 
> FROMLEADER, the new leader rejected the request with a SolrException. 
> Ideally, we want the new leader to be able to say "you're not the leader 
> anymore" and for the previous leader to fail the request in a specific way; 
> see SOLR-6511 for more background on this scenario.
> My first inclination was to just extend SolrException and throw a 
> LeaderChangedException and have the client behave accordingly but then I 
> discovered that CUSS just takes the status code and error message and 
> reconstructs a new SolrException (on the client side). HttpSolrServer does 
> the same thing when creating a RemoteSolrException. So the fact that the 
> server-side throw a LeaderChangeException is basically lost in translation.
> I'm open to other suggestions but here's my approach so far:
> Add a {{NamedList<String> metadata}} field to the SolrException class.
> If a server-side component wants to add additional context / metadata, then 
> it will call: {{solrExc.setMetadata("name", "value);}}
> When the response is being marshaled into the wire format, ResponseUtils will 
> include the metadata if available. On the client side, when the response is 
> processed, the metadata gets included into the new SolrException (in CUSS) or 
> RemoteSolrException (HttpSolrServer). It's up to the client to dig into the 
> metadata to take additional steps as I'll be doing in 
> DistributedUpdateProcessor.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

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

Reply via email to