示例#1
0
        public IHttpActionResult GetResourceCount(string connectionInfo, string query)
        {
            try
            {
                Lazy <IOCGDSRepository> repo = RepositoryManager.GetRepository(repos, "MIMResource");

                if (repo != null)
                {
                    ConnectionInfo ci = ConnectionInfo.BuildConnectionInfo(connectionInfo);
                    ResourceOption ro = new ResourceOption(ci);

                    int count = repo.Value.GetResourceCount(query, ro);

                    return(Ok(count));
                }
                else
                {
                    return(NotFound());
                }
            }
            catch (Exception exp)
            {
                return(InternalServerError(exp));
            }
        }
示例#2
0
        public IHttpActionResult RemoveValuesFromResource(string connectionInfo, string objectID, string attributeName, [FromUri] string[] valuesToRemove)
        {
            try
            {
                Lazy <IOCGDSRepository> repo = RepositoryManager.GetRepository(repos, "MIMResource");

                if (repo != null)
                {
                    ConnectionInfo ci = ConnectionInfo.BuildConnectionInfo(connectionInfo);
                    ResourceOption ro = new ResourceOption(ci);

                    string id = repo.Value.RemoveValuesFromResource(objectID, attributeName, valuesToRemove, ro);

                    if (id.Equals("AuthorizationRequired"))
                    {
                        return(Content(HttpStatusCode.PartialContent, id));
                    }

                    return(Ok(id));
                }
                else
                {
                    return(NotFound());
                }
            }
            catch (Exception exp)
            {
                return(InternalServerError(exp));
            }
        }
示例#3
0
        public IHttpActionResult CreateResource(string connectionInfo, DSResource resource)
        {
            try
            {
                Lazy <IOCGDSRepository> repo = RepositoryManager.GetRepository(repos, "MIMResource");

                if (repo != null)
                {
                    ConnectionInfo ci = ConnectionInfo.BuildConnectionInfo(connectionInfo);
                    ResourceOption ro = new ResourceOption(ci);

                    string id = repo.Value.CreateResource(resource, ro);

                    return(Ok(id));
                }
                else
                {
                    return(NotFound());
                }
            }
            catch (Exception exp)
            {
                return(InternalServerError(exp));
            }
        }
示例#4
0
        public IHttpActionResult UpdateResource(string connectionInfo, DSResource resource, bool isDelta = false)
        {
            try
            {
                Lazy <IOCGDSRepository> repo = RepositoryManager.GetRepository(repos, "MIMResource");

                if (repo != null)
                {
                    ConnectionInfo ci = ConnectionInfo.BuildConnectionInfo(connectionInfo);
                    ResourceOption ro = new ResourceOption(ci);

                    string id = repo.Value.UpdateResource(resource, isDelta, ro);

                    if (id.Equals("AuthorizationRequired"))
                    {
                        return(Content(HttpStatusCode.PartialContent, id));
                    }

                    return(Ok(id));
                }
                else
                {
                    return(NotFound());
                }
            }
            catch (Exception exp)
            {
                return(InternalServerError(exp));
            }
        }
 /// <summary>Process resource update on a node.</summary>
 public virtual void UpdateNodeResource(RMNode nm, ResourceOption resourceOption)
 {
     lock (this)
     {
         SchedulerNode node = GetSchedulerNode(nm.GetNodeID());
         Org.Apache.Hadoop.Yarn.Api.Records.Resource newResource = resourceOption.GetResource
                                                                       ();
         Org.Apache.Hadoop.Yarn.Api.Records.Resource oldResource = node.GetTotalResource();
         if (!oldResource.Equals(newResource))
         {
             // Log resource change
             Log.Info("Update resource on node: " + node.GetNodeName() + " from: " + oldResource
                      + ", to: " + newResource);
             Sharpen.Collections.Remove(nodes, nm.GetNodeID());
             UpdateMaximumAllocation(node, false);
             // update resource to node
             node.SetTotalResource(newResource);
             nodes[nm.GetNodeID()] = (N)node;
             UpdateMaximumAllocation(node, true);
             // update resource to clusterResource
             Resources.SubtractFrom(clusterResource, oldResource);
             Resources.AddTo(clusterResource, newResource);
         }
         else
         {
             // Log resource change
             Log.Warn("Update resource on node: " + node.GetNodeName() + " with the same resource: "
                      + newResource);
         }
     }
 }
