while (it.hasNext()) { Topology t = it.next(); if (getQueueOnTopology(size, slots, t)) { break; boolean placed = getQueueOnTopology(size, slots, topoMeta.topology); if (!placed) { LOG.error("can not find available slots from new created topology, required size {}. This indicates an error !", size);
private boolean getQueueOnTopology(int size, List<WorkSlot> slots, Topology t) { TopologyUsage u = context.getTopologyUsages().get(t.getName()); if (!isTopologyAvailable(u)) { return false; } List<String> bolts = new ArrayList<String>(); for (AlertBoltUsage alertUsage : u.getAlertUsages().values()) { if (isBoltAvailable(alertUsage)) { bolts.add(alertUsage.getBoltId()); } if (bolts.size() == size) { break; } } if (bolts.size() == size) { for (String boltId : bolts) { WorkSlot slot = new WorkSlot(t.getName(), boltId); slots.add(slot); } return true; } return false; }
SameTopologySlotStrategy strategy = new SameTopologySlotStrategy(context, group, mgmtService); List<WorkSlot> slots = strategy.reserveWorkSlots(5, false, new HashMap<String, Object>()); Assert.assertEquals(0, slots.size()); Assert.assertEquals(1, context.getTopologies().size()); SameTopologySlotStrategy strategy = new SameTopologySlotStrategy(context, group, mgmtService); List<WorkSlot> slots = strategy.reserveWorkSlots(5, false, new HashMap<String, Object>()); Assert.assertEquals(5, slots.size()); LOG.info(slots.get(0).getTopologyName());
public StreamWorkSlotQueue createQueue(MonitoredStream stream, boolean isDedicated, int size, Map<String, Object> properties) { // FIXME: make extensible and configurable IWorkSlotStrategy strategy = new SameTopologySlotStrategy(context, stream.getStreamGroup(), mgmtService); List<WorkSlot> slots = strategy.reserveWorkSlots(size, isDedicated, properties); if (slots.size() < size) { LOG.error("allocate stream work queue failed, required size"); return null; } StreamWorkSlotQueue queue = new StreamWorkSlotQueue(stream.getStreamGroup(), isDedicated, properties, slots); calculateGroupIndexAndCount(queue); assignQueueSlots(stream, queue);// build reverse reference stream.addQueues(queue); return queue; }