Technical article on timeouts in the Reprise License Manager
There are two types of timeout events in RLM: connection timeouts, and idle timeouts. Let’s dig into each of them a little bit deeper.
Connection timeouts occur when a client application takes too long to connect to one or more RLM license servers. Users can change the default connection timeout value from 10 seconds to as low as 5 seconds by setting an environment variable. If set to a negative value, the connect timeout will be its absolute value, and if any particular server connection times out, no further attempts will be made to that server. If set to a positive value, a connection will be attempted to the server even if it timed out on the last attempt. The latter example is the default behavior in RLM.
Skipping over License Servers
RLM also keeps track of which license servers in its license path list have an ISV’s server running on them. If either there is no ISV line for that ISV in a local license file, or an attempt is made to check out a license from a server and the RLM server returns a status indicating that this ISV is not present, then the server is flagged as not having that ISV server.
In a multi-server environment, it doesn’t make sense for an application to repeatedly attempt checkouts from servers that are known not to be serving its licenses. So, application developers may choose to “skip” these license servers. Note that by default, RLM will attempt all operations on all servers.
Idle Timeouts and Heartbeats
Most users want the license server to reclaim licenses from applications that become idle for too long. This ensures maximum utilization of floating (shared) license pools.
The RLM license server expects to hear from client applications periodically as a way for applications to tell the server that they are still active. Normally, this is done by sending “heartbeats” from clients to the server either automatically or under the direct control of the application itself.
Some software vendors may decide to inform the server that an interactive application is idle while waiting for user input. This allows the application’s license to be reclaimed by the server when the application waits too long for user input. When the user eventually “wakes up” the formerly idle application, it will attempt to reclaim any lost licenses from the server.
When licenses are timed out by the server, they are essentially checked back into the pool for use by others. This event can be recorded in a server report log, if desired.
User Control of Idle Timeouts
An end-user can specify a TIMEOUT value for any idle license. If the license remains idle for this amount of time, the license server performs an automatic check-in of the license and informs the application (if it is still running).
Software vendors can set a MIN_TIMEOUT keyword in a license that specifies the lowest value that an end-user can set for the timeout value of a license. If not specified in the license, the RLM default minimum of 3600 seconds (1 hour) is used.
This topic of timeouts was helpful. I am new to using RLM, having just set up an application that uses it. My customer base is asking if there is a way to see who may have a license checked out since we are deploying only one global license. I am concerned that we could have a user overseas leave the application running with a license, which will mean a denial in the next time zone. The timeout feature may help me to overcome that issue. I will have a use period in the USA with users in EST, MST and PST zones. They may need to see who has the license and call to ask when it will be released. Is there a method for the end user to see license checkout? I realize the LM portal will show this information. However it would be a risk to offer this as the end user could potentially kill the license service with the console access. Do you have a recommendation?
Sorry for the late reply. Your users can use the “rlmstat” command-line tool.
If the license remains idle for this amount of time, the license server performs an automatic check-in of the license and informs the application (if it is still running).
How to get the inform from server when timeout ?
I call rlm_set_active(rh, false) to set my application as inactive and wait timeout.
Then how do the application get informed when timeout happened?