public class ServiceStageDependencies
Service stage dependencies are dependencies specific to a stage of service life. There are two types of dependencies,
requires and uses. If serviceA requires serviceB, placing serviceA on a cluster cannot be done without also placing
serviceB on the cluster. It will also enforce a specific ordering of tasks when a cluster operation plan is made.
For example, if serviceA requires serviceB in the install stage, the planner will make sure serviceB is installed
before serviceA is installed. If serviceA requires serviceB in the runtime stage, the planner will ensure that
serviceB is started before serviceA is initialized and started, and that serviceA is stopped before serviceB is
stopped. Uses is like required, except it does not enforce the presence of another service. It will just enforce
task ordering if the service used is present on the cluster. For example, if in the install stage, serviceC uses
serviceD, the planner will ensure serviceD is installed before serviceC is installed if both are on the cluster.
However, unlike requires, it is legal for serviceC to be placed on a cluster without serviceD. As such, there is no
reason for the same service to be in both the requires and uses fields, since uses is a subset of requires.