/// <exception cref="System.Exception"/> public CSAssignment Answer(InvocationOnMock invocation) { try { throw new Exception(); } catch (Exception) { TestChildQueueOrder.Log.Info("FOOBAR q.assignContainers q=" + queue.GetQueueName( ) + " alloc=" + allocation + " node=" + node.GetNodeName()); } Org.Apache.Hadoop.Yarn.Api.Records.Resource allocatedResource = Resources.CreateResource (allocation); if (queue is ParentQueue) { ((ParentQueue)queue).AllocateResource(clusterResource, allocatedResource, null); } else { FiCaSchedulerApp app1 = this._enclosing.GetMockApplication(0, string.Empty); ((LeafQueue)queue).AllocateResource(clusterResource, app1, allocatedResource, null ); } if (allocation > 0) { Org.Mockito.Mockito.DoReturn(new CSAssignment(Resources.None(), type)).When(queue ).AssignContainers(Matchers.Eq(clusterResource), Matchers.Eq(node), Matchers.Any <ResourceLimits>()); Org.Apache.Hadoop.Yarn.Api.Records.Resource available = node.GetAvailableResource (); Org.Mockito.Mockito.DoReturn(Resources.SubtractFrom(available, allocatedResource) ).When(node).GetAvailableResource(); } return(new CSAssignment(allocatedResource, type)); }
public CSAssignment(Resource resource, NodeType type) { this.resource = resource; this.type = type; this.application = null; this.excessReservation = null; this.skipped = false; }
public CSAssignment(FiCaSchedulerApp application, RMContainer excessReservation) { this.resource = excessReservation.GetContainer().GetResource(); this.type = NodeType.NodeLocal; this.application = application; this.excessReservation = excessReservation; this.skipped = false; }
public CSAssignment(bool skipped) { this.resource = Resources.CreateResource(0, 0); this.type = NodeType.NodeLocal; this.application = null; this.excessReservation = null; this.skipped = skipped; }
private FiCaSchedulerApp GetMockApplication(int appId, string user) { FiCaSchedulerApp application = Org.Mockito.Mockito.Mock <FiCaSchedulerApp>(); Org.Mockito.Mockito.DoReturn(user).When(application).GetUser(); Org.Mockito.Mockito.DoReturn(Resources.CreateResource(0, 0)).When(application).GetHeadroom (); return(application); }
public CapacityHeadroomProvider(LeafQueue.User user, LeafQueue queue, FiCaSchedulerApp application, Resource required, LeafQueue.QueueResourceLimitsInfo queueResourceLimitsInfo ) { this.user = user; this.queue = queue; this.application = application; this.required = required; this.queueResourceLimitsInfo = queueResourceLimitsInfo; }
public static ContainerId GetMockContainerId(FiCaSchedulerApp application) { ContainerId containerId = Org.Mockito.Mockito.Mock <ContainerId>(); Org.Mockito.Mockito.DoReturn(application.GetApplicationAttemptId()).When(containerId ).GetApplicationAttemptId(); long id = application.GetNewContainerId(); Org.Mockito.Mockito.DoReturn((int)id).When(containerId).GetId(); Org.Mockito.Mockito.DoReturn(id).When(containerId).GetContainerId(); return(containerId); }
private FiCaSchedulerApp GetMockApplication(int appId, string user, Org.Apache.Hadoop.Yarn.Api.Records.Resource amResource) { FiCaSchedulerApp application = Org.Mockito.Mockito.Mock <FiCaSchedulerApp>(); ApplicationAttemptId applicationAttemptId = TestUtils.GetMockApplicationAttemptId (appId, 0); Org.Mockito.Mockito.DoReturn(applicationAttemptId.GetApplicationId()).When(application ).GetApplicationId(); Org.Mockito.Mockito.DoReturn(applicationAttemptId).When(application).GetApplicationAttemptId (); Org.Mockito.Mockito.DoReturn(user).When(application).GetUser(); Org.Mockito.Mockito.DoReturn(amResource).When(application).GetAMResource(); return(application); }
public override void CompletedContainer(Org.Apache.Hadoop.Yarn.Api.Records.Resource clusterResource, FiCaSchedulerApp application, FiCaSchedulerNode node, RMContainer rmContainer, ContainerStatus containerStatus, RMContainerEventType @event, CSQueue completedChildQueue, bool sortQueues) { if (application != null) { // Careful! Locking order is important! // Book keeping lock (this) { base.ReleaseResource(clusterResource, rmContainer.GetContainer().GetResource(), node .GetLabels()); Log.Info("completedContainer" + " queue=" + GetQueueName() + " usedCapacity=" + GetUsedCapacity () + " absoluteUsedCapacity=" + GetAbsoluteUsedCapacity() + " used=" + queueUsage .GetUsed() + " cluster=" + clusterResource); // Note that this is using an iterator on the childQueues so this can't // be called if already within an iterator for the childQueues. Like // from assignContainersToChildQueues. if (sortQueues) { // reinsert the updated queue for (IEnumerator <CSQueue> iter = childQueues.GetEnumerator(); iter.HasNext();) { CSQueue csqueue = iter.Next(); if (csqueue.Equals(completedChildQueue)) { iter.Remove(); Log.Info("Re-sorting completed queue: " + csqueue.GetQueuePath() + " stats: " + csqueue ); childQueues.AddItem(csqueue); break; } } } } // Inform the parent if (parent != null) { // complete my parent parent.CompletedContainer(clusterResource, application, node, rmContainer, null, @event, this, sortQueues); } } }
public override void DetachContainer(Org.Apache.Hadoop.Yarn.Api.Records.Resource clusterResource, FiCaSchedulerApp application, RMContainer rmContainer) { if (application != null) { FiCaSchedulerNode node = scheduler.GetNode(rmContainer.GetContainer().GetNodeId() ); base.ReleaseResource(clusterResource, rmContainer.GetContainer().GetResource(), node .GetLabels()); Log.Info("movedContainer" + " queueMoveOut=" + GetQueueName() + " usedCapacity=" + GetUsedCapacity() + " absoluteUsedCapacity=" + GetAbsoluteUsedCapacity() + " used=" + queueUsage.GetUsed() + " cluster=" + clusterResource); // Inform the parent if (parent != null) { parent.DetachContainer(clusterResource, application, rmContainer); } } }
public override void SubmitApplicationAttempt(FiCaSchedulerApp application, string userName) { }
public virtual void TestActiveLimitsWithKilledApps() { string user_0 = "user_0"; int ApplicationId = 0; // Submit first application FiCaSchedulerApp app_0 = GetMockApplication(ApplicationId++, user_0, Resources.CreateResource (4 * Gb, 0)); queue.SubmitApplicationAttempt(app_0, user_0); NUnit.Framework.Assert.AreEqual(1, queue.GetNumActiveApplications()); NUnit.Framework.Assert.AreEqual(0, queue.GetNumPendingApplications()); NUnit.Framework.Assert.AreEqual(1, queue.GetNumActiveApplications(user_0)); NUnit.Framework.Assert.AreEqual(0, queue.GetNumPendingApplications(user_0)); NUnit.Framework.Assert.IsTrue(queue.activeApplications.Contains(app_0)); // Submit second application FiCaSchedulerApp app_1 = GetMockApplication(ApplicationId++, user_0, Resources.CreateResource (4 * Gb, 0)); queue.SubmitApplicationAttempt(app_1, user_0); NUnit.Framework.Assert.AreEqual(2, queue.GetNumActiveApplications()); NUnit.Framework.Assert.AreEqual(0, queue.GetNumPendingApplications()); NUnit.Framework.Assert.AreEqual(2, queue.GetNumActiveApplications(user_0)); NUnit.Framework.Assert.AreEqual(0, queue.GetNumPendingApplications(user_0)); NUnit.Framework.Assert.IsTrue(queue.activeApplications.Contains(app_1)); // Submit third application, should remain pending FiCaSchedulerApp app_2 = GetMockApplication(ApplicationId++, user_0, Resources.CreateResource (4 * Gb, 0)); queue.SubmitApplicationAttempt(app_2, user_0); NUnit.Framework.Assert.AreEqual(2, queue.GetNumActiveApplications()); NUnit.Framework.Assert.AreEqual(1, queue.GetNumPendingApplications()); NUnit.Framework.Assert.AreEqual(2, queue.GetNumActiveApplications(user_0)); NUnit.Framework.Assert.AreEqual(1, queue.GetNumPendingApplications(user_0)); NUnit.Framework.Assert.IsTrue(queue.pendingApplications.Contains(app_2)); // Submit fourth application, should remain pending FiCaSchedulerApp app_3 = GetMockApplication(ApplicationId++, user_0, Resources.CreateResource (4 * Gb, 0)); queue.SubmitApplicationAttempt(app_3, user_0); NUnit.Framework.Assert.AreEqual(2, queue.GetNumActiveApplications()); NUnit.Framework.Assert.AreEqual(2, queue.GetNumPendingApplications()); NUnit.Framework.Assert.AreEqual(2, queue.GetNumActiveApplications(user_0)); NUnit.Framework.Assert.AreEqual(2, queue.GetNumPendingApplications(user_0)); NUnit.Framework.Assert.IsTrue(queue.pendingApplications.Contains(app_3)); // Kill 3rd pending application queue.FinishApplicationAttempt(app_2, A); NUnit.Framework.Assert.AreEqual(2, queue.GetNumActiveApplications()); NUnit.Framework.Assert.AreEqual(1, queue.GetNumPendingApplications()); NUnit.Framework.Assert.AreEqual(2, queue.GetNumActiveApplications(user_0)); NUnit.Framework.Assert.AreEqual(1, queue.GetNumPendingApplications(user_0)); NUnit.Framework.Assert.IsFalse(queue.pendingApplications.Contains(app_2)); NUnit.Framework.Assert.IsFalse(queue.activeApplications.Contains(app_2)); // Finish 1st application, app_3 should become active queue.FinishApplicationAttempt(app_0, A); NUnit.Framework.Assert.AreEqual(2, queue.GetNumActiveApplications()); NUnit.Framework.Assert.AreEqual(0, queue.GetNumPendingApplications()); NUnit.Framework.Assert.AreEqual(2, queue.GetNumActiveApplications(user_0)); NUnit.Framework.Assert.AreEqual(0, queue.GetNumPendingApplications(user_0)); NUnit.Framework.Assert.IsTrue(queue.activeApplications.Contains(app_3)); NUnit.Framework.Assert.IsFalse(queue.pendingApplications.Contains(app_3)); NUnit.Framework.Assert.IsFalse(queue.activeApplications.Contains(app_0)); // Finish 2nd application queue.FinishApplicationAttempt(app_1, A); NUnit.Framework.Assert.AreEqual(1, queue.GetNumActiveApplications()); NUnit.Framework.Assert.AreEqual(0, queue.GetNumPendingApplications()); NUnit.Framework.Assert.AreEqual(1, queue.GetNumActiveApplications(user_0)); NUnit.Framework.Assert.AreEqual(0, queue.GetNumPendingApplications(user_0)); NUnit.Framework.Assert.IsFalse(queue.activeApplications.Contains(app_1)); // Finish 4th application queue.FinishApplicationAttempt(app_3, A); NUnit.Framework.Assert.AreEqual(0, queue.GetNumActiveApplications()); NUnit.Framework.Assert.AreEqual(0, queue.GetNumPendingApplications()); NUnit.Framework.Assert.AreEqual(0, queue.GetNumActiveApplications(user_0)); NUnit.Framework.Assert.AreEqual(0, queue.GetNumPendingApplications(user_0)); NUnit.Framework.Assert.IsFalse(queue.activeApplications.Contains(app_3)); }
public virtual void TestHeadroom() { CapacitySchedulerConfiguration csConf = new CapacitySchedulerConfiguration(); csConf.SetUserLimit(CapacitySchedulerConfiguration.Root + "." + A, 25); SetupQueueConfiguration(csConf); YarnConfiguration conf = new YarnConfiguration(); CapacitySchedulerContext csContext = Org.Mockito.Mockito.Mock <CapacitySchedulerContext >(); Org.Mockito.Mockito.When(csContext.GetConfiguration()).ThenReturn(csConf); Org.Mockito.Mockito.When(csContext.GetConf()).ThenReturn(conf); Org.Mockito.Mockito.When(csContext.GetMinimumResourceCapability()).ThenReturn(Resources .CreateResource(Gb)); Org.Mockito.Mockito.When(csContext.GetMaximumResourceCapability()).ThenReturn(Resources .CreateResource(16 * Gb)); Org.Mockito.Mockito.When(csContext.GetApplicationComparator()).ThenReturn(CapacityScheduler .applicationComparator); Org.Mockito.Mockito.When(csContext.GetQueueComparator()).ThenReturn(CapacityScheduler .queueComparator); Org.Mockito.Mockito.When(csContext.GetResourceCalculator()).ThenReturn(resourceCalculator ); Org.Mockito.Mockito.When(csContext.GetRMContext()).ThenReturn(rmContext); // Say cluster has 100 nodes of 16G each Org.Apache.Hadoop.Yarn.Api.Records.Resource clusterResource = Resources.CreateResource (100 * 16 * Gb); Org.Mockito.Mockito.When(csContext.GetClusterResource()).ThenReturn(clusterResource ); IDictionary <string, CSQueue> queues = new Dictionary <string, CSQueue>(); CapacityScheduler.ParseQueue(csContext, csConf, null, "root", queues, queues, TestUtils .spyHook); // Manipulate queue 'a' LeafQueue queue = TestLeafQueue.StubLeafQueue((LeafQueue)queues[A]); string host_0 = "host_0"; string rack_0 = "rack_0"; FiCaSchedulerNode node_0 = TestUtils.GetMockNode(host_0, rack_0, 0, 16 * Gb); string user_0 = "user_0"; string user_1 = "user_1"; RecordFactory recordFactory = RecordFactoryProvider.GetRecordFactory(null); RMContext rmContext = TestUtils.GetMockRMContext(); RMContext spyRMContext = Org.Mockito.Mockito.Spy(rmContext); ConcurrentMap <ApplicationId, RMApp> spyApps = Org.Mockito.Mockito.Spy(new ConcurrentHashMap <ApplicationId, RMApp>()); RMApp rmApp = Org.Mockito.Mockito.Mock <RMApp>(); ResourceRequest amResourceRequest = Org.Mockito.Mockito.Mock <ResourceRequest>(); Org.Apache.Hadoop.Yarn.Api.Records.Resource amResource = Resources.CreateResource (0, 0); Org.Mockito.Mockito.When(amResourceRequest.GetCapability()).ThenReturn(amResource ); Org.Mockito.Mockito.When(rmApp.GetAMResourceRequest()).ThenReturn(amResourceRequest ); Org.Mockito.Mockito.DoReturn(rmApp).When(spyApps)[(ApplicationId)Matchers.Any()]; Org.Mockito.Mockito.When(spyRMContext.GetRMApps()).ThenReturn(spyApps); Priority priority_1 = TestUtils.CreateMockPriority(1); // Submit first application with some resource-requests from user_0, // and check headroom ApplicationAttemptId appAttemptId_0_0 = TestUtils.GetMockApplicationAttemptId(0, 0); FiCaSchedulerApp app_0_0 = new FiCaSchedulerApp(appAttemptId_0_0, user_0, queue, queue.GetActiveUsersManager(), spyRMContext); queue.SubmitApplicationAttempt(app_0_0, user_0); IList <ResourceRequest> app_0_0_requests = new AList <ResourceRequest>(); app_0_0_requests.AddItem(TestUtils.CreateResourceRequest(ResourceRequest.Any, 1 * Gb, 2, true, priority_1, recordFactory)); app_0_0.UpdateResourceRequests(app_0_0_requests); // Schedule to compute queue.AssignContainers(clusterResource, node_0, new ResourceLimits(clusterResource )); Org.Apache.Hadoop.Yarn.Api.Records.Resource expectedHeadroom = Resources.CreateResource (10 * 16 * Gb, 1); NUnit.Framework.Assert.AreEqual(expectedHeadroom, app_0_0.GetHeadroom()); // Submit second application from user_0, check headroom ApplicationAttemptId appAttemptId_0_1 = TestUtils.GetMockApplicationAttemptId(1, 0); FiCaSchedulerApp app_0_1 = new FiCaSchedulerApp(appAttemptId_0_1, user_0, queue, queue.GetActiveUsersManager(), spyRMContext); queue.SubmitApplicationAttempt(app_0_1, user_0); IList <ResourceRequest> app_0_1_requests = new AList <ResourceRequest>(); app_0_1_requests.AddItem(TestUtils.CreateResourceRequest(ResourceRequest.Any, 1 * Gb, 2, true, priority_1, recordFactory)); app_0_1.UpdateResourceRequests(app_0_1_requests); // Schedule to compute queue.AssignContainers(clusterResource, node_0, new ResourceLimits(clusterResource )); // Schedule to compute NUnit.Framework.Assert.AreEqual(expectedHeadroom, app_0_0.GetHeadroom()); NUnit.Framework.Assert.AreEqual(expectedHeadroom, app_0_1.GetHeadroom()); // no change // Submit first application from user_1, check for new headroom ApplicationAttemptId appAttemptId_1_0 = TestUtils.GetMockApplicationAttemptId(2, 0); FiCaSchedulerApp app_1_0 = new FiCaSchedulerApp(appAttemptId_1_0, user_1, queue, queue.GetActiveUsersManager(), spyRMContext); queue.SubmitApplicationAttempt(app_1_0, user_1); IList <ResourceRequest> app_1_0_requests = new AList <ResourceRequest>(); app_1_0_requests.AddItem(TestUtils.CreateResourceRequest(ResourceRequest.Any, 1 * Gb, 2, true, priority_1, recordFactory)); app_1_0.UpdateResourceRequests(app_1_0_requests); // Schedule to compute queue.AssignContainers(clusterResource, node_0, new ResourceLimits(clusterResource )); // Schedule to compute expectedHeadroom = Resources.CreateResource(10 * 16 * Gb / 2, 1); // changes NUnit.Framework.Assert.AreEqual(expectedHeadroom, app_0_0.GetHeadroom()); NUnit.Framework.Assert.AreEqual(expectedHeadroom, app_0_1.GetHeadroom()); NUnit.Framework.Assert.AreEqual(expectedHeadroom, app_1_0.GetHeadroom()); // Now reduce cluster size and check for the smaller headroom clusterResource = Resources.CreateResource(90 * 16 * Gb); queue.AssignContainers(clusterResource, node_0, new ResourceLimits(clusterResource )); // Schedule to compute expectedHeadroom = Resources.CreateResource(9 * 16 * Gb / 2, 1); // changes NUnit.Framework.Assert.AreEqual(expectedHeadroom, app_0_0.GetHeadroom()); NUnit.Framework.Assert.AreEqual(expectedHeadroom, app_0_1.GetHeadroom()); NUnit.Framework.Assert.AreEqual(expectedHeadroom, app_1_0.GetHeadroom()); }
public virtual void TestSortedQueues() { // Setup queue configs SetupSortedQueues(csConf); IDictionary <string, CSQueue> queues = new Dictionary <string, CSQueue>(); CSQueue root = CapacityScheduler.ParseQueue(csContext, csConf, null, CapacitySchedulerConfiguration .Root, queues, queues, TestUtils.spyHook); // Setup some nodes int memoryPerNode = 10; int coresPerNode = 16; int numNodes = 1; FiCaSchedulerNode node_0 = TestUtils.GetMockNode("host_0", DefaultRack, 0, memoryPerNode * Gb); Org.Mockito.Mockito.DoNothing().When(node_0).ReleaseContainer(Matchers.Any <Container >()); Org.Apache.Hadoop.Yarn.Api.Records.Resource clusterResource = Resources.CreateResource (numNodes * (memoryPerNode * Gb), numNodes * coresPerNode); Org.Mockito.Mockito.When(csContext.GetNumClusterNodes()).ThenReturn(numNodes); // Start testing CSQueue a = queues[A]; CSQueue b = queues[B]; CSQueue c = queues[C]; CSQueue d = queues[D]; string user_0 = "user_0"; // Stub an App and its containerCompleted FiCaSchedulerApp app_0 = GetMockApplication(0, user_0); Org.Mockito.Mockito.DoReturn(true).When(app_0).ContainerCompleted(Matchers.Any <RMContainer >(), Matchers.Any <ContainerStatus>(), Matchers.Any <RMContainerEventType>()); Priority priority = TestUtils.CreateMockPriority(1); ContainerAllocationExpirer expirer = Org.Mockito.Mockito.Mock <ContainerAllocationExpirer >(); DrainDispatcher drainDispatcher = new DrainDispatcher(); RMApplicationHistoryWriter writer = Org.Mockito.Mockito.Mock <RMApplicationHistoryWriter >(); SystemMetricsPublisher publisher = Org.Mockito.Mockito.Mock <SystemMetricsPublisher >(); RMContext rmContext = Org.Mockito.Mockito.Mock <RMContext>(); Org.Mockito.Mockito.When(rmContext.GetContainerAllocationExpirer()).ThenReturn(expirer ); Org.Mockito.Mockito.When(rmContext.GetDispatcher()).ThenReturn(drainDispatcher); Org.Mockito.Mockito.When(rmContext.GetRMApplicationHistoryWriter()).ThenReturn(writer ); Org.Mockito.Mockito.When(rmContext.GetSystemMetricsPublisher()).ThenReturn(publisher ); Org.Mockito.Mockito.When(rmContext.GetYarnConfiguration()).ThenReturn(new YarnConfiguration ()); ApplicationAttemptId appAttemptId = BuilderUtils.NewApplicationAttemptId(app_0.GetApplicationId (), 1); ContainerId containerId = BuilderUtils.NewContainerId(appAttemptId, 1); Container container = TestUtils.GetMockContainer(containerId, node_0.GetNodeID(), Resources.CreateResource(1 * Gb), priority); RMContainer rmContainer = new RMContainerImpl(container, appAttemptId, node_0.GetNodeID (), "user", rmContext); // Assign {1,2,3,4} 1GB containers respectively to queues StubQueueAllocation(a, clusterResource, node_0, 1 * Gb); StubQueueAllocation(b, clusterResource, node_0, 0 * Gb); StubQueueAllocation(c, clusterResource, node_0, 0 * Gb); StubQueueAllocation(d, clusterResource, node_0, 0 * Gb); root.AssignContainers(clusterResource, node_0, new ResourceLimits(clusterResource )); for (int i = 0; i < 2; i++) { StubQueueAllocation(a, clusterResource, node_0, 0 * Gb); StubQueueAllocation(b, clusterResource, node_0, 1 * Gb); StubQueueAllocation(c, clusterResource, node_0, 0 * Gb); StubQueueAllocation(d, clusterResource, node_0, 0 * Gb); root.AssignContainers(clusterResource, node_0, new ResourceLimits(clusterResource )); } for (int i_1 = 0; i_1 < 3; i_1++) { StubQueueAllocation(a, clusterResource, node_0, 0 * Gb); StubQueueAllocation(b, clusterResource, node_0, 0 * Gb); StubQueueAllocation(c, clusterResource, node_0, 1 * Gb); StubQueueAllocation(d, clusterResource, node_0, 0 * Gb); root.AssignContainers(clusterResource, node_0, new ResourceLimits(clusterResource )); } for (int i_2 = 0; i_2 < 4; i_2++) { StubQueueAllocation(a, clusterResource, node_0, 0 * Gb); StubQueueAllocation(b, clusterResource, node_0, 0 * Gb); StubQueueAllocation(c, clusterResource, node_0, 0 * Gb); StubQueueAllocation(d, clusterResource, node_0, 1 * Gb); root.AssignContainers(clusterResource, node_0, new ResourceLimits(clusterResource )); } VerifyQueueMetrics(a, 1 * Gb, clusterResource); VerifyQueueMetrics(b, 2 * Gb, clusterResource); VerifyQueueMetrics(c, 3 * Gb, clusterResource); VerifyQueueMetrics(d, 4 * Gb, clusterResource); Log.Info("status child-queues: " + ((ParentQueue)root).GetChildQueuesToPrint()); //Release 3 x 1GB containers from D for (int i_3 = 0; i_3 < 3; i_3++) { d.CompletedContainer(clusterResource, app_0, node_0, rmContainer, null, RMContainerEventType .Kill, null, true); } VerifyQueueMetrics(a, 1 * Gb, clusterResource); VerifyQueueMetrics(b, 2 * Gb, clusterResource); VerifyQueueMetrics(c, 3 * Gb, clusterResource); VerifyQueueMetrics(d, 1 * Gb, clusterResource); //reset manually resources on node node_0 = TestUtils.GetMockNode("host_0", DefaultRack, 0, (memoryPerNode - 1 - 2 - 3 - 1) * Gb); Log.Info("status child-queues: " + ((ParentQueue)root).GetChildQueuesToPrint()); // Assign 2 x 1GB Containers to A for (int i_4 = 0; i_4 < 2; i_4++) { StubQueueAllocation(a, clusterResource, node_0, 1 * Gb); StubQueueAllocation(b, clusterResource, node_0, 0 * Gb); StubQueueAllocation(c, clusterResource, node_0, 0 * Gb); StubQueueAllocation(d, clusterResource, node_0, 0 * Gb); root.AssignContainers(clusterResource, node_0, new ResourceLimits(clusterResource )); } VerifyQueueMetrics(a, 3 * Gb, clusterResource); VerifyQueueMetrics(b, 2 * Gb, clusterResource); VerifyQueueMetrics(c, 3 * Gb, clusterResource); VerifyQueueMetrics(d, 1 * Gb, clusterResource); Log.Info("status child-queues: " + ((ParentQueue)root).GetChildQueuesToPrint()); //Release 1GB Container from A a.CompletedContainer(clusterResource, app_0, node_0, rmContainer, null, RMContainerEventType .Kill, null, true); VerifyQueueMetrics(a, 2 * Gb, clusterResource); VerifyQueueMetrics(b, 2 * Gb, clusterResource); VerifyQueueMetrics(c, 3 * Gb, clusterResource); VerifyQueueMetrics(d, 1 * Gb, clusterResource); //reset manually resources on node node_0 = TestUtils.GetMockNode("host_0", DefaultRack, 0, (memoryPerNode - 2 - 2 - 3 - 1) * Gb); Log.Info("status child-queues: " + ((ParentQueue)root).GetChildQueuesToPrint()); // Assign 1GB container to B StubQueueAllocation(a, clusterResource, node_0, 0 * Gb); StubQueueAllocation(b, clusterResource, node_0, 1 * Gb); StubQueueAllocation(c, clusterResource, node_0, 0 * Gb); StubQueueAllocation(d, clusterResource, node_0, 0 * Gb); root.AssignContainers(clusterResource, node_0, new ResourceLimits(clusterResource )); VerifyQueueMetrics(a, 2 * Gb, clusterResource); VerifyQueueMetrics(b, 3 * Gb, clusterResource); VerifyQueueMetrics(c, 3 * Gb, clusterResource); VerifyQueueMetrics(d, 1 * Gb, clusterResource); Log.Info("status child-queues: " + ((ParentQueue)root).GetChildQueuesToPrint()); //Release 1GB container resources from B b.CompletedContainer(clusterResource, app_0, node_0, rmContainer, null, RMContainerEventType .Kill, null, true); VerifyQueueMetrics(a, 2 * Gb, clusterResource); VerifyQueueMetrics(b, 2 * Gb, clusterResource); VerifyQueueMetrics(c, 3 * Gb, clusterResource); VerifyQueueMetrics(d, 1 * Gb, clusterResource); //reset manually resources on node node_0 = TestUtils.GetMockNode("host_0", DefaultRack, 0, (memoryPerNode - 2 - 2 - 3 - 1) * Gb); Log.Info("status child-queues: " + ((ParentQueue)root).GetChildQueuesToPrint()); // Assign 1GB container to A StubQueueAllocation(a, clusterResource, node_0, 1 * Gb); StubQueueAllocation(b, clusterResource, node_0, 0 * Gb); StubQueueAllocation(c, clusterResource, node_0, 0 * Gb); StubQueueAllocation(d, clusterResource, node_0, 0 * Gb); root.AssignContainers(clusterResource, node_0, new ResourceLimits(clusterResource )); VerifyQueueMetrics(a, 3 * Gb, clusterResource); VerifyQueueMetrics(b, 2 * Gb, clusterResource); VerifyQueueMetrics(c, 3 * Gb, clusterResource); VerifyQueueMetrics(d, 1 * Gb, clusterResource); Log.Info("status child-queues: " + ((ParentQueue)root).GetChildQueuesToPrint()); // Now do the real test, where B and D request a 1GB container // D should should get the next container if the order is correct StubQueueAllocation(a, clusterResource, node_0, 0 * Gb); StubQueueAllocation(b, clusterResource, node_0, 1 * Gb); StubQueueAllocation(c, clusterResource, node_0, 0 * Gb); StubQueueAllocation(d, clusterResource, node_0, 1 * Gb); root.AssignContainers(clusterResource, node_0, new ResourceLimits(clusterResource )); InOrder allocationOrder = Org.Mockito.Mockito.InOrder(d, b); allocationOrder.Verify(d).AssignContainers(Matchers.Eq(clusterResource), Matchers.Any <FiCaSchedulerNode>(), Matchers.Any <ResourceLimits>()); allocationOrder.Verify(b).AssignContainers(Matchers.Eq(clusterResource), Matchers.Any <FiCaSchedulerNode>(), Matchers.Any <ResourceLimits>()); VerifyQueueMetrics(a, 3 * Gb, clusterResource); VerifyQueueMetrics(b, 2 * Gb, clusterResource); VerifyQueueMetrics(c, 3 * Gb, clusterResource); VerifyQueueMetrics(d, 2 * Gb, clusterResource); //D got the container Log.Info("status child-queues: " + ((ParentQueue)root).GetChildQueuesToPrint()); }
public abstract void CompletedContainer(Org.Apache.Hadoop.Yarn.Api.Records.Resource arg1, FiCaSchedulerApp arg2, FiCaSchedulerNode arg3, RMContainer arg4, ContainerStatus arg5, RMContainerEventType arg6, CSQueue arg7, bool arg8);
public virtual void TestActiveApplicationLimits() { string user_0 = "user_0"; string user_1 = "user_1"; string user_2 = "user_2"; NUnit.Framework.Assert.AreEqual(Org.Apache.Hadoop.Yarn.Api.Records.Resource.NewInstance (16 * Gb, 1), queue.GetAMResourceLimit()); NUnit.Framework.Assert.AreEqual(Org.Apache.Hadoop.Yarn.Api.Records.Resource.NewInstance (8 * Gb, 1), queue.GetUserAMResourceLimit()); int ApplicationId = 0; // Submit first application FiCaSchedulerApp app_0 = GetMockApplication(ApplicationId++, user_0, Resources.CreateResource (4 * Gb, 0)); queue.SubmitApplicationAttempt(app_0, user_0); NUnit.Framework.Assert.AreEqual(1, queue.GetNumActiveApplications()); NUnit.Framework.Assert.AreEqual(0, queue.GetNumPendingApplications()); NUnit.Framework.Assert.AreEqual(1, queue.GetNumActiveApplications(user_0)); NUnit.Framework.Assert.AreEqual(0, queue.GetNumPendingApplications(user_0)); // Submit second application FiCaSchedulerApp app_1 = GetMockApplication(ApplicationId++, user_0, Resources.CreateResource (4 * Gb, 0)); queue.SubmitApplicationAttempt(app_1, user_0); NUnit.Framework.Assert.AreEqual(2, queue.GetNumActiveApplications()); NUnit.Framework.Assert.AreEqual(0, queue.GetNumPendingApplications()); NUnit.Framework.Assert.AreEqual(2, queue.GetNumActiveApplications(user_0)); NUnit.Framework.Assert.AreEqual(0, queue.GetNumPendingApplications(user_0)); // Submit third application, should remain pending due to user amlimit FiCaSchedulerApp app_2 = GetMockApplication(ApplicationId++, user_0, Resources.CreateResource (4 * Gb, 0)); queue.SubmitApplicationAttempt(app_2, user_0); NUnit.Framework.Assert.AreEqual(2, queue.GetNumActiveApplications()); NUnit.Framework.Assert.AreEqual(1, queue.GetNumPendingApplications()); NUnit.Framework.Assert.AreEqual(2, queue.GetNumActiveApplications(user_0)); NUnit.Framework.Assert.AreEqual(1, queue.GetNumPendingApplications(user_0)); // Finish one application, app_2 should be activated queue.FinishApplicationAttempt(app_0, A); NUnit.Framework.Assert.AreEqual(2, queue.GetNumActiveApplications()); NUnit.Framework.Assert.AreEqual(0, queue.GetNumPendingApplications()); NUnit.Framework.Assert.AreEqual(2, queue.GetNumActiveApplications(user_0)); NUnit.Framework.Assert.AreEqual(0, queue.GetNumPendingApplications(user_0)); // Submit another one for user_0 FiCaSchedulerApp app_3 = GetMockApplication(ApplicationId++, user_0, Resources.CreateResource (4 * Gb, 0)); queue.SubmitApplicationAttempt(app_3, user_0); NUnit.Framework.Assert.AreEqual(2, queue.GetNumActiveApplications()); NUnit.Framework.Assert.AreEqual(1, queue.GetNumPendingApplications()); NUnit.Framework.Assert.AreEqual(2, queue.GetNumActiveApplications(user_0)); NUnit.Framework.Assert.AreEqual(1, queue.GetNumPendingApplications(user_0)); // Submit first app for user_1 FiCaSchedulerApp app_4 = GetMockApplication(ApplicationId++, user_1, Resources.CreateResource (8 * Gb, 0)); queue.SubmitApplicationAttempt(app_4, user_1); NUnit.Framework.Assert.AreEqual(3, queue.GetNumActiveApplications()); NUnit.Framework.Assert.AreEqual(1, queue.GetNumPendingApplications()); NUnit.Framework.Assert.AreEqual(2, queue.GetNumActiveApplications(user_0)); NUnit.Framework.Assert.AreEqual(1, queue.GetNumPendingApplications(user_0)); NUnit.Framework.Assert.AreEqual(1, queue.GetNumActiveApplications(user_1)); NUnit.Framework.Assert.AreEqual(0, queue.GetNumPendingApplications(user_1)); // Submit first app for user_2, should block due to queue amlimit FiCaSchedulerApp app_5 = GetMockApplication(ApplicationId++, user_2, Resources.CreateResource (8 * Gb, 0)); queue.SubmitApplicationAttempt(app_5, user_2); NUnit.Framework.Assert.AreEqual(3, queue.GetNumActiveApplications()); NUnit.Framework.Assert.AreEqual(2, queue.GetNumPendingApplications()); NUnit.Framework.Assert.AreEqual(2, queue.GetNumActiveApplications(user_0)); NUnit.Framework.Assert.AreEqual(1, queue.GetNumPendingApplications(user_0)); NUnit.Framework.Assert.AreEqual(1, queue.GetNumActiveApplications(user_1)); NUnit.Framework.Assert.AreEqual(0, queue.GetNumPendingApplications(user_1)); NUnit.Framework.Assert.AreEqual(1, queue.GetNumPendingApplications(user_2)); // Now finish one app of user_1 so app_5 should be activated queue.FinishApplicationAttempt(app_4, A); NUnit.Framework.Assert.AreEqual(3, queue.GetNumActiveApplications()); NUnit.Framework.Assert.AreEqual(1, queue.GetNumPendingApplications()); NUnit.Framework.Assert.AreEqual(2, queue.GetNumActiveApplications(user_0)); NUnit.Framework.Assert.AreEqual(1, queue.GetNumPendingApplications(user_0)); NUnit.Framework.Assert.AreEqual(0, queue.GetNumActiveApplications(user_1)); NUnit.Framework.Assert.AreEqual(0, queue.GetNumPendingApplications(user_1)); NUnit.Framework.Assert.AreEqual(1, queue.GetNumActiveApplications(user_2)); NUnit.Framework.Assert.AreEqual(0, queue.GetNumPendingApplications(user_2)); }
public abstract void SubmitApplicationAttempt(FiCaSchedulerApp arg1, string arg2);
public abstract void FinishApplicationAttempt(FiCaSchedulerApp arg1, string arg2);
public abstract void DetachContainer(Org.Apache.Hadoop.Yarn.Api.Records.Resource arg1, FiCaSchedulerApp arg2, RMContainer arg3);
// submit attempt logic. public override void FinishApplicationAttempt(FiCaSchedulerApp application, string queue) { }
public virtual void TestAMResourceLimit() { string user_0 = "user_0"; string user_1 = "user_1"; // This uses the default 10% of cluster value for the max am resources // which are allowed, at 80GB = 8GB for AM's at the queue level. The user // am limit is 4G initially (based on the queue absolute capacity) // when there is only 1 user, and drops to 2G (the userlimit) when there // is a second user Org.Apache.Hadoop.Yarn.Api.Records.Resource clusterResource = Org.Apache.Hadoop.Yarn.Api.Records.Resource .NewInstance(80 * Gb, 40); queue.UpdateClusterResource(clusterResource, new ResourceLimits(clusterResource)); ActiveUsersManager activeUsersManager = Org.Mockito.Mockito.Mock <ActiveUsersManager >(); Org.Mockito.Mockito.When(queue.GetActiveUsersManager()).ThenReturn(activeUsersManager ); NUnit.Framework.Assert.AreEqual(Org.Apache.Hadoop.Yarn.Api.Records.Resource.NewInstance (8 * Gb, 1), queue.GetAMResourceLimit()); NUnit.Framework.Assert.AreEqual(Org.Apache.Hadoop.Yarn.Api.Records.Resource.NewInstance (4 * Gb, 1), queue.GetUserAMResourceLimit()); // Two apps for user_0, both start int ApplicationId = 0; FiCaSchedulerApp app_0 = GetMockApplication(ApplicationId++, user_0, Org.Apache.Hadoop.Yarn.Api.Records.Resource .NewInstance(2 * Gb, 1)); queue.SubmitApplicationAttempt(app_0, user_0); NUnit.Framework.Assert.AreEqual(1, queue.GetNumActiveApplications()); NUnit.Framework.Assert.AreEqual(0, queue.GetNumPendingApplications()); NUnit.Framework.Assert.AreEqual(1, queue.GetNumActiveApplications(user_0)); NUnit.Framework.Assert.AreEqual(0, queue.GetNumPendingApplications(user_0)); Org.Mockito.Mockito.When(activeUsersManager.GetNumActiveUsers()).ThenReturn(1); FiCaSchedulerApp app_1 = GetMockApplication(ApplicationId++, user_0, Org.Apache.Hadoop.Yarn.Api.Records.Resource .NewInstance(2 * Gb, 1)); queue.SubmitApplicationAttempt(app_1, user_0); NUnit.Framework.Assert.AreEqual(2, queue.GetNumActiveApplications()); NUnit.Framework.Assert.AreEqual(0, queue.GetNumPendingApplications()); NUnit.Framework.Assert.AreEqual(2, queue.GetNumActiveApplications(user_0)); NUnit.Framework.Assert.AreEqual(0, queue.GetNumPendingApplications(user_0)); // AMLimits unchanged NUnit.Framework.Assert.AreEqual(Org.Apache.Hadoop.Yarn.Api.Records.Resource.NewInstance (8 * Gb, 1), queue.GetAMResourceLimit()); NUnit.Framework.Assert.AreEqual(Org.Apache.Hadoop.Yarn.Api.Records.Resource.NewInstance (4 * Gb, 1), queue.GetUserAMResourceLimit()); // One app for user_1, starts FiCaSchedulerApp app_2 = GetMockApplication(ApplicationId++, user_1, Org.Apache.Hadoop.Yarn.Api.Records.Resource .NewInstance(2 * Gb, 1)); queue.SubmitApplicationAttempt(app_2, user_1); NUnit.Framework.Assert.AreEqual(3, queue.GetNumActiveApplications()); NUnit.Framework.Assert.AreEqual(0, queue.GetNumPendingApplications()); NUnit.Framework.Assert.AreEqual(1, queue.GetNumActiveApplications(user_1)); NUnit.Framework.Assert.AreEqual(0, queue.GetNumPendingApplications(user_1)); Org.Mockito.Mockito.When(activeUsersManager.GetNumActiveUsers()).ThenReturn(2); // Now userAMResourceLimit drops to the queue configured 50% as there is // another user active NUnit.Framework.Assert.AreEqual(Org.Apache.Hadoop.Yarn.Api.Records.Resource.NewInstance (8 * Gb, 1), queue.GetAMResourceLimit()); NUnit.Framework.Assert.AreEqual(Org.Apache.Hadoop.Yarn.Api.Records.Resource.NewInstance (2 * Gb, 1), queue.GetUserAMResourceLimit()); // Second user_1 app cannot start FiCaSchedulerApp app_3 = GetMockApplication(ApplicationId++, user_1, Org.Apache.Hadoop.Yarn.Api.Records.Resource .NewInstance(2 * Gb, 1)); queue.SubmitApplicationAttempt(app_3, user_1); NUnit.Framework.Assert.AreEqual(3, queue.GetNumActiveApplications()); NUnit.Framework.Assert.AreEqual(1, queue.GetNumPendingApplications()); NUnit.Framework.Assert.AreEqual(1, queue.GetNumActiveApplications(user_1)); NUnit.Framework.Assert.AreEqual(1, queue.GetNumPendingApplications(user_1)); // Now finish app so another should be activated queue.FinishApplicationAttempt(app_2, A); NUnit.Framework.Assert.AreEqual(3, queue.GetNumActiveApplications()); NUnit.Framework.Assert.AreEqual(0, queue.GetNumPendingApplications()); NUnit.Framework.Assert.AreEqual(1, queue.GetNumActiveApplications(user_1)); NUnit.Framework.Assert.AreEqual(0, queue.GetNumPendingApplications(user_1)); }