VMware Identity Manager: where there is a large number of psql database timeout errors waiting for the DC to respond, the vIDM system may be unable to provide authentication for users.
search cancel

VMware Identity Manager: where there is a large number of psql database timeout errors waiting for the DC to respond, the vIDM system may be unable to provide authentication for users.

book

Article ID: 380427

calendar_today

Updated On:

Products

VMware Aria Suite

Issue/Introduction

Symptoms:

  • Users may be unable to login when there is a high number of database timeout errors during a short time frame.
  • These timeouts occur where the DB has requests waiting for the DC to respond.

Errors in logs:

  • com.tricipher.saas.persist.PersistenceRuntimeException: could not prepare statement
  • Caused by: java.sql.SQLException: An attempt by a client to checkout a Connection has timed out.
  • Caused by: com.mchange.v2.resourcepool.TimeoutException: A client timed out while waiting to acquire a resource from com.mchange.v2.resourcepool.BasicResourcePool@7152381b – timeout at awaitAvailable()
  • com.vmware.horizon.directory.ldap.dc.commons.LdapPingChecker - Communication Error connecting to dc domcontrol.example.com for domain example.com

Environment

VMware Identity Manager = Workspace ONE Access 3.3.7

Cause

  • Having a large number of threads waiting, there are then no new threads available to acquire new postgres connections. Therefore the system is unable to service new requests.

Resolution

Workaround

Restarting the nodes made all the active threads to be killed, hence the system could came up successfully straight after.


Configuration Recommendation to alleviate this issue

To avoid such issues in future, you can update the DB configuration datastore.poolConfig.maxPoolSize to new value 200 in the following file: /usr/local/horizon/conf/runtime-config.properties

This is how it looks in context.
Leave the other settings unchanged and edit maxPoolSize to have new value 200:

#DB connection pooling
datastore.poolConfig.numHelperThreads=10
datastore.poolConfig.maxPoolSize=150 -> datastore.poolConfig.maxPoolSize=200
datastore.poolConfig.minPoolSize=30

Once the file is saved, proceed with the restart of all nodes in the cluster.
Keep in mind there will be a downtime of a few minutes while the nodes restart.