@Override public ListenableFuture<String> add(String queueName, Element element) { return queueMap.getUnchecked(queueName).add(element); }
@Override public Iterator<QueuedElement> getQueued(String queueName) { return queueMap.getUnchecked(queueName).getQueued(); }
@Override public TrackingQueue.PossessionState recordProgress(String consumerId, String queueName, String elementId, TrackingQueue.ConsumingStatus status, String result) { return queueMap.getUnchecked(queueName).recordProgress(consumerId, elementId, status, result); }
@Override public void run() { while (true) { Element element = balanceQueue.take(id); if (element == null) { return; } try { tenantProvisionerService.rebalanceTenantWorkers(element.getValue()); balanceQueue.recordProgress(id, element.getId(), TrackingQueue.ConsumingStatus.FINISHED_SUCCESSFULLY, "balanced"); } catch (CapacityException e) { LOG.error("Not enough capacity trying to balance workers for tenant {}", element.getValue(), e); // a failed status puts the element back in the queue, we don't want to consume this element again. // when another provisioner comes online, workers will get rebalanced once again. balanceQueue.recordProgress(id, element.getId(), TrackingQueue.ConsumingStatus.FINISHED_SUCCESSFULLY, "not enough capacity"); } catch (IOException e) { LOG.error("Exception trying to balance workers for tenant {}", element.getValue(), e); balanceQueue.recordProgress(id, element.getId(), TrackingQueue.ConsumingStatus.FINISHED_SUCCESSFULLY, "failed"); } } } }
@Override public Element take(String queueName, String consumerId) { return queueMap.getUnchecked(queueName).take(consumerId); }
@Override public boolean removeAll(String queueName) { return queueMap.getUnchecked(queueName).removeAll(); }
@Override public int size(String queueName) { return queueMap.getUnchecked(queueName).size(); }
@Override public Iterator<QueuedElement> getBeingConsumed(String queueName) { return queueMap.getUnchecked(queueName).getBeingConsumed(); }
@Override public boolean remove(String queueName, String elementId) { return queueMap.getUnchecked(queueName).remove(elementId); }
@Override public boolean toHighestPriority(String elementId) { return getQueue().toHighestPriority(elementId); }
while (true) { cycle++; Element element = queue.take(consumerName); System.out.println("took: " + (element == null ? "null" : element.getId())); if (element == null) { queue.recordProgress(consumerName, element.getId(), TrackingQueue.ConsumingStatus.FAILED, null); System.out.println("failed consuming: " + element.getId()); continue; queue.recordProgress(consumerName, element.getId(), TrackingQueue.ConsumingStatus.FINISHED_SUCCESSFULLY, "result-" + element.getId()); System.out.println("posesses: " + state.name() + ", elem: " + element.getId());
private GroupElement getNextElement() { while (currentBatch.hasNext()) { Map.Entry<String, TrackingQueue> currentQueueEntry = currentBatch.next(); TrackingQueue queue = currentQueueEntry.getValue(); String queueName = currentQueueEntry.getKey(); Element element = queue.take(consumerId); if (element != null) { return new GroupElement(queueName, element); } } return null; }
@Override public boolean removeAll() { boolean allRemoved = true; for (TrackingQueue queue : queueMap.asMap().values()) { allRemoved = allRemoved && queue.removeAll(); } return allRemoved; }
@Override public int size() { return getQueue().size(); } }
@Override public Iterator<QueuedElement> getBeingConsumed() { return getQueue().getBeingConsumed(); }
@Override public boolean remove(String elementId) { return getQueue().remove(elementId); }
@Override public ListenableFuture<String> add(Element element) { return getQueue().add(element); }
@Override public Iterator<QueuedElement> getQueued() { return getQueue().getQueued(); }
@Override public Element take(String consumerId) { return getQueue().take(consumerId); }
@Override public TrackingQueue.PossessionState recordProgress(String consumerId, String elementId, TrackingQueue.ConsumingStatus status, String result) { return getQueue().recordProgress(consumerId, elementId, status, result); }