You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-user@lucene.apache.org by THADC <ti...@gmail.com> on 2018/06/18 16:53:05 UTC

Connection Problem with CloudSolrClient.Builder().build When passing a Zookeeper Addresses and RootParam

Hello,

I am using solr 7.3 and zookeeper 3.4.10. I have custom client code that is
supposed to connect the a zookeeper cluster. For the sake of clarity, the
main code focus:


    private synchronized void initSolrClient()
	{		
		List<String> zookeeperList = new ArrayList<String>();

		zookeeperList.add("http://100.12.119.10:2281");
                zookeeperList.add("http://100.12.119.10:2282");
                zookeeperList.add("http://100.12.119.10:2283");
		
		String collectionName = "myCollection"
		
		log.debug("in initSolrClient(), collectionName: " + collectionName);
		
		try {
			solrClient = new CloudSolrClient.Builder(zookeeperList, null).build();

		} catch (Exception e) {
			log.info("Exception creating solr client object. ");
			e.printStackTrace();
		}
		solrClient.setDefaultCollection(collectionName);
	}

Before executing, I test that all three zoo nodes are running
(./bin/zkServer.sh status zoo.cfg, ./bin/zkServer.sh status zoo2.cfg,
./bin/zkServer.sh status zoo3.cfg). The status shows the quorum is
up and running, with one nodes as the leader and the other two as followers.

When I execute my java client to connect to the zookeeper cluster, I get :

java.lang.NullPointerException
        at
org.apache.solr.client.solrj.impl.CloudSolrClient$Builder.<init>(CloudSolrClient.java:1387)


I am assuming it has a problem with my null value for zkChroot, but not
certain. Th API says zkChroot is the path to the root ZooKeeper node
containing Solr data. May be empty if Solr-data is located at the ZooKeeper
root.

I am confused on what exactly should go here, and when it can be null. I
cannot find any coding examples.

Any help greatly appreciated.




--
Sent from: http://lucene.472066.n3.nabble.com/Solr-User-f472068.html

Re: Connection Problem with CloudSolrClient.Builder().build When passing a Zookeeper Addresses and RootParam

Posted by THADC <ti...@gmail.com>.
Thank you Andy,

The problem was as you suspected, the "http://" prefixes. The odd thing is
that I used to use the one param constructor with the solr node URL list
(like: CloudSolrClient.Builder(solrServerURLLList).build();). I could not
get that one to work without the "http://" prefix.

Anyway between removing the prefix and using  chrootOption = 
Optional.empty(), my problems are solved. 

You have literally made my day!

Tim



--
Sent from: http://lucene.472066.n3.nabble.com/Solr-User-f472068.html

Re: Connection Problem with CloudSolrClient.Builder().build When passing a Zookeeper Addresses and RootParam

Posted by Andy C <an...@gmail.com>.
From the error, I think the issue is with your zookeeperList definition.

Try changing:


                zookeeperList.add("http://100.12.119.10:2281");
                zookeeperList.add("http://100.12.119.10:2282");
                zookeeperList.add("http://100.12.119.10:2283");

to


                zookeeperList.add("100.12.119.10:2281");
                zookeeperList.add("100.12.119.10:2282");
                zookeeperList.add("100.12.119.10:2283");

If you are not using a chroot in Zookeeper then just use chrootOption =
Optional.empty(); (as you have done).

Intent of my code was to support both using a chroot and not using a
chroot. The value of _zkChroot is read from a config file in code not shown.

- Andy -

Re: Connection Problem with CloudSolrClient.Builder().build When passing a Zookeeper Addresses and RootParam

Posted by THADC <ti...@gmail.com>.
Thanks. So I tried what you had, however, you are not specifying _zkChroot,
so I don't know what to put there. I don't know what that value would be for
me, or if I even need it. So I commented out most you example to:

Optional<String> chrootOption = null; 
      //  if (StringUtils.isNotBlank(_zkChroot)) 
      //  { 
      //     chrootOption = Optional.of(_zkChroot); 
     //   } 
    //    else 
    //    { 
           chrootOption = Optional.empty(); 

