private SolverRunner(GroupElement gElement) { this.solveElement = gElement.getElement(); this.queueName = gElement.getQueueName(); this.clusterId = solveElement.getId(); this.solverJob = null; this.plannerJob = null; }
@Override public void run() { try { Iterator<GroupElement> solveIter = solverQueues.takeIterator(id); while (solveIter.hasNext()) { final GroupElement gElement = solveIter.next(); final Element solveElement = gElement.getElement(); final ListenableFuture<String> future = executorService.submit(new SolverRunner(gElement)); future.addListener(new Runnable() { @Override public void run() { try { solverQueues.recordProgress(id, gElement.getQueueName(), solveElement.getId(), TrackingQueue.ConsumingStatus.FINISHED_SUCCESSFULLY, future.get()); } catch (Exception e) { LOG.error("Unable to record progress for cluster {}", solveElement.getId()); } } }, executorService); } } catch (Exception e) { LOG.error("Got exception:", e); } }
@Override public void run() { try { Iterator<GroupElement> callbackIter = callbackQueues.takeIterator(id); while (callbackIter.hasNext()) { final GroupElement gElement = callbackIter.next(); final Element element = gElement.getElement(); final ListenableFuture future = executorService.submit(new CallbackRunner(gElement)); future.addListener(new Runnable() { @Override public void run() { try { callbackQueues.recordProgress(id, gElement.getQueueName(), element.getId(), TrackingQueue.ConsumingStatus.FINISHED_SUCCESSFULLY, "Executed"); } catch (Exception e) { LOG.error("Exception processing callback", e); } } }, executorService); } } catch (Exception e) { LOG.error("Got exception:", e); } }
@Override public void run() { try { barrier.await(); } catch (Exception e) { Throwables.propagate(e); } while (numTaken.get() < expectedNumElements) { Iterator<GroupElement> iter = queues.takeIterator(consumerId); while (iter.hasNext()) { GroupElement taken = iter.next(); numTaken.getAndIncrement(); elements.put(Integer.valueOf(taken.getElement().getValue()), Integer.valueOf(taken.getQueueName())); } try { TimeUnit.MILLISECONDS.sleep(10); } catch (InterruptedException e) { Throwables.propagate(e); } } latch.countDown(); } });
@Override public void run() { CallbackData callbackData = gson.fromJson(gElement.getElement().getValue(), CallbackData.class); CallbackContext callbackContext = new CallbackContext(clusterStoreService, userStore, callbackData.getCluster().getAccount()); switch (callbackData.getType()) { case START: onStart(callbackData, callbackContext); break; case SUCCESS: clusterCallback.onSuccess(callbackData, callbackContext); break; case FAILURE: clusterCallback.onFailure(callbackData, callbackContext); break; default: LOG.error("Unknown callback type {}", callbackData.getType()); } }
@Test public void testOneQueueAddTakeWithoutQueueName() { QueueGroup queues = getQueueGroup(QueueType.PROVISIONER); String queueName = "tenant1"; String consumerId = "worker.0"; queues.add(queueName, new Element("id", "val")); GroupElement taken = queues.takeIterator(consumerId).next(); Assert.assertEquals(queueName, taken.getQueueName()); Assert.assertEquals("id", taken.getElement().getId()); Assert.assertEquals("val", taken.getElement().getValue()); }
GroupElement gElement = jobIter.next(); String queueName = gElement.getQueueName(); Element element = gElement.getElement(); String jobIdStr = element.getValue();
while (clusterIter.hasNext()) { GroupElement gElement = clusterIter.next(); Element clusterElement = gElement.getElement(); Cluster cluster = clusterStore.getCluster(clusterElement.getId()); ClusterJob job = clusterStore.getClusterJob(JobId.fromString(cluster.getLatestJobId()));
GroupElement taken = iter.next(); String firstTenant = taken.getQueueName(); Assert.assertEquals("id" + i, taken.getElement().getId()); taken = iter.next(); String secondTenant = taken.getQueueName(); Assert.assertEquals("id" + i, taken.getElement().getId()); Assert.assertEquals(Sets.newHashSet("tenant1", "tenant2"), Sets.newHashSet(firstTenant, secondTenant)); Assert.assertEquals("id4", taken.getElement().getId()); Assert.assertEquals("id5", taken.getElement().getId());
@Test public void testChangesSeenAcrossInstances() throws Exception { QueueGroup instance1 = new ZKQueueGroup(zkClient, QueueType.PROVISIONER); QueueGroup instance2 = new ZKQueueGroup(zkClient, QueueType.PROVISIONER); instance1.startAndWait(); instance2.startAndWait(); // add a queue for tenant3 with 2 elements String tenant = "tenantX"; Set<String> expectedQueueNames = Sets.newHashSet(tenant); instance1.add(tenant, new Element("id3-1", "val1")); instance1.add(tenant, new Element("id3-2", "val2")); // check both instances see tenant3 Assert.assertEquals(expectedQueueNames, instance1.getQueueNames()); waitForQueueNames(expectedQueueNames, instance2); // make sure each instance gets an accurate picture of the queue Iterator<GroupElement> queuesIter1 = instance1.takeIterator("consumer1"); Iterator<GroupElement> queuesIter2 = instance1.takeIterator("consumer2"); GroupElement gelement = queuesIter1.next(); Assert.assertEquals(tenant, gelement.getQueueName()); Assert.assertEquals("id3-1", gelement.getElement().getId()); Assert.assertEquals("val1", gelement.getElement().getValue()); gelement = queuesIter2.next(); Assert.assertEquals(tenant, gelement.getQueueName()); Assert.assertEquals("id3-2", gelement.getElement().getId()); Assert.assertEquals("val2", gelement.getElement().getValue()); Assert.assertFalse(queuesIter1.hasNext()); Assert.assertFalse(queuesIter2.hasNext()); instance1.stop(); instance2.stop(); }