Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get the cluster state of Solr Cloud using the solrZkClient and zkStateReader?

I've downloaded and installed Solr (SolrCloud) v. 4.10.3 on my local system, and can run it without any problems, index documents, interact with its web UI. I can also use the following command line to interact with its ZooKeeper:

zkcli.sh -z localhost:9983 -cmd get /clusterstate.json

and it returns me the information about SolrCloud. Now I'm trying to get a similar set of information programmatically, using Java.

I've tried the following:

SolrZkClient solrZkClient = new SolrZkClient("localhost:9983", 4000);
ZkStateReader zkStateReader = new ZkStateReader(solrZkClient);
System.err.println(zkStateReader.getClusterState());
System.err.println(zkStateReader.getClusterState().getLiveNodes());

But unfortunately zkStateReader.getClusterState() returns null.

In the log output I see the following:

2015-04-23 15:19:04 INFO  ZooKeeper:100 - Client environment:zookeeper.version=3.4.5-1392090, built on 09/30/2012 17:52 GMT
2015-04-23 15:19:04 INFO  ZooKeeper:100 - Client environment:host.name=emre-ubuntu
2015-04-23 15:19:04 INFO  ZooKeeper:100 - Client environment:java.version=1.8.0_25
2015-04-23 15:19:04 INFO  ZooKeeper:100 - Client environment:java.vendor=Oracle Corporation
2015-04-23 15:19:04 INFO  ZooKeeper:100 - Client environment:java.home=/usr/lib/jvm/java-8-oracle/jre
...
2015-04-23 15:19:04 INFO  ZooKeeper:438 - Initiating client connection, connectString=localhost:9983 sessionTimeout=4000 watcher=org.apache.solr.common.cloud.ConnectionManager@3b22cdd0
2015-04-23 15:19:04 INFO  ConnectionManager:207 - Waiting for client to connect to ZooKeeper
2015-04-23 15:19:04 INFO  ClientCnxn:966 - Opening socket connection to server localhost/127.0.0.1:9983. Will not attempt to authenticate using SASL (unknown error)
2015-04-23 15:19:04 INFO  ClientCnxn:849 - Socket connection established to localhost/127.0.0.1:9983, initiating session
2015-04-23 15:19:04 INFO  ClientCnxn:1207 - Session establishment complete on server localhost/127.0.0.1:9983, sessionid = 0x14ce5f89eec000d, negotiated timeout = 4000
2015-04-23 15:19:04 INFO  ConnectionManager:102 - Watcher org.apache.solr.common.cloud.ConnectionManager@3b22cdd0 name:ZooKeeperConnection Watcher:localhost:9983 got event WatchedEvent state:SyncConnected type:None path:null path:null type:None
2015-04-23 15:19:04 INFO  ConnectionManager:225 - Client is connected to ZooKeeper
null

Am I missing something? How can I get that information using Java?

like image 256
Emre Sevinç Avatar asked Dec 20 '22 04:12

Emre Sevinç


1 Answers

I see that you are trying to get solrcloud cluster state using java., You could try something like this..

CloudSolrServer server = new CloudSolrServer("192.112.21.21:9983");
server.setZkConnectTimeout(15*60*1000); 
server.setZkClientTimeout(15*60*1000); 
server.setParser(new BinaryResponseParser()); 
server.setRequestWriter(new BinaryRequestWriter());
CollectionAdminRequest adminRequest = new CollectionAdminRequest(); 
adminRequest.setAction(CollectionAction.CLUSTERSTATUS); 
CollectionAdminResponse adminResponse = adminRequest.process(server); 
System.out.println(adminResponse.toString());

And the output will be something like this for a collection with 2shards.,

{
    responseHeader={
        status=0,
        QTime=1650
    },
    cluster={
        collections={
            collection1={
                shards={
                    shard1={
                        range=80000000-ffffffff,
                        state=active,
                        replicas={
                            core_node2={
                                state=active,
                                core=collection1_shard1_replica1,
                                node_name=192.112.21.21: 8983_solr,
                                base_url=http: //192.112.21.21: 8983/solr,
                                leader=true
                            }
                        }
                    },
                    shard2={
                        range=0-7fffffff,
                        state=active,
                        replicas={
                            core_node1={
                                state=active,
                                core=collection1_shard2_replica1,
                                node_name=192.112.21.21: 8984_solr,
                                base_url=http: //192.112.21.21: 8984/solr,
                                leader=true
                            }
                        }
                    }
                },
                maxShardsPerNode=1,
                router={
                    name=compositeId
                },
                replicationFactor=1,
                autoAddReplicas=false,
                autoCreated=true
            }
        },
        live_nodes=[
            192.112.21.21: 8983_solr,
            192.112.21.21: 8984_solr
        ]
    } }
like image 197
Vijay Avatar answered Jan 19 '23 00:01

Vijay