by the way which StringUtils API are you using? There are a couple that have
that isNotBlank.

In any event, I have now getting a different exception when trying to create
the client:

 ERROR [] - <Failed to index Incident 8>
java.lang.RuntimeException: Error committing document
     
(a bunch of stack details left out here..)

Caused by: org.apache.solr.common.SolrException:
java.lang.IllegalArgumentException: Invalid path string
"//172.16.120.14:2281,http://172.16.120.14:2282,http://172.16.120.14:2283"
caused by empty node name specified @1
        at
org.apache.solr.common.cloud.SolrZkClient.<init>(SolrZkClient.java:171)
        at
org.apache.solr.common.cloud.SolrZkClient.<init>(SolrZkClient.java:120)
        at
org.apache.solr.common.cloud.SolrZkClient.<init>(SolrZkClient.java:110)
        at
org.apache.solr.common.cloud.ZkStateReader.<init>(ZkStateReader.java:285)
        at
org.apache.solr.client.solrj.impl.ZkClientClusterStateProvider.connect(ZkClientClusterStateProvider.java:155)
        at
org.apache.solr.client.solrj.impl.CloudSolrClient.connect(CloudSolrClient.java:399)
        at
org.apache.solr.client.solrj.impl.CloudSolrClient.requestWithRetryOnStaleState(CloudSolrClient.java:828)
        at
org.apache.solr.client.solrj.impl.CloudSolrClient.request(CloudSolrClient.java:818)

