[
https://issues.apache.org/jira/browse/YARN-2753?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14187584#comment-14187584
]
Wangda Tan commented on YARN-2753:
----------------------------------
[~zxu],
I agree with other fixes but this one:
bq. use static variable (Resources.none()) for not-running Node.resource in
CommonNodeLabelsManager to save memory.
The Resources.none() is used to do checking such as if
(Resources.greaterThan(resource, Resources.none())) { .. do something }. Even
if in nowadays, it will be replaced, but you cannot say in the future, some
guys may write like node.resource.setMemory(...), basically I think it's a bad
style.
That will throw runtime exception and destroy YARN daemons, comparing to memory
it can save, the risk is much more serious, do you agree?
Thanks,
Wangda
> Fix potential issues and code clean up for *NodeLabelsManager
> -------------------------------------------------------------
>
> Key: YARN-2753
> URL: https://issues.apache.org/jira/browse/YARN-2753
> Project: Hadoop YARN
> Issue Type: Sub-task
> Reporter: zhihai xu
> Assignee: zhihai xu
> Attachments: YARN-2753.000.patch, YARN-2753.001.patch,
> YARN-2753.002.patch, YARN-2753.003.patch, YARN-2753.004.patch
>
>
> Issues include:
> * CommonNodeLabelsManager#addToCluserNodeLabels should not change the value
> in labelCollections if the key already exists otherwise the Label.resource
> will be changed(reset).
> * potential NPE(NullPointerException) in checkRemoveLabelsFromNode of
> CommonNodeLabelsManager.
> ** because when a Node is created, Node.labels can be null.
> ** In this case, nm.labels; may be null. So we need check originalLabels not
> null before use it(originalLabels.containsAll).
> * addToCluserNodeLabels should be protected by writeLock in
> RMNodeLabelsManager.java. because we should protect labelCollections in
> RMNodeLabelsManager.
> * use static variable (Resources.none()) for not-running Node.resource in
> CommonNodeLabelsManager to save memory.
> ** When a Node is not activated, the resource is never used, When a Node is
> activated, a new resource will be assigned to it in
> RMNodeLabelsManager#activateNode (nm.resource = resource) So it would be
> better to use static variable Resources.none() instead of allocating a new
> variable(Resource.newInstance(0, 0)) for each node deactivation.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)