示例#6
0
        public IHttpActionResult GetResourceByQuery(
            string connectionInfo, string query, [FromUri] string[] attributesToGet = null,
            int pageSize = 0, int index = 0, int cultureKey = 127, bool resolveID = false, bool deepResolve = false,
            [FromUri] string[] attributesToResolve = null, [FromUri] string[] attributesToSort = null)
        {
            try
            {
                Lazy <IOCGDSRepository> repo = RepositoryManager.GetRepository(repos, "MIMResource");

                if (repo != null)
                {
                    ConnectionInfo ci = ConnectionInfo.BuildConnectionInfo(connectionInfo);
                    ResourceOption ro = new ResourceOption(
                        ci, cultureKey, resolveID, deepResolve, attributesToResolve, attributesToSort);

                    DSResourceSet rss = repo.Value.GetResourceByQuery(
                        query,
                        (attributesToGet == null || attributesToGet.Length == 0) ? new string[] { "DisplayName" } : attributesToGet,
                        pageSize,
                        index,
                        ro);

                    return(Ok(rss));
                }
                else
                {
                    return(NotFound());
                }
            }
            catch (Exception exp)
            {
                return(InternalServerError(exp));
            }
        }
示例#7
0
        public IHttpActionResult GetResourceByID(
            string encryptionKey, string id, [FromUri] string[] attributesToGet = null,
            bool includePermission = false, int cultureKey = 127, bool resolveID = false, bool deepResolve = false,
            [FromUri] string[] attributesToResolve = null)
        {
            try
            {
                Lazy <IOCGDSRepository> repo = RepositoryManager.GetRepository(repos, "MIMResource");

                if (!encryptionKey.Equals(this.encryptionKey))
                {
                    return(InternalServerError(new Exception("Invalid Encryption Key")));
                }

                if (repo != null)
                {
                    ConnectionInfo ci = ConnectionInfo.BuildConnectionInfo(this.adminConnection);
                    ResourceOption ro = new ResourceOption(ci, cultureKey, resolveID, deepResolve, attributesToResolve);

                    DSResource rs = repo.Value.GetResourceByID(id, (attributesToGet == null || attributesToGet.Length == 0) ? new string[] { "DisplayName" } : attributesToGet, includePermission, ro);

                    return(Ok(rs));
                }
                else
                {
                    return(NotFound());
                }
            }
            catch (Exception exp)
            {
                return(InternalServerError(exp));
            }
        }
示例#8
0
        public IHttpActionResult AddValuesToResource(string encryptionKey, string objectID, string attributeName, [FromUri] string[] valuesToAdd)
        {
            try
            {
                Lazy <IOCGDSRepository> repo = RepositoryManager.GetRepository(repos, "MIMResource");

                if (!encryptionKey.Equals(this.encryptionKey))
                {
                    return(InternalServerError(new Exception("Invalid Encryption Key")));
                }

                if (repo != null)
                {
                    ConnectionInfo ci = ConnectionInfo.BuildConnectionInfo(this.adminConnection);
                    ResourceOption ro = new ResourceOption(ci);

                    string id = repo.Value.AddValuesToResource(objectID, attributeName, valuesToAdd, ro);

                    if (id.Equals("AuthorizationRequired"))
                    {
                        return(Content(HttpStatusCode.PartialContent, id));
                    }

                    return(Ok(id));
                }
                else
                {
                    return(NotFound());
                }
            }
            catch (Exception exp)
            {
                return(InternalServerError(exp));
            }
        }
