private void getSlicesForCollections( ClusterState clusterState, Collection<Slice> slices, boolean activeSlices) { if (activeSlices) { for (Map.Entry<String, DocCollection> entry : clusterState.getCollectionsMap().entrySet()) { final Collection<Slice> activeCollectionSlices = entry.getValue().getActiveSlices(); if (activeCollectionSlices != null) { slices.addAll(activeCollectionSlices); } } } else { for (Map.Entry<String, DocCollection> entry : clusterState.getCollectionsMap().entrySet()) { final Collection<Slice> collectionSlices = entry.getValue().getSlices(); if (collectionSlices != null) { slices.addAll(collectionSlices); } } } }
@Test public void testStoreAndRead() throws Exception { Map<String, DocCollection> collectionStates = new HashMap<>(); Set<String> liveNodes = new HashSet<>(); liveNodes.add("node1"); liveNodes.add("node2"); Map<String, Slice> slices = new HashMap<>(); Map<String, Replica> sliceToProps = new HashMap<>(); Map<String, Object> props = new HashMap<>(); props.put("prop1", "value"); props.put("prop2", "value2"); Replica replica = new Replica("node1", props); sliceToProps.put("node1", replica); Slice slice = new Slice("shard1", sliceToProps, null); slices.put("shard1", slice); Slice slice2 = new Slice("shard2", sliceToProps, null); slices.put("shard2", slice2); collectionStates.put( "collection1", new DocCollection("collection1", slices, null, DocRouter.DEFAULT)); collectionStates.put( "collection2", new DocCollection("collection2", slices, null, DocRouter.DEFAULT)); ZkStateReader zkStateReaderMock = getMockZkStateReader(collectionStates.keySet()); ClusterState clusterState = new ClusterState(-1, liveNodes, collectionStates); byte[] bytes = Utils.toJSON(clusterState); // System.out.println("#################### " + new String(bytes)); ClusterState loadedClusterState = ClusterState.load(-1, bytes, liveNodes); assertEquals( "Provided liveNodes not used properly", 2, loadedClusterState.getLiveNodes().size()); assertEquals("No collections found", 2, loadedClusterState.getCollectionsMap().size()); assertEquals( "Properties not copied properly", replica.getStr("prop1"), loadedClusterState .getSlice("collection1", "shard1") .getReplicasMap() .get("node1") .getStr("prop1")); assertEquals( "Properties not copied properly", replica.getStr("prop2"), loadedClusterState .getSlice("collection1", "shard1") .getReplicasMap() .get("node1") .getStr("prop2")); loadedClusterState = ClusterState.load(-1, new byte[0], liveNodes); assertEquals( "Provided liveNodes not used properly", 2, loadedClusterState.getLiveNodes().size()); assertEquals("Should not have collections", 0, loadedClusterState.getCollectionsMap().size()); loadedClusterState = ClusterState.load(-1, (byte[]) null, liveNodes); assertEquals( "Provided liveNodes not used properly", 2, loadedClusterState.getLiveNodes().size()); assertEquals("Should not have collections", 0, loadedClusterState.getCollectionsMap().size()); }