[ 
https://issues.apache.org/jira/browse/SOLR-12309?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16481368#comment-16481368
 ] 

Shawn Heisey commented on SOLR-12309:
-------------------------------------

I went looking for a way to have a completely fluent builder fail at compile 
time if it is not used correctly.  I actually found a way to do it.  The code 
is more complicated than exception-based failure, but I found it pretty easy to 
grasp after a few minutes.  SolrClient implementations thankfully only have one 
required parameter, which makes the implementation easier.

I've got a VERY incomplete patch that I've been working on.  Will attach it.  
Needs a lot of work and testing.  Here's an example of how it would be used:

{code:java}
List<String> zkHosts = new ArrayList<>();
// populate the zkHosts list
CloudSolrClient client1 = CloudSolrClient.zkBuilder().zkHosts(zkHosts).build();
CloudSolrClient client2 = 
CloudSolrClient.zkBuilder().zkHosts(zkHosts).zkChroot("/solr").build();
List<String> urls = new ArrayList<>();
// populate the urls list
CloudSolrClient client3 = CloudSolrClient.urlBuilder().solrUrls(urls).build();
{code}

If the mandatory method (zkHosts or solrUrls) is omitted, an IDE will flag it 
as a compile error.  At the moment I don't have comments in the new code to 
explain its operation, but if I do this for real, it will be liberally 
documented with comments and I will make sure it all gets tested.


> CloudSolrClient.Builder constructors are not well documented
> ------------------------------------------------------------
>
>                 Key: SOLR-12309
>                 URL: https://issues.apache.org/jira/browse/SOLR-12309
>             Project: Solr
>          Issue Type: Bug
>      Security Level: Public(Default Security Level. Issues are Public) 
>          Components: clients - java
>    Affects Versions: 7.3
>            Reporter: Shawn Heisey
>            Assignee: Jason Gerlowski
>            Priority: Minor
>         Attachments: fluent-builder-fail-compile-time.patch
>
>
> I was having a lot of trouble figuring out how to create a CloudSolrClient 
> object without using deprecated code.
> The no-arg constructor on the Builder object is deprecated, and the two 
> remaining methods have similar signatures to each other.  It is not at all 
> obvious how to successfully call the one that uses ZooKeeper to connect.  The 
> javadoc is silent on the issue.  I did finally figure it out with a lot of 
> googling, and I would like to save others the hassle.
> I believe that this is what the javadoc for the third ctor should say:
> ----
> Provide a series of ZooKeeper hosts which will be used when configuring 
> CloudSolrClient instances.  Optionally, include a chroot to be used when 
> accessing the ZooKeeper database.
> Here are a couple of examples.  The first one has no chroot, the second one 
> does:
> new CloudSolrClient.Builder(zkHosts, Optional.empty())
> new CloudSolrClient.Builder(zkHosts, Optional.of("/solr"))
> ----
> The javadoc for the URL-based method should probably say something to 
> indicate that it is easy to confuse with the ZK-based method.
> I have not yet looked at the current reference guide to see if that has any 
> clarification.
> Is it a good idea to completely eliminate the ability to create a cloud 
> client using a single string that matches the zkHost value used when starting 
> Solr in cloud mode?



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

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

Reply via email to