I might not be reading this right, but I think the logic should be more rigid. Greater states should always take precedent; the update counter is for resolving order within a single state. What if, say, ``STARTED`` and ``RUNNING`` states are set simultaneously by the different provisioner leader threads? I think both state updates would get the same ``update_counter``. If they are processed in this order, the EPUM would drop the ``RUNNING`` state.

If you'd rather ensure atomic update_counter increments, that could be accomplished via ZK, or even by just using the version number on the ZNode.