David Smiley created SOLR-18236:
-----------------------------------

             Summary: SolrJ exception hiearchy needs work
                 Key: SOLR-18236
                 URL: https://issues.apache.org/jira/browse/SOLR-18236
             Project: Solr
          Issue Type: Improvement
          Components: SolrJ
            Reporter: David Smiley


+SolrClient.request()+ declares +throws SolrServerException, IOException+ with 
javadoc claiming:
 * *IOException* — "communication error with the server"
 * *SolrServerException* — "error on the server"

Reality is the inverse on both axes:
||Scenario||Actual exception||Checked?||
|Server returns non-2xx|RemoteSolrException (extends SolrException → 
RuntimeException)|*unchecked*|
|Response body read fails (true I/O error)|RemoteSolrException|*unchecked*|
|Server timeout / connection refused|SolrServerException (wraps the 
IOException)|checked|
|No live servers / retries exhausted|SolrServerException|checked|
|Raw IOException propagated as-is|almost never|—|
h3. Contradictions
 # "Error on the server" (4xx/5xx reply) surfaces as *unchecked* 
RemoteSolrException — the javadoc says it should be SolrServerException. 
Compiler cannot help callers handle the most common failure mode.
 # "Communication error" rarely surfaces as IOException. Every concrete 
SolrClient wraps IOException (ConnectException, socket timeout, etc.) into 
SolrServerException. The +throws IOException+ clause is essentially dead.
 # HttpSolrClientBase.processErrorsAndResponse catches a real I/O error reading 
the response body and re-throws it as RemoteSolrException — calling a transport 
failure a "remote error."
 # 52 call sites just do +catch (SolrServerException | IOException e)+ and 
treat them identically — the split has no observable value at most call sites.
 # Yet 45 sites specifically catch RemoteSolrException to inspect +e.code()+ — 
the HTTP-status-bearing exception is the genuinely useful concept, and it is 
the one the type system hides.



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