Yarn service subclasses don't check for service state before executing their 
state change operations
----------------------------------------------------------------------------------------------------

                 Key: MAPREDUCE-3535
                 URL: https://issues.apache.org/jira/browse/MAPREDUCE-3535
             Project: Hadoop Map/Reduce
          Issue Type: Bug
          Components: mrv2
    Affects Versions: 0.23.0, 0.24.0
            Reporter: Steve Loughran


Although there are checks in the lifecycle state change methods (start, stop, 
...), they only get checked in the superclass. The subclasses don't check it; 
they don't exit the start() method if they are already started, and they don't 
bail out early on a stop if they are already stopped -even when the superclass 
returns without doing anything.

This means that calling {{Service.start()}} twice may leak resources, 
{{Service.start()}} twice try to shut down twice, etc. And that's on the same 
thread...

My preferred action here would be for the ave the operations return true if a 
state change took place, the implementation would be synchronised and return 
the correct value

The subclasses look for this and only execute their state changes took place

e.g
{code}
boolean start() {
 if (!super.start()) return false;
 //do my own startup
 return true;
}
{code}

The {{Service.stop()}} operation is trickier as the subclasses tend to call the 
superclass last for a better unwinding. I think it may be safer to work the 
other way around, but code reviews would be need to ensure that this doesn't 
break assumptions in the subclass about termination order. It may be possible 
to do more complex designs, but it is hard to chain this down a hierarchy of 
classes. 

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to