The RLM license server has the ability to manage a queue of requests for a license when all licenses are in use. If queued for a license, the application is notified by the license server when a license has become available. Queuing occurs in the course of a normal checkout if the application’s environment specifies a value for the variable RLM_QUEUE.
Applications must be made aware of Queuing
The licensed application needs to support queuing, in that it has to react appropriately to the RLM_EL_INQUEUE error status after a checkout attempt, instead of treating it as a hard error. The application should keep checking the license status periodically as long as the user wishes to remain queued for the license. Not all RLM-licensed applications do this, but most do.
Queuing to Multiple Servers is Transparent
The licensed application side of RLM manages queuing in a multiple license server environment transparently. If all licenses are in use on all of the license servers that the licensed application is aware of, RLM will queue for a license on all of the license servers. As soon as a license becomes available on one of the servers, it is granted to the queued application, the application dequeues on the other servers. This is handled transparently to the application, in the RLM library. [ Don’t you wish supermarket check-out lines worked this way? You’d be waiting in all of the lines at once. ]
All Aboard the Express
RLM has the concept of “express” license pools for the purposes of queuing. An express license pool is one where queuing is not on a strictly first-in first-out basis. This is best illustrated by example. Consider a pool of 10 licenses: 8 are currently in use, and 2 are available. Application A requests a checkout of 3 licenses, and specifies that it wants to queue if the request can’t be granted immediately. Its request is queued because only 2 licenses are available. Application B then requests 2 licenses. If the pool is an express pool, Application B’s request is granted immediately. In a non-express pool, Application B’s request would be queued behind Application A’s request. By default, all pools are express pools. This can be changed by the end user on a pool by pool basis, or globally, via the EXPRESS directive in the ISV options file.