2022-02-21T11:32:02.173Z [https-jsse-nio-8844-exec-15] .... ERROR --- DefaultExceptionHandler: An application error occurred. Please contact your CredHub administrator. org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLTransientConnectionException: HikariPool-1 - Connection is not available, request timed out after 30000ms. at org.springframework.jdbc.dataso
[ERR] Unable to interpolate credhub refs: Unable to interpolate credhub references: An application error occurred. Please contact your CredHub administrator.
2022-01-31 11:24:32.182 ERROR 31 --- [ctor-http-nio-1] gCreateServiceInstanceAppBindingWorkflow : Error storing binding credentials with name '/c/p.spring-cloud-services-scs-service-broker/aaabbbcccdddd
A permanent fix will be released in Apr 15. Until then, we have 2 possible workarounds.
The immediate workaround is to restart the credhub process in Credhub VM's with "monit restart credhub".
We have come up with a more permanent one which is a script that will monitor the credhub.log and restart credhub when it detects the connection timeout issue. This might help reduce the pressure on the operators. These are the steps.
Install the script in /root/credhub-32-workaround.sh on the credhub vm
execute script
Verify its running ok with “ps -o pid,command” and/or running "cat" agains script log
credhub/f14d9b9b-d7d1-4706-9692-df6bde94c7dc:~# ps -o pid,command PID COMMAND 717 sudo su - 718 su - 719 -su 812 /bin/bash ./credhub-workaround.sh 1286 tail -n 0 -f /var/vcap/sys/log/credhub/credhub.log 1287 /bin/bash ./credhub-workaround.sh 1541 ps -o pid,command
/var/vcap/sys/log/credhub/credhub-32-workaround.log
This is the script code.
#!/bin/bash
## setuplog files
LOG_FILE=/var/vcap/sys/log/credhub/credhub-32-workaround.log
function monitor_log () {
tail -n 0 -f /var/vcap/sys/log/credhub/credhub.log | while read line
do
echo $line | egrep "Connection is not available, request timed out after 30000ms"
if [ $? -eq 0 ]
then
echo $(date) detected log line >> $LOG_FILE
echo $(date) $line >> $LOG_FILE
echo $(date) restarting credhub >> $LOG_FILE
/var/vcap/bosh/bin/monit restart credhub
break
fi
done
}
while true
do
echo $(date) starting monitor loop >> $LOG_FILE
monitor_log
echo $(date) monitor loop exited sleeping before restarting >> $LOG_FILE
sleep 300
done
Example log file after injected errors in to credhub.log
Tue Mar 29 16:19:38 UTC 2022 starting monitor loop Tue Mar 29 16:21:59 UTC 2022 detected log line Tue Mar 29 16:21:59 UTC 2022 org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLTransientConnectionException: HikariPool-1 - Connection is not available, request timed out after 30000ms. Tue Mar 29 16:21:59 UTC 2022 restarting credhub Tue Mar 29 16:22:04 UTC 2022 monitor loop exited sleeping before restarting Tue Mar 29 16:27:04 UTC 2022 starting monitor loop Tue Mar 29 16:27:42 UTC 2022 detected log line Tue Mar 29 16:27:42 UTC 2022 org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLTransientConnectionException: HikariPool-1 - Connection is not available, request timed out after 30000ms. Tue Mar 29 16:27:42 UTC 2022 restarting credhub Tue Mar 29 16:27:46 UTC 2022 monitor loop exited sleeping before restarting