private String getUniqueBoltId(WorkSlot slot) { return String.format(UNIQUE_BOLT_ID, slot.getTopologyName(), slot.getBoltId()); }
/** * in correlation cases, multiple streams will go to the same queue for correlation policy. * * @param spec */ private void sanityCheck(RouterSpec spec) { Set<String> totalRequestedSlots = new HashSet<>(); for (StreamRouterSpec s : spec.getRouterSpecs()) { for (PolicyWorkerQueue q : s.getTargetQueue()) { List<String> workers = new ArrayList<>(); q.getWorkers().forEach(w -> workers.add(w.getBoltId())); totalRequestedSlots.addAll(workers); } } if (totalRequestedSlots.size() > getOutputStreamIds().size()) { String error = String.format("Requested slots are not consistent with provided slots, %s, %s", totalRequestedSlots, getOutputStreamIds()); LOG.error(error); throw new IllegalStateException(error); } }
private void placePolicyToQueue(PolicyDefinition def, StreamWorkSlotQueue queue, Map<String, PolicyAssignment> newAssignments) { for (WorkSlot slot : queue.getWorkingSlots()) { Topology targetTopology = context.getTopologies().get(slot.getTopologyName()); TopologyUsage usage = context.getTopologyUsages().get(slot.getTopologyName()); AlertBoltUsage alertBoltUsage = usage.getAlertBoltUsage(slot.getBoltId()); placePolicy(def, alertBoltUsage, targetTopology, usage); } // queue.placePolicy(def); PolicyAssignment assignment = new PolicyAssignment(def.getName(), queue.getQueueId()); context.getPolicyAssignments().put(def.getName(), assignment); newAssignments.put(def.getName(), assignment); }
private void assignQueueSlots(MonitoredStream stream, StreamWorkSlotQueue queue) { for (WorkSlot slot : queue.getWorkingSlots()) { TopologyUsage u = context.getTopologyUsages().get(slot.getTopologyName()); AlertBoltUsage boltUsage = u.getAlertBoltUsage(slot.getBoltId()); boltUsage.addQueue(stream.getStreamGroup(), queue); u.addMonitoredStream(stream); } }
private boolean isQueueAvailable(StreamWorkSlotQueue queue, PolicyDefinition def) { if (queue.getQueueSize() < def.getParallelismHint()) { return false; } for (WorkSlot slot : queue.getWorkingSlots()) { TopologyUsage u = context.getTopologyUsages().get(slot.getTopologyName()); AlertBoltUsage usage = u.getAlertBoltUsage(slot.getBoltId()); if (!isBoltAvailable(usage, def)) { return false; } } return true; }
group1Slots.add(slot.getBoltId()); }); 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())); }); 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.assertEquals(0, topologyUsage.getAlertBoltUsage(slot.getBoltId()).getReferQueues().size());
group1Slots.add(slot.getBoltId()); }); 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())); });
for (WorkSlot slot : queues.get(0).getWorkers()) { Assert.assertEquals(topo1, slot.getTopologyName()); LOG.info(slot.getBoltId());
for (WorkSlot slot : queues.get(0).getWorkers()) { Assert.assertEquals(topo1, slot.getTopologyName()); LOG.info(slot.getBoltId());
bolt1 = queue.getWorkingSlots().get(0).getBoltId(); Assert.assertEquals(1, context.getTopologies().size()); Assert.assertEquals(1, context.getTopologyUsages().size()); String bolt2 = queue.getWorkingSlots().get(0).getBoltId(); for (WorkSlot ws : queue.getWorkingSlots()) { Assert.assertEquals(topo2, ws.getTopologyName());
@Test public void testWorkSlot() { WorkSlot workSlot = new WorkSlot(); Assert.assertEquals("(null:null)", workSlot.toString()); Assert.assertEquals(null, workSlot.getBoltId()); Assert.assertEquals(null, workSlot.getTopologyName()); workSlot.setBoltId("setBoltId"); workSlot.setTopologyName("setTopologyName"); Assert.assertEquals("(setTopologyName:setBoltId)", workSlot.toString()); Assert.assertEquals("setBoltId", workSlot.getBoltId()); Assert.assertEquals("setTopologyName", workSlot.getTopologyName()); WorkSlot workSlot1 = new WorkSlot("setTopologyName", "setBoltId"); Assert.assertEquals("(setTopologyName:setBoltId)", workSlot1.toString()); Assert.assertEquals("setBoltId", workSlot1.getBoltId()); Assert.assertEquals("setTopologyName", workSlot1.getTopologyName()); Assert.assertTrue(workSlot1.equals(workSlot)); Assert.assertTrue(workSlot1.hashCode() == workSlot.hashCode()); } }