private static int compareNodeGroupsForSuspend(NodeGroup leftNodeGroup, NodeGroup rightNodeGroup) {
        ApplicationInstanceReference leftApplicationReference = leftNodeGroup.getApplicationReference();
        ApplicationInstanceReference rightApplicationReference = rightNodeGroup.getApplicationReference();

        // ApplicationInstanceReference.toString() is e.g. "hosted-vespa:routing:dev:some-region:default"
        return leftApplicationReference.asString().compareTo(rightApplicationReference.asString());
    }
PROBLEM
Take the example of 2 Docker hosts:
 - Docker host 1 has two nodes A1 and B1, belonging to the application with
   a globally unique ID A and B, respectively.
 - Similarly, Docker host 2 has two nodes running content nodes A2 and B2,
   and we assume both A1 and A2 (and B1 and B2) have services within the same service cluster.

Suppose both Docker hosts wanting to reboot, and
 - Docker host 1 asks to suspend A1 and B1, while
 - Docker host 2 asks to suspend B2 and A2.

The Orchestrator may allow suspension of A1 and B2, before requesting the suspension of B1 and A2.
None of these can be suspended (assuming max 1 suspended content node per content cluster),
and so both requests for suspension will fail.

Note that it's not a deadlock - both client will fail immediately and resume both A1 and B2 before
responding to the client, and if host 1 asks later w/o host 2 asking at the same time,
it will be given permission to suspend. However, if both hosts were to request in lock-step,
there would be starvation. And in general, it would fail requests for suspension more
than necessary.

SOLUTION
The solution we're using is to order the hostnames by the globally unique application instance ID,
e.g. hosted-vespa:routing:dev:some-region:default. In the example above, it would guarantee
Docker host 2 would ensure ask to suspend B2 before A2. We take care of that ordering here.

NodeGroups complicate the above picture a little:  Each A1, A2, B1, and B2 is a NodeGroup that may
contain several nodes (on the same Docker host).  But the argument still applies.
orchestrator/src/main/java/com/yahoo/vespa/orchestrator/OrchestratorImpl.java