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