u.getMonitoredStream().addAll(topo2MonitorStream.get(u.getTopoName()));
private Map<String, RouterSpec> generateGroupbyMonitorMetadata() { Map<String, RouterSpec> groupSpecsMap = new HashMap<String, RouterSpec>(); for (TopologyUsage u : context.getTopologyUsages().values()) { RouterSpec spec = groupSpecsMap.get(u.getTopoName()); if (spec == null) { spec = new RouterSpec(u.getTopoName()); groupSpecsMap.put(u.getTopoName(), spec); } for (MonitoredStream ms : u.getMonitoredStream()) { // mutiple stream on the same policy group : for correlation group case: for (StreamPartition partiton : ms.getStreamGroup().getStreamPartitions()) { StreamRouterSpec routeSpec = new StreamRouterSpec(); routeSpec.setPartition(partiton); routeSpec.setStreamId(partiton.getStreamId()); for (StreamWorkSlotQueue sq : ms.getQueues()) { if (sq.getTopoGroupStartIndex().containsKey(u.getTopoName())) { PolicyWorkerQueue queue = new PolicyWorkerQueue(); queue.setWorkers(sq.getWorkingSlots()); queue.setPartition(partiton); routeSpec.addQueue(queue); } } spec.addRouterSpec(routeSpec); } } } return groupSpecsMap; }
Assert.assertTrue(getMonitorStream(usage.getMonitoredStream()).containsKey(group1)); Assert.assertEquals(1, getMonitorStream(usage.getMonitoredStream()).get(group1).getQueues().size()); Assert.assertEquals(2, getMonitorStream(usage.getMonitoredStream()).get(group1).getQueues().get(0).getWorkingSlots().size()); getMonitorStream(usage.getMonitoredStream()).get(group1).getQueues().get(0).getWorkingSlots().forEach(slot -> { group1Slots.add(slot.getBoltId()); }); print(context.getTopologyUsages().values()); Assert.assertTrue(getMonitorStream(usage.getMonitoredStream()).containsKey(group2)); Assert.assertEquals(1, getMonitorStream(usage.getMonitoredStream()).get(group2).getQueues().size()); Assert.assertEquals(2, getMonitorStream(usage.getMonitoredStream()).get(group2).getQueues().get(0).getWorkingSlots().size()); getMonitorStream(usage.getMonitoredStream()).get(group2).getQueues().get(0).getWorkingSlots().forEach(slot -> { Assert.assertTrue(!group1Slots.contains(slot.getBoltId())); }); print(context.getTopologyUsages().values()); Assert.assertTrue(getMonitorStream(usage.getMonitoredStream()).containsKey(group3)); Assert.assertEquals(1, getMonitorStream(usage.getMonitoredStream()).get(group3).getQueues().size()); Assert.assertEquals(2, getMonitorStream(usage.getMonitoredStream()).get(group3).getQueues().get(0).getWorkingSlots().size()); getMonitorStream(usage.getMonitoredStream()).get(group3).getQueues().get(0).getWorkingSlots().forEach(slot -> { Assert.assertTrue(!group1Slots.contains(slot.getBoltId())); }); Assert.assertTrue(!getMonitorStream(usage.getMonitoredStream()).containsKey(group4));
@Test public void test() { InMemMetadataServiceClient client = getSampleMetadataService(); ScheduleContextBuilder builder = new ScheduleContextBuilder(config, client); IScheduleContext context = builder.buildContext(); // assert topology usage Map<String, TopologyUsage> usages = context.getTopologyUsages(); Assert.assertEquals(1, usages.get(TOPO1).getMonitoredStream().size()); Assert.assertTrue(usages.get(TOPO1).getPolicies().contains(TEST_POLICY_1)); String alertBolt0 = TOPO1 + "-alert-" + "0"; String alertBolt1 = TOPO1 + "-alert-" + "1"; String alertBolt2 = TOPO1 + "-alert-" + "2"; for (AlertBoltUsage u : usages.get(TOPO1).getAlertUsages().values()) { if (u.getBoltId().equals(alertBolt0) || u.getBoltId().equals(alertBolt1) || u.getBoltId().equals(alertBolt2)) { Assert.assertEquals(1, u.getPolicies().size()); Assert.assertTrue(u.getPolicies().contains(TEST_POLICY_1)); Assert.assertEquals(1, u.getPartitions().size()); Assert.assertEquals(1, u.getReferQueues().size()); } } }
Assert.assertTrue(getMonitorStream(usage.getMonitoredStream()).containsKey(group1)); Assert.assertEquals(1, getMonitorStream(usage.getMonitoredStream()).get(group1).getQueues().size()); Assert.assertEquals(2, getMonitorStream(usage.getMonitoredStream()).get(group1).getQueues().get(0).getWorkingSlots().size()); getMonitorStream(usage.getMonitoredStream()).get(group1).getQueues().get(0).getWorkingSlots().forEach(slot -> { group1Slots.add(slot.getBoltId()); }); print(context.getTopologyUsages().values()); Assert.assertTrue(getMonitorStream(usage.getMonitoredStream()).containsKey(group2)); Assert.assertEquals(1, getMonitorStream(usage.getMonitoredStream()).get(group2).getQueues().size()); Assert.assertEquals(2, getMonitorStream(usage.getMonitoredStream()).get(group2).getQueues().get(0).getWorkingSlots().size()); getMonitorStream(usage.getMonitoredStream()).get(group2).getQueues().get(0).getWorkingSlots().forEach(slot -> { Assert.assertTrue(!group1Slots.contains(slot.getBoltId())); }); print(context.getTopologyUsages().values()); Assert.assertTrue(!getMonitorStream(usage.getMonitoredStream()).containsKey(group3)); Assert.assertTrue(!getMonitorStream(usage.getMonitoredStream()).containsKey(group4));
Assert.assertEquals(0, topoPolicies.size()); Assert.assertEquals(0, topologyUsage.getMonitoredStream().size());