So, perhaps I need the root specified (since it say "caused by empty node
name specifed @1")? If so, I don't know what it would be.

Thanks for any insights.




--
Sent from: http://lucene.472066.n3.nabble.com/Solr-User-f472068.html

Re: Connection Problem with CloudSolrClient.Builder().build When passing a Zookeeper Addresses and RootParam

Posted by Jason Gerlowski <ge...@gmail.com>.
Hi,

Yes, Andy has the right idea.  If no zk-chroot is being used,
"Optional.empty()" is the correct value to specify, not null.

This API is a bit trappy (or at least unintuitive), and we're in the
process of hashing out some doc improvements (and/or API changes).  If
you're curious or would otherwise like to weigh in, check out SOLR-12309.

Best,

Jason

On Mon, Jun 18, 2018 at 1:09 PM, Andy C <an...@gmail.com> wrote:

> I am using the following (Solr 7.3.1) successfully:
>
> import java.util.Optional;
>
>          Optional<String> chrootOption = null;
>          if (StringUtils.isNotBlank(_zkChroot))
>          {
>             chrootOption = Optional.of(_zkChroot);
>          }
>          else
>          {
>             chrootOption = Optional.empty();
>          }
>          CloudSolrClient client = new CloudSolrClient.Builder(_zkHostList,
> chrootOption).build();
>
> Adapted from code I found somewhere (unit test?). Intent is to support the
> option of configuring a chroot or not (stored in "_zkChroot")
>
> - Andy -
>
> On Mon, Jun 18, 2018 at 12:53 PM, THADC <timothy.clotworthy.junk@gmail.com
> >
> wrote:
>
> > Hello,
> >
> > I am using solr 7.3 and zookeeper 3.4.10. I have custom client code that
> is
> > supposed to connect the a zookeeper cluster. For the sake of clarity, the
> > main code focus:
> >
> >
> >     private synchronized void initSolrClient()
> >         {
> >                 List<String> zookeeperList = new ArrayList<String>();
> >
> >                 zookeeperList.add("http://100.12.119.10:2281");
> >                 zookeeperList.add("http://100.12.119.10:2282");
> >                 zookeeperList.add("http://100.12.119.10:2283");
> >
> >                 String collectionName = "myCollection"
> >
> >                 log.debug("in initSolrClient(), collectionName: " +
> > collectionName);
> >
> >                 try {
> >                         solrClient = new CloudSolrClient.Builder(
> zookeeperList,
> > null).build();
> >
> >                 } catch (Exception e) {
> >                         log.info("Exception creating solr client object.
> > ");
> >                         e.printStackTrace();
> >                 }
> >                 solrClient.setDefaultCollection(collectionName);
> >         }
> >
> > Before executing, I test that all three zoo nodes are running
> > (./bin/zkServer.sh status zoo.cfg, ./bin/zkServer.sh status zoo2.cfg,
> > ./bin/zkServer.sh status zoo3.cfg). The status shows the quorum is
> > up and running, with one nodes as the leader and the other two as
> > followers.
> >
> > When I execute my java client to connect to the zookeeper cluster, I get
> :
> >
> > java.lang.NullPointerException
> >         at
> > org.apache.solr.client.solrj.impl.CloudSolrClient$Builder.<
> > init>(CloudSolrClient.java:1387)
> >
> >
> > I am assuming it has a problem with my null value for zkChroot, but not
> > certain. Th API says zkChroot is the path to the root ZooKeeper node
> > containing Solr data. May be empty if Solr-data is located at the
> ZooKeeper
> > root.
> >
> > I am confused on what exactly should go here, and when it can be null. I
> > cannot find any coding examples.
> >
> > Any help greatly appreciated.
> >
> >
> >
> >
> > --
> > Sent from: http://lucene.472066.n3.nabble.com/Solr-User-f472068.html
> >
>

Re: Connection Problem with CloudSolrClient.Builder().build When passing a Zookeeper Addresses and RootParam

Posted by Andy C <an...@gmail.com>.
I am using the following (Solr 7.3.1) successfully:

import java.util.Optional;

         Optional<String> chrootOption = null;
         if (StringUtils.isNotBlank(_zkChroot))
         {
            chrootOption = Optional.of(_zkChroot);
         }
         else
         {
            chrootOption = Optional.empty();
         }
         CloudSolrClient client = new CloudSolrClient.Builder(_zkHostList,
chrootOption).build();

Adapted from code I found somewhere (unit test?). Intent is to support the
option of configuring a chroot or not (stored in "_zkChroot")

- Andy -

On Mon, Jun 18, 2018 at 12:53 PM, THADC <ti...@gmail.com>
wrote:

> Hello,
>
> I am using solr 7.3 and zookeeper 3.4.10. I have custom client code that is
> supposed to connect the a zookeeper cluster. For the sake of clarity, the
> main code focus:
>
>
>     private synchronized void initSolrClient()
>         {
>                 List<String> zookeeperList = new ArrayList<String>();
>
>                 zookeeperList.add("http://100.12.119.10:2281");
>                 zookeeperList.add("http://100.12.119.10:2282");
>                 zookeeperList.add("http://100.12.119.10:2283");
>
>                 String collectionName = "myCollection"
>
>                 log.debug("in initSolrClient(), collectionName: " +
> collectionName);
>
>                 try {
>                         solrClient = new CloudSolrClient.Builder(zookeeperList,
> null).build();
>
>                 } catch (Exception e) {
>                         log.info("Exception creating solr client object.
> ");
>                         e.printStackTrace();
>                 }
>                 solrClient.setDefaultCollection(collectionName);
>         }
>
> Before executing, I test that all three zoo nodes are running
> (./bin/zkServer.sh status zoo.cfg, ./bin/zkServer.sh status zoo2.cfg,
> ./bin/zkServer.sh status zoo3.cfg). The status shows the quorum is
> up and running, with one nodes as the leader and the other two as
> followers.
>
> When I execute my java client to connect to the zookeeper cluster, I get :
>
> java.lang.NullPointerException
>         at
> org.apache.solr.client.solrj.impl.CloudSolrClient$Builder.<
> init>(CloudSolrClient.java:1387)
>
>
> I am assuming it has a problem with my null value for zkChroot, but not
> certain. Th API says zkChroot is the path to the root ZooKeeper node
> containing Solr data. May be empty if Solr-data is located at the ZooKeeper
> root.
>
> I am confused on what exactly should go here, and when it can be null. I
> cannot find any coding examples.
>
> Any help greatly appreciated.
>
>
>
>
> --
> Sent from: http://lucene.472066.n3.nabble.com/Solr-User-f472068.html
>