public virtual bool Unreserve(FiCaSchedulerNode node, Priority priority) { lock (this) { IDictionary <NodeId, RMContainer> reservedContainers = this.reservedContainers[priority ]; if (reservedContainers != null) { RMContainer reservedContainer = Sharpen.Collections.Remove(reservedContainers, node .GetNodeID()); // unreserve is now triggered in new scenarios (preemption) // as a consequence reservedcontainer might be null, adding NP-checks if (reservedContainer != null && reservedContainer.GetContainer() != null && reservedContainer .GetContainer().GetResource() != null) { if (reservedContainers.IsEmpty()) { Sharpen.Collections.Remove(this.reservedContainers, priority); } // Reset the re-reservation count ResetReReservations(priority); Org.Apache.Hadoop.Yarn.Api.Records.Resource resource = reservedContainer.GetContainer ().GetResource(); Resources.SubtractFrom(currentReservation, resource); Log.Info("Application " + GetApplicationId() + " unreserved " + " on node " + node + ", currently has " + reservedContainers.Count + " at priority " + priority + "; currentReservation " + currentReservation); return(true); } } return(false); } }
public virtual RMContainer Allocate(NodeType type, FiCaSchedulerNode node, Priority priority, ResourceRequest request, Container container) { lock (this) { if (isStopped) { return(null); } // Required sanity check - AM can call 'allocate' to update resource // request without locking the scheduler, hence we need to check if (GetTotalRequiredResources(priority) <= 0) { return(null); } // Create RMContainer RMContainer rmContainer = new RMContainerImpl(container, this.GetApplicationAttemptId (), node.GetNodeID(), appSchedulingInfo.GetUser(), this.rmContext); // Add it to allContainers list. newlyAllocatedContainers.AddItem(rmContainer); liveContainers[container.GetId()] = rmContainer; // Update consumption and track allocations IList <ResourceRequest> resourceRequestList = appSchedulingInfo.Allocate(type, node , priority, request, container); Resources.AddTo(currentConsumption, container.GetResource()); // Update resource requests related to "request" and store in RMContainer ((RMContainerImpl)rmContainer).SetResourceRequests(resourceRequestList); // Inform the container rmContainer.Handle(new RMContainerEvent(container.GetId(), RMContainerEventType.Start )); if (Log.IsDebugEnabled()) { Log.Debug("allocate: applicationAttemptId=" + container.GetId().GetApplicationAttemptId () + " container=" + container.GetId() + " host=" + container.GetNodeId().GetHost () + " type=" + type); } RMAuditLogger.LogSuccess(GetUser(), RMAuditLogger.AuditConstants.AllocContainer, "SchedulerApp", GetApplicationId(), container.GetId()); return(rmContainer); } }
public static bool IsBlacklisted(FiCaSchedulerApp application, FiCaSchedulerNode node, Log Log) { if (application.IsBlacklisted(node.GetNodeName())) { if (Log.IsDebugEnabled()) { Log.Debug("Skipping 'host' " + node.GetNodeName() + " for " + application.GetApplicationId () + " since it has been blacklisted"); } return(true); } if (application.IsBlacklisted(node.GetRackName())) { if (Log.IsDebugEnabled()) { Log.Debug("Skipping 'rack' " + node.GetRackName() + " for " + application.GetApplicationId () + " since it has been blacklisted"); } return(true); } return(false); }