The Pending Connection Time database startup parameter (-PendConnTime
) can be used to prevent client/server connection errors caused by network problems exhausting remote server connection slots (-Ma).
When a client attempts to connect client/server to a Progress OpenEdge database, the database engine assumes that if the client can reach the listening port of the login broker, it can also reach the listening port of the remote server the login broker re-directs the connection to. Network problems or incorrect configuration of network devices can prevent the client from reaching the server and completing the 3-way connection handshake. In such instances, the database login broker, unaware that the client's connection failed, continues to increment its count of connected users eventually exhausting user slots available for new client-server connections.
To alleviate this problem, the -PendConnTime
database startup parameter was implemented in Progress 9.1B15 and above for ABL clients, where the concept of a "reservation
" for the client connection was added. The login broker increments the "reservation
" count on the server when it redirects the client to the server.
When the -PendConnTime
database startup parameter is specified, the login broker load balancing algorithm uses the reservation count and the connected client(s) in its decision making about which remote server should service the next client connection request. The servers examine the time-stamp on the latest reservation and, if the Pending Connection Time period has elapsed, the broker assumes that the client has failed to connect. The broker then clears the reservation, making the server user slot available for new client connections. The default value for this reservation parameter is 0, (disabled) and any time that is set must be expressed in seconds.To enable the -PendConnTime parameter,
Add the following to the database startup for each 4GL/ABL login broker:
-PendConnTime (value in seconds)
When the -PendConnTime is enabled, the time in seconds is the time allowed for the client to connect to the database server process the login broker re-directs it to. When the counter elapses the remote server decrements its count of pending client connections realizing that the client has not completed a successful connection within the time allowed. The login broker also updates its count of connected clients.
As of OpenEdge 10.1C03 and 10.2A01, this parameter will also be acknowledged and used by _sqlsrv2
processes when dealing with SQL/ODBC clients. Prior to these versions, this parameter only applied to 4GL/ABL
client/server connections. This is also the default behavior for the _sqlsrv2 process. This means that whether the database startup parameter -PendConnTime
is used or not, a default value of 30 seconds has been configured for the _sqlsrv2 process.
A new column "Pend Users"
was added to the PROMON views to help determine if remote servers have pending user connections yet to be resolved within the -PendConnTime if specified or will not be resolved if not used relying on TCP KEEPALIVE to expire:
PROMON > R&D > 1. Status Displays > 3. Servers;
PROMON dbname > R&D > 1. Status Displays > 17. Servers By Broker
For example:Sv Pend. Cur. Max. Port
No Pid Type Protocol Logins Users Users Users Num
0 6012 Login TCP 11 0 0 4 5454
1 1788 Auto TCP 0 0 4 4 3000
2 928 Auto TCP 0 1 3 4 3001
3 1024 Auto TCP 0 4 0 4 3002
4 0 Inactive TCP 0 0 0 0 0
To simplify the above example:
- Both -Ma and -Mi are set to 4
- Server 1 has 4 Current Connections, leading to Server 2 being started for the 5th connection.
- Server 2 has 3 Current Connections and one Pending Connection that has not yet timed out.
- Leading to Server 3 being started for the 9th connection which is still pending as are the subsequent 3 connections due to some Network issue at the time resulting in 4 Pending Connection that have not yet timed out
- If PendConnTime were not in use, the situation would continue until all user slots for Server 4 were used and the 17th connection would fail with:
- "No servers are available. Try again later. (1154)"
If PendConnTime is in use, once the timeout expired, the pending reservation would be cleared and those user slots made available for the next client/server connections to the Broker's listening port (-S 5454)
The -PendConnTime parameter is not listed in the Progress 9.x documentation for Startup Parameters. It was first documented in the OpenEdge10 OpenEdge Database Management: Database Administration