示例#9
0
        public IHttpActionResult CreateResource(string encryptionKey, DSResource resource)
        {
            try
            {
                Lazy <IOCGDSRepository> repo = RepositoryManager.GetRepository(repos, "MIMResource");

                if (!encryptionKey.Equals(this.encryptionKey))
                {
                    return(InternalServerError(new Exception("Invalid Encryption Key")));
                }

                if (repo != null)
                {
                    ConnectionInfo ci = ConnectionInfo.BuildConnectionInfo(this.adminConnection);
                    ResourceOption ro = new ResourceOption(ci);

                    string id = repo.Value.CreateResource(resource, ro);

                    return(Ok(id));
                }
                else
                {
                    return(NotFound());
                }
            }
            catch (Exception exp)
            {
                return(InternalServerError(exp));
            }
        }
 public NodeResourceUpdateSchedulerEvent(RMNode rmNode, ResourceOption resourceOption
                                         )
     : base(SchedulerEventType.NodeResourceUpdate)
 {
     this.rmNode         = rmNode;
     this.resourceOption = resourceOption;
 }
示例#11
0
        public void DeleteResource(string id, ResourceOption resourceOption = null)
        {
            ResourceOption option = resourceOption == null ? new ResourceOption() : resourceOption;

            ResourceManagementClient client = getClient(option.ConnectionInfo);

            client.DeleteResource(id);
        }
示例#12
0
        public int GetResourceCount(string query, ResourceOption resourceOption = null)
        {
            ResourceOption option = resourceOption == null ? new ResourceOption() : resourceOption;

            ResourceManagementClient client = getClient(option.ConnectionInfo);

            return(client.GetResourceCount(query));
        }
示例#13
0
        /// <exception cref="Org.Apache.Hadoop.Yarn.Exceptions.YarnException"/>
        /// <exception cref="System.IO.IOException"/>
        public virtual UpdateNodeResourceResponse UpdateNodeResource(UpdateNodeResourceRequest
                                                                     request)
        {
            string argName            = "updateNodeResource";
            UserGroupInformation user = CheckAcls(argName);

            CheckRMStatus(user.GetShortUserName(), argName, "update node resource.");
            IDictionary <NodeId, ResourceOption> nodeResourceMap = request.GetNodeResourceMap(
                );
            ICollection <NodeId> nodeIds = nodeResourceMap.Keys;

            // verify nodes are all valid first.
            // if any invalid nodes, throw exception instead of partially updating
            // valid nodes.
            foreach (NodeId nodeId in nodeIds)
            {
                RMNode node = this.rmContext.GetRMNodes()[nodeId];
                if (node == null)
                {
                    Log.Error("Resource update get failed on all nodes due to change " + "resource on an unrecognized node: "
                              + nodeId);
                    throw RPCUtil.GetRemoteException("Resource update get failed on all nodes due to change resource "
                                                     + "on an unrecognized node: " + nodeId);
                }
            }
            // do resource update on each node.
            // Notice: it is still possible to have invalid NodeIDs as nodes decommission
            // may happen just at the same time. This time, only log and skip absent
            // nodes without throwing any exceptions.
            bool allSuccess = true;

            foreach (KeyValuePair <NodeId, ResourceOption> entry in nodeResourceMap)
            {
                ResourceOption newResourceOption = entry.Value;
                NodeId         nodeId_1          = entry.Key;
                RMNode         node = this.rmContext.GetRMNodes()[nodeId_1];
                if (node == null)
                {
                    Log.Warn("Resource update get failed on an unrecognized node: " + nodeId_1);
                    allSuccess = false;
                }
                else
                {
                    // update resource to RMNode
                    this.rmContext.GetDispatcher().GetEventHandler().Handle(new RMNodeResourceUpdateEvent
                                                                                (nodeId_1, newResourceOption));
                    Log.Info("Update resource on node(" + node.GetNodeID() + ") with resource(" + newResourceOption
                             .ToString() + ")");
                }
            }
            if (allSuccess)
            {
                RMAuditLogger.LogSuccess(user.GetShortUserName(), argName, "AdminService");
            }
            UpdateNodeResourceResponse response = UpdateNodeResourceResponse.NewInstance();

            return(response);
        }
