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

Alan Woodward updated SOLR-5555:
--------------------------------

    Attachment: SOLR-5555.patch

Updated patch with a better CHANGES entry and a couple of compilation fixes.  
Will commit in a bit.

> CloudSolrServer need not declare to throw MalformedURLException
> ---------------------------------------------------------------
>
>                 Key: SOLR-5555
>                 URL: https://issues.apache.org/jira/browse/SOLR-5555
>             Project: Solr
>          Issue Type: Improvement
>          Components: SolrCloud
>    Affects Versions: 4.6
>            Reporter: Sushil Bajracharya
>            Assignee: Alan Woodward
>         Attachments: SOLR-5555.patch, SOLR-5555.patch
>
>
> Currently CloudSolrServer declares to throw MalformedURLException for some of 
> its constructors. This does not seem necessary.
>  
> Details based on looking through Solr 4.6 release code:
>  
> CloudSolrServer has the following constructor that declares a checked 
> exception MalformedURLException..
> {code}
>  
>  public CloudSolrServer(String zkHost) throws MalformedURLException {
>  
>       this.zkHost = zkHost;
>  
>       this.myClient = HttpClientUtil.createClient(null);
>  
>       this.lbServer = new LBHttpSolrServer(myClient);
>  
>       this.lbServer.setRequestWriter(new BinaryRequestWriter());
>  
>       this.lbServer.setParser(new BinaryResponseParser());
>  
>       this.updatesToLeaders = true;
>  
>       shutdownLBHttpSolrServer = true;
>  
>   }
>  
> {code}
>  
> The only thing that seemed capable of throwing MalformedURLException seems to 
> be LBHttpSolrServer’s constructor:
>  
> {code}
>   public LBHttpSolrServer(HttpClient httpClient, String... solrServerUrl)
>           throws MalformedURLException {
>     this(httpClient, new BinaryResponseParser(), solrServerUrl);
>   }
> {code}
>  
> which calls ..
>  
> {code}
>   public LBHttpSolrServer(HttpClient httpClient, ResponseParser parser, 
> String... solrServerUrl)
>           throws MalformedURLException {
>     clientIsInternal = (httpClient == null);
>     this.parser = parser;
>     if (httpClient == null) {
>       ModifiableSolrParams params = new ModifiableSolrParams();
>       params.set(HttpClientUtil.PROP_USE_RETRY, false);
>       this.httpClient = HttpClientUtil.createClient(params);
>     } else {
>       this.httpClient = httpClient;
>     }
>     for (String s : solrServerUrl) {
>       ServerWrapper wrapper = new ServerWrapper(makeServer(s)); 
>       aliveServers.put(wrapper.getKey(), wrapper);
>     }
>     updateAliveList();
>   }
> {code}
>  
> which calls ..
>  
> {code}
> protected HttpSolrServer makeServer(String server) throws 
> MalformedURLException {
>     HttpSolrServer s = new HttpSolrServer(server, httpClient, parser);
>     if (requestWriter != null) {
>       s.setRequestWriter(requestWriter);
>     }
>     if (queryParams != null) {
>       s.setQueryParams(queryParams);
>     }
>     return s;
>   }
> {code}
>  
> Note that makeServer(String server) above does not need to throw 
> MalformedURLException.. sine the only thing that seems capable of throwing 
> MalformedURLException is HttpSolrServer’s constructor (which does not):
>  
> {code}
> public HttpSolrServer(String baseURL, HttpClient client, ResponseParser 
> parser) {
>     this.baseUrl = baseURL;
>     if (baseUrl.endsWith("/")) {
>       baseUrl = baseUrl.substring(0, baseUrl.length() - 1);
>     }
>     if (baseUrl.indexOf('?') >= 0) {
>       throw new RuntimeException(
>           "Invalid base url for solrj.  The base URL must not contain 
> parameters: "
>               + baseUrl);
>     }
>     
>     if (client != null) {
>       httpClient = client;
>       internalClient = false;
>     } else {
>       internalClient = true;
>       ModifiableSolrParams params = new ModifiableSolrParams();
>       params.set(HttpClientUtil.PROP_MAX_CONNECTIONS, 128);
>       params.set(HttpClientUtil.PROP_MAX_CONNECTIONS_PER_HOST, 32);
>       params.set(HttpClientUtil.PROP_FOLLOW_REDIRECTS, followRedirects);
>       httpClient =  HttpClientUtil.createClient(params);
>     }
>     
>     this.parser = parser;
>   }
> {code}
>  
> I see nothing above that’d throw MalformedURLException. It is throwing a 
> RuntimeException when the baseUrl does not match certain pattern, may be that 
> was intended to be a MalformedURLException.
>  
> It seems like an error or oversight that CloudSolrServer declares to throw 
> MalformedURLException for some of its constructors. 
> This could be fixed by making LBHttpSolrServer not declare the 
> MalformedURLException, and thus other callers to it do not need to do so.
>  
>  



--
This message was sent by Atlassian JIRA
(v6.1.4#6159)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: dev-h...@lucene.apache.org

Reply via email to