private void getShardLeaders() { Set<Entry<String, Map<String, Slice>>> collections = collectionStates.entrySet(); for (Entry<String, Map<String, Slice>> collection : collections) { Map<String, Slice> state = collection.getValue(); Set<Entry<String, Slice>> slices = state.entrySet(); for (Entry<String, Slice> sliceEntry : slices) { Slice slice = sliceEntry.getValue(); Map<String, ZkNodeProps> shards = slice.getShards(); Set<Entry<String, ZkNodeProps>> shardsEntries = shards.entrySet(); for (Entry<String, ZkNodeProps> shardEntry : shardsEntries) { ZkNodeProps props = shardEntry.getValue(); if (props.containsKey(ZkStateReader.LEADER_PROP)) { Map<String, ZkNodeProps> leadersForCollection = leaders.get(collection.getKey()); if (leadersForCollection == null) { leadersForCollection = new HashMap<String, ZkNodeProps>(); leaders.put(collection.getKey(), leadersForCollection); } leadersForCollection.put(sliceEntry.getKey(), props); } } } } }
@Test public void testReadShards() throws Exception { String zkDir = dataDir.getAbsolutePath() + File.separator + "zookeeper/server1/data"; ZkTestServer server = null; SolrZkClient zkClient = null; ZkController zkController = null; try { server = new ZkTestServer(zkDir); server.run(); AbstractZkTestCase.makeSolrZkNode(server.getZkHost()); zkClient = new SolrZkClient(server.getZkAddress(), TIMEOUT); String shardsPath = "/collections/collection1/shards/shardid1"; zkClient.makePath(shardsPath); addShardToZk(zkClient, shardsPath, SHARD1, URL1); addShardToZk(zkClient, shardsPath, SHARD2, URL2); addShardToZk(zkClient, shardsPath, SHARD3, URL3); if (DEBUG) { zkClient.printLayoutToStdOut(); } zkController = new ZkController(server.getZkAddress(), TIMEOUT, 1000, "localhost", "8983", "solr"); zkController.getZkStateReader().updateCloudState(true); CloudState cloudInfo = zkController.getCloudState(); Map<String, Slice> slices = cloudInfo.getSlices("collection1"); assertNotNull(slices); for (Slice slice : slices.values()) { Map<String, ZkNodeProps> shards = slice.getShards(); if (DEBUG) { for (String shardName : shards.keySet()) { ZkNodeProps props = shards.get(shardName); System.out.println("shard:" + shardName); System.out.println("props:" + props.toString()); } } assertNotNull(shards.get(SHARD1)); assertNotNull(shards.get(SHARD2)); assertNotNull(shards.get(SHARD3)); ZkNodeProps props = shards.get(SHARD1); assertEquals(URL1, props.get(ZkStateReader.URL_PROP)); assertEquals(TEST_NODE_NAME, props.get(ZkStateReader.NODE_NAME)); props = shards.get(SHARD2); assertEquals(URL2, props.get(ZkStateReader.URL_PROP)); assertEquals(TEST_NODE_NAME, props.get(ZkStateReader.NODE_NAME)); props = shards.get(SHARD3); assertEquals(URL3, props.get(ZkStateReader.URL_PROP)); assertEquals(TEST_NODE_NAME, props.get(ZkStateReader.NODE_NAME)); } } finally { if (zkClient != null) { zkClient.close(); } if (zkController != null) { zkController.close(); } if (server != null) { server.shutdown(); } } }