示例#14
0
        public virtual void TestMaxAllocationAfterUpdateNodeResource()
        {
            int configuredMaxVCores = 20;
            int configuredMaxMemory = 10 * 1024;

            Org.Apache.Hadoop.Yarn.Api.Records.Resource configuredMaximumResource = Org.Apache.Hadoop.Yarn.Api.Records.Resource
                                                                                    .NewInstance(configuredMaxMemory, configuredMaxVCores);
            ConfigureScheduler();
            YarnConfiguration conf = GetConf();

            conf.SetInt(YarnConfiguration.RmSchedulerMaximumAllocationVcores, configuredMaxVCores
                        );
            conf.SetInt(YarnConfiguration.RmSchedulerMaximumAllocationMb, configuredMaxMemory
                        );
            conf.SetLong(YarnConfiguration.RmWorkPreservingRecoverySchedulingWaitMs, 0);
            MockRM rm = new MockRM(conf);

            try
            {
                rm.Start();
                AbstractYarnScheduler scheduler = (AbstractYarnScheduler)rm.GetResourceScheduler(
                    );
                VerifyMaximumResourceCapability(configuredMaximumResource, scheduler);
                Org.Apache.Hadoop.Yarn.Api.Records.Resource resource1 = Org.Apache.Hadoop.Yarn.Api.Records.Resource
                                                                        .NewInstance(2048, 5);
                Org.Apache.Hadoop.Yarn.Api.Records.Resource resource2 = Org.Apache.Hadoop.Yarn.Api.Records.Resource
                                                                        .NewInstance(4096, 10);
                Org.Apache.Hadoop.Yarn.Api.Records.Resource resource3 = Org.Apache.Hadoop.Yarn.Api.Records.Resource
                                                                        .NewInstance(512, 1);
                Org.Apache.Hadoop.Yarn.Api.Records.Resource resource4 = Org.Apache.Hadoop.Yarn.Api.Records.Resource
                                                                        .NewInstance(1024, 2);
                RMNode node1 = MockNodes.NewNodeInfo(0, resource1, 1, "127.0.0.2");
                scheduler.Handle(new NodeAddedSchedulerEvent(node1));
                RMNode node2 = MockNodes.NewNodeInfo(0, resource3, 2, "127.0.0.3");
                scheduler.Handle(new NodeAddedSchedulerEvent(node2));
                VerifyMaximumResourceCapability(resource1, scheduler);
                // increase node1 resource
                scheduler.UpdateNodeResource(node1, ResourceOption.NewInstance(resource2, 0));
                VerifyMaximumResourceCapability(resource2, scheduler);
                // decrease node1 resource
                scheduler.UpdateNodeResource(node1, ResourceOption.NewInstance(resource1, 0));
                VerifyMaximumResourceCapability(resource1, scheduler);
                // increase node2 resource
                scheduler.UpdateNodeResource(node2, ResourceOption.NewInstance(resource4, 0));
                VerifyMaximumResourceCapability(resource1, scheduler);
                // decrease node2 resource
                scheduler.UpdateNodeResource(node2, ResourceOption.NewInstance(resource3, 0));
                VerifyMaximumResourceCapability(resource1, scheduler);
            }
            finally
            {
                rm.Stop();
            }
        }
示例#15
0
        public DSResourceSet GetResourceByQuery(string query, string[] attributes,
                                                int pageSize = 0, int index = 0, ResourceOption resourceOption = null)
        {
            ResourceOption option = resourceOption == null ? new ResourceOption() : resourceOption;

            ResourceManagementClient client = getClient(option.ConnectionInfo);

            client.RefreshSchema();

            DSResourceSet retVal = new DSResourceSet();

            List <SortingAttribute> sortingAttributes = getSortingAttributes(option.SortingAttributes);

            if (pageSize == 0)
            {
                SearchResultCollection src = sortingAttributes.Count == 0 ?
                                             client.GetResources(query, attributes) as SearchResultCollection :
                                             client.GetResources(query, attributes, sortingAttributes) as SearchResultCollection;

                if (src != null)
                {
                    retVal.TotalCount = src.Count;
                    foreach (ResourceObject resource in src)
                    {
                        retVal.Resources.Add(convertToDSResource(client, resource, attributes, false, option));
                    }
                }
            }
            else
            {
                SearchResultPager srp = sortingAttributes.Count == 0 ?
                                        client.GetResourcesPaged(query, pageSize, attributes) :
                                        client.GetResourcesPaged(query, pageSize, attributes, sortingAttributes);

                if (index >= 0)
                {
                    srp.CurrentIndex = index;
                }

                srp.PageSize = pageSize;

                foreach (ResourceObject resource in srp.GetNextPage())
                {
                    retVal.Resources.Add(convertToDSResource(client, resource, attributes, false, option));
                }

                retVal.TotalCount   = srp.TotalCount;
                retVal.HasMoreItems = srp.HasMoreItems;
            }

            return(retVal);
        }
