Esempio n. 1
0
        private void AddResourceRequest(Priority priority, string resourceName, Resource
                                        capability, T req, bool relaxLocality, string labelExpression)
        {
            IDictionary <string, SortedDictionary <Resource, AMRMClientImpl.ResourceRequestInfo
                                                   > > remoteRequests = this.remoteRequestsTable[priority];

            if (remoteRequests == null)
            {
                remoteRequests = new Dictionary <string, SortedDictionary <Resource, AMRMClientImpl.ResourceRequestInfo
                                                                           > >();
                this.remoteRequestsTable[priority] = remoteRequests;
                if (Log.IsDebugEnabled())
                {
                    Log.Debug("Added priority=" + priority);
                }
            }
            SortedDictionary <Resource, AMRMClientImpl.ResourceRequestInfo> reqMap = remoteRequests
                                                                                     [resourceName];

            if (reqMap == null)
            {
                // capabilities are stored in reverse sorted order. smallest last.
                reqMap = new SortedDictionary <Resource, AMRMClientImpl.ResourceRequestInfo>(new AMRMClientImpl.ResourceReverseMemoryThenCpuComparator
                                                                                                 (this));
                remoteRequests[resourceName] = reqMap;
            }
            AMRMClientImpl.ResourceRequestInfo resourceRequestInfo = reqMap[capability];
            if (resourceRequestInfo == null)
            {
                resourceRequestInfo = new AMRMClientImpl.ResourceRequestInfo(this, priority, resourceName
                                                                             , capability, relaxLocality);
                reqMap[capability] = resourceRequestInfo;
            }
            resourceRequestInfo.remoteRequest.SetNumContainers(resourceRequestInfo.remoteRequest
                                                               .GetNumContainers() + 1);
            if (relaxLocality)
            {
                resourceRequestInfo.containerRequests.AddItem(req);
            }
            if (ResourceRequest.Any.Equals(resourceName))
            {
                resourceRequestInfo.remoteRequest.SetNodeLabelExpression(labelExpression);
            }
            // Note this down for next interaction with ResourceManager
            AddResourceRequestToAsk(resourceRequestInfo.remoteRequest);
            if (Log.IsDebugEnabled())
            {
                Log.Debug("addResourceRequest:" + " applicationId=" + " priority=" + priority.GetPriority
                              () + " resourceName=" + resourceName + " numContainers=" + resourceRequestInfo.remoteRequest
                          .GetNumContainers() + " #asks=" + ask.Count);
            }
        }
Esempio n. 2
0
 public override IList <ICollection <T> > GetMatchingRequests(Priority priority, string
                                                              resourceName, Resource capability)
 {
     lock (this)
     {
         Preconditions.CheckArgument(capability != null, "The Resource to be requested should not be null "
                                     );
         Preconditions.CheckArgument(priority != null, "The priority at which to request containers should not be null "
                                     );
         IList <LinkedHashSet <T> > list = new List <LinkedHashSet <T> >();
         IDictionary <string, SortedDictionary <Resource, AMRMClientImpl.ResourceRequestInfo
                                                > > remoteRequests = this.remoteRequestsTable[priority];
         if (remoteRequests == null)
         {
             return(list);
         }
         SortedDictionary <Resource, AMRMClientImpl.ResourceRequestInfo> reqMap = remoteRequests
                                                                                  [resourceName];
         if (reqMap == null)
         {
             return(list);
         }
         AMRMClientImpl.ResourceRequestInfo resourceRequestInfo = reqMap[capability];
         if (resourceRequestInfo != null && !resourceRequestInfo.containerRequests.IsEmpty
                 ())
         {
             list.AddItem(resourceRequestInfo.containerRequests);
             return(list);
         }
         // no exact match. Container may be larger than what was requested.
         // get all resources <= capability. map is reverse sorted.
         SortedDictionary <Resource, AMRMClientImpl.ResourceRequestInfo> tailMap = reqMap.TailMap
                                                                                       (capability);
         foreach (KeyValuePair <Resource, AMRMClientImpl.ResourceRequestInfo> entry in tailMap)
         {
             if (CanFit(entry.Key, capability) && !entry.Value.containerRequests.IsEmpty())
             {
                 // match found that fits in the larger resource
                 list.AddItem(entry.Value.containerRequests);
             }
         }
         // no match found
         return(list);
     }
 }
Esempio n. 3
0
        private void DecResourceRequest(Priority priority, string resourceName, Resource
                                        capability, T req)
        {
            IDictionary <string, SortedDictionary <Resource, AMRMClientImpl.ResourceRequestInfo
                                                   > > remoteRequests = this.remoteRequestsTable[priority];

            if (remoteRequests == null)
            {
                if (Log.IsDebugEnabled())
                {
                    Log.Debug("Not decrementing resource as priority " + priority + " is not present in request table"
                              );
                }
                return;
            }
            IDictionary <Resource, AMRMClientImpl.ResourceRequestInfo> reqMap = remoteRequests
                                                                                [resourceName];

            if (reqMap == null)
            {
                if (Log.IsDebugEnabled())
                {
                    Log.Debug("Not decrementing resource as " + resourceName + " is not present in request table"
                              );
                }
                return;
            }
            AMRMClientImpl.ResourceRequestInfo resourceRequestInfo = reqMap[capability];
            if (Log.IsDebugEnabled())
            {
                Log.Debug("BEFORE decResourceRequest:" + " applicationId=" + " priority=" + priority
                          .GetPriority() + " resourceName=" + resourceName + " numContainers=" + resourceRequestInfo
                          .remoteRequest.GetNumContainers() + " #asks=" + ask.Count);
            }
            resourceRequestInfo.remoteRequest.SetNumContainers(resourceRequestInfo.remoteRequest
                                                               .GetNumContainers() - 1);
            resourceRequestInfo.containerRequests.Remove(req);
            if (resourceRequestInfo.remoteRequest.GetNumContainers() < 0)
            {
                // guard against spurious removals
                resourceRequestInfo.remoteRequest.SetNumContainers(0);
            }
            // send the ResourceRequest to RM even if is 0 because it needs to override
            // a previously sent value. If ResourceRequest was not sent previously then
            // sending 0 aught to be a no-op on RM
            AddResourceRequestToAsk(resourceRequestInfo.remoteRequest);
            // delete entries from map if no longer needed
            if (resourceRequestInfo.remoteRequest.GetNumContainers() == 0)
            {
                Sharpen.Collections.Remove(reqMap, capability);
                if (reqMap.Count == 0)
                {
                    Sharpen.Collections.Remove(remoteRequests, resourceName);
                }
                if (remoteRequests.Count == 0)
                {
                    Sharpen.Collections.Remove(remoteRequestsTable, priority);
                }
            }
            if (Log.IsDebugEnabled())
            {
                Log.Info("AFTER decResourceRequest:" + " applicationId=" + " priority=" + priority
                         .GetPriority() + " resourceName=" + resourceName + " numContainers=" + resourceRequestInfo
                         .remoteRequest.GetNumContainers() + " #asks=" + ask.Count);
            }
        }