@Test public void testGetQueueNames() { QueueGroup queues = getQueueGroup(QueueType.PROVISIONER); queues.add("tenant1", new Element("id", "val")); queues.take("tenant2", "consumer.0"); queues.take("tenant3", "consumer.1"); queues.removeAll("tenant4"); queues.getBeingConsumed("tenant5"); queues.getQueued("tenant6"); ImmutableSet<String> expected = ImmutableSet.of("tenant1", "tenant2", "tenant3", "tenant4", "tenant5", "tenant6"); ImmutableSet<String> actual = ImmutableSet.copyOf(queues.getQueueNames()); Assert.assertEquals(expected, actual); }
@Test public void testRemoveAll() { QueueGroup queues = getQueueGroup(QueueType.PROVISIONER); queues.add("tenant1", new Element("id1", "val")); queues.add("tenant2", new Element("id2", "val")); queues.add("tenant3", new Element("id3", "val")); queues.add("tenant4", new Element("id4", "val")); Assert.assertTrue(queues.removeAll()); Assert.assertFalse(queues.takeIterator("consumer").hasNext()); Assert.assertNull(queues.take("tenant1", "consumer")); Assert.assertNull(queues.take("tenant2", "consumer")); Assert.assertNull(queues.take("tenant3", "consumer")); Assert.assertNull(queues.take("tenant4", "consumer")); }
@Test public void testRemoveAllForOneQueue() { QueueGroup queues = getQueueGroup(QueueType.PROVISIONER); queues.add("tenant1", new Element("id1", "val")); queues.add("tenant2", new Element("id2", "val")); queues.add("tenant3", new Element("id3", "val")); queues.add("tenant4", new Element("id4", "val")); Assert.assertTrue(queues.removeAll("tenant3")); Assert.assertNull(queues.take("tenant3", "consumer")); Assert.assertNotNull(queues.take("tenant1", "consumer")); Assert.assertNotNull(queues.take("tenant2", "consumer")); Assert.assertNotNull(queues.take("tenant4", "consumer")); }
Element taken = queues.take("tenant1", "consumer"); Assert.assertEquals("id1-1", taken.getId()); taken = queues.take("tenant1", "consumer"); Assert.assertEquals("id1-2", taken.getId()); taken = queues.take("tenant2", "consumer"); Assert.assertEquals("id2-1", taken.getId()); taken = queues.take("tenant2", "consumer"); Assert.assertEquals("id2-2", taken.getId()); taken = queues.take("tenant2", "consumer"); Assert.assertEquals("id2-3", taken.getId()); taken = queues.take("tenant3", "consumer"); Assert.assertEquals("id3-1", taken.getId()); taken = queues.take("tenant4", "consumer"); Assert.assertEquals("id4-1", taken.getId()); Assert.assertNull(queues.take("tenant2", "consumer")); Assert.assertNull(queues.take("tenant3", "consumer")); Assert.assertNull(queues.take("tenant4", "consumer")); taken = queues.take("tenant1", "consumer"); Assert.assertEquals("id1-3", taken.getId());
@Test public void testOnlyCorrectClustersAreCleaned() throws Exception { long now = System.currentTimeMillis(); for (int i = 0; i < 20; i++) { createCluster(String.valueOf(i), now - 1000, now - 100, Cluster.Status.ACTIVE); } String queueName = account.getTenantId(); ClusterCleanup clusterCleanup = new ClusterCleanup(clusterStore, clusterService, nodeService, taskService, jobQueues, provisionerQueues, -10, 3, 7); Assert.assertEquals(0, Iterators.size(clusterQueues.getQueued(queueName))); clusterCleanup.run(); // clusters 3, 10, and 17 should have been scheduled for deletion Assert.assertEquals(3, Iterators.size(clusterQueues.getQueued(queueName))); Element e1 = clusterQueues.take(queueName, "consumer1"); Element e2 = clusterQueues.take(queueName, "consumer1"); Element e3 = clusterQueues.take(queueName, "consumer1"); Assert.assertEquals(ImmutableSet.of("3", "10", "17"), ImmutableSet.of(e1.getId(), e2.getId(), e3.getId())); Assert.assertEquals(ClusterAction.CLUSTER_DELETE.name(), e1.getValue()); Assert.assertEquals(ClusterAction.CLUSTER_DELETE.name(), e2.getValue()); Assert.assertEquals(ClusterAction.CLUSTER_DELETE.name(), e3.getValue()); }
HttpResponseStatus.OK); Assert.assertEquals(entry.getValue().name(), clusterQueues.take(cluster.getAccount().getTenantId(), "0").getValue()); cluster.setStatus(Cluster.Status.ACTIVE); clusterStore.writeCluster(cluster);
@Test public void testOneQueueAddTakeWithQueueName() { QueueGroup queues = getQueueGroup(QueueType.PROVISIONER); String queueName = "tenant1"; String consumerId = "worker.0"; queues.add(queueName, new Element("id", "val")); Element taken = queues.take(queueName, consumerId); Assert.assertEquals("id", taken.getId()); Assert.assertEquals("val", taken.getValue()); }
@Test public void testOneQueueGetQueuedAndConsumed() { QueueGroup queues = getQueueGroup(QueueType.PROVISIONER); String queueName = "tenant1"; queues.add(queueName, new Element("id1", "val")); queues.add(queueName, new Element("id2", "val")); // check being consumed is correct Assert.assertEquals(ImmutableSet.<String>of(), getIds(queues.getBeingConsumed(queueName))); // check queued is correct. Assert.assertEquals(ImmutableSet.of("id1", "id2"), getIds(queues.getQueued(queueName))); // take one element queues.take(queueName, "consumer1"); // check being consumed is correct Assert.assertEquals(ImmutableSet.of("id1"), getIds(queues.getBeingConsumed(queueName))); // check queued is correct. Assert.assertEquals(ImmutableSet.of("id2"), getIds(queues.getQueued(queueName))); // take next element queues.take(queueName, "consumer2"); // check being consumed is correct Assert.assertEquals(ImmutableSet.of("id1", "id2"), getIds(queues.getBeingConsumed(queueName))); // check queued is correct. Assert.assertEquals(ImmutableSet.<String>of(), getIds(queues.getQueued(queueName))); // finish first element queues.recordProgress("consumer1", queueName, "id1", TrackingQueue.ConsumingStatus.FINISHED_SUCCESSFULLY, "result"); // check being consumed is correct Assert.assertEquals(ImmutableSet.of("id2"), getIds(queues.getBeingConsumed(queueName))); // check queued is correct. Assert.assertEquals(ImmutableSet.<String>of(), getIds(queues.getQueued(queueName))); }
provisionerQueues.add("id1", new Element("task2")); provisionerQueues.add("id1", new Element("task3")); provisionerQueues.take("id1", "consumer"); provisionerQueues.add("id2", new Element("task4")); provisionerQueues.add("id3", new Element("task5")); provisionerQueues.take("id3", "consumer"); provisionerQueues.add("id4", new Element("task6")); provisionerQueues.add("id4", new Element("task7")); provisionerQueues.take("id4", "consumer");
Element task = taskQueues.take(tenantId, consumerId); if (task == null) { break;
provisionerQueues.add("idA", new Element("task2")); provisionerQueues.add("idA", new Element("task3")); provisionerQueues.take("idA", "consumer"); provisionerQueues.add("idB", new Element("task4")); provisionerQueues.add("idC", new Element("task5")); provisionerQueues.take("idC", "consumer"); provisionerQueues.add("idD", new Element("task6")); provisionerQueues.add("idD", new Element("task7")); provisionerQueues.take("idD", "consumer");
@Test public void testAddClusterWithOptionalArgs() throws Exception { String clusterName = "my-cluster"; String tenantId = USER1_ACCOUNT.getTenantId(); ClusterCreateRequest clusterCreateRequest = ClusterCreateRequest.builder() .setName(clusterName) .setClusterTemplateName(reactorTemplate.getName()) .setNumMachines(5) .setProviderName("joyent") .setServiceNames(ImmutableSet.of("namenode", "datanode")) .setHardwareTypeName("large") .setImageTypeName("centos6") .setInitialLeaseDuration(-1L) .build(); HttpResponse response = doPostExternalAPI("/clusters", gson.toJson(clusterCreateRequest), USER1_HEADERS); assertResponseStatus(response, HttpResponseStatus.OK); // check there was an element added to the cluster queue for creating this cluster Element element = solverQueues.take(tenantId, "0"); SolverRequest request = gson.fromJson(element.getValue(), SolverRequest.class); ClusterCreateRequest createRequest = gson.fromJson(request.getJsonRequest(), ClusterCreateRequest.class); Assert.assertEquals("joyent", createRequest.getProvider()); Assert.assertEquals("centos6", createRequest.getImageType()); Assert.assertEquals("large", createRequest.getHardwareType()); Assert.assertEquals(ImmutableSet.of("namenode", "datanode"), createRequest.getServices()); }
@Test public void testAddCluster() throws Exception { String clusterName = "my-cluster"; String tenantId = USER1_ACCOUNT.getTenantId(); ClusterCreateRequest clusterCreateRequest = ClusterCreateRequest.builder() .setName(clusterName) .setClusterTemplateName(reactorTemplate.getName()) .setNumMachines(5) .build(); HttpResponse response = doPostExternalAPI("/clusters", gson.toJson(clusterCreateRequest), USER1_HEADERS); assertResponseStatus(response, HttpResponseStatus.OK); String clusterId = getIdFromResponse(response); // check there was an element added to the cluster queue for creating this cluster Element element = solverQueues.take(tenantId, "0"); Assert.assertEquals(clusterId, element.getId()); ClusterCreateRequest expected = ClusterCreateRequest.builder() .setName(clusterName) .setClusterTemplateName(reactorTemplate.getName()) .setNumMachines(5) .setInitialLeaseDuration(-1L) .build(); SolverRequest expectedSolverRequest = new SolverRequest(SolverRequest.Type.CREATE_CLUSTER, gson.toJson(expected)); Assert.assertEquals(expectedSolverRequest, gson.fromJson(element.getValue(), SolverRequest.class)); }
Assert.assertEquals(1, jobQueues.size(tenantId)); String consumerId = "testJobScheduler"; Element jobQueueElement = jobQueues.take(tenantId, consumerId); String jobId = jobQueueElement.getValue(); jobQueues.add(tenantId, new Element(jobId));
Assert.assertEquals(1, serviceSetCounts.count(ImmutableSet.of("reactor", "zookeeper"))); Element element = clusterQueues.take(queueName, "0"); Assert.assertEquals(cluster.getId(), element.getId());
Assert.assertEquals("some stderr", lastAction.getStderr()); Element element = provisionerQueues.take(tenantId, "worker1"); Assert.assertNull(element);
Element jobQueueElement = jobQueues.take(tenantId, consumerId); String jobId = jobQueueElement.getValue(); job = clusterStore.getClusterJob(JobId.fromString(jobId));
@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")); }