示例#16
0
        public DSResource GetResourceByID(
            string id, string[] attributes, bool includePermission = false, ResourceOption resourceOption = null)
        {
            ResourceOption option = resourceOption == null ? new ResourceOption() : resourceOption;

            ResourceManagementClient client = getClient(option.ConnectionInfo);

            client.RefreshSchema();

            ResourceObject resource = client.GetResource(id, attributes, includePermission);

            return(convertToDSResource(client, resource, attributes, includePermission, resourceOption));
        }
示例#17
0
        public string CreateResource(DSResource resource, ResourceOption resourceOption = null)
        {
            ResourceOption option = resourceOption == null ? new ResourceOption() : resourceOption;

            ResourceManagementClient client = getClient(option.ConnectionInfo);

            ResourceObject objResource = client.CreateResource(resource.ObjectType);

            convertToResourceObject(resource, ref objResource);

            objResource.Save();

            return(objResource.ObjectID.Value);
        }
示例#18
0
        public IHttpActionResult GetCurrentUser([FromUri] string[] attributesToGet = null)
        {
            WindowsImpersonationContext wic = null;

            try
            {
                wic = ((WindowsIdentity)User.Identity).Impersonate();

                Lazy <IOCGDSRepository> repo = RepositoryManager.GetRepository(repos, "MIMResource");

                if (repo != null)
                {
                    ResourceOption ro = new ResourceOption();

                    string userName    = HttpContext.Current.User.Identity.Name;
                    int    pos         = userName.IndexOf(@"\");
                    string accountName = userName.Substring(pos + 1);
                    string query       = string.Format(@"/Person[AccountName='{0}']", accountName);

                    DSResourceSet rss = repo.Value.GetResourceByQuery(query,
                                                                      (attributesToGet == null || attributesToGet.Length == 0) ?
                                                                      new string[] { "DisplayName" } : attributesToGet);

                    if (rss != null && rss.TotalCount == 1)
                    {
                        return(Ok(rss.Resources.First()));
                    }
                    else
                    {
                        return(InternalServerError(new Exception($"account not found: {accountName}")));
                    }
                }
                else
                {
                    return(NotFound());
                }
            }
            catch (Exception exp)
            {
                return(InternalServerError(exp));
            }
            finally
            {
                if (wic != null)
                {
                    wic.Undo();
                }
            }
        }
示例#19
0
        private void LoadBuildParamaters()
        {
            ResourceOption resourceOps = new ResourceOption();

            foreach (DataItemModel arg in resourceOps.ScriptParameterOptions())
            {
                TextBoxItem item = new TextBoxItem
                {
                    Text            = arg.ItemKey.ToString(),
                    ToolTip         = arg.DisplayValue,
                    IsReadOnly      = true,
                    BorderThickness = new Thickness(0)
                };

                this.uxParametersList.Children.Add(item);
            }
        }
示例#20
0
        public IHttpActionResult GetResourceByQuery(
            string query, [FromUri] string[] attributesToGet = null, int pageSize = 0, int index = 0,
            int cultureKey = 127, bool resolveID = false, bool deepResolve = false,
            [FromUri] string[] attributesToResolve = null, [FromUri] string[] attributesToSort = null)
        {
            WindowsImpersonationContext wic = null;

            try
            {
                wic = ((WindowsIdentity)User.Identity).Impersonate();

                Lazy <IOCGDSRepository> repo = RepositoryManager.GetRepository(repos, "MIMResource");

                if (repo != null)
                {
                    ResourceOption ro = new ResourceOption(
                        new ConnectionInfo(), cultureKey, resolveID, deepResolve, attributesToResolve, attributesToSort);

                    DSResourceSet rss = repo.Value.GetResourceByQuery(
                        query,
                        (attributesToGet == null || attributesToGet.Length == 0) ? new string[] { "DisplayName" } : attributesToGet,
                        pageSize,
                        index,
                        ro);

                    return(Ok(rss));
                }
                else
                {
                    return(NotFound());
                }
            }
            catch (Exception exp)
            {
                return(InternalServerError(exp));
            }
            finally
            {
                if (wic != null)
                {
                    wic.Undo();
                }
            }
        }
示例#21
0
        public virtual void TestResourceUpdateOnRebootedNode()
        {
            RMNodeImpl node        = GetRebootedNode();
            Resource   oldCapacity = node.GetTotalCapability();

            NUnit.Framework.Assert.AreEqual("Memory resource is not match.", oldCapacity.GetMemory
                                                (), 4096);
            NUnit.Framework.Assert.AreEqual("CPU resource is not match.", oldCapacity.GetVirtualCores
                                                (), 4);
            node.Handle(new RMNodeResourceUpdateEvent(node.GetNodeID(), ResourceOption.NewInstance
                                                          (Resource.NewInstance(2048, 2), RMNode.OverCommitTimeoutMillisDefault)));
            Resource newCapacity = node.GetTotalCapability();

            NUnit.Framework.Assert.AreEqual("Memory resource is not match.", newCapacity.GetMemory
                                                (), 2048);
            NUnit.Framework.Assert.AreEqual("CPU resource is not match.", newCapacity.GetVirtualCores
                                                (), 2);
            NUnit.Framework.Assert.AreEqual(NodeState.Rebooted, node.GetState());
        }
示例#22
0
        public string UpdateResource(DSResource resource, bool isDelta = false, ResourceOption resourceOption = null)
        {
            ResourceOption option = resourceOption == null ? new ResourceOption() : resourceOption;

            ResourceManagementClient client = getClient(option.ConnectionInfo);

            ResourceObject objResource = client.CreateResourceTemplateForUpdate(
                resource.ObjectType, new UniqueIdentifier(resource.ObjectID));

            convertToResourceObject(resource, ref objResource, isDelta);

            try
            {
                objResource.Save();
            }
            catch (AuthorizationRequiredException)
            {
                return("AuthorizationRequired");
            }

            return(objResource.ObjectID.Value);
        }
示例#23
0
        public string RemoveValuesFromResource(string id, string attributeName, string[] valuesToRemove, ResourceOption resourceOption = null)
        {
            if (valuesToRemove == null || valuesToRemove.Length == 0)
            {
                return(id);
            }

            ResourceOption option = resourceOption == null ? new ResourceOption() : resourceOption;

            ResourceManagementClient client = getClient(option.ConnectionInfo);

            client.RefreshSchema();

            ResourceObject objResource = client.GetResource(id, new string[] { attributeName });

            if (objResource == null)
            {
                throw new Exception($"No Resource was found with ObjectID: {id}");
            }

            foreach (string value in valuesToRemove)
            {
                objResource.RemoveValue(attributeName, value);
            }

            try
            {
                objResource.Save();
            }
            catch (AuthorizationRequiredException)
            {
                return("AuthorizationRequired");
            }

            return(objResource.ObjectID.Value);
        }
示例#24
0
 public void DeleteResource(string id, ResourceOption resourceOption = null)
 {
     throw new NotImplementedException();
 }
示例#25
0
 private YarnProtos.ResourceOptionProto ConvertToProtoFormat(ResourceOption c)
 {
     return(((ResourceOptionPBImpl)c).GetProto());
 }
示例#26
0
 public string CreateResource(DSResource resource, ResourceOption resourceOption = null)
 {
     throw new NotImplementedException();
 }
示例#27
0
 public string UpdateResource(DSResource resource, bool isDelta = false, ResourceOption resourceOption = null)
 {
     throw new NotImplementedException();
 }
示例#28
0
 public string RemoveValuesFromResource(string id, string attributeName, string[] valuesToRemove, ResourceOption resourceOption = null)
 {
     throw new NotImplementedException();
 }
示例#29
0
        public DSResource convertToDSResource(ResourceManagementClient client, ResourceObject resource,
                                              string[] loadedAttributes, bool includePermission, ResourceOption option, bool deepResolve = true)
        {
            DSResource dsResource = new DSResource
            {
                DisplayName        = resource.DisplayName,
                ObjectID           = resource.ObjectID.Value,
                ObjectType         = resource.ObjectTypeName,
                HasPermissionHints = resource.HasPermissionHints
            };

            List <RmAttribute> attributeDef = getAttributeDefinition(resource.ObjectTypeName, option.CultureKey, option.ConnectionInfo.EncryptionKey);

            Dictionary <string, DSAttribute> attributes = new Dictionary <string, DSAttribute>();

            foreach (string attributeName in loadedAttributes)
            {
                if (resource.Attributes.ContainsAttribute(attributeName))
                {
                    AttributeValue attValue = resource.Attributes[attributeName];

                    if (attValue.Attribute.SystemName.Equals("ObjectID") || attValue.Attribute.SystemName.Equals("ObjectType"))
                    {
                        continue;
                    }

                    DSAttribute dsAttribute = new DSAttribute
                    {
                        Description    = attValue.Attribute.Description,
                        DisplayName    = attValue.Attribute.DisplayName,
                        IsMultivalued  = attValue.Attribute.IsMultivalued,
                        IsReadOnly     = attValue.Attribute.IsReadOnly,
                        IsRequired     = attValue.Attribute.IsRequired,
                        Regex          = attValue.Attribute.Regex,
                        SystemName     = attValue.Attribute.SystemName,
                        Type           = attValue.Attribute.Type.ToString(),
                        IsNull         = attValue.IsNull,
                        PermissionHint = attValue.PermissionHint.ToString(),
                        Value          = attValue.Value,
                        Values         = attValue.Values.ToList()
                    };

                    if (attributeDef != null)
                    {
                        RmAttribute attr = attributeDef.FirstOrDefault(a => a.Name.Equals(attValue.AttributeName));
                        if (attr != null)
                        {
                            dsAttribute.DisplayName = attr.DisplayName;
                            dsAttribute.Description = attr.Description;
                        }
                    }

                    if (!dsAttribute.IsNull && dsAttribute.Type.Equals("Reference"))
                    {
                        dsAttribute.Value = attValue.Attribute.IsMultivalued ?
                                            attValue.StringValues.FirstOrDefault() : attValue.StringValue;
                        dsAttribute.Values = attValue.Attribute.IsMultivalued ?
                                             attValue.StringValues.ToList <object>() : new List <object>()
                        {
                            attValue.StringValue
                        };

                        if (!string.IsNullOrEmpty(dsAttribute.Value.ToString()) && deepResolve && option.ResolveID)
                        {
                            if (dsAttribute.IsMultivalued)
                            {
                                foreach (string value in attValue.StringValues)
                                {
                                    ResourceObject resolvedObject = client.GetResource(
                                        value, option.AttributesToResolve, includePermission);
                                    dsAttribute.ResolvedValues.Add(convertToDSResource(client,
                                                                                       resolvedObject, option.AttributesToResolve, includePermission, option, option.DeepResolve));
                                }
                            }
                            else
                            {
                                ResourceObject resolvedObject = client.GetResource(
                                    attValue.StringValue, option.AttributesToResolve, includePermission);
                                dsAttribute.ResolvedValue = convertToDSResource(client,
                                                                                resolvedObject, option.AttributesToResolve, includePermission, option, option.DeepResolve);
                            }
                        }
                    }

                    attributes.Add(attValue.AttributeName, dsAttribute);
                }
            }

            dsResource.Attributes = attributes;

            return(dsResource);
        }
示例#30
0
        public virtual void TestResourceOverCommit()
        {
            MockRM rm = new MockRM(conf);

            rm.Start();
            MockNM nm1  = rm.RegisterNode("127.0.0.1:1234", 4 * Gb);
            RMApp  app1 = rm.SubmitApp(2048);

            // kick the scheduling, 2 GB given to AM1, remaining 2GB on nm1
            nm1.NodeHeartbeat(true);
            RMAppAttempt attempt1 = app1.GetCurrentAppAttempt();
            MockAM       am1      = rm.SendAMLaunched(attempt1.GetAppAttemptId());

            am1.RegisterAppAttempt();
            SchedulerNodeReport report_nm1 = rm.GetResourceScheduler().GetNodeReport(nm1.GetNodeId
                                                                                         ());

            // check node report, 2 GB used and 2 GB available
            NUnit.Framework.Assert.AreEqual(2 * Gb, report_nm1.GetUsedResource().GetMemory());
            NUnit.Framework.Assert.AreEqual(2 * Gb, report_nm1.GetAvailableResource().GetMemory
                                                ());
            // add request for containers
            am1.AddRequests(new string[] { "127.0.0.1", "127.0.0.2" }, 2 * Gb, 1, 1);
            AllocateResponse alloc1Response = am1.Schedule();

            // send the request
            // kick the scheduler, 2 GB given to AM1, resource remaining 0
            nm1.NodeHeartbeat(true);
            while (alloc1Response.GetAllocatedContainers().Count < 1)
            {
                Log.Info("Waiting for containers to be created for app 1...");
                Sharpen.Thread.Sleep(1000);
                alloc1Response = am1.Schedule();
            }
            IList <Container> allocated1 = alloc1Response.GetAllocatedContainers();

            NUnit.Framework.Assert.AreEqual(1, allocated1.Count);
            NUnit.Framework.Assert.AreEqual(2 * Gb, allocated1[0].GetResource().GetMemory());
            NUnit.Framework.Assert.AreEqual(nm1.GetNodeId(), allocated1[0].GetNodeId());
            report_nm1 = rm.GetResourceScheduler().GetNodeReport(nm1.GetNodeId());
            // check node report, 4 GB used and 0 GB available
            NUnit.Framework.Assert.AreEqual(0, report_nm1.GetAvailableResource().GetMemory());
            NUnit.Framework.Assert.AreEqual(4 * Gb, report_nm1.GetUsedResource().GetMemory());
            // check container is assigned with 2 GB.
            Container c1 = allocated1[0];

            NUnit.Framework.Assert.AreEqual(2 * Gb, c1.GetResource().GetMemory());
            // update node resource to 2 GB, so resource is over-consumed.
            IDictionary <NodeId, ResourceOption> nodeResourceMap = new Dictionary <NodeId, ResourceOption
                                                                                   >();

            nodeResourceMap[nm1.GetNodeId()] = ResourceOption.NewInstance(Org.Apache.Hadoop.Yarn.Api.Records.Resource
                                                                          .NewInstance(2 * Gb, 1), -1);
            UpdateNodeResourceRequest request = UpdateNodeResourceRequest.NewInstance(nodeResourceMap
                                                                                      );
            AdminService @as = rm.adminService;

            @as.UpdateNodeResource(request);
            // Now, the used resource is still 4 GB, and available resource is minus value.
            report_nm1 = rm.GetResourceScheduler().GetNodeReport(nm1.GetNodeId());
            NUnit.Framework.Assert.AreEqual(4 * Gb, report_nm1.GetUsedResource().GetMemory());
            NUnit.Framework.Assert.AreEqual(-2 * Gb, report_nm1.GetAvailableResource().GetMemory
                                                ());
            // Check container can complete successfully in case of resource over-commitment.
            ContainerStatus containerStatus = BuilderUtils.NewContainerStatus(c1.GetId(), ContainerState
                                                                              .Complete, string.Empty, 0);

            nm1.ContainerStatus(containerStatus);
            int waitCount = 0;

            while (attempt1.GetJustFinishedContainers().Count < 1 && waitCount++ != 20)
            {
                Log.Info("Waiting for containers to be finished for app 1... Tried " + waitCount
                         + " times already..");
                Sharpen.Thread.Sleep(100);
            }
            NUnit.Framework.Assert.AreEqual(1, attempt1.GetJustFinishedContainers().Count);
            NUnit.Framework.Assert.AreEqual(1, am1.Schedule().GetCompletedContainersStatuses(
                                                ).Count);
            report_nm1 = rm.GetResourceScheduler().GetNodeReport(nm1.GetNodeId());
            NUnit.Framework.Assert.AreEqual(2 * Gb, report_nm1.GetUsedResource().GetMemory());
            // As container return 2 GB back, the available resource becomes 0 again.
            NUnit.Framework.Assert.AreEqual(0 * Gb, report_nm1.GetAvailableResource().GetMemory
                                                ());
            rm.Stop();
        }