private int getTotalQueueSize() throws IOException { int totalSize = 0; for (Tenant tenant : tenantStore.getAllTenants()) { totalSize += taskQueues.size(tenant.getId()); } return totalSize; }
@Test public void testGetSize() { QueueGroup queues = getQueueGroup(QueueType.PROVISIONER); queues.add("tenant1", new Element("id1", "val")); queues.add("tenant1", new Element("id2", "val")); queues.add("tenant1", new Element("id3", "val")); queues.add("tenant1", new Element("id4", "val")); queues.add("tenant2", new Element("id1", "val")); queues.add("tenant2", new Element("id2", "val")); queues.add("tenant3", new Element("id1", "val")); Assert.assertEquals(4, queues.size("tenant1")); Assert.assertEquals(2, queues.size("tenant2")); Assert.assertEquals(1, queues.size("tenant3")); // size includes elements being consumed queues.take("tenant1", "consumer"); Assert.assertEquals(4, queues.size("tenant1")); Assert.assertEquals(2, queues.size("tenant2")); Assert.assertEquals(1, queues.size("tenant3")); // size does not include elements that are finished being consumed queues.recordProgress("consumer", "tenant1", "id1", TrackingQueue.ConsumingStatus.FINISHED_SUCCESSFULLY, "result"); Assert.assertEquals(3, queues.size("tenant1")); Assert.assertEquals(2, queues.size("tenant2")); Assert.assertEquals(1, queues.size("tenant3")); }
@Test(timeout = 20000) public void testFalseOnStartStopsJob() throws Exception { String tenantId = "q"; ClusterScheduler clusterScheduler = injector.getInstance(ClusterScheduler.class); clusterQueues.add(tenantId, new Element(cluster.getId(), ClusterAction.CLUSTER_CREATE.name())); clusterScheduler.run(); CallbackScheduler callbackScheduler = injector.getInstance(CallbackScheduler.class); // should be no job in the queue until the start callback runs Assert.assertEquals(0, jobQueues.size(tenantId)); // tell mock callback to return false for onStart callback mockClusterCallback.setReturnOnStart(false); // wait for start callback to finish waitForCallback(callbackScheduler); Assert.assertEquals(CallbackData.Type.START, mockClusterCallback.getReceivedCallbacks().get(0).getType()); // wait for fail callback to finish if (mockClusterCallback.getReceivedCallbacks().size() < 2) { waitForCallback(callbackScheduler); } Assert.assertEquals(CallbackData.Type.FAILURE, mockClusterCallback.getReceivedCallbacks().get(1).getType()); // there also should not be any jobs in the queue Assert.assertEquals(0, jobQueues.size(tenantId)); }
Assert.assertEquals(0, jobQueues.size(tenantId));
private void testCallbacks(boolean failJob) throws Exception { ClusterScheduler clusterScheduler = injector.getInstance(ClusterScheduler.class); String tenantId = cluster.getAccount().getTenantId(); clusterQueues.add(tenantId, new Element(cluster.getId(), ClusterAction.CLUSTER_CREATE.name())); clusterScheduler.run(); CallbackScheduler callbackScheduler = injector.getInstance(CallbackScheduler.class); // should be no job in the queue until the start callback runs Assert.assertEquals(0, jobQueues.size(tenantId)); waitForCallback(callbackScheduler); Assert.assertEquals(CallbackData.Type.START, mockClusterCallback.getReceivedCallbacks().get(0).getType()); JobScheduler jobScheduler = injector.getInstance(JobScheduler.class); jobScheduler.run(); // take tasks until there are no more TakeTaskRequest takeRequest = new TakeTaskRequest("consumer1", PROVISIONER_ID, tenantId); SchedulableTask task = TestHelper.takeTask(getInternalServerUrl(), takeRequest); while (task != null) { FinishTaskRequest finishRequest = new FinishTaskRequest("consumer1", PROVISIONER_ID, tenantId, task.getTaskId(), null, null, failJob ? 1 : 0, null, null, null); TestHelper.finishTask(getInternalServerUrl(), finishRequest); jobScheduler.run(); jobScheduler.run(); task = TestHelper.takeTask(getInternalServerUrl(), takeRequest); } jobScheduler.run(); waitForCallback(callbackScheduler); // at this point, the failure callback should have run Assert.assertEquals(failJob ? CallbackData.Type.FAILURE : CallbackData.Type.SUCCESS, mockClusterCallback.getReceivedCallbacks().get(1).getType()); }
clusterScheduler.run(); waitForCallback(callbackScheduler); Assert.assertEquals(1, jobQueues.size(tenantId)); String consumerId = "testJobScheduler"; Element jobQueueElement = jobQueues.take(tenantId, consumerId);
waitForCallback(callbackScheduler); Assert.assertEquals(1, jobQueues.size(tenantId)); String consumerId = "testJobScheduler"; Element jobQueueElement = jobQueues.take(tenantId, consumerId); JobScheduler jobScheduler = injector.getInstance(JobScheduler.class); jobScheduler.run(); Assert.assertEquals(0, jobQueues.size(tenantId)); Assert.assertEquals(2, jobQueues.size(tenantId));
Assert.assertEquals(2, jobQueues.size(queueName));