private void PrintQueueInfo(PrintWriter writer, QueueInfo queueInfo) { writer.Write("Queue Name : "); writer.WriteLine(queueInfo.GetQueueName()); writer.Write("\tState : "); writer.WriteLine(queueInfo.GetQueueState()); DecimalFormat df = new DecimalFormat("#.0"); writer.Write("\tCapacity : "); writer.WriteLine(df.Format(queueInfo.GetCapacity() * 100) + "%"); writer.Write("\tCurrent Capacity : "); writer.WriteLine(df.Format(queueInfo.GetCurrentCapacity() * 100) + "%"); writer.Write("\tMaximum Capacity : "); writer.WriteLine(df.Format(queueInfo.GetMaximumCapacity() * 100) + "%"); writer.Write("\tDefault Node Label expression : "); if (null != queueInfo.GetDefaultNodeLabelExpression()) { writer.WriteLine(queueInfo.GetDefaultNodeLabelExpression()); } else { writer.WriteLine(); } ICollection <string> nodeLabels = queueInfo.GetAccessibleNodeLabels(); StringBuilder labelList = new StringBuilder(); writer.Write("\tAccessible Node Labels : "); foreach (string nodeLabel in nodeLabels) { if (labelList.Length > 0) { labelList.Append(','); } labelList.Append(nodeLabel); } writer.WriteLine(labelList.ToString()); }
/// <exception cref="System.IO.IOException"/> public virtual void TestNormalizeNodeLabelExpression() { // mock queue and scheduler YarnScheduler scheduler = Org.Mockito.Mockito.Mock <YarnScheduler>(); ICollection <string> queueAccessibleNodeLabels = Sets.NewHashSet(); QueueInfo queueInfo = Org.Mockito.Mockito.Mock <QueueInfo>(); Org.Mockito.Mockito.When(queueInfo.GetQueueName()).ThenReturn("queue"); Org.Mockito.Mockito.When(queueInfo.GetAccessibleNodeLabels()).ThenReturn(queueAccessibleNodeLabels ); Org.Mockito.Mockito.When(queueInfo.GetDefaultNodeLabelExpression()).ThenReturn(" x " ); Org.Mockito.Mockito.When(scheduler.GetQueueInfo(Matchers.Any <string>(), Matchers.AnyBoolean (), Matchers.AnyBoolean())).ThenReturn(queueInfo); Org.Apache.Hadoop.Yarn.Api.Records.Resource maxResource = Resources.CreateResource (YarnConfiguration.DefaultRmSchedulerMaximumAllocationMb, YarnConfiguration.DefaultRmSchedulerMaximumAllocationVcores ); // queue has labels, success cases try { // set queue accessible node labels to [x, y] queueAccessibleNodeLabels.Clear(); Sharpen.Collections.AddAll(queueAccessibleNodeLabels, Arrays.AsList("x", "y")); rmContext.GetNodeLabelManager().AddToCluserNodeLabels(ImmutableSet.Of("x", "y")); Org.Apache.Hadoop.Yarn.Api.Records.Resource resource = Resources.CreateResource(0 , YarnConfiguration.DefaultRmSchedulerMinimumAllocationVcores); ResourceRequest resReq = BuilderUtils.NewResourceRequest(Org.Mockito.Mockito.Mock <Priority>(), ResourceRequest.Any, resource, 1); SchedulerUtils.NormalizeAndvalidateRequest(resReq, maxResource, "queue", scheduler , rmContext); NUnit.Framework.Assert.IsTrue(resReq.GetNodeLabelExpression().Equals("x")); resReq.SetNodeLabelExpression(" y "); SchedulerUtils.NormalizeAndvalidateRequest(resReq, maxResource, "queue", scheduler , rmContext); NUnit.Framework.Assert.IsTrue(resReq.GetNodeLabelExpression().Equals("y")); } catch (InvalidResourceRequestException e) { Sharpen.Runtime.PrintStackTrace(e); NUnit.Framework.Assert.Fail("Should be valid when request labels is a subset of queue labels" ); } finally { rmContext.GetNodeLabelManager().RemoveFromClusterNodeLabels(Arrays.AsList("x", "y" )); } }
private static void NormalizeNodeLabelExpressionInRequest(ResourceRequest resReq, QueueInfo queueInfo) { string labelExp = resReq.GetNodeLabelExpression(); // if queue has default label expression, and RR doesn't have, use the // default label expression of queue if (labelExp == null && queueInfo != null && ResourceRequest.Any.Equals(resReq.GetResourceName ())) { labelExp = queueInfo.GetDefaultNodeLabelExpression(); } // If labelExp still equals to null, set it to be NO_LABEL if (labelExp == null) { labelExp = RMNodeLabelsManager.NoLabel; } resReq.SetNodeLabelExpression(labelExp); }