@Override public void run() { try { long currentTime = System.currentTimeMillis(); for (String queueName : provisionerQueues.getQueueNames()) { timeoutTasks(queueName, currentTime); } expireClusters(currentTime); } catch (Throwable e) { LOG.error("Got exception: ", e); } }
private void waitForQueueNames(Set<String> expectedQueueNames, QueueGroup queueGroup) throws InterruptedException { for (int i = 0; i < 20; i++) { Set<String> queueNames = queueGroup.getQueueNames(); if (queueNames.equals(expectedQueueNames)) { return; } else { TimeUnit.MILLISECONDS.sleep(200); } } Assert.fail(); } }
Assert.assertEquals(numQueues, queues.getQueueNames().size());
@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 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(); }