Additionally, multicast is useful for progressively searching regions with wider scopes. When a listening provider can give a partial or total basket of tokens fulfilling a given request, it uses global events to announce to the other providers what tokens it can commit to that consumer. Not all listening providers will receive all consumers' requests, but consumers can increase announcement scopes if they receive no viable responses to their requests. This algorithm could present a problem if middlemen are used, because deadlock may occur if no consumer obtains all of the resources it needs. To solve this problem, we stipulate that consumers must give up a provider's tokens, if asked by that provider, even if all of the requested tokens have not been received yet.
Global priorities represent the use of an invariant in an algorithm.
We can assert that if a request R has a higher priority than another request R ' at one global object, then R has a higher priority than R ' at all global objects. The combination of soft state messaging with hard state invariants results in an algorithm that scales but is free from deadlock. Using global priorities, a provider demands tokens back from its lowest priority requestor, who must then return them. Here, system components use soft state to approximate the true current state of the system, which works well, provided the system state does not change rapidly compared with announcement frequency. Because our architecture is based on multicast, introducing and removing system components is a simple operation.