diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/QueueInfo.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/QueueInfo.java index 57ea9bfe44c..6fc9bb95d7d 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/QueueInfo.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/QueueInfo.java @@ -54,7 +54,7 @@ @Private @Unstable - public static QueueInfo newInstance(String queueName, float capacity, + public static QueueInfo newInstance(String queueName, String queuePath, float capacity, float maximumCapacity, float currentCapacity, List childQueues, List applications, QueueState queueState, Set accessibleNodeLabels, @@ -62,6 +62,7 @@ public static QueueInfo newInstance(String queueName, float capacity, boolean preemptionDisabled) { QueueInfo queueInfo = Records.newRecord(QueueInfo.class); queueInfo.setQueueName(queueName); + queueInfo.setQueuePath(queuePath); queueInfo.setCapacity(capacity); queueInfo.setMaximumCapacity(maximumCapacity); queueInfo.setCurrentCapacity(currentCapacity); @@ -77,14 +78,14 @@ public static QueueInfo newInstance(String queueName, float capacity, @Private @Unstable - public static QueueInfo newInstance(String queueName, float capacity, + public static QueueInfo newInstance(String queueName, String queuePath, float capacity, float maximumCapacity, float currentCapacity, List childQueues, List applications, QueueState queueState, Set accessibleNodeLabels, String defaultNodeLabelExpression, QueueStatistics queueStatistics, boolean preemptionDisabled, Map queueConfigurations) { - QueueInfo queueInfo = QueueInfo.newInstance(queueName, capacity, + QueueInfo queueInfo = QueueInfo.newInstance(queueName, queuePath, capacity, maximumCapacity, currentCapacity, childQueues, applications, queueState, accessibleNodeLabels, @@ -96,7 +97,7 @@ public static QueueInfo newInstance(String queueName, float capacity, @Private @Unstable - public static QueueInfo newInstance(String queueName, float capacity, + public static QueueInfo newInstance(String queueName, String queuePath, float capacity, float maximumCapacity, float currentCapacity, List childQueues, List applications, QueueState queueState, Set accessibleNodeLabels, @@ -104,7 +105,7 @@ public static QueueInfo newInstance(String queueName, float capacity, boolean preemptionDisabled, Map queueConfigurations, boolean intraQueuePreemptionDisabled) { - QueueInfo queueInfo = QueueInfo.newInstance(queueName, capacity, + QueueInfo queueInfo = QueueInfo.newInstance(queueName, queuePath, capacity, maximumCapacity, currentCapacity, childQueues, applications, queueState, accessibleNodeLabels, @@ -125,6 +126,18 @@ public static QueueInfo newInstance(String queueName, float capacity, @Private @Unstable public abstract void setQueueName(String queueName); + + /** + * Get the path of the queue. + * @return path of the queue + */ + @Public + @Stable + public abstract String getQueuePath(); + + @Private + @Unstable + public abstract void setQueuePath(String queuePath); /** * Get the configured capacity of the queue. diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/proto/yarn_protos.proto b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/proto/yarn_protos.proto index d7ca2a563ea..ee4750be2c5 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/proto/yarn_protos.proto +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/proto/yarn_protos.proto @@ -609,6 +609,7 @@ message QueueInfoProto { optional bool preemptionDisabled = 11; repeated QueueConfigurationsMapProto queueConfigurationsMap = 12; optional bool intraQueuePreemptionDisabled = 13; + optional string queuePath = 14; } message QueueConfigurationsProto { diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/ProtocolHATestBase.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/ProtocolHATestBase.java index c923446a008..0d8a9e69400 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/ProtocolHATestBase.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/ProtocolHATestBase.java @@ -668,7 +668,7 @@ public YarnClusterMetrics createFakeYarnClusterMetrics() { } public QueueInfo createFakeQueueInfo() { - return QueueInfo.newInstance("root", 100f, 100f, 50f, null, + return QueueInfo.newInstance("root", "root", 100f, 100f, 50f, null, createFakeAppReports(), QueueState.RUNNING, null, null, null, false, null, false); } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/cli/TestYarnCLI.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/cli/TestYarnCLI.java index b5606018a8b..29b42a64931 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/cli/TestYarnCLI.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/cli/TestYarnCLI.java @@ -1718,7 +1718,7 @@ public void testGetQueueInfo() throws Exception { Set nodeLabels = new HashSet(); nodeLabels.add("GPU"); nodeLabels.add("JDK_7"); - QueueInfo queueInfo = QueueInfo.newInstance("queueA", 0.4f, 0.8f, 0.5f, + QueueInfo queueInfo = QueueInfo.newInstance("queueA", "root.queueA", 0.4f, 0.8f, 0.5f, null, null, QueueState.RUNNING, nodeLabels, "GPU", null, false, null, false); when(client.getQueueInfo(any(String.class))).thenReturn(queueInfo); @@ -1886,7 +1886,7 @@ public void testGetQueueInfoPreemptionDisabled() throws Exception { @Test public void testGetQueueInfoWithEmptyNodeLabel() throws Exception { QueueCLI cli = createAndGetQueueCLI(); - QueueInfo queueInfo = QueueInfo.newInstance("queueA", 0.4f, 0.8f, 0.5f, + QueueInfo queueInfo = QueueInfo.newInstance("queueA", "root.queueA", 0.4f, 0.8f, 0.5f, null, null, QueueState.RUNNING, null, null, null, true, null, true); when(client.getQueueInfo(any(String.class))).thenReturn(queueInfo); int result = cli.run(new String[] { "-status", "queueA" }); diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/QueueInfoPBImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/QueueInfoPBImpl.java index db9ece4dce1..49f3d4a2a36 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/QueueInfoPBImpl.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/QueueInfoPBImpl.java @@ -101,6 +101,12 @@ public String getQueueName() { return (p.hasQueueName()) ? p.getQueueName() : null; } + @Override + public String getQueuePath() { + QueueInfoProtoOrBuilder p = viaProto ? proto : builder; + return (p.hasQueuePath()) ? p.getQueuePath() : null; + } + @Override public QueueState getQueueState() { QueueInfoProtoOrBuilder p = viaProto ? proto : builder; @@ -154,6 +160,16 @@ public void setQueueName(String queueName) { builder.setQueueName(queueName); } + @Override + public void setQueuePath(String queuePath) { + maybeInitBuilder(); + if (queuePath == null) { + builder.clearQueuePath(); + return; + } + builder.setQueuePath(queuePath); + } + @Override public void setQueueState(QueueState queueState) { maybeInitBuilder(); diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/api/TestPBImplRecords.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/api/TestPBImplRecords.java index 980ec0da9f1..49c0a299f51 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/api/TestPBImplRecords.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/api/TestPBImplRecords.java @@ -432,7 +432,7 @@ public static void setup() throws Exception { generateByNewInstance(ContainerUpdateResponse.class); // genByNewInstance does not apply to QueueInfo, cause // it is recursive(has sub queues) - typeValueCache.put(QueueInfo.class, QueueInfo.newInstance("root", 1.0f, + typeValueCache.put(QueueInfo.class, QueueInfo.newInstance("root", "root", 1.0f, 1.0f, 0.1f, null, null, QueueState.RUNNING, ImmutableSet.of("x", "y"), "x && y", null, false, null, false)); generateByNewInstance(QueueStatistics.class); diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/AbstractCSQueue.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/AbstractCSQueue.java index e5380fa9528..6af181d7683 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/AbstractCSQueue.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/AbstractCSQueue.java @@ -716,6 +716,7 @@ protected QueueInfo getQueueInfo() { // TODO, improve this QueueInfo queueInfo = recordFactory.newRecordInstance(QueueInfo.class); queueInfo.setQueueName(queueName); + queueInfo.setQueuePath(queuePath); queueInfo.setAccessibleNodeLabels(accessibleLabels); queueInfo.setCapacity(queueCapacities.getCapacity()); queueInfo.setMaximumCapacity(queueCapacities.getMaximumCapacity()); diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/TestConfigurationMutationACLPolicies.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/TestConfigurationMutationACLPolicies.java index 8741432cc0a..928b83db55c 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/TestConfigurationMutationACLPolicies.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/TestConfigurationMutationACLPolicies.java @@ -59,14 +59,14 @@ public void setUp() throws IOException { rmContext = mock(RMContext.class); scheduler = mock(MutableConfScheduler.class); when(rmContext.getScheduler()).thenReturn(scheduler); - mockQueue("a", scheduler); - mockQueue("b", scheduler); - mockQueue("b1", scheduler); + mockQueue("a", "root.a", scheduler); + mockQueue("b", "root.b", scheduler); + mockQueue("b1", "root.b1", scheduler); } - private void mockQueue(String queueName, MutableConfScheduler scheduler) + private void mockQueue(String queueName, String queuePath, MutableConfScheduler scheduler) throws IOException { - QueueInfo queueInfo = QueueInfo.newInstance(queueName, 0, 0, 0, null, null, + QueueInfo queueInfo = QueueInfo.newInstance(queueName, queuePath, 0, 0, 0, null, null, null, null, null, null, false, null, false); when(scheduler.getQueueInfo(eq(queueName), anyBoolean(), anyBoolean())) .thenReturn(queueInfo); diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/TestSchedulerApplicationAttempt.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/TestSchedulerApplicationAttempt.java index b1080f7d5fe..626a932cc68 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/TestSchedulerApplicationAttempt.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/TestSchedulerApplicationAttempt.java @@ -216,7 +216,7 @@ private Queue createQueue(String name, Queue parent) { private Queue createQueue(String name, Queue parent, float capacity) { QueueMetrics metrics = QueueMetrics.forQueue(name, parent, false, conf); - QueueInfo queueInfo = QueueInfo.newInstance(name, capacity, 1.0f, 0, null, + QueueInfo queueInfo = QueueInfo.newInstance(name, "root" + name, capacity, 1.0f, 0, null, null, QueueState.RUNNING, null, "", null, false, null, false); ActiveUsersManager activeUsersManager = new ActiveUsersManager(metrics); Queue queue = mock(Queue.class); diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/TestCapacityScheduler.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/TestCapacityScheduler.java index d5d89cae866..b6c08021b96 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/TestCapacityScheduler.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/TestCapacityScheduler.java @@ -1146,6 +1146,8 @@ public void testCapacitySchedulerInfo() throws Exception { QueueInfo queueInfo = resourceManager.getResourceScheduler().getQueueInfo("a", true, true); Assert.assertEquals("Queue Name should be a", "a", queueInfo.getQueueName()); + Assert.assertEquals("Queue Path should be root.a", "root.a", + queueInfo.getQueuePath()); Assert.assertEquals("Child Queues size should be 2", 2, queueInfo.getChildQueues().size()); @@ -4362,12 +4364,16 @@ public void testDefaultNodeLabelExpressionQueueConfig() throws Exception { QueueInfo queueInfoA = cs.getQueueInfo("a", true, false); Assert.assertEquals("Queue Name should be a", "a", queueInfoA.getQueueName()); + Assert.assertEquals("Queue Path should be root.a", "root.a", + queueInfoA.getQueuePath()); Assert.assertEquals("Default Node Label Expression should be x", "x", queueInfoA.getDefaultNodeLabelExpression()); QueueInfo queueInfoB = cs.getQueueInfo("b", true, false); Assert.assertEquals("Queue Name should be b", "b", queueInfoB.getQueueName()); + Assert.assertEquals("Queue Path should be root.b", "root.b", + queueInfoB.getQueuePath()); Assert.assertEquals("Default Node Label Expression should be y", "y", queueInfoB.getDefaultNodeLabelExpression()); } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/TestCapacitySchedulerNewQueueAutoCreation.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/TestCapacitySchedulerNewQueueAutoCreation.java index 45c411f81c1..f493fe6078a 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/TestCapacitySchedulerNewQueueAutoCreation.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/TestCapacitySchedulerNewQueueAutoCreation.java @@ -876,6 +876,41 @@ public void testAutoCreateQueueAfterRemoval() throws Exception { b.getQueueResourceQuotas().getEffectiveMinResource().getMemorySize()); } + @Test + public void testQueueInfoIfAmbiguousQueueNames() throws Exception { + startScheduler(); + + AbstractCSQueue b = (AbstractCSQueue) cs. + getQueue("root.b"); + Assert.assertFalse(b.isDynamicQueue()); + Assert.assertEquals("root.b", + b.getQueueInfo().getQueuePath()); + + createQueue("root.a.b.b"); + + AbstractCSQueue bAutoParent = (AbstractCSQueue) cs. + getQueue("root.a.b"); + Assert.assertTrue(bAutoParent.isDynamicQueue()); + Assert.assertTrue(bAutoParent.hasChildQueues()); + Assert.assertEquals("root.a.b", + bAutoParent.getQueueInfo().getQueuePath()); + + AbstractCSQueue bAutoLeafQueue = + (AbstractCSQueue) cs.getQueue("root.a.b.b"); + Assert.assertTrue(bAutoLeafQueue.isDynamicQueue()); + Assert.assertFalse(bAutoLeafQueue.hasChildQueues()); + Assert.assertEquals("root.a.b.b", + bAutoLeafQueue.getQueueInfo().getQueuePath()); + + // Make sure all queue name are ambiguous + Assert.assertEquals("b", + b.getQueueInfo().getQueueName()); + Assert.assertEquals("b", + bAutoParent.getQueueInfo().getQueueName()); + Assert.assertEquals("b", + bAutoLeafQueue.getQueueInfo().getQueueName()); + } + protected LeafQueue createQueue(String queuePath) throws YarnException { return autoQueueHandler.autoCreateQueue( CSQueueUtils.extractQueuePath(queuePath)); diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/TestLeafQueue.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/TestLeafQueue.java index 889da07adda..8506e35c27f 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/TestLeafQueue.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/TestLeafQueue.java @@ -4786,7 +4786,7 @@ public void testApplicationQueuePercent() // Queue "test" consumes 100% of the cluster, so its capacity and absolute // capacity are both 1.0f. - Queue queue = createQueue("test", null, 1.0f, 1.0f, res); + Queue queue = createQueue("test", "root.test", null, 1.0f, 1.0f, res); final String user = "user1"; FiCaSchedulerApp app = new FiCaSchedulerApp(appAttId, user, queue, @@ -4803,7 +4803,7 @@ public void testApplicationQueuePercent() // Queue "test2" is a child of root and its capacity is 50% of root. As a // child of root, its absolute capaicty is also 50%. - queue = createQueue("test2", null, 0.5f, 0.5f, + queue = createQueue("test2", "root.test2", null, 0.5f, 0.5f, Resources.divideAndCeil(dominantResourceCalculator, res, 2)); app = new FiCaSchedulerApp(appAttId, user, queue, queue.getAbstractUsersManager(), rmContext); @@ -4816,7 +4816,7 @@ public void testApplicationQueuePercent() // Queue "test2.1" is 50% of queue "test2", which is 50% of the cluster. // Therefore, "test2.1" capacity is 50% and absolute capacity is 25%. - AbstractCSQueue qChild = createQueue("test2.1", queue, 0.5f, 0.25f, + AbstractCSQueue qChild = createQueue("test2.1", "root.test2.1", queue, 0.5f, 0.25f, Resources.divideAndCeil(dominantResourceCalculator, res, 4)); app = new FiCaSchedulerApp(appAttId, user, qChild, qChild.getAbstractUsersManager(), rmContext); @@ -4828,7 +4828,7 @@ public void testApplicationQueuePercent() app.getResourceUsageReport().getClusterUsagePercentage(), 0.01f); // test that queueUsagePercentage returns neither NaN nor Infinite - AbstractCSQueue zeroQueue = createQueue("test2.2", null, + AbstractCSQueue zeroQueue = createQueue("test2.2", "root.test2.2", null, Float.MIN_VALUE, Float.MIN_VALUE, Resources.multiply(res, Float.MIN_VALUE)); app = new FiCaSchedulerApp(appAttId, user, zeroQueue, @@ -4901,10 +4901,10 @@ private ApplicationAttemptId createAppAttemptId(int appId, int attemptId) { return attId; } - private AbstractCSQueue createQueue(String name, Queue parent, float capacity, + private AbstractCSQueue createQueue(String name, String path, Queue parent, float capacity, float absCap, Resource res) { CSQueueMetrics metrics = CSQueueMetrics.forQueue(name, parent, false, cs.getConf()); - QueueInfo queueInfo = QueueInfo.newInstance(name, capacity, 1.0f, 0, null, + QueueInfo queueInfo = QueueInfo.newInstance(name, path, capacity, 1.0f, 0, null, null, QueueState.RUNNING, null, "", null, false, null, false); ActiveUsersManager activeUsersManager = new ActiveUsersManager(metrics); AbstractCSQueue queue = mock(AbstractCSQueue.class);